From 923207073af985a1b72de3c777d55b0c2d392b25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Lund=C3=A9n?= Date: Tue, 21 Nov 2023 10:58:09 +0000 Subject: [PATCH 001/250] 8318480: Obsolete UseCounterDecay and remove CounterDecayMinIntervalLength Reviewed-by: thartmann, lmesnik, dholmes --- src/hotspot/share/runtime/arguments.cpp | 7 +------ src/hotspot/share/runtime/globals.hpp | 7 ------- .../compilerToVM/MaterializeVirtualObjectTest.java | 10 +++++----- .../tiered/ConstantGettersTransitionsTest.java | 4 ++-- .../jtreg/compiler/tiered/Level2RecompilationTest.java | 4 ++-- .../jtreg/compiler/tiered/LevelTransitionTest.java | 4 ++-- .../jtreg/compiler/tiered/NonTieredLevelsTest.java | 4 ++-- .../jtreg/compiler/tiered/TieredLevelsTest.java | 4 ++-- .../jtreg/compiler/whitebox/ClearMethodStateTest.java | 4 ++-- .../jtreg/compiler/whitebox/CompilerWhiteBoxTest.java | 7 +------ .../jtreg/compiler/whitebox/DeoptimizeAllTest.java | 4 ++-- .../jtreg/compiler/whitebox/DeoptimizeFramesTest.java | 6 +++--- .../jtreg/compiler/whitebox/DeoptimizeMethodTest.java | 4 ++-- .../whitebox/EnqueueMethodForCompilationTest.java | 4 ++-- .../jtreg/compiler/whitebox/ForceNMethodSweepTest.java | 4 ++-- .../jtreg/compiler/whitebox/GetNMethodTest.java | 4 ++-- .../compiler/whitebox/IsMethodCompilableTest.java | 4 ++-- .../jtreg/compiler/whitebox/LockCompilationTest.java | 4 ++-- .../compiler/whitebox/MakeMethodNotCompilableTest.java | 4 ++-- test/hotspot/jtreg/testlibrary/ctw/Makefile | 2 +- .../ctw/src/sun/hotspot/tools/ctw/CtwRunner.java | 1 - 21 files changed, 39 insertions(+), 57 deletions(-) diff --git a/src/hotspot/share/runtime/arguments.cpp b/src/hotspot/share/runtime/arguments.cpp index c2e42e31dbb1a..ded0d655ff4e9 100644 --- a/src/hotspot/share/runtime/arguments.cpp +++ b/src/hotspot/share/runtime/arguments.cpp @@ -529,6 +529,7 @@ static SpecialFlag const special_jvm_flags[] = { { "RefDiscoveryPolicy", JDK_Version::undefined(), JDK_Version::jdk(21), JDK_Version::undefined() }, { "MetaspaceReclaimPolicy", JDK_Version::undefined(), JDK_Version::jdk(21), JDK_Version::undefined() }, { "DoReserveCopyInSuperWord", JDK_Version::undefined(), JDK_Version::jdk(22), JDK_Version::jdk(23) }, + { "UseCounterDecay", JDK_Version::undefined(), JDK_Version::jdk(22), JDK_Version::jdk(23) }, #ifdef LINUX { "UseHugeTLBFS", JDK_Version::undefined(), JDK_Version::jdk(22), JDK_Version::jdk(23) }, @@ -3909,12 +3910,6 @@ jint Arguments::parse(const JavaVMInitArgs* initial_cmd_args) { if (TraceBytecodesAt != 0) { TraceBytecodes = true; } - if (CountCompiledCalls) { - if (UseCounterDecay) { - warning("UseCounterDecay disabled because CountCalls is set"); - UseCounterDecay = false; - } - } #endif // PRODUCT if (ScavengeRootsInCode == 0) { diff --git a/src/hotspot/share/runtime/globals.hpp b/src/hotspot/share/runtime/globals.hpp index 17dfaee8a7629..b780b040f9416 100644 --- a/src/hotspot/share/runtime/globals.hpp +++ b/src/hotspot/share/runtime/globals.hpp @@ -1220,16 +1220,9 @@ const int ObjectAlignmentInBytes = 8; product(bool, UseCompiler, true, \ "Use Just-In-Time compilation") \ \ - product(bool, UseCounterDecay, true, \ - "Adjust recompilation counters") \ - \ develop(intx, CounterHalfLifeTime, 30, \ "Half-life time of invocation counters (in seconds)") \ \ - develop(intx, CounterDecayMinIntervalLength, 500, \ - "The minimum interval (in milliseconds) between invocation of " \ - "CounterDecay") \ - \ product(bool, AlwaysCompileLoopMethods, false, \ "When using recompilation, never interpret methods " \ "containing loops") \ diff --git a/test/hotspot/jtreg/compiler/jvmci/compilerToVM/MaterializeVirtualObjectTest.java b/test/hotspot/jtreg/compiler/jvmci/compilerToVM/MaterializeVirtualObjectTest.java index 443dc9187d8aa..5855440d0b275 100644 --- a/test/hotspot/jtreg/compiler/jvmci/compilerToVM/MaterializeVirtualObjectTest.java +++ b/test/hotspot/jtreg/compiler/jvmci/compilerToVM/MaterializeVirtualObjectTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2023, 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 @@ -51,7 +51,7 @@ * -XX:CompileCommand=dontinline,compiler.jvmci.compilerToVM.MaterializeVirtualObjectTest::testFrame2 * -XX:CompileCommand=inline,compiler.jvmci.compilerToVM.MaterializeVirtualObjectTest::recurse * -XX:CompileCommand=inline,compiler.jvmci.compilerToVM.MaterializeVirtualObjectTest::testFrame3 - * -XX:+DoEscapeAnalysis -XX:-UseCounterDecay + * -XX:+DoEscapeAnalysis * -Dcompiler.jvmci.compilerToVM.MaterializeVirtualObjectTest.materializeFirst=true * -Dcompiler.jvmci.compilerToVM.MaterializeVirtualObjectTest.invalidate=false * compiler.jvmci.compilerToVM.MaterializeVirtualObjectTest @@ -63,7 +63,7 @@ * -XX:CompileCommand=dontinline,compiler.jvmci.compilerToVM.MaterializeVirtualObjectTest::testFrame2 * -XX:CompileCommand=inline,compiler.jvmci.compilerToVM.MaterializeVirtualObjectTest::recurse * -XX:CompileCommand=inline,compiler.jvmci.compilerToVM.MaterializeVirtualObjectTest::testFrame3 - * -XX:+DoEscapeAnalysis -XX:-UseCounterDecay + * -XX:+DoEscapeAnalysis * -Dcompiler.jvmci.compilerToVM.MaterializeVirtualObjectTest.materializeFirst=false * -Dcompiler.jvmci.compilerToVM.MaterializeVirtualObjectTest.invalidate=false * compiler.jvmci.compilerToVM.MaterializeVirtualObjectTest @@ -75,7 +75,7 @@ * -XX:CompileCommand=dontinline,compiler.jvmci.compilerToVM.MaterializeVirtualObjectTest::testFrame2 * -XX:CompileCommand=inline,compiler.jvmci.compilerToVM.MaterializeVirtualObjectTest::recurse * -XX:CompileCommand=inline,compiler.jvmci.compilerToVM.MaterializeVirtualObjectTest::testFrame3 - * -XX:+DoEscapeAnalysis -XX:-UseCounterDecay + * -XX:+DoEscapeAnalysis * -Dcompiler.jvmci.compilerToVM.MaterializeVirtualObjectTest.materializeFirst=true * -Dcompiler.jvmci.compilerToVM.MaterializeVirtualObjectTest.invalidate=true * compiler.jvmci.compilerToVM.MaterializeVirtualObjectTest @@ -87,7 +87,7 @@ * -XX:CompileCommand=dontinline,compiler.jvmci.compilerToVM.MaterializeVirtualObjectTest::testFrame2 * -XX:CompileCommand=inline,compiler.jvmci.compilerToVM.MaterializeVirtualObjectTest::recurse * -XX:CompileCommand=inline,compiler.jvmci.compilerToVM.MaterializeVirtualObjectTest::testFrame3 - * -XX:+DoEscapeAnalysis -XX:-UseCounterDecay + * -XX:+DoEscapeAnalysis * -Dcompiler.jvmci.compilerToVM.MaterializeVirtualObjectTest.materializeFirst=false * -Dcompiler.jvmci.compilerToVM.MaterializeVirtualObjectTest.invalidate=true * compiler.jvmci.compilerToVM.MaterializeVirtualObjectTest diff --git a/test/hotspot/jtreg/compiler/tiered/ConstantGettersTransitionsTest.java b/test/hotspot/jtreg/compiler/tiered/ConstantGettersTransitionsTest.java index e5fb2825aa774..8f5032b9c9fdb 100644 --- a/test/hotspot/jtreg/compiler/tiered/ConstantGettersTransitionsTest.java +++ b/test/hotspot/jtreg/compiler/tiered/ConstantGettersTransitionsTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2023, 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 @@ * compiler.tiered.ConstantGettersTransitionsTest * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox * @run main/othervm/timeout=240 -Xmixed -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions - * -XX:+WhiteBoxAPI -XX:+TieredCompilation -XX:-UseCounterDecay + * -XX:+WhiteBoxAPI -XX:+TieredCompilation * -XX:CompileCommand=compileonly,compiler.tiered.ConstantGettersTransitionsTest$ConstantGettersTestCase$TrivialMethods::* * compiler.tiered.ConstantGettersTransitionsTest */ diff --git a/test/hotspot/jtreg/compiler/tiered/Level2RecompilationTest.java b/test/hotspot/jtreg/compiler/tiered/Level2RecompilationTest.java index 33a9a07b6cef0..9cdba8c7bea0f 100644 --- a/test/hotspot/jtreg/compiler/tiered/Level2RecompilationTest.java +++ b/test/hotspot/jtreg/compiler/tiered/Level2RecompilationTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2023, 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 @@ -34,7 +34,7 @@ * @build jdk.test.whitebox.WhiteBox * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox * @run main/othervm -Xbootclasspath/a:. -XX:+TieredCompilation - * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:-UseCounterDecay + * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI * -XX:CompileCommand=compileonly,compiler.whitebox.SimpleTestCaseHelper::* * -XX:CompileCommand=print,compiler.whitebox.SimpleTestCaseHelper::* * compiler.tiered.Level2RecompilationTest diff --git a/test/hotspot/jtreg/compiler/tiered/LevelTransitionTest.java b/test/hotspot/jtreg/compiler/tiered/LevelTransitionTest.java index b18b304a9bc13..b3a2c7ab5db6c 100644 --- a/test/hotspot/jtreg/compiler/tiered/LevelTransitionTest.java +++ b/test/hotspot/jtreg/compiler/tiered/LevelTransitionTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2023, 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 @@ -33,7 +33,7 @@ * compiler.tiered.LevelTransitionTest * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox * @run main/othervm/timeout=240 -Xmixed -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions - * -XX:+WhiteBoxAPI -XX:+TieredCompilation -XX:-UseCounterDecay + * -XX:+WhiteBoxAPI -XX:+TieredCompilation * -XX:-BackgroundCompilation * -XX:CompileCommand=compileonly,compiler.whitebox.SimpleTestCaseHelper::* * -XX:CompileCommand=compileonly,compiler.tiered.LevelTransitionTest$ExtendedTestCase$CompileMethodHolder::* diff --git a/test/hotspot/jtreg/compiler/tiered/NonTieredLevelsTest.java b/test/hotspot/jtreg/compiler/tiered/NonTieredLevelsTest.java index 57098440fce26..d23b13a65e473 100644 --- a/test/hotspot/jtreg/compiler/tiered/NonTieredLevelsTest.java +++ b/test/hotspot/jtreg/compiler/tiered/NonTieredLevelsTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,7 +31,7 @@ * @build jdk.test.whitebox.WhiteBox * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox * @run main/othervm -Xbootclasspath/a:. -XX:-TieredCompilation - * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:-UseCounterDecay + * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI * -XX:CompileCommand=compileonly,compiler.whitebox.SimpleTestCaseHelper::* * compiler.tiered.NonTieredLevelsTest */ diff --git a/test/hotspot/jtreg/compiler/tiered/TieredLevelsTest.java b/test/hotspot/jtreg/compiler/tiered/TieredLevelsTest.java index 4fe36dc7e86fe..98e112927c630 100644 --- a/test/hotspot/jtreg/compiler/tiered/TieredLevelsTest.java +++ b/test/hotspot/jtreg/compiler/tiered/TieredLevelsTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,7 +31,7 @@ * @build jdk.test.whitebox.WhiteBox * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox * @run main/othervm -Xbootclasspath/a:. -XX:+TieredCompilation - * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:-UseCounterDecay + * -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI * -XX:CompileCommand=compileonly,compiler.whitebox.SimpleTestCaseHelper::* * compiler.tiered.TieredLevelsTest */ diff --git a/test/hotspot/jtreg/compiler/whitebox/ClearMethodStateTest.java b/test/hotspot/jtreg/compiler/whitebox/ClearMethodStateTest.java index ee62d9f229c66..33abc23c17aff 100644 --- a/test/hotspot/jtreg/compiler/whitebox/ClearMethodStateTest.java +++ b/test/hotspot/jtreg/compiler/whitebox/ClearMethodStateTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2023, 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 @@ -34,7 +34,7 @@ * @build jdk.test.whitebox.WhiteBox * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox * @run main/othervm -Xbootclasspath/a:. -Xmixed -XX:+UnlockDiagnosticVMOptions - * -XX:+WhiteBoxAPI -XX:+PrintCompilation -XX:-UseCounterDecay + * -XX:+WhiteBoxAPI -XX:+PrintCompilation * compiler.whitebox.ClearMethodStateTest */ diff --git a/test/hotspot/jtreg/compiler/whitebox/CompilerWhiteBoxTest.java b/test/hotspot/jtreg/compiler/whitebox/CompilerWhiteBoxTest.java index 407aac7868e70..f87292be019c0 100644 --- a/test/hotspot/jtreg/compiler/whitebox/CompilerWhiteBoxTest.java +++ b/test/hotspot/jtreg/compiler/whitebox/CompilerWhiteBoxTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2023, 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 @@ -62,8 +62,6 @@ public abstract class CompilerWhiteBoxTest { /** Value of {@code -XX:BackgroundCompilation} */ protected static final boolean BACKGROUND_COMPILATION = Boolean.valueOf(getVMOption("BackgroundCompilation", "true")); - protected static final boolean USE_COUNTER_DECAY - = Boolean.valueOf(getVMOption("UseCounterDecay", "true")); /** Value of {@code -XX:TieredCompilation} */ protected static final boolean TIERED_COMPILATION = Boolean.valueOf(getVMOption("TieredCompilation", "false")); @@ -367,9 +365,6 @@ protected final void printInfo() { * @see #compile(int) */ protected final int compile() throws Exception { - if (USE_COUNTER_DECAY) { - throw new Exception("Tests using compile method must turn off counter decay for reliability"); - } if (testCase.isOsr()) { return compile(1); } else { diff --git a/test/hotspot/jtreg/compiler/whitebox/DeoptimizeAllTest.java b/test/hotspot/jtreg/compiler/whitebox/DeoptimizeAllTest.java index a110603c0b3d4..33f350b136cc3 100644 --- a/test/hotspot/jtreg/compiler/whitebox/DeoptimizeAllTest.java +++ b/test/hotspot/jtreg/compiler/whitebox/DeoptimizeAllTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2023, 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 @@ -34,7 +34,7 @@ * @build jdk.test.whitebox.WhiteBox * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions - * -XX:+WhiteBoxAPI -XX:-UseCounterDecay + * -XX:+WhiteBoxAPI * -XX:CompileCommand=compileonly,compiler.whitebox.SimpleTestCaseHelper::* * compiler.whitebox.DeoptimizeAllTest */ diff --git a/test/hotspot/jtreg/compiler/whitebox/DeoptimizeFramesTest.java b/test/hotspot/jtreg/compiler/whitebox/DeoptimizeFramesTest.java index 0a3691eb4dfbc..1d9c8169d0433 100644 --- a/test/hotspot/jtreg/compiler/whitebox/DeoptimizeFramesTest.java +++ b/test/hotspot/jtreg/compiler/whitebox/DeoptimizeFramesTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2023, 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 @@ -34,12 +34,12 @@ * @build jdk.test.whitebox.WhiteBox * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions - * -XX:+WhiteBoxAPI -Xmixed -XX:-UseCounterDecay + * -XX:+WhiteBoxAPI -Xmixed * -XX:CompileCommand=compileonly,compiler.whitebox.DeoptimizeFramesTest$TestCaseImpl::method * -XX:+IgnoreUnrecognizedVMOptions -XX:-DeoptimizeRandom -XX:-DeoptimizeALot * compiler.whitebox.DeoptimizeFramesTest true * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions - * -XX:+WhiteBoxAPI -Xmixed -XX:-UseCounterDecay + * -XX:+WhiteBoxAPI -Xmixed * -XX:CompileCommand=compileonly,compiler.whitebox.DeoptimizeFramesTest$TestCaseImpl::method * -XX:CompileCommand=dontinline,java.util.concurrent.Phaser::* * -XX:+IgnoreUnrecognizedVMOptions -XX:-DeoptimizeRandom -XX:-DeoptimizeALot diff --git a/test/hotspot/jtreg/compiler/whitebox/DeoptimizeMethodTest.java b/test/hotspot/jtreg/compiler/whitebox/DeoptimizeMethodTest.java index 87c5d7f2cb055..a684c9f1e291d 100644 --- a/test/hotspot/jtreg/compiler/whitebox/DeoptimizeMethodTest.java +++ b/test/hotspot/jtreg/compiler/whitebox/DeoptimizeMethodTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,7 +31,7 @@ * @build jdk.test.whitebox.WhiteBox * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions - * -XX:+WhiteBoxAPI -XX:-UseCounterDecay + * -XX:+WhiteBoxAPI * -XX:CompileCommand=compileonly,compiler.whitebox.SimpleTestCaseHelper::* * compiler.whitebox.DeoptimizeMethodTest */ diff --git a/test/hotspot/jtreg/compiler/whitebox/EnqueueMethodForCompilationTest.java b/test/hotspot/jtreg/compiler/whitebox/EnqueueMethodForCompilationTest.java index 0ad267625086b..fc2c4e4db8162 100644 --- a/test/hotspot/jtreg/compiler/whitebox/EnqueueMethodForCompilationTest.java +++ b/test/hotspot/jtreg/compiler/whitebox/EnqueueMethodForCompilationTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2023, 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 @@ -34,7 +34,7 @@ * @build jdk.test.whitebox.WhiteBox * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox * @run main/othervm -Xbootclasspath/a:. -Xmixed -XX:+UnlockDiagnosticVMOptions - * -XX:+WhiteBoxAPI -XX:+PrintCompilation -XX:-UseCounterDecay + * -XX:+WhiteBoxAPI -XX:+PrintCompilation * compiler.whitebox.EnqueueMethodForCompilationTest */ diff --git a/test/hotspot/jtreg/compiler/whitebox/ForceNMethodSweepTest.java b/test/hotspot/jtreg/compiler/whitebox/ForceNMethodSweepTest.java index 9d6f1a074e714..e55bc33b6ee1f 100644 --- a/test/hotspot/jtreg/compiler/whitebox/ForceNMethodSweepTest.java +++ b/test/hotspot/jtreg/compiler/whitebox/ForceNMethodSweepTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2023, 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 @@ -36,7 +36,7 @@ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions * -XX:-TieredCompilation -XX:+WhiteBoxAPI * -XX:CompileCommand=compileonly,compiler.whitebox.SimpleTestCaseHelper::* - * -XX:-BackgroundCompilation -XX:-UseCounterDecay + * -XX:-BackgroundCompilation * -XX:+IgnoreUnrecognizedVMOptions -XX:+UnlockExperimentalVMOptions -XX:+EagerJVMCI * compiler.whitebox.ForceNMethodSweepTest */ diff --git a/test/hotspot/jtreg/compiler/whitebox/GetNMethodTest.java b/test/hotspot/jtreg/compiler/whitebox/GetNMethodTest.java index 297b068e166ca..4968a9eb7ee25 100644 --- a/test/hotspot/jtreg/compiler/whitebox/GetNMethodTest.java +++ b/test/hotspot/jtreg/compiler/whitebox/GetNMethodTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2023, 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 @@ -34,7 +34,7 @@ * @build jdk.test.whitebox.WhiteBox * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox * @run main/othervm -Xbootclasspath/a:. -Xmixed -XX:+UnlockDiagnosticVMOptions - * -XX:+WhiteBoxAPI -XX:-UseCounterDecay + * -XX:+WhiteBoxAPI * -XX:CompileCommand=compileonly,compiler.whitebox.SimpleTestCaseHelper::* * compiler.whitebox.GetNMethodTest */ diff --git a/test/hotspot/jtreg/compiler/whitebox/IsMethodCompilableTest.java b/test/hotspot/jtreg/compiler/whitebox/IsMethodCompilableTest.java index b4e1ccedbcb75..19f577067e7c6 100644 --- a/test/hotspot/jtreg/compiler/whitebox/IsMethodCompilableTest.java +++ b/test/hotspot/jtreg/compiler/whitebox/IsMethodCompilableTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2023, 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 @@ -37,7 +37,7 @@ * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox * @run main/othervm/timeout=2400 -XX:-TieredCompilation -Xmixed * -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI - * -XX:PerMethodRecompilationCutoff=3 -XX:-UseCounterDecay + * -XX:PerMethodRecompilationCutoff=3 * -XX:CompileCommand=compileonly,compiler.whitebox.SimpleTestCaseHelper::* * compiler.whitebox.IsMethodCompilableTest */ diff --git a/test/hotspot/jtreg/compiler/whitebox/LockCompilationTest.java b/test/hotspot/jtreg/compiler/whitebox/LockCompilationTest.java index 4a45229c38091..2945f86a2e316 100644 --- a/test/hotspot/jtreg/compiler/whitebox/LockCompilationTest.java +++ b/test/hotspot/jtreg/compiler/whitebox/LockCompilationTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,7 +31,7 @@ * @build jdk.test.whitebox.WhiteBox * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox * @run main/othervm -Xbootclasspath/a:. -Xmixed -XX:+UnlockDiagnosticVMOptions - * -XX:+WhiteBoxAPI -XX:-UseCounterDecay + * -XX:+WhiteBoxAPI * -XX:CompileCommand=compileonly,*SimpleTestCaseHelper::method * compiler.whitebox.LockCompilationTest */ diff --git a/test/hotspot/jtreg/compiler/whitebox/MakeMethodNotCompilableTest.java b/test/hotspot/jtreg/compiler/whitebox/MakeMethodNotCompilableTest.java index eba0d342c64cd..2491c504b11c7 100644 --- a/test/hotspot/jtreg/compiler/whitebox/MakeMethodNotCompilableTest.java +++ b/test/hotspot/jtreg/compiler/whitebox/MakeMethodNotCompilableTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2023, 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 @@ -34,7 +34,7 @@ * @build jdk.test.whitebox.WhiteBox * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions - * -XX:+WhiteBoxAPI -Xmixed -XX:-UseCounterDecay + * -XX:+WhiteBoxAPI -Xmixed * compiler.whitebox.MakeMethodNotCompilableTest */ diff --git a/test/hotspot/jtreg/testlibrary/ctw/Makefile b/test/hotspot/jtreg/testlibrary/ctw/Makefile index 8998765fe2a5c..5ba3bbb659a42 100644 --- a/test/hotspot/jtreg/testlibrary/ctw/Makefile +++ b/test/hotspot/jtreg/testlibrary/ctw/Makefile @@ -77,7 +77,7 @@ $(DST_DIR): @mkdir -p $@ $(DST_DIR)/ctw.sh: $(DST_DIR) - echo '$${JAVA_HOME}/bin/java $${JAVA_OPTIONS} $(EXPORTS) -XX:-UseCounterDecay -Xbatch "-XX:CompileCommand=exclude,java/lang/invoke/MethodHandle.*" -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:wb.jar -jar ctw.jar $$@' > $@ + echo '$${JAVA_HOME}/bin/java $${JAVA_OPTIONS} $(EXPORTS) -Xbatch "-XX:CompileCommand=exclude,java/lang/invoke/MethodHandle.*" -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:wb.jar -jar ctw.jar $$@' > $@ chmod a+x $@ $(DST_DIR)/ctwrunner.sh: $(DST_DIR) diff --git a/test/hotspot/jtreg/testlibrary/ctw/src/sun/hotspot/tools/ctw/CtwRunner.java b/test/hotspot/jtreg/testlibrary/ctw/src/sun/hotspot/tools/ctw/CtwRunner.java index 478b74c27412c..d9c64b89138cb 100644 --- a/test/hotspot/jtreg/testlibrary/ctw/src/sun/hotspot/tools/ctw/CtwRunner.java +++ b/test/hotspot/jtreg/testlibrary/ctw/src/sun/hotspot/tools/ctw/CtwRunner.java @@ -270,7 +270,6 @@ private String[] cmd(long classStart, long classStop) { ArrayList Args = new ArrayList(Arrays.asList( "-Xbatch", - "-XX:-UseCounterDecay", "-XX:-ShowMessageBoxOnError", "-XX:+UnlockDiagnosticVMOptions", // redirect VM output to cerr so it won't collide w/ ctw output From 21a59b9f4e46ebd32cff8f1000fe9ad56c918431 Mon Sep 17 00:00:00 2001 From: Alan Bateman Date: Tue, 21 Nov 2023 14:05:32 +0000 Subject: [PATCH 002/250] 8282726: java/net/vthread/BlockingSocketOps.java timeout/hang intermittently on Windows Reviewed-by: djelinski --- .../aix/classes/sun/nio/ch/PollsetPoller.java | 2 +- .../linux/classes/sun/nio/ch/EPollPoller.java | 9 ++++++--- .../classes/sun/nio/ch/KQueuePoller.java | 9 ++++++--- .../share/classes/sun/nio/ch/Poller.java | 20 ++++++++++--------- .../windows/classes/sun/nio/ch/PipeImpl.java | 11 ++-------- .../classes/sun/nio/ch/WEPollPoller.java | 9 +++------ .../java/net/vthread/BlockingSocketOps.java | 2 +- .../channels/vthread/BlockingChannelOps.java | 2 +- 8 files changed, 31 insertions(+), 33 deletions(-) diff --git a/src/java.base/aix/classes/sun/nio/ch/PollsetPoller.java b/src/java.base/aix/classes/sun/nio/ch/PollsetPoller.java index 413568861e54e..724f14495a8c8 100644 --- a/src/java.base/aix/classes/sun/nio/ch/PollsetPoller.java +++ b/src/java.base/aix/classes/sun/nio/ch/PollsetPoller.java @@ -66,7 +66,7 @@ void implRegister(int fd) throws IOException { } @Override - void implDeregister(int fd) { + void implDeregister(int fd, boolean polled) { int ret = Pollset.pollsetCtl(setid, Pollset.PS_DELETE, fd, 0); assert ret == 0; } diff --git a/src/java.base/linux/classes/sun/nio/ch/EPollPoller.java b/src/java.base/linux/classes/sun/nio/ch/EPollPoller.java index 4a8b2cdda08cf..cdebff7c7662d 100644 --- a/src/java.base/linux/classes/sun/nio/ch/EPollPoller.java +++ b/src/java.base/linux/classes/sun/nio/ch/EPollPoller.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 2023, 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 @@ -62,8 +62,11 @@ void implRegister(int fdVal) throws IOException { } @Override - void implDeregister(int fdVal) { - EPoll.ctl(epfd, EPOLL_CTL_DEL, fdVal, 0); + void implDeregister(int fdVal, boolean polled) { + // event is disabled if already polled + if (!polled) { + EPoll.ctl(epfd, EPOLL_CTL_DEL, fdVal, 0); + } } @Override diff --git a/src/java.base/macosx/classes/sun/nio/ch/KQueuePoller.java b/src/java.base/macosx/classes/sun/nio/ch/KQueuePoller.java index 645b17e458e5d..6a1c771820e1c 100644 --- a/src/java.base/macosx/classes/sun/nio/ch/KQueuePoller.java +++ b/src/java.base/macosx/classes/sun/nio/ch/KQueuePoller.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 2023, 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 @@ -56,8 +56,11 @@ void implRegister(int fdVal) throws IOException { } @Override - void implDeregister(int fdVal) { - KQueue.register(kqfd, fdVal, filter, EV_DELETE); + void implDeregister(int fdVal, boolean polled) { + // event was deleted if already polled + if (!polled) { + KQueue.register(kqfd, fdVal, filter, EV_DELETE); + } } @Override diff --git a/src/java.base/share/classes/sun/nio/ch/Poller.java b/src/java.base/share/classes/sun/nio/ch/Poller.java index f62371d8344dc..3c1b3c2e193b6 100644 --- a/src/java.base/share/classes/sun/nio/ch/Poller.java +++ b/src/java.base/share/classes/sun/nio/ch/Poller.java @@ -94,14 +94,16 @@ int fdVal() { } /** - * Register the file descriptor. + * Register the file descriptor. The registration is "one shot", meaning it should + * be polled at most once. */ abstract void implRegister(int fdVal) throws IOException; /** * Deregister the file descriptor. + * @param polled true if the file descriptor has already been polled */ - abstract void implDeregister(int fdVal); + abstract void implDeregister(int fdVal, boolean polled); /** * Poll for events. The {@link #polled(int)} method is invoked for each @@ -182,23 +184,23 @@ private void poll(int fdVal, long nanos, BooleanSupplier supplier) throws IOExce } /** - * Registers the file descriptor. + * Registers the file descriptor to be polled at most once when the file descriptor + * is ready for I/O. */ private void register(int fdVal) throws IOException { - Thread previous = map.putIfAbsent(fdVal, Thread.currentThread()); + Thread previous = map.put(fdVal, Thread.currentThread()); assert previous == null; implRegister(fdVal); } /** - * Deregister the file descriptor, a no-op if already polled. + * Deregister the file descriptor so that the file descriptor is not polled. */ private void deregister(int fdVal) { Thread previous = map.remove(fdVal); - assert previous == null || previous == Thread.currentThread(); - if (previous != null) { - implDeregister(fdVal); - } + boolean polled = (previous == null); + assert polled || previous == Thread.currentThread(); + implDeregister(fdVal, polled); } /** diff --git a/src/java.base/windows/classes/sun/nio/ch/PipeImpl.java b/src/java.base/windows/classes/sun/nio/ch/PipeImpl.java index 01a72835b88bc..67a344a663d49 100644 --- a/src/java.base/windows/classes/sun/nio/ch/PipeImpl.java +++ b/src/java.base/windows/classes/sun/nio/ch/PipeImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2023, 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 @@ -129,14 +129,7 @@ public void run() { } // Establish connection (assume connection is eagerly accepted) - if (sa instanceof InetSocketAddress - && Thread.currentThread().isVirtual()) { - // workaround "lost event" issue on older releases of Windows - sc1 = SocketChannel.open(); - sc1.socket().connect(sa, 10_000); - } else { - sc1 = SocketChannel.open(sa); - } + sc1 = SocketChannel.open(sa); RANDOM_NUMBER_GENERATOR.nextBytes(secret.array()); do { sc1.write(secret); diff --git a/src/java.base/windows/classes/sun/nio/ch/WEPollPoller.java b/src/java.base/windows/classes/sun/nio/ch/WEPollPoller.java index 21aee78d03be7..3db8d67acc67a 100644 --- a/src/java.base/windows/classes/sun/nio/ch/WEPollPoller.java +++ b/src/java.base/windows/classes/sun/nio/ch/WEPollPoller.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -46,16 +46,13 @@ class WEPollPoller extends Poller { @Override void implRegister(int fdVal) throws IOException { - // re-arm - int err = WEPoll.ctl(handle, EPOLL_CTL_MOD, fdVal, (event | EPOLLONESHOT)); - if (err == ENOENT) - err = WEPoll.ctl(handle, EPOLL_CTL_ADD, fdVal, (event | EPOLLONESHOT)); + int err = WEPoll.ctl(handle, EPOLL_CTL_ADD, fdVal, (event | EPOLLONESHOT)); if (err != 0) throw new IOException("epoll_ctl failed: " + err); } @Override - void implDeregister(int fdVal) { + void implDeregister(int fdVal, boolean polled) { WEPoll.ctl(handle, EPOLL_CTL_DEL, fdVal, 0); } diff --git a/test/jdk/java/net/vthread/BlockingSocketOps.java b/test/jdk/java/net/vthread/BlockingSocketOps.java index f72cf768d22f2..3c6b9cd527669 100644 --- a/test/jdk/java/net/vthread/BlockingSocketOps.java +++ b/test/jdk/java/net/vthread/BlockingSocketOps.java @@ -685,7 +685,7 @@ static class Connection implements Closeable { Socket s1 = new Socket(); Socket s2; try { - s1.connect(listener.getLocalSocketAddress(), 10_000); + s1.connect(listener.getLocalSocketAddress()); s2 = listener.accept(); } catch (IOException ioe) { s1.close(); diff --git a/test/jdk/java/nio/channels/vthread/BlockingChannelOps.java b/test/jdk/java/nio/channels/vthread/BlockingChannelOps.java index 7629b2e21b142..7ff02cdfea4af 100644 --- a/test/jdk/java/nio/channels/vthread/BlockingChannelOps.java +++ b/test/jdk/java/nio/channels/vthread/BlockingChannelOps.java @@ -808,7 +808,7 @@ static class Connection implements Closeable { SocketChannel sc1 = SocketChannel.open(); SocketChannel sc2 = null; try { - sc1.socket().connect(listener.getLocalAddress(), 10_000); + sc1.socket().connect(listener.getLocalAddress()); sc2 = listener.accept(); } catch (IOException ioe) { sc1.close(); From 570dffb104fc37f053fcdf38a24aa2cabdc921c0 Mon Sep 17 00:00:00 2001 From: Daniel Fuchs Date: Tue, 21 Nov 2023 14:09:46 +0000 Subject: [PATCH 003/250] 8310807: java/nio/channels/DatagramChannel/Connect.java timed out Reviewed-by: msheppar, jpai --- .../nio/channels/DatagramChannel/Connect.java | 115 ++++++++++++------ 1 file changed, 79 insertions(+), 36 deletions(-) diff --git a/test/jdk/java/nio/channels/DatagramChannel/Connect.java b/test/jdk/java/nio/channels/DatagramChannel/Connect.java index 5b2bbea4e5b8f..082a3234cc5a7 100644 --- a/test/jdk/java/nio/channels/DatagramChannel/Connect.java +++ b/test/jdk/java/nio/channels/DatagramChannel/Connect.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2020, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,6 +23,7 @@ /* @test * @bug 4313882 7183800 + * @run main/othervm Connect * @summary Test DatagramChannel's send and receive methods */ @@ -30,18 +31,28 @@ import java.net.*; import java.nio.*; import java.nio.channels.*; -import java.nio.charset.*; +import java.time.Instant; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionException; import java.util.stream.Stream; +import static java.nio.charset.StandardCharsets.US_ASCII; + public class Connect { - static PrintStream log = System.err; + static final PrintStream err = System.err; + static final String TIME_STAMP = Instant.now().toString(); + static final String MESSAGE = "Hello " + TIME_STAMP; + static final String OTHER = "Hey " + TIME_STAMP; + static final String RESPONSE = "Hi " + TIME_STAMP; + static final int MAX = Math.max(256, MESSAGE.getBytes(US_ASCII).length + 16); public static void main(String[] args) throws Exception { + assert MAX > MESSAGE.getBytes(US_ASCII).length; + assert MAX > OTHER.getBytes(US_ASCII).length; + assert MAX > RESPONSE.getBytes(US_ASCII).length; test(); } @@ -99,41 +110,62 @@ public static class Initiator implements AutoCloseable, Runnable { public void run() { try { - ByteBuffer bb = ByteBuffer.allocateDirect(256); - bb.put("hello".getBytes()); + byte[] bytes = MESSAGE.getBytes(US_ASCII); + ByteBuffer bb = ByteBuffer.allocateDirect(MAX); + bb.put(bytes); bb.flip(); - log.println("Initiator connecting to " + connectSocketAddress); + err.println("Initiator connecting to: " + connectSocketAddress); dc.connect(connectSocketAddress); + err.println("Initiator bound to: " + dc.getLocalAddress()); // Send a message - log.println("Initiator attempting to write to Responder at " + connectSocketAddress.toString()); + err.println("Initiator attempting to write to Responder at " + connectSocketAddress); dc.write(bb); // Try to send to some other address try { int port = dc.socket().getLocalPort(); InetAddress loopback = InetAddress.getLoopbackAddress(); - InetSocketAddress otherAddress = new InetSocketAddress(loopback, (port == 3333 ? 3332 : 3333)); - log.println("Testing if Initiator throws AlreadyConnectedException" + otherAddress.toString()); - dc.send(bb, otherAddress); + try (DatagramChannel other = DatagramChannel.open()) { + InetSocketAddress otherAddress = new InetSocketAddress(loopback, 0); + other.bind(otherAddress); + err.println("Testing if Initiator throws AlreadyConnectedException"); + otherAddress = (InetSocketAddress) other.getLocalAddress(); + assert port != otherAddress.getPort(); + assert !connectSocketAddress.equals(otherAddress); + err.printf("Initiator sending \"%s\" to other address %s%n", OTHER, otherAddress); + dc.send(ByteBuffer.wrap(OTHER.getBytes(US_ASCII)), otherAddress); + } throw new RuntimeException("Initiator allowed send to other address while already connected"); } catch (AlreadyConnectedException ace) { // Correct behavior + err.println("Initiator got expected " + ace); } - // Read a reply - bb.flip(); - log.println("Initiator waiting to read"); - dc.read(bb); - bb.flip(); - CharBuffer cb = StandardCharsets.US_ASCII. - newDecoder().decode(bb); - log.println("Initiator received from Responder at " + connectSocketAddress + ": " + cb); + // wait for response + while (true) { + // zero out buffer + bb.clear(); + bb.put(new byte[bb.remaining()]); + bb.flip(); + + // Read a reply + err.println("Initiator waiting to read"); + dc.read(bb); + bb.flip(); + CharBuffer cb = US_ASCII.newDecoder().decode(bb); + err.println("Initiator received from Responder at " + connectSocketAddress + ": " + cb); + if (!RESPONSE.equals(cb.toString())) { + err.println("Initiator received unexpected message: continue waiting"); + continue; + } + break; + } } catch (Exception ex) { - log.println("Initiator threw exception: " + ex); + err.println("Initiator threw exception: " + ex); throw new RuntimeException(ex); } finally { - log.println("Initiator finished"); + err.println("Initiator finished"); } } @@ -156,26 +188,37 @@ SocketAddress getSocketAddress() throws IOException { } public void run() { + ByteBuffer bb = ByteBuffer.allocateDirect(MAX); try { - // Listen for a message - ByteBuffer bb = ByteBuffer.allocateDirect(100); - log.println("Responder waiting to receive"); - SocketAddress sa = dc.receive(bb); - bb.flip(); - CharBuffer cb = StandardCharsets.US_ASCII. - newDecoder().decode(bb); - log.println("Responder received from Initiator at" + sa + ": " + cb); - - // Reply to sender - dc.connect(sa); - bb.flip(); - log.println("Responder attempting to write: " + dc.getRemoteAddress().toString()); - dc.write(bb); + while (true) { + // Listen for a message + err.println("Responder waiting to receive"); + SocketAddress sa = dc.receive(bb); + bb.flip(); + CharBuffer cb = US_ASCII. + newDecoder().decode(bb); + err.println("Responder received from Initiator at " + sa + ": " + cb); + if (!MESSAGE.equals(cb.toString())) { + err.println("Responder received unexpected message: continue waiting"); + bb.clear(); + continue; + } + + // Reply to sender + dc.connect(sa); + bb.clear(); + bb.put(RESPONSE.getBytes(US_ASCII)); + bb.flip(); + err.println("Responder attempting to write: " + dc.getRemoteAddress()); + dc.write(bb); + bb.flip(); + break; + } } catch (Exception ex) { - log.println("Responder threw exception: " + ex); + err.println("Responder threw exception: " + ex); throw new RuntimeException(ex); } finally { - log.println("Responder finished"); + err.println("Responder finished"); } } From 53eb6f126b1a56bc651cf1078a27ec697e2dcf37 Mon Sep 17 00:00:00 2001 From: Adam Sotona Date: Tue, 21 Nov 2023 15:11:00 +0000 Subject: [PATCH 004/250] 8187591: -Werror turns incubator module warning to an error Reviewed-by: jlahoda --- .../classes/com/sun/tools/javac/code/Lint.java | 6 ++++++ .../com/sun/tools/javac/comp/Modules.java | 17 +++++++++++------ .../sun/tools/javac/resources/javac.properties | 3 +++ src/jdk.compiler/share/classes/module-info.java | 1 + src/jdk.compiler/share/man/javac.1 | 2 ++ .../tools/javac/modules/IncubatingTest.java | 12 +++++++++++- 6 files changed, 34 insertions(+), 7 deletions(-) diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Lint.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Lint.java index e9d64a6ad728b..de37229f68f29 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Lint.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Lint.java @@ -130,6 +130,7 @@ protected Lint(Context context) { values.add(LintCategory.PREVIEW); } values.add(LintCategory.SYNCHRONIZATION); + values.add(LintCategory.INCUBATING); } // Look for specific overrides @@ -215,6 +216,11 @@ public enum LintCategory { */ FINALLY("finally"), + /** + * Warn about use of incubating modules. + */ + INCUBATING("incubating"), + /** * Warn about compiler possible lossy conversions. */ diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Modules.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Modules.java index 6c4729c217a40..6dd4a368f44ed 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Modules.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Modules.java @@ -117,6 +117,7 @@ import static com.sun.tools.javac.code.Kinds.Kind.ERR; import static com.sun.tools.javac.code.Kinds.Kind.MDL; import static com.sun.tools.javac.code.Kinds.Kind.MTH; +import com.sun.tools.javac.code.Lint; import com.sun.tools.javac.code.Symbol.ModuleResolutionFlags; @@ -134,6 +135,7 @@ public class Modules extends JCTree.Visitor { private static final String ALL_SYSTEM = "ALL-SYSTEM"; private static final String ALL_MODULE_PATH = "ALL-MODULE-PATH"; + private final Lint lint; private final Log log; private final Names names; private final Symtab syms; @@ -185,6 +187,7 @@ public static Modules instance(Context context) { protected Modules(Context context) { context.put(Modules.class, this); log = Log.instance(context); + lint = Lint.instance(context); names = Names.instance(context); syms = Symtab.instance(context); attr = Attr.instance(context); @@ -1351,13 +1354,15 @@ private void setupAllModules() { .forEach(result::add); } - String incubatingModules = filterAlreadyWarnedIncubatorModules(result.stream() - .filter(msym -> msym.resolutionFlags.contains(ModuleResolutionFlags.WARN_INCUBATING)) - .map(msym -> msym.name.toString())) - .collect(Collectors.joining(",")); + if (lint.isEnabled(LintCategory.INCUBATING)) { + String incubatingModules = filterAlreadyWarnedIncubatorModules(result.stream() + .filter(msym -> msym.resolutionFlags.contains(ModuleResolutionFlags.WARN_INCUBATING)) + .map(msym -> msym.name.toString())) + .collect(Collectors.joining(",")); - if (!incubatingModules.isEmpty()) { - log.warning(Warnings.IncubatingModules(incubatingModules)); + if (!incubatingModules.isEmpty()) { + log.warning(Warnings.IncubatingModules(incubatingModules)); + } } allModules = result; diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac.properties b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac.properties index d9bd05ba62a5f..7893d328afa1e 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac.properties +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac.properties @@ -213,6 +213,9 @@ javac.opt.Xlint.desc.fallthrough=\ javac.opt.Xlint.desc.finally=\ Warn about finally clauses that do not terminate normally. +javac.opt.Xlint.desc.incubating=\ + Warn about use of incubating modules. + javac.opt.Xlint.desc.lossy-conversions=\ Warn about possible lossy conversions in compound assignment. diff --git a/src/jdk.compiler/share/classes/module-info.java b/src/jdk.compiler/share/classes/module-info.java index c8716233c0f71..9826b3f576b5e 100644 --- a/src/jdk.compiler/share/classes/module-info.java +++ b/src/jdk.compiler/share/classes/module-info.java @@ -162,6 +162,7 @@ * {@code fallthrough} falling through from one case of a {@code switch} statement to * the next * {@code finally} {@code finally} clauses that do not terminate normally + * {@code incubating} use of incubating modules * {@code lossy-conversions} possible lossy conversions in compound assignment * {@code missing-explicit-ctor} missing explicit constructors in public and protected classes * in exported packages diff --git a/src/jdk.compiler/share/man/javac.1 b/src/jdk.compiler/share/man/javac.1 index 30b260ac64834..b8a7fe60af5ee 100644 --- a/src/jdk.compiler/share/man/javac.1 +++ b/src/jdk.compiler/share/man/javac.1 @@ -725,6 +725,8 @@ a switch statement to the next. \f[V]finally\f[R]: Warns about \f[V]finally\f[R] clauses that do not terminate normally. .IP \[bu] 2 +\f[V]incubating\f[R]: Warns about the use of incubating modules. +.IP \[bu] 2 \f[V]lossy-conversions\f[R]: Warns about possible lossy conversions in compound assignment. .IP \[bu] 2 diff --git a/test/langtools/tools/javac/modules/IncubatingTest.java b/test/langtools/tools/javac/modules/IncubatingTest.java index 23112d4200e16..70df2bbe05ae2 100644 --- a/test/langtools/tools/javac/modules/IncubatingTest.java +++ b/test/langtools/tools/javac/modules/IncubatingTest.java @@ -23,7 +23,7 @@ /* * @test - * @bug 8171177 + * @bug 8171177 8187591 * @summary Verify that ModuleResolution attribute flags are honored. * @library /tools/lib * @modules jdk.compiler/com.sun.tools.javac.api @@ -238,6 +238,16 @@ public void testIncubating(Path base) throws Exception { if (!expected.equals(log)) { throw new AssertionError("Unexpected output: " + log); } + + //test disable lint incubating + new JavacTask(tb) + .options("--module-path", classes.toString(), + "-XDrawDiagnostics", + "-Xlint:-incubating", + "-Werror") + .outdir(testModuleClasses) + .files(findJavaFiles(testModuleSrc)) + .run(Expect.SUCCESS); } private void copyJavaBase(Path targetDir) throws IOException { From 9598ff83860235281a08091128b5df90a4a76916 Mon Sep 17 00:00:00 2001 From: Evgeny Nikitin Date: Tue, 21 Nov 2023 15:12:57 +0000 Subject: [PATCH 005/250] 8315969: compiler/rangechecks/TestRangeCheckHoistingScaledIV.java: make flagless Reviewed-by: thartmann, chagedorn --- test/hotspot/jtreg/ProblemList.txt | 2 -- .../compiler/rangechecks/TestRangeCheckHoistingScaledIV.java | 3 ++- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/test/hotspot/jtreg/ProblemList.txt b/test/hotspot/jtreg/ProblemList.txt index 47bc8e763f53c..01a47f51898d9 100644 --- a/test/hotspot/jtreg/ProblemList.txt +++ b/test/hotspot/jtreg/ProblemList.txt @@ -51,8 +51,6 @@ compiler/cpuflags/TestAESIntrinsicsOnSupportedConfig.java 8190680 generic-all compiler/runtime/Test8168712.java 8211769,8211771 generic-ppc64,generic-ppc64le,linux-s390x compiler/loopopts/TestUnreachableInnerLoop.java 8288981 linux-s390x -compiler/rangechecks/TestRangeCheckHoistingScaledIV.java 8315969 generic-all - compiler/rtm/locking/TestRTMAbortRatio.java 8183263 generic-x64,generic-i586 compiler/rtm/locking/TestRTMAbortThreshold.java 8183263 generic-x64,generic-i586 compiler/rtm/locking/TestRTMAfterNonRTMDeopt.java 8183263 generic-x64,generic-i586 diff --git a/test/hotspot/jtreg/compiler/rangechecks/TestRangeCheckHoistingScaledIV.java b/test/hotspot/jtreg/compiler/rangechecks/TestRangeCheckHoistingScaledIV.java index e342adf595c61..b9a3028978f4b 100644 --- a/test/hotspot/jtreg/compiler/rangechecks/TestRangeCheckHoistingScaledIV.java +++ b/test/hotspot/jtreg/compiler/rangechecks/TestRangeCheckHoistingScaledIV.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, Arm Limited. All rights reserved. + * Copyright (c) 2022, 2023, Arm Limited. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,6 +26,7 @@ * @bug 8289996 * @summary Test range check hoisting for some scaled iv at array index * @library /test/lib / + * @requires vm.flagless * @requires vm.debug & vm.compiler2.enabled & (os.simpleArch == "x64" | os.arch == "aarch64") * @modules jdk.incubator.vector * @run main/othervm compiler.rangechecks.TestRangeCheckHoistingScaledIV From 9311749edca0a8afdd2d15fb059be08389a5a1de Mon Sep 17 00:00:00 2001 From: Magnus Ihse Bursie Date: Tue, 21 Nov 2023 16:27:15 +0000 Subject: [PATCH 006/250] 8320526: Use title case in building.md Reviewed-by: iris --- doc/building.html | 40 ++++++++++++++++++++-------------------- doc/building.md | 18 +++++++++--------- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/doc/building.html b/doc/building.html index 09251053fc03c..3aad6eae0742b 100644 --- a/doc/building.html +++ b/doc/building.html @@ -49,7 +49,7 @@

Building the JDK

  • Building on aarch64
  • Building on 32-bit arm
  • +id="toc-building-on-32-bit-arm">Building on 32-bit ARM
  • Operating System Requirements @@ -74,7 +74,7 @@

    Building the JDK

    JDK Requirements
  • External Library Requirements @@ -116,7 +116,7 @@

    Building the JDK

  • macOS
  • Cross-compiling +id="toc-cross-compiling">Cross-Compiling
  • Build Performance @@ -146,9 +146,9 @@

    Building the JDK

  • Precompiled Headers
  • Icecc / -icecream
  • +Icecream
  • Using the javac server
  • +id="toc-using-the-javac-server">Using the javac Server
  • Building the Right Target
  • @@ -202,7 +202,7 @@

    Building the JDK

  • Contributing to the JDK
  • Editing this document
  • +id="toc-editing-this-document">Editing This Document

    TL;DR (Instructions for the @@ -341,7 +341,7 @@

    Branch Protection

    build can be run on both machines with and without support for branch protection in hardware. Branch Protection is only supported for Linux targets.

    -

    Building on 32-bit arm

    +

    Building on 32-bit ARM

    This is not recommended. Instead, see the section on Cross-compiling.

    Operating System @@ -698,7 +698,7 @@

    Boot JDK Requirements

    locations on most platforms, this heuristics has a high likelihood to fail. If the boot JDK is not automatically detected, or the wrong JDK is picked, use --with-boot-jdk to point to the JDK to use.

    -

    Getting JDK binaries

    +

    Getting JDK Binaries

    An overview of common ways to download and install prebuilt JDK binaries can be found on https://openjdk.org/install. An alternative is to download the macOS or the specified identity is valid. If hardened isn't possible, then debug signing is chosen if it works. If nothing works, the codesign build step is disabled.

    -

    Cross-compiling

    +

    Cross-Compiling

    Cross-compiling means using one platform (the build platform) to generate output that can ran on another platform (the target platform).

    @@ -1399,7 +1399,7 @@

    Verifying the Build

    contain the newly built JDK, for your target system.

    Copy these folders to your target system. Then you can run e.g. images/jdk/bin/java -version.

    -

    Cross compiling the easy way

    +

    Cross-Compiling the Easy Way

    Setting up a proper cross-compilation environment can be a lot of work. Fortunately there are ways that more or less automate this process. Here are two recommended methods, using the "devkits" that can @@ -1409,7 +1409,7 @@

    Cross compiling the easy way

    solution only work for gcc.

    The devkit method is regularly used for testing by Oracle, and the debootstrap method is regularly used in GitHub Actions testing.

    -

    Using OpenJDK devkits

    +

    Using OpenJDK Devkits

    The JDK build system provides out-of-the box support for creating and using so called devkits. A devkit is basically a collection of a cross-compiling toolchain and a sysroot environment which can @@ -1660,8 +1660,8 @@

    Using Debian debootstrap

    -

    Considerations for specific -targets

    +

    Considerations for Specific +Targets

    Building for ARM32

    A common cross-compilation target is the ARM CPU. When building for ARM, it is recommended to set the ABI profile. A number of pre-defined @@ -1772,7 +1772,7 @@

    Precompiled Headers

    circumstances, it can actually slow things down.

    You can experiment by disabling pre-compiled headers using --disable-precompiled-headers.

    -

    Icecc / icecream

    +

    Icecc / Icecream

    icecc/icecream is a simple way to setup a distributed compiler network. If you have multiple machines available for building the JDK, you can drastically cut @@ -1780,7 +1780,7 @@

    Icecc / icecream

    To use, setup an icecc network, and install icecc on the build machine. Then run configure using --enable-icecc.

    -

    Using the javac server

    +

    Using the javac Server

    To speed up compilation of Java code, especially during incremental compilations, the javac server is automatically enabled in the configuration step by default. To explicitly enable or disable the javac @@ -2456,7 +2456,7 @@

    Contributing to the JDK

    your contribution.

    The official place to start is the OpenJDK Developers’ Guide.

    -

    Editing this document

    +

    Editing This Document

    If you want to contribute changes to this document, edit doc/building.md and then run make update-build-docs to generate the same changes in diff --git a/doc/building.md b/doc/building.md index e33976413745a..611cfe15915c8 100644 --- a/doc/building.md +++ b/doc/building.md @@ -154,7 +154,7 @@ support (GCC 9.1.0+ or Clang 10+). The resulting build can be run on both machines with and without support for branch protection in hardware. Branch Protection is only supported for Linux targets. -### Building on 32-bit arm +### Building on 32-bit ARM This is not recommended. Instead, see the section on [Cross-compiling]( #cross-compiling). @@ -518,7 +518,7 @@ heuristics has a high likelihood to fail. If the boot JDK is not automatically detected, or the wrong JDK is picked, use `--with-boot-jdk` to point to the JDK to use. -### Getting JDK binaries +### Getting JDK Binaries An overview of common ways to download and install prebuilt JDK binaries can be found on https://openjdk.org/install. An alternative is to download the [Oracle @@ -1026,7 +1026,7 @@ The default mode "auto" will try for `hardened` signing if the debug level is If hardened isn't possible, then `debug` signing is chosen if it works. If nothing works, the codesign build step is disabled. -## Cross-compiling +## Cross-Compiling Cross-compiling means using one platform (the *build* platform) to generate output that can ran on another platform (the *target* platform). @@ -1213,7 +1213,7 @@ built JDK, for your *target* system. Copy these folders to your *target* system. Then you can run e.g. `images/jdk/bin/java -version`. -### Cross compiling the easy way +### Cross-Compiling the Easy Way Setting up a proper cross-compilation environment can be a lot of work. Fortunately there are ways that more or less automate this process. Here are @@ -1225,7 +1225,7 @@ solution only work for gcc. The devkit method is regularly used for testing by Oracle, and the debootstrap method is regularly used in GitHub Actions testing. -#### Using OpenJDK devkits +#### Using OpenJDK Devkits The JDK build system provides out-of-the box support for creating and using so called devkits. A `devkit` is basically a collection of a cross-compiling @@ -1388,7 +1388,7 @@ Architectures that are known to successfully cross-compile like this are: | sh4 | sid | sh4 | sh4-linux-gnu | zero | | riscv64 | sid | riscv64 | riscv64-linux-gnu | (all) | -### Considerations for specific targets +### Considerations for Specific Targets #### Building for ARM32 @@ -1526,7 +1526,7 @@ things down. You can experiment by disabling pre-compiled headers using `--disable-precompiled-headers`. -### Icecc / icecream +### Icecc / Icecream [icecc/icecream](https://github.com/icecc/icecream) is a simple way to setup a distributed compiler network. If you have multiple machines available for @@ -1536,7 +1536,7 @@ it. To use, setup an icecc network, and install icecc on the build machine. Then run `configure` using `--enable-icecc`. -### Using the javac server +### Using the javac Server To speed up compilation of Java code, especially during incremental compilations, the javac server is automatically enabled in the configuration @@ -2274,7 +2274,7 @@ our rules and guidelines to be able to accept your contribution. The official place to start is the [OpenJDK Developers’ Guide]( https://openjdk.org/guide/). -## Editing this document +## Editing This Document If you want to contribute changes to this document, edit `doc/building.md` and then run `make update-build-docs` to generate the same changes in From c4aba875708f1701e8f1b6fa9676f42e235ec461 Mon Sep 17 00:00:00 2001 From: Vladimir Kozlov Date: Tue, 21 Nov 2023 16:48:24 +0000 Subject: [PATCH 007/250] 8320272: Make method_entry_barrier address shared Reviewed-by: dlong --- src/hotspot/cpu/aarch64/c2_CodeStubs_aarch64.cpp | 2 +- .../aarch64/gc/shared/barrierSetAssembler_aarch64.cpp | 2 +- src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp | 2 +- src/hotspot/cpu/aarch64/stubRoutines_aarch64.cpp | 1 - src/hotspot/cpu/aarch64/stubRoutines_aarch64.hpp | 6 ------ .../cpu/arm/gc/shared/barrierSetAssembler_arm.cpp | 2 +- src/hotspot/cpu/arm/stubGenerator_arm.cpp | 2 +- src/hotspot/cpu/arm/stubRoutines_arm.cpp | 2 -- src/hotspot/cpu/arm/stubRoutines_arm.hpp | 2 -- .../cpu/ppc/gc/shared/barrierSetAssembler_ppc.cpp | 2 +- src/hotspot/cpu/ppc/stubGenerator_ppc.cpp | 4 ++-- src/hotspot/cpu/ppc/stubRoutines_ppc.hpp | 4 ---- src/hotspot/cpu/ppc/stubRoutines_ppc_64.cpp | 5 ----- src/hotspot/cpu/riscv/c2_CodeStubs_riscv.cpp | 9 ++++++--- .../cpu/riscv/gc/shared/barrierSetAssembler_riscv.cpp | 10 +++++++--- src/hotspot/cpu/riscv/stubGenerator_riscv.cpp | 2 +- src/hotspot/cpu/riscv/stubRoutines_riscv.cpp | 1 - src/hotspot/cpu/riscv/stubRoutines_riscv.hpp | 6 ------ .../cpu/s390/gc/shared/barrierSetAssembler_s390.cpp | 2 +- src/hotspot/cpu/s390/stubGenerator_s390.cpp | 4 ++-- src/hotspot/cpu/s390/stubRoutines_s390.cpp | 2 -- src/hotspot/cpu/s390/stubRoutines_s390.hpp | 4 ---- src/hotspot/cpu/x86/c2_CodeStubs_x86.cpp | 2 +- .../cpu/x86/gc/shared/barrierSetAssembler_x86.cpp | 4 ++-- src/hotspot/cpu/x86/stubGenerator_x86_32.cpp | 2 +- src/hotspot/cpu/x86/stubGenerator_x86_64.cpp | 2 +- src/hotspot/cpu/x86/stubRoutines_x86.hpp | 2 -- src/hotspot/cpu/x86/stubRoutines_x86_32.cpp | 1 - src/hotspot/cpu/x86/stubRoutines_x86_64.cpp | 1 - src/hotspot/share/jvmci/jvmciCompilerToVMInit.cpp | 3 +-- src/hotspot/share/runtime/stubRoutines.cpp | 1 + src/hotspot/share/runtime/stubRoutines.hpp | 4 ++++ 32 files changed, 36 insertions(+), 62 deletions(-) diff --git a/src/hotspot/cpu/aarch64/c2_CodeStubs_aarch64.cpp b/src/hotspot/cpu/aarch64/c2_CodeStubs_aarch64.cpp index 69ea37fa45b34..dabafb9288b83 100644 --- a/src/hotspot/cpu/aarch64/c2_CodeStubs_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/c2_CodeStubs_aarch64.cpp @@ -55,7 +55,7 @@ int C2EntryBarrierStub::max_size() const { void C2EntryBarrierStub::emit(C2_MacroAssembler& masm) { __ bind(entry()); - __ movptr(rscratch1, (uintptr_t) StubRoutines::aarch64::method_entry_barrier()); + __ lea(rscratch1, RuntimeAddress(StubRoutines::method_entry_barrier())); __ blr(rscratch1); __ b(continuation()); diff --git a/src/hotspot/cpu/aarch64/gc/shared/barrierSetAssembler_aarch64.cpp b/src/hotspot/cpu/aarch64/gc/shared/barrierSetAssembler_aarch64.cpp index bfe29ddc8f716..070c685a07bb7 100644 --- a/src/hotspot/cpu/aarch64/gc/shared/barrierSetAssembler_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/gc/shared/barrierSetAssembler_aarch64.cpp @@ -358,7 +358,7 @@ void BarrierSetAssembler::nmethod_entry_barrier(MacroAssembler* masm, Label* slo __ br(condition, barrier_target); if (slow_path == nullptr) { - __ movptr(rscratch1, (uintptr_t) StubRoutines::aarch64::method_entry_barrier()); + __ lea(rscratch1, RuntimeAddress(StubRoutines::method_entry_barrier())); __ blr(rscratch1); __ b(skip_barrier); diff --git a/src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp b/src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp index adf180d219cc0..97ca90ac76454 100644 --- a/src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp @@ -8393,7 +8393,7 @@ class StubGenerator: public StubCodeGenerator { BarrierSetNMethod* bs_nm = BarrierSet::barrier_set()->barrier_set_nmethod(); if (bs_nm != nullptr) { - StubRoutines::aarch64::_method_entry_barrier = generate_method_entry_barrier(); + StubRoutines::_method_entry_barrier = generate_method_entry_barrier(); } StubRoutines::aarch64::_spin_wait = generate_spin_wait(); diff --git a/src/hotspot/cpu/aarch64/stubRoutines_aarch64.cpp b/src/hotspot/cpu/aarch64/stubRoutines_aarch64.cpp index 3b6d3b5c40a28..80875a3b3cdcf 100644 --- a/src/hotspot/cpu/aarch64/stubRoutines_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/stubRoutines_aarch64.cpp @@ -56,7 +56,6 @@ address StubRoutines::aarch64::_string_indexof_linear_ll = nullptr; address StubRoutines::aarch64::_string_indexof_linear_uu = nullptr; address StubRoutines::aarch64::_string_indexof_linear_ul = nullptr; address StubRoutines::aarch64::_large_byte_array_inflate = nullptr; -address StubRoutines::aarch64::_method_entry_barrier = nullptr; static void empty_spin_wait() { } address StubRoutines::aarch64::_spin_wait = CAST_FROM_FN_PTR(address, empty_spin_wait); diff --git a/src/hotspot/cpu/aarch64/stubRoutines_aarch64.hpp b/src/hotspot/cpu/aarch64/stubRoutines_aarch64.hpp index 2fcb35a1ae160..e6438908ce4c6 100644 --- a/src/hotspot/cpu/aarch64/stubRoutines_aarch64.hpp +++ b/src/hotspot/cpu/aarch64/stubRoutines_aarch64.hpp @@ -71,8 +71,6 @@ class aarch64 { static address _string_indexof_linear_ul; static address _large_byte_array_inflate; - static address _method_entry_barrier; - static address _spin_wait; static bool _completed; @@ -179,10 +177,6 @@ class aarch64 { return _large_byte_array_inflate; } - static address method_entry_barrier() { - return _method_entry_barrier; - } - static address spin_wait() { return _spin_wait; } diff --git a/src/hotspot/cpu/arm/gc/shared/barrierSetAssembler_arm.cpp b/src/hotspot/cpu/arm/gc/shared/barrierSetAssembler_arm.cpp index d6570283e60ac..9329876b808b2 100644 --- a/src/hotspot/cpu/arm/gc/shared/barrierSetAssembler_arm.cpp +++ b/src/hotspot/cpu/arm/gc/shared/barrierSetAssembler_arm.cpp @@ -227,7 +227,7 @@ void BarrierSetAssembler::nmethod_entry_barrier(MacroAssembler* masm) { __ cmp(tmp0, tmp1); __ b(skip, eq); - __ mov_address(tmp0, StubRoutines::Arm::method_entry_barrier()); + __ mov_address(tmp0, StubRoutines::method_entry_barrier()); __ call(tmp0); __ b(skip); diff --git a/src/hotspot/cpu/arm/stubGenerator_arm.cpp b/src/hotspot/cpu/arm/stubGenerator_arm.cpp index 6e5484c98cbd4..7f9645f749ada 100644 --- a/src/hotspot/cpu/arm/stubGenerator_arm.cpp +++ b/src/hotspot/cpu/arm/stubGenerator_arm.cpp @@ -3188,7 +3188,7 @@ class StubGenerator: public StubCodeGenerator { BarrierSetNMethod* bs_nm = BarrierSet::barrier_set()->barrier_set_nmethod(); if (bs_nm != nullptr) { - StubRoutines::Arm::_method_entry_barrier = generate_method_entry_barrier(); + StubRoutines::_method_entry_barrier = generate_method_entry_barrier(); } } diff --git a/src/hotspot/cpu/arm/stubRoutines_arm.cpp b/src/hotspot/cpu/arm/stubRoutines_arm.cpp index ab4df1cd337fb..0cd174d8da673 100644 --- a/src/hotspot/cpu/arm/stubRoutines_arm.cpp +++ b/src/hotspot/cpu/arm/stubRoutines_arm.cpp @@ -33,5 +33,3 @@ address StubRoutines::Arm::_partial_subtype_check = nullptr; address StubRoutines::_atomic_load_long_entry = nullptr; address StubRoutines::_atomic_store_long_entry = nullptr; - -address StubRoutines::Arm::_method_entry_barrier = nullptr; diff --git a/src/hotspot/cpu/arm/stubRoutines_arm.hpp b/src/hotspot/cpu/arm/stubRoutines_arm.hpp index 46e66d5dcfee2..05c82881cd5f6 100644 --- a/src/hotspot/cpu/arm/stubRoutines_arm.hpp +++ b/src/hotspot/cpu/arm/stubRoutines_arm.hpp @@ -45,13 +45,11 @@ class Arm { static address _idiv_irem_entry; static address _partial_subtype_check; - static address _method_entry_barrier; public: static address idiv_irem_entry() { return _idiv_irem_entry; } static address partial_subtype_check() { return _partial_subtype_check; } - static address method_entry_barrier() { return _method_entry_barrier; } }; static bool returns_to_call_stub(address return_pc) { diff --git a/src/hotspot/cpu/ppc/gc/shared/barrierSetAssembler_ppc.cpp b/src/hotspot/cpu/ppc/gc/shared/barrierSetAssembler_ppc.cpp index fbe37a0a35c35..f15e79534a2e5 100644 --- a/src/hotspot/cpu/ppc/gc/shared/barrierSetAssembler_ppc.cpp +++ b/src/hotspot/cpu/ppc/gc/shared/barrierSetAssembler_ppc.cpp @@ -188,7 +188,7 @@ void BarrierSetAssembler::nmethod_entry_barrier(MacroAssembler* masm, Register t __ block_comment("nmethod_entry_barrier (nmethod_entry_barrier) {"); // Load stub address using toc (fixed instruction size, unlike load_const_optimized) - __ calculate_address_from_global_toc(tmp, StubRoutines::ppc::nmethod_entry_barrier(), + __ calculate_address_from_global_toc(tmp, StubRoutines::method_entry_barrier(), true, true, false); // 2 instructions __ mtctr(tmp); diff --git a/src/hotspot/cpu/ppc/stubGenerator_ppc.cpp b/src/hotspot/cpu/ppc/stubGenerator_ppc.cpp index efcc8c897216d..e26f03f52d802 100644 --- a/src/hotspot/cpu/ppc/stubGenerator_ppc.cpp +++ b/src/hotspot/cpu/ppc/stubGenerator_ppc.cpp @@ -3558,7 +3558,7 @@ class StubGenerator: public StubCodeGenerator { return start; } - address generate_nmethod_entry_barrier() { + address generate_method_entry_barrier() { __ align(CodeEntryAlignment); StubCodeMark mark(this, "StubRoutines", "nmethod_entry_barrier"); @@ -4806,7 +4806,7 @@ class StubGenerator: public StubCodeGenerator { // nmethod entry barriers for concurrent class unloading BarrierSetNMethod* bs_nm = BarrierSet::barrier_set()->barrier_set_nmethod(); if (bs_nm != nullptr) { - StubRoutines::ppc::_nmethod_entry_barrier = generate_nmethod_entry_barrier(); + StubRoutines::_method_entry_barrier = generate_method_entry_barrier(); } // arraycopy stubs used by compilers diff --git a/src/hotspot/cpu/ppc/stubRoutines_ppc.hpp b/src/hotspot/cpu/ppc/stubRoutines_ppc.hpp index 1e1172c9ada43..4db0227e81b4e 100644 --- a/src/hotspot/cpu/ppc/stubRoutines_ppc.hpp +++ b/src/hotspot/cpu/ppc/stubRoutines_ppc.hpp @@ -53,11 +53,7 @@ class ppc { friend class StubGenerator; private: - static address _nmethod_entry_barrier; - public: - static address nmethod_entry_barrier(); - static address generate_crc_constants(juint reverse_poly); }; diff --git a/src/hotspot/cpu/ppc/stubRoutines_ppc_64.cpp b/src/hotspot/cpu/ppc/stubRoutines_ppc_64.cpp index f2dc214456779..7df905b90682c 100644 --- a/src/hotspot/cpu/ppc/stubRoutines_ppc_64.cpp +++ b/src/hotspot/cpu/ppc/stubRoutines_ppc_64.cpp @@ -206,8 +206,3 @@ address StubRoutines::ppc::generate_crc_constants(juint reverse_poly) { return consts; } - -address StubRoutines::ppc::_nmethod_entry_barrier = nullptr; -address StubRoutines::ppc::nmethod_entry_barrier() { - return _nmethod_entry_barrier; -} diff --git a/src/hotspot/cpu/riscv/c2_CodeStubs_riscv.cpp b/src/hotspot/cpu/riscv/c2_CodeStubs_riscv.cpp index e9556fe4dcf9f..d1c66ce1da76a 100644 --- a/src/hotspot/cpu/riscv/c2_CodeStubs_riscv.cpp +++ b/src/hotspot/cpu/riscv/c2_CodeStubs_riscv.cpp @@ -60,10 +60,13 @@ int C2EntryBarrierStub::max_size() const { void C2EntryBarrierStub::emit(C2_MacroAssembler& masm) { __ bind(entry()); + RuntimeAddress target(StubRoutines::method_entry_barrier()); + __ relocate(target.rspec(), [&] { + int32_t offset; + __ la_patchable(t0, target, offset); + __ jalr(ra, t0, offset); + }); - int32_t offset = 0; - __ movptr(t0, StubRoutines::riscv::method_entry_barrier(), offset); - __ jalr(ra, t0, offset); __ j(continuation()); // make guard value 4-byte aligned so that it can be accessed by atomic instructions on RISC-V diff --git a/src/hotspot/cpu/riscv/gc/shared/barrierSetAssembler_riscv.cpp b/src/hotspot/cpu/riscv/gc/shared/barrierSetAssembler_riscv.cpp index ed045c37a6ffa..a4440890b0961 100644 --- a/src/hotspot/cpu/riscv/gc/shared/barrierSetAssembler_riscv.cpp +++ b/src/hotspot/cpu/riscv/gc/shared/barrierSetAssembler_riscv.cpp @@ -308,9 +308,13 @@ void BarrierSetAssembler::nmethod_entry_barrier(MacroAssembler* masm, Label* slo Label skip_barrier; __ beq(t0, t1, skip_barrier); - int32_t offset = 0; - __ movptr(t0, StubRoutines::riscv::method_entry_barrier(), offset); - __ jalr(ra, t0, offset); + RuntimeAddress target(StubRoutines::method_entry_barrier()); + __ relocate(target.rspec(), [&] { + int32_t offset; + __ la_patchable(t0, target, offset); + __ jalr(ra, t0, offset); + }); + __ j(skip_barrier); __ bind(local_guard); diff --git a/src/hotspot/cpu/riscv/stubGenerator_riscv.cpp b/src/hotspot/cpu/riscv/stubGenerator_riscv.cpp index 057c4783edffa..e10357c4a5a50 100644 --- a/src/hotspot/cpu/riscv/stubGenerator_riscv.cpp +++ b/src/hotspot/cpu/riscv/stubGenerator_riscv.cpp @@ -4813,7 +4813,7 @@ static const int64_t right_3_bits = right_n_bits(3); BarrierSetNMethod* bs_nm = BarrierSet::barrier_set()->barrier_set_nmethod(); if (bs_nm != nullptr) { - StubRoutines::riscv::_method_entry_barrier = generate_method_entry_barrier(); + StubRoutines::_method_entry_barrier = generate_method_entry_barrier(); } StubRoutines::_upcall_stub_exception_handler = generate_upcall_stub_exception_handler(); diff --git a/src/hotspot/cpu/riscv/stubRoutines_riscv.cpp b/src/hotspot/cpu/riscv/stubRoutines_riscv.cpp index dd72044b0ce6b..39068a9a026ac 100644 --- a/src/hotspot/cpu/riscv/stubRoutines_riscv.cpp +++ b/src/hotspot/cpu/riscv/stubRoutines_riscv.cpp @@ -53,6 +53,5 @@ address StubRoutines::riscv::_string_indexof_linear_ll = nullptr; address StubRoutines::riscv::_string_indexof_linear_uu = nullptr; address StubRoutines::riscv::_string_indexof_linear_ul = nullptr; address StubRoutines::riscv::_large_byte_array_inflate = nullptr; -address StubRoutines::riscv::_method_entry_barrier = nullptr; bool StubRoutines::riscv::_completed = false; diff --git a/src/hotspot/cpu/riscv/stubRoutines_riscv.hpp b/src/hotspot/cpu/riscv/stubRoutines_riscv.hpp index fde88f5e30b62..7c604e8c11cc2 100644 --- a/src/hotspot/cpu/riscv/stubRoutines_riscv.hpp +++ b/src/hotspot/cpu/riscv/stubRoutines_riscv.hpp @@ -70,8 +70,6 @@ class riscv { static address _string_indexof_linear_ul; static address _large_byte_array_inflate; - static address _method_entry_barrier; - static bool _completed; public: @@ -148,10 +146,6 @@ class riscv { return _large_byte_array_inflate; } - static address method_entry_barrier() { - return _method_entry_barrier; - } - static bool complete() { return _completed; } diff --git a/src/hotspot/cpu/s390/gc/shared/barrierSetAssembler_s390.cpp b/src/hotspot/cpu/s390/gc/shared/barrierSetAssembler_s390.cpp index 9613de903d9b3..480af074a4c1e 100644 --- a/src/hotspot/cpu/s390/gc/shared/barrierSetAssembler_s390.cpp +++ b/src/hotspot/cpu/s390/gc/shared/barrierSetAssembler_s390.cpp @@ -132,7 +132,7 @@ void BarrierSetAssembler::nmethod_entry_barrier(MacroAssembler* masm) { __ block_comment("nmethod_entry_barrier (nmethod_entry_barrier) {"); // Load jump addr: - __ load_const(Z_R1_scratch, (uint64_t)StubRoutines::zarch::nmethod_entry_barrier()); // 2*6 bytes + __ load_const(Z_R1_scratch, (uint64_t)StubRoutines::method_entry_barrier()); // 2*6 bytes // Load value from current java object: __ z_lg(Z_R0_scratch, in_bytes(bs_nm->thread_disarmed_guard_value_offset()), Z_thread); // 6 bytes diff --git a/src/hotspot/cpu/s390/stubGenerator_s390.cpp b/src/hotspot/cpu/s390/stubGenerator_s390.cpp index 64d8d9fa978c8..db686158f2107 100644 --- a/src/hotspot/cpu/s390/stubGenerator_s390.cpp +++ b/src/hotspot/cpu/s390/stubGenerator_s390.cpp @@ -3015,7 +3015,7 @@ class StubGenerator: public StubCodeGenerator { return start; } - address generate_nmethod_entry_barrier() { + address generate_method_entry_barrier() { __ align(CodeEntryAlignment); StubCodeMark mark(this, "StubRoutines", "nmethod_entry_barrier"); @@ -3187,7 +3187,7 @@ class StubGenerator: public StubCodeGenerator { // nmethod entry barriers for concurrent class unloading BarrierSetNMethod* bs_nm = BarrierSet::barrier_set()->barrier_set_nmethod(); if (bs_nm != nullptr) { - StubRoutines::zarch::_nmethod_entry_barrier = generate_nmethod_entry_barrier(); + StubRoutines::_method_entry_barrier = generate_method_entry_barrier(); } StubRoutines::_upcall_stub_exception_handler = generate_upcall_stub_exception_handler(); diff --git a/src/hotspot/cpu/s390/stubRoutines_s390.cpp b/src/hotspot/cpu/s390/stubRoutines_s390.cpp index 711de63fdeafc..2a60f71557c71 100644 --- a/src/hotspot/cpu/s390/stubRoutines_s390.cpp +++ b/src/hotspot/cpu/s390/stubRoutines_s390.cpp @@ -38,8 +38,6 @@ address StubRoutines::zarch::_partial_subtype_check = nullptr; // Comapct string intrinsics: Translate table for string inflate intrinsic. Used by trot instruction. address StubRoutines::zarch::_trot_table_addr = nullptr; -address StubRoutines::zarch::_nmethod_entry_barrier = nullptr; - int StubRoutines::zarch::_atomic_memory_operation_lock = StubRoutines::zarch::unlocked; #define __ masm-> diff --git a/src/hotspot/cpu/s390/stubRoutines_s390.hpp b/src/hotspot/cpu/s390/stubRoutines_s390.hpp index 68e6b3f2b47a4..7116d441715ad 100644 --- a/src/hotspot/cpu/s390/stubRoutines_s390.hpp +++ b/src/hotspot/cpu/s390/stubRoutines_s390.hpp @@ -80,8 +80,6 @@ class zarch { static address _trot_table_addr; static jlong _trot_table[TROT_COLUMN_SIZE]; - static address _nmethod_entry_barrier; - public: // Global lock for everyone who needs to use atomic_compare_and_exchange // or atomic_increment -- should probably use more locks for more @@ -102,8 +100,6 @@ class zarch { // Comapct string intrinsics: Translate table for string inflate intrinsic. Used by trot instruction. static void generate_load_trot_table_addr(MacroAssembler* masm, Register table); - - static address nmethod_entry_barrier() { return _nmethod_entry_barrier; } }; #endif // CPU_S390_STUBROUTINES_S390_HPP diff --git a/src/hotspot/cpu/x86/c2_CodeStubs_x86.cpp b/src/hotspot/cpu/x86/c2_CodeStubs_x86.cpp index cd5e87b29ec4c..b9b4e8af02c5f 100644 --- a/src/hotspot/cpu/x86/c2_CodeStubs_x86.cpp +++ b/src/hotspot/cpu/x86/c2_CodeStubs_x86.cpp @@ -69,7 +69,7 @@ int C2EntryBarrierStub::max_size() const { void C2EntryBarrierStub::emit(C2_MacroAssembler& masm) { __ bind(entry()); - __ call(RuntimeAddress(StubRoutines::x86::method_entry_barrier())); + __ call(RuntimeAddress(StubRoutines::method_entry_barrier())); __ jmp(continuation(), false /* maybe_short */); } diff --git a/src/hotspot/cpu/x86/gc/shared/barrierSetAssembler_x86.cpp b/src/hotspot/cpu/x86/gc/shared/barrierSetAssembler_x86.cpp index 6a7ac54f4734c..f09e1c9216206 100644 --- a/src/hotspot/cpu/x86/gc/shared/barrierSetAssembler_x86.cpp +++ b/src/hotspot/cpu/x86/gc/shared/barrierSetAssembler_x86.cpp @@ -402,7 +402,7 @@ void BarrierSetAssembler::nmethod_entry_barrier(MacroAssembler* masm, Label* slo } else { Label done; __ jccb(Assembler::equal, done); - __ call(RuntimeAddress(StubRoutines::x86::method_entry_barrier())); + __ call(RuntimeAddress(StubRoutines::method_entry_barrier())); __ bind(done); } } @@ -423,7 +423,7 @@ void BarrierSetAssembler::nmethod_entry_barrier(MacroAssembler* masm, Label*, La __ cmpl_imm32(disarmed_addr, 0); __ pop(tmp); __ jcc(Assembler::equal, continuation); - __ call(RuntimeAddress(StubRoutines::x86::method_entry_barrier())); + __ call(RuntimeAddress(StubRoutines::method_entry_barrier())); __ bind(continuation); } #endif diff --git a/src/hotspot/cpu/x86/stubGenerator_x86_32.cpp b/src/hotspot/cpu/x86/stubGenerator_x86_32.cpp index d21233b258fb0..e6305ded69624 100644 --- a/src/hotspot/cpu/x86/stubGenerator_x86_32.cpp +++ b/src/hotspot/cpu/x86/stubGenerator_x86_32.cpp @@ -4218,7 +4218,7 @@ class StubGenerator: public StubCodeGenerator { BarrierSetNMethod* bs_nm = BarrierSet::barrier_set()->barrier_set_nmethod(); if (bs_nm != nullptr) { - StubRoutines::x86::_method_entry_barrier = generate_method_entry_barrier(); + StubRoutines::_method_entry_barrier = generate_method_entry_barrier(); } } diff --git a/src/hotspot/cpu/x86/stubGenerator_x86_64.cpp b/src/hotspot/cpu/x86/stubGenerator_x86_64.cpp index 894f225d3bc79..c73e0759b57f7 100644 --- a/src/hotspot/cpu/x86/stubGenerator_x86_64.cpp +++ b/src/hotspot/cpu/x86/stubGenerator_x86_64.cpp @@ -4052,7 +4052,7 @@ void StubGenerator::generate_final_stubs() { BarrierSetNMethod* bs_nm = BarrierSet::barrier_set()->barrier_set_nmethod(); if (bs_nm != nullptr) { - StubRoutines::x86::_method_entry_barrier = generate_method_entry_barrier(); + StubRoutines::_method_entry_barrier = generate_method_entry_barrier(); } if (UseVectorizedMismatchIntrinsic) { diff --git a/src/hotspot/cpu/x86/stubRoutines_x86.hpp b/src/hotspot/cpu/x86/stubRoutines_x86.hpp index 375cefd5e1df5..6c602324f3ef2 100644 --- a/src/hotspot/cpu/x86/stubRoutines_x86.hpp +++ b/src/hotspot/cpu/x86/stubRoutines_x86.hpp @@ -132,8 +132,6 @@ class x86 { static address _verify_mxcsr_entry; - static address _method_entry_barrier; - // masks and table for CRC32 static const uint64_t _crc_by128_masks[]; static const juint _crc_table[]; diff --git a/src/hotspot/cpu/x86/stubRoutines_x86_32.cpp b/src/hotspot/cpu/x86/stubRoutines_x86_32.cpp index 0da5a3eca7db9..7916a3b36305a 100644 --- a/src/hotspot/cpu/x86/stubRoutines_x86_32.cpp +++ b/src/hotspot/cpu/x86/stubRoutines_x86_32.cpp @@ -32,7 +32,6 @@ // a description of how to extend it, see the stubRoutines.hpp file. address StubRoutines::x86::_verify_fpu_cntrl_wrd_entry = nullptr; -address StubRoutines::x86::_method_entry_barrier = nullptr; address StubRoutines::x86::_d2i_wrapper = nullptr; address StubRoutines::x86::_d2l_wrapper = nullptr; diff --git a/src/hotspot/cpu/x86/stubRoutines_x86_64.cpp b/src/hotspot/cpu/x86/stubRoutines_x86_64.cpp index 4287580e7f921..417b32eb4a64c 100644 --- a/src/hotspot/cpu/x86/stubRoutines_x86_64.cpp +++ b/src/hotspot/cpu/x86/stubRoutines_x86_64.cpp @@ -44,5 +44,4 @@ address StubRoutines::x86::_float_sign_mask = nullptr; address StubRoutines::x86::_float_sign_flip = nullptr; address StubRoutines::x86::_double_sign_mask = nullptr; address StubRoutines::x86::_double_sign_flip = nullptr; -address StubRoutines::x86::_method_entry_barrier = nullptr; diff --git a/src/hotspot/share/jvmci/jvmciCompilerToVMInit.cpp b/src/hotspot/share/jvmci/jvmciCompilerToVMInit.cpp index e40e5ee856e8d..a3e2bd525ecf6 100644 --- a/src/hotspot/share/jvmci/jvmciCompilerToVMInit.cpp +++ b/src/hotspot/share/jvmci/jvmciCompilerToVMInit.cpp @@ -146,8 +146,7 @@ void CompilerToVM::Data::initialize(JVMCI_TRAPS) { BarrierSetNMethod* bs_nm = BarrierSet::barrier_set()->barrier_set_nmethod(); if (bs_nm != nullptr) { thread_disarmed_guard_value_offset = in_bytes(bs_nm->thread_disarmed_guard_value_offset()); - AMD64_ONLY(nmethod_entry_barrier = StubRoutines::x86::method_entry_barrier()); - AARCH64_ONLY(nmethod_entry_barrier = StubRoutines::aarch64::method_entry_barrier()); + nmethod_entry_barrier = StubRoutines::method_entry_barrier(); BarrierSetAssembler* bs_asm = BarrierSet::barrier_set()->barrier_set_assembler(); AARCH64_ONLY(BarrierSetAssembler_nmethod_patching_type = (int) bs_asm->nmethod_patching_type()); AARCH64_ONLY(BarrierSetAssembler_patching_epoch_addr = bs_asm->patching_epoch_addr()); diff --git a/src/hotspot/share/runtime/stubRoutines.cpp b/src/hotspot/share/runtime/stubRoutines.cpp index faeaedac55e1e..ff32240905de8 100644 --- a/src/hotspot/share/runtime/stubRoutines.cpp +++ b/src/hotspot/share/runtime/stubRoutines.cpp @@ -176,6 +176,7 @@ address StubRoutines::_hf2f = nullptr; address StubRoutines::_vector_f_math[VectorSupport::NUM_VEC_SIZES][VectorSupport::NUM_SVML_OP] = {{nullptr}, {nullptr}}; address StubRoutines::_vector_d_math[VectorSupport::NUM_VEC_SIZES][VectorSupport::NUM_SVML_OP] = {{nullptr}, {nullptr}}; +address StubRoutines::_method_entry_barrier = nullptr; address StubRoutines::_array_sort = nullptr; address StubRoutines::_array_partition = nullptr; diff --git a/src/hotspot/share/runtime/stubRoutines.hpp b/src/hotspot/share/runtime/stubRoutines.hpp index 77d968263f75b..3000ed454a1e3 100644 --- a/src/hotspot/share/runtime/stubRoutines.hpp +++ b/src/hotspot/share/runtime/stubRoutines.hpp @@ -256,6 +256,8 @@ class StubRoutines: AllStatic { static address _f2hf; static address _hf2f; + static address _method_entry_barrier; + static address _cont_thaw; static address _cont_returnBarrier; static address _cont_returnBarrierExc; @@ -460,6 +462,8 @@ class StubRoutines: AllStatic { return ((hf2f_stub_t)_hf2f)(x); } + static address method_entry_barrier() { return _method_entry_barrier; } + static address cont_thaw() { return _cont_thaw; } static address cont_returnBarrier() { return _cont_returnBarrier; } static address cont_returnBarrierExc(){return _cont_returnBarrierExc; } From 61d81d6496a38e43a6039abc041b67626f06f5c9 Mon Sep 17 00:00:00 2001 From: Shaojin Wen Date: Tue, 21 Nov 2023 17:00:18 +0000 Subject: [PATCH 008/250] 8317742: ISO Standard Date Format implementation consistency on DateTimeFormatter and String.format Reviewed-by: rriggs, naoto --- .../share/classes/java/util/Formatter.java | 21 +++++- .../java/util/Formatter/BasicDateTime.java | 64 ++++++++++++++++++- 2 files changed, 83 insertions(+), 2 deletions(-) diff --git a/src/java.base/share/classes/java/util/Formatter.java b/src/java.base/share/classes/java/util/Formatter.java index 5febf0d9153dc..9956ba18d693e 100644 --- a/src/java.base/share/classes/java/util/Formatter.java +++ b/src/java.base/share/classes/java/util/Formatter.java @@ -56,6 +56,7 @@ import java.time.Instant; import java.time.ZoneId; import java.time.ZoneOffset; +import java.time.chrono.IsoChronology; import java.time.temporal.ChronoField; import java.time.temporal.TemporalAccessor; import java.time.temporal.TemporalQueries; @@ -2050,6 +2051,11 @@ private static char getGroupingSeparator(Locale locale) { return locale == null ? ',' : getDecimalFormatSymbols(locale).getGroupingSeparator(); } + // Use minus sign from cached DecimalFormatSymbols. + private static char getMinusSign(Locale locale) { + return locale == null ? '-' : getDecimalFormatSymbols(locale).getMinusSign(); + } + private Appendable a; private final Locale l; private IOException lastException; @@ -4490,7 +4496,20 @@ private Appendable print(Formatter fmt, StringBuilder sb, TemporalAccessor t, ch } case DateTime.ISO_STANDARD_DATE: { // 'F' (%Y-%m-%d) char sep = '-'; - print(fmt, sb, t, DateTime.YEAR_4, l).append(sep); + ChronoField yearField; + if (t.query(TemporalQueries.chronology()) instanceof IsoChronology) { + yearField = ChronoField.YEAR; + } else { + yearField = ChronoField.YEAR_OF_ERA; + } + int year = t.get(yearField); + if (year < 0) { + sb.append(getMinusSign(l)); + year = -year; + } else if (year > 9999) { + sb.append('+'); + } + sb.append(localizedMagnitude(fmt, null, year, Flags.ZERO_PAD, 4, l)).append(sep); print(fmt, sb, t, DateTime.MONTH, l).append(sep); print(fmt, sb, t, DateTime.DAY_OF_MONTH_0, l); break; diff --git a/test/jdk/java/util/Formatter/BasicDateTime.java b/test/jdk/java/util/Formatter/BasicDateTime.java index 4a65918b5b44f..936b695e77f7d 100644 --- a/test/jdk/java/util/Formatter/BasicDateTime.java +++ b/test/jdk/java/util/Formatter/BasicDateTime.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2023, 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 @@ -34,6 +34,14 @@ import java.math.BigDecimal; import java.math.BigInteger; import java.text.DateFormatSymbols; +import java.text.DecimalFormatSymbols; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.OffsetDateTime; +import java.time.ZonedDateTime; +import java.time.ZoneOffset; +import java.time.chrono.*; +import java.time.temporal.ChronoField; import java.util.*; import static java.util.Calendar.*; @@ -450,5 +458,59 @@ public static void test() { tryCatch("%%%", UnknownFormatConversionException.class); // perhaps an IllegalFormatArgumentIndexException should be defined? tryCatch("%<%", IllegalFormatFlagsException.class); + + // %tF LocalDate + test("%tF", "2023-01-13", LocalDate.of(2023, 1, 13)); + test("%tF", "2023-10-03", LocalDate.of(2023, 10, 3)); + test("%tF", "0001-10-03", LocalDate.of(1, 10, 3)); + test("%tF", "0012-10-03", LocalDate.of(12, 10, 3)); + test("%tF", "0123-10-03", LocalDate.of(123, 10, 3)); + test("%tF", "+12345-10-03", LocalDate.of(12345, 10, 3)); + test("%tF", "+12345-10-03", LocalDateTime.of(12345, 10, 3, 0, 0, 0)); + test("%tF", "+12345-10-03", OffsetDateTime.of(LocalDateTime.of(12345, 10, 3, 0, 0, 0), ZoneOffset.UTC)); + test("%tF", "+12345-10-03", ZonedDateTime.of(LocalDateTime.of(12345, 10, 3, 0, 0, 0), ZoneOffset.UTC)); + test("%tF", "-0001-10-03", LocalDate.of(-1, 10, 3)); + test("%tF", "-0012-10-03", LocalDate.of(-12, 10, 3)); + test("%tF", "-0123-10-03", LocalDate.of(-123, 10, 3)); + test("%tF", "-1234-10-03", LocalDate.of(-1234, 10, 3)); + test("%tF", "-12345-10-03", LocalDate.of(-12345, 10, 3)); + test("%tF", "-12345-10-03", LocalDate.of(-12345, 10, 3)); + test("%tF", "-12345-10-03", LocalDateTime.of(-12345, 10, 3, 0, 0, 0)); + test("%tF", "-12345-10-03", OffsetDateTime.of(LocalDateTime.of(-12345, 10, 3, 0, 0, 0), ZoneOffset.UTC)); + test("%tF", "-12345-10-03", ZonedDateTime.of(LocalDateTime.of(-12345, 10, 3, 0, 0, 0), ZoneOffset.UTC)); + + // check minusSign + int year = 2023, month = 1, dayOfMonth = 13; + String specifier = "%tF"; + for (Locale locale : Locale.getAvailableLocales()) { + char minusSign = DecimalFormatSymbols.getInstance(locale).getMinusSign(); + String str = new Formatter(new StringBuilder(), locale) + .format(specifier, LocalDate.of(year, month, dayOfMonth)) + .toString(); + test(locale, specifier, minusSign + str, LocalDate.of(-year, month, dayOfMonth)); + } + + // ja-JP-u-ca-japanese + ChronoLocalDate jpDate = Chronology + .ofLocale(Locale.forLanguageTag("ja-JP-u-ca-japanese")) + .dateNow(); + test(Locale.JAPANESE, + "%tF", + String.format( + "%04d-%02d-%02d", + jpDate.get(ChronoField.YEAR_OF_ERA), + jpDate.get(ChronoField.MONTH_OF_YEAR), + jpDate.get(ChronoField.DAY_OF_MONTH)), + jpDate); + + ChronoLocalDate jpDate1 = JapaneseChronology.INSTANCE.dateNow(); + test(Locale.JAPANESE, + "%tF", + String.format( + "%04d-%02d-%02d", + jpDate1.get(ChronoField.YEAR_OF_ERA), + jpDate1.get(ChronoField.MONTH_OF_YEAR), + jpDate1.get(ChronoField.DAY_OF_MONTH)), + jpDate1); } } From 1c0bd81a10f97c752818163a573d5983c7e481ac Mon Sep 17 00:00:00 2001 From: Weijun Wang Date: Tue, 21 Nov 2023 17:46:11 +0000 Subject: [PATCH 009/250] 8319124: Update XML Security for Java to 3.0.3 Reviewed-by: mullan --- .../apache/xml/internal/security/Init.java | 50 +-- .../security/algorithms/JCEMapper.java | 22 +- .../algorithms/MessageDigestAlgorithm.java | 2 + .../algorithms/SignatureAlgorithm.java | 8 +- .../algorithms/SignatureAlgorithmSpi.java | 7 +- .../implementations/ECDSAUtils.java | 7 +- .../implementations/IntegrityHmac.java | 12 + .../implementations/SignatureBaseRSA.java | 174 +++++++++- .../implementations/SignatureDSA.java | 14 + .../implementations/SignatureECDSA.java | 22 +- .../implementations/SignatureEDDSA.java | 27 +- .../internal/security/c14n/Canonicalizer.java | 2 +- .../security/c14n/helper/AttrCompare.java | 6 +- .../Canonicalizer11_OmitComments.java | 1 + .../Canonicalizer11_WithComments.java | 1 + .../Canonicalizer20010315.java | 4 + .../Canonicalizer20010315Excl.java | 5 + ...Canonicalizer20010315ExclOmitComments.java | 1 + ...Canonicalizer20010315ExclWithComments.java | 1 + .../Canonicalizer20010315OmitComments.java | 1 + .../Canonicalizer20010315WithComments.java | 1 + .../implementations/CanonicalizerBase.java | 8 +- .../CanonicalizerPhysical.java | 4 + .../implementations/NameSpaceSymbTable.java | 22 +- .../exceptions/XMLSecurityException.java | 2 + .../xml/internal/security/keys/KeyInfo.java | 1 + .../keys/content/DEREncodedKeyValue.java | 1 + .../keys/content/KeyInfoReference.java | 1 + .../security/keys/content/KeyName.java | 1 + .../security/keys/content/KeyValue.java | 1 + .../security/keys/content/MgmtData.java | 1 + .../security/keys/content/PGPData.java | 1 + .../keys/content/RetrievalMethod.java | 1 + .../security/keys/content/SPKIData.java | 1 + .../security/keys/content/X509Data.java | 1 + .../keys/content/keyvalues/DSAKeyValue.java | 2 + .../keys/content/keyvalues/ECKeyValue.java | 11 +- .../keys/content/keyvalues/RSAKeyValue.java | 2 + .../keys/content/x509/XMLX509CRL.java | 1 + .../keys/content/x509/XMLX509Certificate.java | 7 +- .../keys/content/x509/XMLX509Digest.java | 1 + .../content/x509/XMLX509IssuerSerial.java | 3 + .../keys/content/x509/XMLX509SKI.java | 7 +- .../keys/content/x509/XMLX509SubjectName.java | 3 + .../keys/keyresolver/KeyResolver.java | 8 +- .../implementations/PrivateKeyResolver.java | 2 + .../implementations/RSAKeyValueResolver.java | 1 - .../implementations/SecretKeyResolver.java | 2 + .../implementations/SingleKeyResolver.java | 2 + .../X509CertificateResolver.java | 4 +- .../implementations/X509DigestResolver.java | 3 +- .../implementations/X509SKIResolver.java | 9 +- .../X509SubjectNameResolver.java | 15 +- .../keys/storage/StorageResolver.java | 3 + .../implementations/KeyStoreResolver.java | 4 + .../SingleCertificateResolver.java | 4 + .../internal/security/parser/XMLParser.java | 9 + .../security/parser/XMLParserImpl.java | 6 +- .../internal/security/signature/Manifest.java | 1 + .../security/signature/ObjectContainer.java | 1 + .../security/signature/Reference.java | 4 + .../signature/SignatureProperties.java | 1 + .../security/signature/SignatureProperty.java | 1 + .../security/signature/SignedInfo.java | 3 +- .../security/signature/XMLSignature.java | 1 + .../security/signature/XMLSignatureInput.java | 1 + .../reference/ReferenceSubTreeData.java | 5 + .../xml/internal/security/utils/Base64.java | 44 +-- .../security/utils/DOMNamespaceContext.java | 3 + .../security/utils/DigesterOutputStream.java | 5 +- .../internal/security/utils/ElementProxy.java | 2 +- .../security/utils/HelperNodeList.java | 2 + .../internal/security/utils/JDKXPathAPI.java | 3 + .../security/utils/JDKXPathFactory.java | 1 + .../internal/security/utils/JavaUtils.java | 2 +- .../utils/Signature11ElementProxy.java | 1 + .../security/utils/SignatureElementProxy.java | 1 + .../security/utils/SignerOutputStream.java | 3 + .../utils/UnsyncByteArrayOutputStream.java | 3 + .../xml/internal/security/utils/XMLUtils.java | 95 +++++- .../implementations/ResolverDirectHTTP.java | 3 +- .../implementations/ResolverFragment.java | 1 + .../ResolverLocalFilesystem.java | 1 + .../implementations/ResolverXPointer.java | 1 + .../xml/crypto/dsig/SignatureMethod.java | 37 +++ .../dsig/internal/DigesterOutputStream.java | 1 + .../xml/dsig/internal/MacOutputStream.java | 1 + .../dom/AbstractDOMSignatureMethod.java | 6 +- .../internal/dom/ApacheCanonicalizer.java | 14 +- .../jcp/xml/dsig/internal/dom/ApacheData.java | 1 + .../dsig/internal/dom/ApacheNodeSetData.java | 7 +- .../internal/dom/ApacheOctetStreamData.java | 3 + .../dsig/internal/dom/ApacheTransform.java | 28 +- .../dom/DOMCanonicalXMLC14N11Method.java | 11 +- .../dom/DOMCanonicalXMLC14NMethod.java | 12 +- .../dom/DOMCanonicalizationMethod.java | 10 +- .../dsig/internal/dom/DOMCryptoBinary.java | 3 +- .../dsig/internal/dom/DOMDigestMethod.java | 19 +- .../internal/dom/DOMEnvelopedTransform.java | 2 + .../dsig/internal/dom/DOMExcC14NMethod.java | 22 +- .../internal/dom/DOMHMACSignatureMethod.java | 38 ++- .../jcp/xml/dsig/internal/dom/DOMKeyInfo.java | 3 + .../dsig/internal/dom/DOMKeyInfoFactory.java | 14 +- .../jcp/xml/dsig/internal/dom/DOMKeyName.java | 1 + .../xml/dsig/internal/dom/DOMKeyValue.java | 2 + .../xml/dsig/internal/dom/DOMManifest.java | 16 +- .../jcp/xml/dsig/internal/dom/DOMPGPData.java | 13 +- .../dom/DOMRSAPSSSignatureMethod.java | 34 +- .../xml/dsig/internal/dom/DOMReference.java | 64 +++- .../dsig/internal/dom/DOMRetrievalMethod.java | 5 + .../dsig/internal/dom/DOMSignatureMethod.java | 308 ++++++++++++------ .../internal/dom/DOMSignatureProperties.java | 14 +- .../internal/dom/DOMSignatureProperty.java | 15 +- .../xml/dsig/internal/dom/DOMSignedInfo.java | 55 ++-- .../xml/dsig/internal/dom/DOMStructure.java | 6 +- .../xml/dsig/internal/dom/DOMSubTreeData.java | 7 +- .../xml/dsig/internal/dom/DOMTransform.java | 4 + .../dsig/internal/dom/DOMURIDereferencer.java | 18 +- .../xml/dsig/internal/dom/DOMX509Data.java | 7 +- .../internal/dom/DOMX509IssuerSerial.java | 8 +- .../xml/dsig/internal/dom/DOMXMLObject.java | 19 +- .../dsig/internal/dom/DOMXMLSignature.java | 61 ++-- .../internal/dom/DOMXMLSignatureFactory.java | 64 +++- .../dom/DOMXPathFilter2Transform.java | 3 + .../dsig/internal/dom/DOMXPathTransform.java | 2 + .../dsig/internal/dom/DOMXSLTTransform.java | 11 +- .../org/jcp/xml/dsig/internal/dom/Utils.java | 6 +- .../jcp/xml/dsig/internal/dom/XMLDSigRI.java | 18 +- src/java.xml.crypto/share/legal/santuario.md | 2 +- .../xml/crypto/dsig/GenerationTests.java | 48 ++- 130 files changed, 1337 insertions(+), 418 deletions(-) diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/Init.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/Init.java index a35a4699d82a4..72153164340e4 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/Init.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/Init.java @@ -57,17 +57,22 @@ */ public class Init { - /** The namespace for CONF file **/ + /** + * The namespace for CONF file + **/ public static final String CONF_NS = "http://www.xmlsecurity.org/NS/#configuration"; private static final com.sun.org.slf4j.internal.Logger LOG = - com.sun.org.slf4j.internal.LoggerFactory.getLogger(Init.class); + com.sun.org.slf4j.internal.LoggerFactory.getLogger(Init.class); - /** Field alreadyInitialized */ + /** + * Field alreadyInitialized + */ private static boolean alreadyInitialized = false; /** * Method isInitialized + * * @return true if the library is already initialized. */ public static final synchronized boolean isInitialized() { @@ -76,35 +81,28 @@ public static final synchronized boolean isInitialized() { /** * Method init - * */ public static synchronized void init() { if (alreadyInitialized) { return; } + PrivilegedAction action = () -> { + String cfile = System.getProperty("com.sun.org.apache.xml.internal.security.resource.config"); + if (cfile == null) { + return null; + } + return getResourceAsStream(cfile, Init.class); + }; - @SuppressWarnings("removal") - InputStream is = //NOPMD - AccessController.doPrivileged( - (PrivilegedAction) - () -> { - String cfile = - System.getProperty("com.sun.org.apache.xml.internal.security.resource.config"); - if (cfile == null) { - return null; - } - return getResourceAsStream(cfile, Init.class); - } - ); - if (is == null) { - dynamicInit(); - } else { - fileInit(is); - try { - is.close(); - } catch (IOException ex) { - LOG.warn(ex.getMessage()); + try (@SuppressWarnings("removal") + InputStream is = AccessController.doPrivileged(action)) { + if (is == null) { + dynamicInit(); + } else { + fileInit(is); } + } catch (IOException ex) { + LOG.warn(ex.getMessage(), ex); } alreadyInitialized = true; @@ -412,9 +410,11 @@ private static List getResources(String resourceName, Class callingClass } List ret = new ArrayList<>(); Enumeration urls = new Enumeration() { + @Override public boolean hasMoreElements() { return false; } + @Override public URL nextElement() { return null; } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/JCEMapper.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/JCEMapper.java index 5483f02f127d4..e4c1a30d52545 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/JCEMapper.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/JCEMapper.java @@ -40,7 +40,9 @@ public class JCEMapper { private static Map algorithmsMap = new ConcurrentHashMap<>(); - private static String providerName; + private static String globalProviderName; + + private static final ThreadLocal threadSpecificProviderName = new ThreadLocal<>(); /** * Method register @@ -344,7 +346,10 @@ private static Algorithm getAlgorithm(String algorithmURI) { * @return the default providerId. */ public static String getProviderId() { - return providerName; + if (threadSpecificProviderName.get() != null) { + return threadSpecificProviderName.get(); + } + return globalProviderName; } /** @@ -355,7 +360,18 @@ public static String getProviderId() { */ public static void setProviderId(String provider) { JavaUtils.checkRegisterPermission(); - providerName = provider; + globalProviderName = provider; + } + + /** + * Sets the default Provider for this thread to obtain the security algorithms + * @param threadSpecificProviderName the default providerId. + * @throws SecurityException if a security manager is installed and the + * caller does not have permission to register the JCE algorithm + */ + public static void setThreadSpecificProviderName(String threadSpecificProviderName) { + JavaUtils.checkRegisterPermission(); + JCEMapper.threadSpecificProviderName.set(threadSpecificProviderName); } /** diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/MessageDigestAlgorithm.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/MessageDigestAlgorithm.java index 6c3f500dbe81b..17351f0211e9e 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/MessageDigestAlgorithm.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/MessageDigestAlgorithm.java @@ -256,11 +256,13 @@ public void update(byte[] buf, int offset, int len) { } /** {@inheritDoc} */ + @Override public String getBaseNamespace() { return Constants.SignatureSpecNS; } /** {@inheritDoc} */ + @Override public String getBaseLocalName() { return Constants._TAG_DIGESTMETHOD; } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/SignatureAlgorithm.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/SignatureAlgorithm.java index 0c984d4e0300b..439eefb10dc73 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/SignatureAlgorithm.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/SignatureAlgorithm.java @@ -31,7 +31,11 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import com.sun.org.apache.xml.internal.security.algorithms.implementations.*; +import com.sun.org.apache.xml.internal.security.algorithms.implementations.IntegrityHmac; +import com.sun.org.apache.xml.internal.security.algorithms.implementations.SignatureBaseRSA; +import com.sun.org.apache.xml.internal.security.algorithms.implementations.SignatureDSA; +import com.sun.org.apache.xml.internal.security.algorithms.implementations.SignatureECDSA; +import com.sun.org.apache.xml.internal.security.algorithms.implementations.SignatureEDDSA; import com.sun.org.apache.xml.internal.security.exceptions.AlgorithmAlreadyRegisteredException; import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException; import com.sun.org.apache.xml.internal.security.signature.XMLSignature; @@ -524,6 +528,7 @@ public static void registerDefaultAlgorithms() { * * @return URI of this element */ + @Override public String getBaseNamespace() { return Constants.SignatureSpecNS; } @@ -533,6 +538,7 @@ public String getBaseNamespace() { * * @return Local name */ + @Override public String getBaseLocalName() { return Constants._TAG_SIGNATUREMETHOD; } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/SignatureAlgorithmSpi.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/SignatureAlgorithmSpi.java index a049733c0ad1a..fde070f635452 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/SignatureAlgorithmSpi.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/SignatureAlgorithmSpi.java @@ -22,7 +22,12 @@ */ package com.sun.org.apache.xml.internal.security.algorithms; -import java.security.*; +import java.security.InvalidKeyException; +import java.security.Key; +import java.security.PrivateKey; +import java.security.PublicKey; +import java.security.SecureRandom; +import java.security.Signature; import java.security.spec.AlgorithmParameterSpec; import com.sun.org.apache.xml.internal.security.signature.XMLSignatureException; diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/implementations/ECDSAUtils.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/implementations/ECDSAUtils.java index 510fab21584ec..73e02864bd926 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/implementations/ECDSAUtils.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/implementations/ECDSAUtils.java @@ -28,7 +28,12 @@ import java.io.IOException; import java.math.BigInteger; import java.security.interfaces.ECPublicKey; -import java.security.spec.*; +import java.security.spec.ECField; +import java.security.spec.ECFieldF2m; +import java.security.spec.ECFieldFp; +import java.security.spec.ECParameterSpec; +import java.security.spec.ECPoint; +import java.security.spec.EllipticCurve; import java.util.ArrayList; import java.util.List; diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/implementations/IntegrityHmac.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/implementations/IntegrityHmac.java index fdaf8643279c8..8f833756ff88c 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/implementations/IntegrityHmac.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/implementations/IntegrityHmac.java @@ -90,6 +90,7 @@ public IntegrityHmac(Provider provider) throws XMLSignatureException { * @param params * @throws XMLSignatureException */ + @Override protected void engineSetParameter(AlgorithmParameterSpec params) throws XMLSignatureException { throw new XMLSignatureException("empty", new Object[]{"Incorrect method call"}); } @@ -102,6 +103,7 @@ protected void engineSetParameter(AlgorithmParameterSpec params) throws XMLSigna * @return true if the signature is correct * @throws XMLSignatureException */ + @Override protected boolean engineVerify(byte[] signature) throws XMLSignatureException { try { if (hmacOutputLength != null && hmacOutputLength.length < getDigestLength()) { @@ -124,6 +126,7 @@ protected boolean engineVerify(byte[] signature) throws XMLSignatureException { * @param secretKey * @throws XMLSignatureException */ + @Override protected void engineInitVerify(Key secretKey) throws XMLSignatureException { if (!(secretKey instanceof SecretKey)) { String supplied = null; @@ -150,6 +153,7 @@ protected void engineInitVerify(Key secretKey) throws XMLSignatureException { * @return the result of the {@link java.security.Signature#sign()} method * @throws XMLSignatureException */ + @Override protected byte[] engineSign() throws XMLSignatureException { try { if (hmacOutputLength != null && hmacOutputLength.length < getDigestLength()) { @@ -170,6 +174,7 @@ protected byte[] engineSign() throws XMLSignatureException { * @param secretKey * @throws XMLSignatureException */ + @Override protected void engineInitSign(Key secretKey) throws XMLSignatureException { engineInitSign(secretKey, (AlgorithmParameterSpec)null); } @@ -181,6 +186,7 @@ protected void engineInitSign(Key secretKey) throws XMLSignatureException { * @param algorithmParameterSpec * @throws XMLSignatureException */ + @Override protected void engineInitSign( Key secretKey, AlgorithmParameterSpec algorithmParameterSpec ) throws XMLSignatureException { @@ -213,6 +219,7 @@ protected void engineInitSign( * @param secureRandom * @throws XMLSignatureException */ + @Override protected void engineInitSign(Key secretKey, SecureRandom secureRandom) throws XMLSignatureException { throw new XMLSignatureException("algorithms.CannotUseSecureRandomOnMAC"); @@ -225,6 +232,7 @@ protected void engineInitSign(Key secretKey, SecureRandom secureRandom) * @param input * @throws XMLSignatureException */ + @Override protected void engineUpdate(byte[] input) throws XMLSignatureException { try { this.macAlgorithm.update(input); @@ -240,6 +248,7 @@ protected void engineUpdate(byte[] input) throws XMLSignatureException { * @param input * @throws XMLSignatureException */ + @Override protected void engineUpdate(byte input) throws XMLSignatureException { try { this.macAlgorithm.update(input); @@ -257,6 +266,7 @@ protected void engineUpdate(byte input) throws XMLSignatureException { * @param len * @throws XMLSignatureException */ + @Override protected void engineUpdate(byte[] buf, int offset, int len) throws XMLSignatureException { try { this.macAlgorithm.update(buf, offset, len); @@ -270,6 +280,7 @@ protected void engineUpdate(byte[] buf, int offset, int len) throws XMLSignature * {@inheritDoc} * */ + @Override protected String engineGetJCEAlgorithmString() { return this.macAlgorithm.getAlgorithm(); } @@ -279,6 +290,7 @@ protected String engineGetJCEAlgorithmString() { * * {@inheritDoc} */ + @Override protected String engineGetJCEProviderName() { return this.macAlgorithm.getProvider().getName(); } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/implementations/SignatureBaseRSA.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/implementations/SignatureBaseRSA.java index 5186520729a6f..45dafc3ad3894 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/implementations/SignatureBaseRSA.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/implementations/SignatureBaseRSA.java @@ -31,6 +31,8 @@ import java.security.Signature; import java.security.SignatureException; import java.security.spec.AlgorithmParameterSpec; +import java.security.spec.MGF1ParameterSpec; +import java.security.spec.PSSParameterSpec; import com.sun.org.apache.xml.internal.security.algorithms.JCEMapper; import com.sun.org.apache.xml.internal.security.algorithms.SignatureAlgorithmSpi; @@ -43,8 +45,6 @@ import org.w3c.dom.Text; import javax.xml.crypto.dsig.DigestMethod; -import java.security.spec.MGF1ParameterSpec; -import java.security.spec.PSSParameterSpec; public abstract class SignatureBaseRSA extends SignatureAlgorithmSpi { @@ -65,20 +65,25 @@ public SignatureBaseRSA() throws XMLSignatureException { public SignatureBaseRSA(Provider provider) throws XMLSignatureException { String algorithmID = JCEMapper.translateURItoJCEID(this.engineGetURI()); - LOG.debug("Created SignatureRSA using {}", algorithmID); + this.signatureAlgorithm = getSignature(provider, algorithmID); + LOG.debug("Created SignatureRSA using {0} and provider {1}", + algorithmID, signatureAlgorithm.getProvider()); + } + Signature getSignature(Provider provider, String algorithmID) + throws XMLSignatureException { try { if (provider == null) { String providerId = JCEMapper.getProviderId(); if (providerId == null) { - this.signatureAlgorithm = Signature.getInstance(algorithmID); + return Signature.getInstance(algorithmID); } else { - this.signatureAlgorithm = Signature.getInstance(algorithmID, providerId); + return Signature.getInstance(algorithmID, providerId); } } else { - this.signatureAlgorithm = Signature.getInstance(algorithmID, provider); + return Signature.getInstance(algorithmID, provider); } } catch (NoSuchAlgorithmException | NoSuchProviderException ex) { @@ -88,6 +93,7 @@ public SignatureBaseRSA(Provider provider) throws XMLSignatureException { } /** {@inheritDoc} */ + @Override protected void engineSetParameter(AlgorithmParameterSpec params) throws XMLSignatureException { try { @@ -98,6 +104,7 @@ protected void engineSetParameter(AlgorithmParameterSpec params) } /** {@inheritDoc} */ + @Override protected boolean engineVerify(byte[] signature) throws XMLSignatureException { try { return this.signatureAlgorithm.verify(signature); @@ -107,11 +114,13 @@ protected boolean engineVerify(byte[] signature) throws XMLSignatureException { } /** {@inheritDoc} */ + @Override protected void engineInitVerify(Key publicKey) throws XMLSignatureException { engineInitVerify(publicKey, this.signatureAlgorithm); } /** {@inheritDoc} */ + @Override protected byte[] engineSign() throws XMLSignatureException { try { return this.signatureAlgorithm.sign(); @@ -121,17 +130,20 @@ protected byte[] engineSign() throws XMLSignatureException { } /** {@inheritDoc} */ + @Override protected void engineInitSign(Key privateKey, SecureRandom secureRandom) throws XMLSignatureException { engineInitSign(privateKey, secureRandom, this.signatureAlgorithm); } /** {@inheritDoc} */ + @Override protected void engineInitSign(Key privateKey) throws XMLSignatureException { engineInitSign(privateKey, (SecureRandom)null); } /** {@inheritDoc} */ + @Override protected void engineUpdate(byte[] input) throws XMLSignatureException { try { this.signatureAlgorithm.update(input); @@ -141,6 +153,7 @@ protected void engineUpdate(byte[] input) throws XMLSignatureException { } /** {@inheritDoc} */ + @Override protected void engineUpdate(byte input) throws XMLSignatureException { try { this.signatureAlgorithm.update(input); @@ -150,6 +163,7 @@ protected void engineUpdate(byte input) throws XMLSignatureException { } /** {@inheritDoc} */ + @Override protected void engineUpdate(byte[] buf, int offset, int len) throws XMLSignatureException { try { this.signatureAlgorithm.update(buf, offset, len); @@ -159,22 +173,26 @@ protected void engineUpdate(byte[] buf, int offset, int len) throws XMLSignature } /** {@inheritDoc} */ + @Override protected String engineGetJCEAlgorithmString() { return this.signatureAlgorithm.getAlgorithm(); } /** {@inheritDoc} */ + @Override protected String engineGetJCEProviderName() { return this.signatureAlgorithm.getProvider().getName(); } /** {@inheritDoc} */ + @Override protected void engineSetHMACOutputLength(int HMACOutputLength) throws XMLSignatureException { throw new XMLSignatureException("algorithms.HMACOutputLengthOnlyForHMAC"); } /** {@inheritDoc} */ + @Override protected void engineInitSign( Key signingKey, AlgorithmParameterSpec algorithmParameterSpec ) throws XMLSignatureException { @@ -356,10 +374,53 @@ public String engineGetURI() { } } + public abstract static class SignatureBaseRSAPSS extends SignatureBaseRSA { + + public SignatureBaseRSAPSS() throws XMLSignatureException { + super(); + } + + public SignatureBaseRSAPSS(Provider provider) throws XMLSignatureException { + super(provider); + } + + @Override + Signature getSignature(Provider provider, String algorithmID) + throws XMLSignatureException { + try { + Signature sig; + if (provider == null) { + String providerId = JCEMapper.getProviderId(); + if (providerId == null) { + sig = Signature.getInstance("RSASSA-PSS"); + } else { + sig = Signature.getInstance("RSASSA-PSS", providerId); + } + } else { + sig = Signature.getInstance("RSASSA-PSS", provider); + } + try { + sig.setParameter(getPSSParameterSpec()); + } catch (InvalidAlgorithmParameterException e) { + throw new NoSuchAlgorithmException("Should not happen", e); + } + return sig; + } catch (NoSuchAlgorithmException | NoSuchProviderException e) { + return super.getSignature(provider, algorithmID); + } + } + + abstract PSSParameterSpec getPSSParameterSpec(); + } + /** * Class SignatureRSASHA1MGF1 */ - public static class SignatureRSASHA1MGF1 extends SignatureBaseRSA { + public static class SignatureRSASHA1MGF1 extends SignatureBaseRSAPSS { + + private static final PSSParameterSpec SHA1_MGF1_PARAMS + = new PSSParameterSpec("SHA-1", "MGF1", MGF1ParameterSpec.SHA1, + 20, PSSParameterSpec.TRAILER_FIELD_BC); /** * Constructor SignatureRSASHA1MGF1 @@ -379,12 +440,21 @@ public SignatureRSASHA1MGF1(Provider provider) throws XMLSignatureException { public String engineGetURI() { return XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA1_MGF1; } + + @Override + public PSSParameterSpec getPSSParameterSpec() { + return SHA1_MGF1_PARAMS; + } } /** * Class SignatureRSASHA224MGF1 */ - public static class SignatureRSASHA224MGF1 extends SignatureBaseRSA { + public static class SignatureRSASHA224MGF1 extends SignatureBaseRSAPSS { + + private static final PSSParameterSpec SHA224_MGF1_PARAMS + = new PSSParameterSpec("SHA-224", "MGF1", MGF1ParameterSpec.SHA224, + 28, PSSParameterSpec.TRAILER_FIELD_BC); /** * Constructor SignatureRSASHA224MGF1 @@ -404,12 +474,21 @@ public SignatureRSASHA224MGF1(Provider provider) throws XMLSignatureException { public String engineGetURI() { return XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA224_MGF1; } + + @Override + public PSSParameterSpec getPSSParameterSpec() { + return SHA224_MGF1_PARAMS; + } } /** * Class SignatureRSASHA256MGF1 */ - public static class SignatureRSASHA256MGF1 extends SignatureBaseRSA { + public static class SignatureRSASHA256MGF1 extends SignatureBaseRSAPSS { + + private static final PSSParameterSpec SHA256_MGF1_PARAMS + = new PSSParameterSpec("SHA-256", "MGF1", MGF1ParameterSpec.SHA256, + 32, PSSParameterSpec.TRAILER_FIELD_BC); /** * Constructor SignatureRSASHA256MGF1 @@ -429,12 +508,21 @@ public SignatureRSASHA256MGF1(Provider provider) throws XMLSignatureException { public String engineGetURI() { return XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA256_MGF1; } + + @Override + public PSSParameterSpec getPSSParameterSpec() { + return SHA256_MGF1_PARAMS; + } } /** * Class SignatureRSASHA384MGF1 */ - public static class SignatureRSASHA384MGF1 extends SignatureBaseRSA { + public static class SignatureRSASHA384MGF1 extends SignatureBaseRSAPSS { + + private static final PSSParameterSpec SHA384_MGF1_PARAMS + = new PSSParameterSpec("SHA-384", "MGF1", MGF1ParameterSpec.SHA384, + 48, PSSParameterSpec.TRAILER_FIELD_BC); /** * Constructor SignatureRSASHA384MGF1 @@ -454,12 +542,21 @@ public SignatureRSASHA384MGF1(Provider provider) throws XMLSignatureException { public String engineGetURI() { return XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA384_MGF1; } + + @Override + public PSSParameterSpec getPSSParameterSpec() { + return SHA384_MGF1_PARAMS; + } } /** * Class SignatureRSASHA512MGF1 */ - public static class SignatureRSASHA512MGF1 extends SignatureBaseRSA { + public static class SignatureRSASHA512MGF1 extends SignatureBaseRSAPSS { + + private static final PSSParameterSpec SHA512_MGF1_PARAMS + = new PSSParameterSpec("SHA-512", "MGF1", MGF1ParameterSpec.SHA512, + 64, PSSParameterSpec.TRAILER_FIELD_BC); /** * Constructor SignatureRSASHA512MGF1 @@ -479,12 +576,22 @@ public SignatureRSASHA512MGF1(Provider provider) throws XMLSignatureException { public String engineGetURI() { return XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA512_MGF1; } + + @Override + public PSSParameterSpec getPSSParameterSpec() { + return SHA512_MGF1_PARAMS; + } } /** * Class SignatureRSA3_SHA224MGF1 */ - public static class SignatureRSASHA3_224MGF1 extends SignatureBaseRSA { + public static class SignatureRSASHA3_224MGF1 extends SignatureBaseRSAPSS { + + private static final PSSParameterSpec SHA3_224_MGF1_PARAMS + = new PSSParameterSpec("SHA3-224", "MGF1", + new MGF1ParameterSpec("SHA3-224"), + 28, PSSParameterSpec.TRAILER_FIELD_BC); /** * Constructor SignatureRSASHA3_224MGF1 @@ -504,12 +611,22 @@ public SignatureRSASHA3_224MGF1(Provider provider) throws XMLSignatureException public String engineGetURI() { return XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA3_224_MGF1; } + + @Override + public PSSParameterSpec getPSSParameterSpec() { + return SHA3_224_MGF1_PARAMS; + } } /** * Class SignatureRSA3_SHA256MGF1 */ - public static class SignatureRSASHA3_256MGF1 extends SignatureBaseRSA { + public static class SignatureRSASHA3_256MGF1 extends SignatureBaseRSAPSS { + + private static final PSSParameterSpec SHA3_256_MGF1_PARAMS + = new PSSParameterSpec("SHA3-256", "MGF1", + new MGF1ParameterSpec("SHA3-256"), + 32, PSSParameterSpec.TRAILER_FIELD_BC); /** * Constructor SignatureRSASHA3_256MGF1 @@ -529,12 +646,22 @@ public SignatureRSASHA3_256MGF1(Provider provider) throws XMLSignatureException public String engineGetURI() { return XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA3_256_MGF1; } + + @Override + public PSSParameterSpec getPSSParameterSpec() { + return SHA3_256_MGF1_PARAMS; + } } /** * Class SignatureRSA3_SHA384MGF1 */ - public static class SignatureRSASHA3_384MGF1 extends SignatureBaseRSA { + public static class SignatureRSASHA3_384MGF1 extends SignatureBaseRSAPSS { + + private static final PSSParameterSpec SHA3_384_MGF1_PARAMS + = new PSSParameterSpec("SHA3-384", "MGF1", + new MGF1ParameterSpec("SHA3-384"), + 48, PSSParameterSpec.TRAILER_FIELD_BC); /** * Constructor SignatureRSASHA3_384MGF1 @@ -554,12 +681,22 @@ public SignatureRSASHA3_384MGF1(Provider provider) throws XMLSignatureException public String engineGetURI() { return XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA3_384_MGF1; } + + @Override + public PSSParameterSpec getPSSParameterSpec() { + return SHA3_384_MGF1_PARAMS; + } } /** * Class SignatureRSASHA3_512MGF1 */ - public static class SignatureRSASHA3_512MGF1 extends SignatureBaseRSA { + public static class SignatureRSASHA3_512MGF1 extends SignatureBaseRSAPSS { + + private static final PSSParameterSpec SHA3_512_MGF1_PARAMS + = new PSSParameterSpec("SHA3-512", "MGF1", + new MGF1ParameterSpec("SHA3-512"), + 64, PSSParameterSpec.TRAILER_FIELD_BC); /** * Constructor SignatureRSASHA3_512MGF1 @@ -579,10 +716,15 @@ public SignatureRSASHA3_512MGF1(Provider provider) throws XMLSignatureException public String engineGetURI() { return XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA3_512_MGF1; } + + @Override + public PSSParameterSpec getPSSParameterSpec() { + return SHA3_512_MGF1_PARAMS; + } } public static class SignatureRSASSAPSS extends SignatureBaseRSA { - PSSParameterSpec pssParameterSpec; + private PSSParameterSpec pssParameterSpec; public enum DigestAlgorithm { SHA224("SHA-224", DigestMethod.SHA224, 28), diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/implementations/SignatureDSA.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/implementations/SignatureDSA.java index 0f9f8463252a8..c2b0d05763df7 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/implementations/SignatureDSA.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/implementations/SignatureDSA.java @@ -60,6 +60,7 @@ public class SignatureDSA extends SignatureAlgorithmSpi { * * {@inheritDoc} */ + @Override protected String engineGetURI() { return XMLSignature.ALGO_ID_SIGNATURE_DSA; } @@ -100,6 +101,7 @@ public SignatureDSA(Provider provider) throws XMLSignatureException { /** * {@inheritDoc} */ + @Override protected void engineSetParameter(AlgorithmParameterSpec params) throws XMLSignatureException { try { @@ -112,6 +114,7 @@ protected void engineSetParameter(AlgorithmParameterSpec params) /** * {@inheritDoc} */ + @Override protected boolean engineVerify(byte[] signature) throws XMLSignatureException { try { @@ -130,6 +133,7 @@ protected boolean engineVerify(byte[] signature) /** * {@inheritDoc} */ + @Override protected void engineInitVerify(Key publicKey) throws XMLSignatureException { engineInitVerify(publicKey, this.signatureAlgorithm); size = ((DSAKey)publicKey).getParams().getQ().bitLength(); @@ -138,6 +142,7 @@ protected void engineInitVerify(Key publicKey) throws XMLSignatureException { /** * {@inheritDoc} */ + @Override protected byte[] engineSign() throws XMLSignatureException { try { byte[] jcebytes = this.signatureAlgorithm.sign(); @@ -151,6 +156,7 @@ protected byte[] engineSign() throws XMLSignatureException { /** * {@inheritDoc} */ + @Override protected void engineInitSign(Key privateKey, SecureRandom secureRandom) throws XMLSignatureException { engineInitSign(privateKey, secureRandom, this.signatureAlgorithm); @@ -160,6 +166,7 @@ protected void engineInitSign(Key privateKey, SecureRandom secureRandom) /** * {@inheritDoc} */ + @Override protected void engineInitSign(Key privateKey) throws XMLSignatureException { engineInitSign(privateKey, (SecureRandom)null); } @@ -167,6 +174,7 @@ protected void engineInitSign(Key privateKey) throws XMLSignatureException { /** * {@inheritDoc} */ + @Override protected void engineUpdate(byte[] input) throws XMLSignatureException { try { this.signatureAlgorithm.update(input); @@ -178,6 +186,7 @@ protected void engineUpdate(byte[] input) throws XMLSignatureException { /** * {@inheritDoc} */ + @Override protected void engineUpdate(byte input) throws XMLSignatureException { try { this.signatureAlgorithm.update(input); @@ -189,6 +198,7 @@ protected void engineUpdate(byte input) throws XMLSignatureException { /** * {@inheritDoc} */ + @Override protected void engineUpdate(byte[] buf, int offset, int len) throws XMLSignatureException { try { this.signatureAlgorithm.update(buf, offset, len); @@ -202,6 +212,7 @@ protected void engineUpdate(byte[] buf, int offset, int len) throws XMLSignature * * {@inheritDoc} */ + @Override protected String engineGetJCEAlgorithmString() { return this.signatureAlgorithm.getAlgorithm(); } @@ -211,6 +222,7 @@ protected String engineGetJCEAlgorithmString() { * * {@inheritDoc} */ + @Override protected String engineGetJCEProviderName() { return this.signatureAlgorithm.getProvider().getName(); } @@ -221,6 +233,7 @@ protected String engineGetJCEProviderName() { * @param HMACOutputLength * @throws XMLSignatureException */ + @Override protected void engineSetHMACOutputLength(int HMACOutputLength) throws XMLSignatureException { throw new XMLSignatureException("algorithms.HMACOutputLengthOnlyForHMAC"); } @@ -232,6 +245,7 @@ protected void engineSetHMACOutputLength(int HMACOutputLength) throws XMLSignatu * @param algorithmParameterSpec * @throws XMLSignatureException */ + @Override protected void engineInitSign( Key signingKey, AlgorithmParameterSpec algorithmParameterSpec ) throws XMLSignatureException { diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/implementations/SignatureECDSA.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/implementations/SignatureECDSA.java index 381ead9ec2efb..75a88b8eb1332 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/implementations/SignatureECDSA.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/implementations/SignatureECDSA.java @@ -26,7 +26,14 @@ package com.sun.org.apache.xml.internal.security.algorithms.implementations; import java.io.IOException; -import java.security.*; +import java.security.InvalidAlgorithmParameterException; +import java.security.Key; +import java.security.NoSuchAlgorithmException; +import java.security.NoSuchProviderException; +import java.security.Provider; +import java.security.SecureRandom; +import java.security.Signature; +import java.security.SignatureException; import java.security.interfaces.ECPrivateKey; import java.security.spec.AlgorithmParameterSpec; @@ -118,6 +125,7 @@ public SignatureECDSA(Provider provider) throws XMLSignatureException { } /** {@inheritDoc} */ + @Override protected void engineSetParameter(AlgorithmParameterSpec params) throws XMLSignatureException { try { @@ -128,6 +136,7 @@ protected void engineSetParameter(AlgorithmParameterSpec params) } /** {@inheritDoc} */ + @Override protected boolean engineVerify(byte[] signature) throws XMLSignatureException { try { byte[] jcebytes = SignatureECDSA.convertXMLDSIGtoASN1(signature); @@ -143,11 +152,13 @@ protected boolean engineVerify(byte[] signature) throws XMLSignatureException { } /** {@inheritDoc} */ + @Override protected void engineInitVerify(Key publicKey) throws XMLSignatureException { engineInitVerify(publicKey, signatureAlgorithm); } /** {@inheritDoc} */ + @Override protected byte[] engineSign() throws XMLSignatureException { try { byte[] jcebytes = this.signatureAlgorithm.sign(); @@ -158,6 +169,7 @@ protected byte[] engineSign() throws XMLSignatureException { } /** {@inheritDoc} */ + @Override protected void engineInitSign(Key privateKey, SecureRandom secureRandom) throws XMLSignatureException { if (privateKey instanceof ECPrivateKey) { @@ -169,11 +181,13 @@ protected void engineInitSign(Key privateKey, SecureRandom secureRandom) } /** {@inheritDoc} */ + @Override protected void engineInitSign(Key privateKey) throws XMLSignatureException { engineInitSign(privateKey, (SecureRandom)null); } /** {@inheritDoc} */ + @Override protected void engineUpdate(byte[] input) throws XMLSignatureException { try { this.signatureAlgorithm.update(input); @@ -183,6 +197,7 @@ protected void engineUpdate(byte[] input) throws XMLSignatureException { } /** {@inheritDoc} */ + @Override protected void engineUpdate(byte input) throws XMLSignatureException { try { this.signatureAlgorithm.update(input); @@ -192,6 +207,7 @@ protected void engineUpdate(byte input) throws XMLSignatureException { } /** {@inheritDoc} */ + @Override protected void engineUpdate(byte[] buf, int offset, int len) throws XMLSignatureException { try { this.signatureAlgorithm.update(buf, offset, len); @@ -201,22 +217,26 @@ protected void engineUpdate(byte[] buf, int offset, int len) throws XMLSignature } /** {@inheritDoc} */ + @Override protected String engineGetJCEAlgorithmString() { return this.signatureAlgorithm.getAlgorithm(); } /** {@inheritDoc} */ + @Override protected String engineGetJCEProviderName() { return this.signatureAlgorithm.getProvider().getName(); } /** {@inheritDoc} */ + @Override protected void engineSetHMACOutputLength(int HMACOutputLength) throws XMLSignatureException { throw new XMLSignatureException("algorithms.HMACOutputLengthOnlyForHMAC"); } /** {@inheritDoc} */ + @Override protected void engineInitSign( Key signingKey, AlgorithmParameterSpec algorithmParameterSpec ) throws XMLSignatureException { diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/implementations/SignatureEDDSA.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/implementations/SignatureEDDSA.java index 03eb36e076c27..c297d96faeab5 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/implementations/SignatureEDDSA.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/algorithms/implementations/SignatureEDDSA.java @@ -22,16 +22,22 @@ */ package com.sun.org.apache.xml.internal.security.algorithms.implementations; +import java.security.InvalidAlgorithmParameterException; +import java.security.Key; +import java.security.NoSuchAlgorithmException; +import java.security.NoSuchProviderException; +import java.security.Provider; +import java.security.SecureRandom; +import java.security.Signature; +import java.security.SignatureException; +import java.security.spec.AlgorithmParameterSpec; + import com.sun.org.apache.xml.internal.security.algorithms.JCEMapper; import com.sun.org.apache.xml.internal.security.algorithms.SignatureAlgorithmSpi; import com.sun.org.apache.xml.internal.security.signature.XMLSignature; import com.sun.org.apache.xml.internal.security.signature.XMLSignatureException; import com.sun.org.apache.xml.internal.security.utils.XMLUtils; -import java.io.IOException; -import java.security.*; -import java.security.spec.AlgorithmParameterSpec; - /** * */ @@ -77,6 +83,7 @@ public SignatureEDDSA(Provider provider) throws XMLSignatureException { } /** {@inheritDoc} */ + @Override protected void engineSetParameter(AlgorithmParameterSpec params) throws XMLSignatureException { try { @@ -87,6 +94,7 @@ protected void engineSetParameter(AlgorithmParameterSpec params) } /** {@inheritDoc} */ + @Override protected boolean engineVerify(byte[] signature) throws XMLSignatureException { try { @@ -101,11 +109,13 @@ protected boolean engineVerify(byte[] signature) throws XMLSignatureException { } /** {@inheritDoc} */ + @Override protected void engineInitVerify(Key publicKey) throws XMLSignatureException { engineInitVerify(publicKey, signatureAlgorithm); } /** {@inheritDoc} */ + @Override protected byte[] engineSign() throws XMLSignatureException { try { return this.signatureAlgorithm.sign(); @@ -115,6 +125,7 @@ protected byte[] engineSign() throws XMLSignatureException { } /** {@inheritDoc} */ + @Override protected void engineInitSign(Key privateKey, SecureRandom secureRandom) throws XMLSignatureException { @@ -122,11 +133,13 @@ protected void engineInitSign(Key privateKey, SecureRandom secureRandom) } /** {@inheritDoc} */ + @Override protected void engineInitSign(Key privateKey) throws XMLSignatureException { engineInitSign(privateKey, (SecureRandom)null); } /** {@inheritDoc} */ + @Override protected void engineUpdate(byte[] input) throws XMLSignatureException { try { this.signatureAlgorithm.update(input); @@ -136,6 +149,7 @@ protected void engineUpdate(byte[] input) throws XMLSignatureException { } /** {@inheritDoc} */ + @Override protected void engineUpdate(byte input) throws XMLSignatureException { try { this.signatureAlgorithm.update(input); @@ -145,6 +159,7 @@ protected void engineUpdate(byte input) throws XMLSignatureException { } /** {@inheritDoc} */ + @Override protected void engineUpdate(byte[] buf, int offset, int len) throws XMLSignatureException { try { this.signatureAlgorithm.update(buf, offset, len); @@ -154,22 +169,26 @@ protected void engineUpdate(byte[] buf, int offset, int len) throws XMLSignature } /** {@inheritDoc} */ + @Override protected String engineGetJCEAlgorithmString() { return this.signatureAlgorithm.getAlgorithm(); } /** {@inheritDoc} */ + @Override protected String engineGetJCEProviderName() { return this.signatureAlgorithm.getProvider().getName(); } /** {@inheritDoc} */ + @Override protected void engineSetHMACOutputLength(int HMACOutputLength) throws XMLSignatureException { throw new XMLSignatureException("algorithms.HMACOutputLengthOnlyForHMAC"); } /** {@inheritDoc} */ + @Override protected void engineInitSign( Key signingKey, AlgorithmParameterSpec algorithmParameterSpec ) throws XMLSignatureException { diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/Canonicalizer.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/Canonicalizer.java index 71e2d976b5735..4e639339523e1 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/Canonicalizer.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/Canonicalizer.java @@ -122,7 +122,7 @@ private Canonicalizer(String algorithmURI) throws InvalidCanonicalizerException * @return a Canonicalizer instance ready for the job * @throws InvalidCanonicalizerException */ - public static final Canonicalizer getInstance(String algorithmURI) + public static Canonicalizer getInstance(String algorithmURI) throws InvalidCanonicalizerException { return new Canonicalizer(algorithmURI); } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/helper/AttrCompare.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/helper/AttrCompare.java index 5ac239cd3a3b3..cbd541e63b055 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/helper/AttrCompare.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/helper/AttrCompare.java @@ -22,11 +22,12 @@ */ package com.sun.org.apache.xml.internal.security.c14n.helper; -import com.sun.org.apache.xml.internal.security.utils.Constants; -import org.w3c.dom.Attr; import java.io.Serializable; import java.util.Comparator; +import com.sun.org.apache.xml.internal.security.utils.Constants; +import org.w3c.dom.Attr; + /** * Compares two attributes based on the C14n specification. * @@ -69,6 +70,7 @@ public class AttrCompare implements Comparator, Serializable { * obj0 is less than, equal to, or greater than obj1 * */ + @Override public int compare(Attr attr0, Attr attr1) { String namespaceURI0 = attr0.getNamespaceURI(); String namespaceURI1 = attr1.getNamespaceURI(); diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer11_OmitComments.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer11_OmitComments.java index 867faad7a8d5b..2f8254449f804 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer11_OmitComments.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer11_OmitComments.java @@ -32,6 +32,7 @@ public Canonicalizer11_OmitComments() { super(false, true); } + @Override public final String engineGetURI() { return Canonicalizer.ALGO_ID_C14N11_OMIT_COMMENTS; } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer11_WithComments.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer11_WithComments.java index b4ded12429f47..181e559f5a172 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer11_WithComments.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer11_WithComments.java @@ -32,6 +32,7 @@ public Canonicalizer11_WithComments() { super(true, true); } + @Override public final String engineGetURI() { return Canonicalizer.ALGO_ID_C14N11_WITH_COMMENTS; } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315.java index f0cd610b3209a..6b6fda395c9f4 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315.java @@ -83,6 +83,7 @@ public Canonicalizer20010315(boolean includeComments, boolean c14n11) { * @param writer OutputStream to write the canonicalization result * @throws CanonicalizationException always */ + @Override public void engineCanonicalizeXPathNodeSet(Set xpathNodeSet, String inclusiveNamespaces, OutputStream writer) throws CanonicalizationException { @@ -98,6 +99,7 @@ public void engineCanonicalizeXPathNodeSet(Set xpathNodeSet, String inclus * @param writer OutputStream to write the canonicalization result * @throws CanonicalizationException */ + @Override public void engineCanonicalizeSubTree(Node rootNode, String inclusiveNamespaces, OutputStream writer) throws CanonicalizationException { @@ -113,6 +115,7 @@ public void engineCanonicalizeSubTree(Node rootNode, String inclusiveNamespaces, * @param writer OutputStream to write the canonicalization result * @throws CanonicalizationException */ + @Override public void engineCanonicalizeSubTree( Node rootNode, String inclusiveNamespaces, boolean propagateDefaultNamespace, OutputStream writer) throws CanonicalizationException { @@ -297,6 +300,7 @@ protected void outputAttributes(Element element, NameSpaceSymbTable ns, } } + @Override protected void circumventBugIfNeeded(XMLSignatureInput input) throws XMLParserException, IOException { if (!input.isNeedsToBeExpanded()) { diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315Excl.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315Excl.java index b7c543e583a42..44323692ee723 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315Excl.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315Excl.java @@ -82,6 +82,7 @@ public Canonicalizer20010315Excl(boolean includeComments) { * @param writer OutputStream to write the canonicalization result * @throws CanonicalizationException */ + @Override public void engineCanonicalizeSubTree(Node rootNode, OutputStream writer) throws CanonicalizationException { engineCanonicalizeSubTree(rootNode, "", null, writer); @@ -95,6 +96,7 @@ public void engineCanonicalizeSubTree(Node rootNode, OutputStream writer) * @param writer OutputStream to write the canonicalization result * @throws CanonicalizationException */ + @Override public void engineCanonicalizeSubTree( Node rootNode, String inclusiveNamespaces, OutputStream writer ) throws CanonicalizationException { @@ -110,6 +112,7 @@ public void engineCanonicalizeSubTree( * @param writer OutputStream to write the canonicalization result * @throws CanonicalizationException */ + @Override public void engineCanonicalizeSubTree( Node rootNode, String inclusiveNamespaces, boolean propagateDefaultNamespace, OutputStream writer ) throws CanonicalizationException { @@ -155,6 +158,7 @@ public void engineCanonicalize( * @param writer OutputStream to write the canonicalization result * @throws CanonicalizationException */ + @Override public void engineCanonicalizeXPathNodeSet( Set xpathNodeSet, String inclusiveNamespaces, OutputStream writer ) throws CanonicalizationException { @@ -336,6 +340,7 @@ protected void outputAttributes(Element element, NameSpaceSymbTable ns, } } + @Override protected void circumventBugIfNeeded(XMLSignatureInput input) throws XMLParserException, IOException { if (!input.isNeedsToBeExpanded() || inclusiveNSSet.isEmpty()) { diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315ExclOmitComments.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315ExclOmitComments.java index df9f88a8386b1..ab6a65ccabc47 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315ExclOmitComments.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315ExclOmitComments.java @@ -34,6 +34,7 @@ public Canonicalizer20010315ExclOmitComments() { } /** {@inheritDoc} */ + @Override public final String engineGetURI() { return Canonicalizer.ALGO_ID_C14N_EXCL_OMIT_COMMENTS; } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315ExclWithComments.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315ExclWithComments.java index 6b80e68525ee8..054343005ff53 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315ExclWithComments.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315ExclWithComments.java @@ -38,6 +38,7 @@ public Canonicalizer20010315ExclWithComments() { } /** {@inheritDoc} */ + @Override public final String engineGetURI() { return Canonicalizer.ALGO_ID_C14N_EXCL_WITH_COMMENTS; } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315OmitComments.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315OmitComments.java index 6615436467fb5..46f44362d8c0f 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315OmitComments.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315OmitComments.java @@ -37,6 +37,7 @@ public Canonicalizer20010315OmitComments() { } /** {@inheritDoc} */ + @Override public final String engineGetURI() { return Canonicalizer.ALGO_ID_C14N_OMIT_COMMENTS; } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315WithComments.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315WithComments.java index 23dd3496da561..54742c6b80e74 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315WithComments.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315WithComments.java @@ -36,6 +36,7 @@ public Canonicalizer20010315WithComments() { } /** {@inheritDoc} */ + @Override public final String engineGetURI() { return Canonicalizer.ALGO_ID_C14N_WITH_COMMENTS; } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/CanonicalizerBase.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/CanonicalizerBase.java index d57a947dc0d4b..c1f499078fa63 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/CanonicalizerBase.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/CanonicalizerBase.java @@ -107,6 +107,7 @@ protected CanonicalizerBase(boolean includeComments) { * @param writer OutputStream to write the canonicalization result * @throws CanonicalizationException */ + @Override public void engineCanonicalizeSubTree(Node rootNode, OutputStream writer) throws CanonicalizationException { engineCanonicalizeSubTree(rootNode, (Node)null, writer); @@ -119,6 +120,7 @@ public void engineCanonicalizeSubTree(Node rootNode, OutputStream writer) * @param writer OutputStream to write the canonicalization result * @throws CanonicalizationException */ + @Override public void engineCanonicalizeXPathNodeSet(Set xpathNodeSet, OutputStream writer) throws CanonicalizationException { this.xpathNodeSet = xpathNodeSet; @@ -457,8 +459,7 @@ private void canonicalizeXPathNodeSet(Node currentNode, Node endnode, OutputStre } while(true); } - protected int isVisibleDO(Node currentNode, int level) - throws CanonicalizationException { + protected int isVisibleDO(Node currentNode, int level) throws CanonicalizationException { if (nodeFilter != null) { for (NodeFilter filter : nodeFilter) { try { @@ -477,8 +478,7 @@ protected int isVisibleDO(Node currentNode, int level) return 1; } - protected int isVisibleInt(Node currentNode) - throws CanonicalizationException { + protected int isVisibleInt(Node currentNode) throws CanonicalizationException { if (nodeFilter != null) { for (NodeFilter filter : nodeFilter) { try { diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/CanonicalizerPhysical.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/CanonicalizerPhysical.java index 66ad12029fc0d..c0756d5e09c4a 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/CanonicalizerPhysical.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/CanonicalizerPhysical.java @@ -68,6 +68,7 @@ public CanonicalizerPhysical() { * @param writer OutputStream to write the canonicalization result * @throws CanonicalizationException always */ + @Override public void engineCanonicalizeXPathNodeSet(Set xpathNodeSet, String inclusiveNamespaces, OutputStream writer) throws CanonicalizationException { @@ -83,6 +84,7 @@ public void engineCanonicalizeXPathNodeSet(Set xpathNodeSet, String inclus * @param writer OutputStream to write the canonicalization result * @throws CanonicalizationException */ + @Override public void engineCanonicalizeSubTree(Node rootNode, String inclusiveNamespaces, OutputStream writer) throws CanonicalizationException { @@ -98,6 +100,7 @@ public void engineCanonicalizeSubTree(Node rootNode, String inclusiveNamespaces, * @param writer OutputStream to write the canonicalization result * @throws CanonicalizationException */ + @Override public void engineCanonicalizeSubTree( Node rootNode, String inclusiveNamespaces, boolean propagateDefaultNamespace, OutputStream writer) throws CanonicalizationException { @@ -165,6 +168,7 @@ protected void handleParent(Element e, NameSpaceSymbTable ns) { } /** {@inheritDoc} */ + @Override public final String engineGetURI() { return Canonicalizer.ALGO_ID_C14N_PHYSICAL; } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/NameSpaceSymbTable.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/NameSpaceSymbTable.java index 2ffe680595793..290ff35ea6103 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/NameSpaceSymbTable.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/NameSpaceSymbTable.java @@ -26,7 +26,6 @@ import java.util.Collection; import java.util.List; - import org.w3c.dom.Attr; import org.w3c.dom.Node; @@ -74,16 +73,16 @@ public NameSpaceSymbTable() { * @param result the list where to fill the unrendered xmlns definitions. **/ public void getUnrenderedNodes(Collection result) { - for (NameSpaceSymbEntry n : symb.entrySet()) { + for (NameSpaceSymbEntry nsEntry : symb.entrySet()) { //put them rendered? - if (!n.rendered && n.n != null) { - n = n.clone(); + if (!nsEntry.rendered && nsEntry.n != null) { + nsEntry = nsEntry.clone(); needsClone(); - symb.put(n.prefix, n); - n.lastrendered = n.uri; - n.rendered = true; + symb.put(nsEntry.prefix, nsEntry); + nsEntry.lastrendered = nsEntry.uri; + nsEntry.rendered = true; - result.add(n.n); + result.add(nsEntry.n); } } } @@ -311,6 +310,7 @@ class NameSpaceSymbEntry implements Cloneable { } /** {@inheritDoc} */ + @Override public NameSpaceSymbEntry clone() { //NOPMD try { return (NameSpaceSymbEntry)super.clone(); @@ -344,9 +344,9 @@ void put(String key, NameSpaceSymbEntry value) { List entrySet() { List a = new ArrayList<>(); - for (int i = 0;i < entries.length;i++) { - if (entries[i] != null && entries[i].uri.length() != 0) { - a.add(entries[i]); + for (NameSpaceSymbEntry nsEntry : entries) { + if (nsEntry != null && !nsEntry.uri.isEmpty()) { + a.add(nsEntry); } } return a; diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/exceptions/XMLSecurityException.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/exceptions/XMLSecurityException.java index 98764012ea789..18314073d512d 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/exceptions/XMLSecurityException.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/exceptions/XMLSecurityException.java @@ -160,6 +160,7 @@ public String getMsgID() { } /** {@inheritDoc} */ + @Override public String toString() { String s = this.getClass().getName(); String message = super.getLocalizedMessage(); @@ -181,6 +182,7 @@ public String toString() { * Method printStackTrace * */ + @Override public void printStackTrace() { synchronized (System.err) { super.printStackTrace(System.err); diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/KeyInfo.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/KeyInfo.java index 519df28b81413..62f25d1298daf 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/KeyInfo.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/KeyInfo.java @@ -1184,6 +1184,7 @@ public void addStorageResolver(StorageResolver storageResolver) { /** {@inheritDoc} */ + @Override public String getBaseLocalName() { return Constants._TAG_KEYINFO; } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/DEREncodedKeyValue.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/DEREncodedKeyValue.java index 6a727b2c719c3..823a50366801f 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/DEREncodedKeyValue.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/DEREncodedKeyValue.java @@ -98,6 +98,7 @@ public String getId() { } /** {@inheritDoc} */ + @Override public String getBaseLocalName() { return Constants._TAG_DERENCODEDKEYVALUE; } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/KeyInfoReference.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/KeyInfoReference.java index 89e95dec431f8..66ef3e36c8430 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/KeyInfoReference.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/KeyInfoReference.java @@ -95,6 +95,7 @@ public String getId() { } /** {@inheritDoc} */ + @Override public String getBaseLocalName() { return Constants._TAG_KEYINFOREFERENCE; } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/KeyName.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/KeyName.java index c098cfa8d1ffb..45c18b63014ec 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/KeyName.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/KeyName.java @@ -65,6 +65,7 @@ public String getKeyName() { } /** {@inheritDoc} */ + @Override public String getBaseLocalName() { return Constants._TAG_KEYNAME; } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/KeyValue.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/KeyValue.java index d30f504cf29e9..ee999e6578351 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/KeyValue.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/KeyValue.java @@ -160,6 +160,7 @@ public PublicKey getPublicKey() throws XMLSecurityException { } /** {@inheritDoc} */ + @Override public String getBaseLocalName() { return Constants._TAG_KEYVALUE; } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/MgmtData.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/MgmtData.java index 53fcf0f89543f..affe29c32764b 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/MgmtData.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/MgmtData.java @@ -66,6 +66,7 @@ public String getMgmtData() { } /** {@inheritDoc} */ + @Override public String getBaseLocalName() { return Constants._TAG_MGMTDATA; } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/PGPData.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/PGPData.java index 27e2550f4ddd4..240bf48a03b6c 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/PGPData.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/PGPData.java @@ -44,6 +44,7 @@ public PGPData(Element element, String baseURI) throws XMLSecurityException { } /** {@inheritDoc} */ + @Override public String getBaseLocalName() { return Constants._TAG_PGPDATA; } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/RetrievalMethod.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/RetrievalMethod.java index 82a949d34d3ba..84054ddd74540 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/RetrievalMethod.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/RetrievalMethod.java @@ -129,6 +129,7 @@ public Transforms getTransforms() throws XMLSecurityException { } /** {@inheritDoc} */ + @Override public String getBaseLocalName() { return Constants._TAG_RETRIEVALMETHOD; } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/SPKIData.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/SPKIData.java index a352c056ef770..23eaf1c12572a 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/SPKIData.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/SPKIData.java @@ -45,6 +45,7 @@ public SPKIData(Element element, String baseURI) } /** {@inheritDoc} */ + @Override public String getBaseLocalName() { return Constants._TAG_SPKIDATA; } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/X509Data.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/X509Data.java index 06aeae25fa737..c7640e4e4e166 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/X509Data.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/X509Data.java @@ -528,6 +528,7 @@ public boolean containsUnknownElement() { } /** {@inheritDoc} */ + @Override public String getBaseLocalName() { return Constants._TAG_X509DATA; } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/keyvalues/DSAKeyValue.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/keyvalues/DSAKeyValue.java index 95697892df834..9b2a2d258eaf3 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/keyvalues/DSAKeyValue.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/keyvalues/DSAKeyValue.java @@ -97,6 +97,7 @@ public DSAKeyValue(Document doc, Key key) throws IllegalArgumentException { } /** {@inheritDoc} */ + @Override public PublicKey getPublicKey() throws XMLSecurityException { try { DSAPublicKeySpec pkspec = @@ -123,6 +124,7 @@ public PublicKey getPublicKey() throws XMLSecurityException { } /** {@inheritDoc} */ + @Override public String getBaseLocalName() { return Constants._TAG_DSAKEYVALUE; } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/keyvalues/ECKeyValue.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/keyvalues/ECKeyValue.java index 0517aa4f711ea..839d9e4285da3 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/keyvalues/ECKeyValue.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/keyvalues/ECKeyValue.java @@ -40,16 +40,15 @@ import javax.xml.crypto.MarshalException; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.Text; - import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException; import com.sun.org.apache.xml.internal.security.utils.Constants; import com.sun.org.apache.xml.internal.security.utils.I18n; import com.sun.org.apache.xml.internal.security.utils.Signature11ElementProxy; import com.sun.org.apache.xml.internal.security.utils.XMLUtils; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.Text; public class ECKeyValue extends Signature11ElementProxy implements KeyValueContent { @@ -161,6 +160,7 @@ public ECKeyValue(Document doc, Key key) throws IllegalArgumentException { } /** {@inheritDoc} */ + @Override public PublicKey getPublicKey() throws XMLSecurityException { try { ECParameterSpec ecParams = null; @@ -210,6 +210,7 @@ public PublicKey getPublicKey() throws XMLSecurityException { } /** {@inheritDoc} */ + @Override public String getBaseLocalName() { return Constants._TAG_ECKEYVALUE; } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/keyvalues/RSAKeyValue.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/keyvalues/RSAKeyValue.java index 5025dcd345f24..b691091e51867 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/keyvalues/RSAKeyValue.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/keyvalues/RSAKeyValue.java @@ -93,6 +93,7 @@ public RSAKeyValue(Document doc, Key key) throws IllegalArgumentException { } /** {@inheritDoc} */ + @Override public PublicKey getPublicKey() throws XMLSecurityException { try { KeyFactory rsaFactory = KeyFactory.getInstance("RSA"); @@ -115,6 +116,7 @@ public PublicKey getPublicKey() throws XMLSecurityException { } /** {@inheritDoc} */ + @Override public String getBaseLocalName() { return Constants._TAG_RSAKEYVALUE; } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509CRL.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509CRL.java index 5b50fa966cda6..2d0a13a85bb62 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509CRL.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509CRL.java @@ -64,6 +64,7 @@ public byte[] getCRLBytes() throws XMLSecurityException { } /** {@inheritDoc} */ + @Override public String getBaseLocalName() { return Constants._TAG_X509CRL; } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509Certificate.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509Certificate.java index 56844e472ff39..c50458f2bdc80 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509Certificate.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509Certificate.java @@ -127,6 +127,7 @@ public PublicKey getPublicKey() throws XMLSecurityException, IOException { } /** {@inheritDoc} */ + @Override public boolean equals(Object obj) { if (!(obj instanceof XMLX509Certificate)) { return false; @@ -139,12 +140,13 @@ public boolean equals(Object obj) { } } + @Override public int hashCode() { int result = 17; try { byte[] bytes = getCertificateBytes(); - for (int i = 0; i < bytes.length; i++) { - result = 31 * result + bytes[i]; + for (byte element : bytes) { + result = 31 * result + element; } } catch (XMLSecurityException e) { LOG.debug(e.getMessage(), e); @@ -153,6 +155,7 @@ public int hashCode() { } /** {@inheritDoc} */ + @Override public String getBaseLocalName() { return Constants._TAG_X509CERTIFICATE; } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509Digest.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509Digest.java index 502a9a4dc82bd..7011016cfb699 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509Digest.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509Digest.java @@ -132,6 +132,7 @@ public static byte[] getDigestBytesFromCert(X509Certificate cert, String algorit } /** {@inheritDoc} */ + @Override public String getBaseLocalName() { return Constants._TAG_X509DIGEST; } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509IssuerSerial.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509IssuerSerial.java index 0a186da2d9254..6e90ae6592cac 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509IssuerSerial.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509IssuerSerial.java @@ -132,6 +132,7 @@ public String getIssuerName() { } /** {@inheritDoc} */ + @Override public boolean equals(Object obj) { if (!(obj instanceof XMLX509IssuerSerial)) { return false; @@ -143,6 +144,7 @@ public boolean equals(Object obj) { && this.getIssuerName().equals(other.getIssuerName()); } + @Override public int hashCode() { int result = 17; result = 31 * result + getSerialNumber().hashCode(); @@ -151,6 +153,7 @@ public int hashCode() { } /** {@inheritDoc} */ + @Override public String getBaseLocalName() { return Constants._TAG_X509ISSUERSERIAL; } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509SKI.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509SKI.java index 197d417c00eba..451f955ea3c20 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509SKI.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509SKI.java @@ -145,6 +145,7 @@ public static byte[] getSKIBytesFromCert(X509Certificate cert) } /** {@inheritDoc} */ + @Override public boolean equals(Object obj) { if (!(obj instanceof XMLX509SKI)) { return false; @@ -159,12 +160,13 @@ public boolean equals(Object obj) { } } + @Override public int hashCode() { int result = 17; try { byte[] bytes = getSKIBytes(); - for (int i = 0; i < bytes.length; i++) { - result = 31 * result + bytes[i]; + for (byte element : bytes) { + result = 31 * result + element; } } catch (XMLSecurityException e) { LOG.debug(e.getMessage(), e); @@ -174,6 +176,7 @@ public int hashCode() { } /** {@inheritDoc} */ + @Override public String getBaseLocalName() { return Constants._TAG_X509SKI; } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509SubjectName.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509SubjectName.java index 564c45e437adc..7b8008fef1225 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509SubjectName.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/content/x509/XMLX509SubjectName.java @@ -80,6 +80,7 @@ public String getSubjectName() { } /** {@inheritDoc} */ + @Override public boolean equals(Object obj) { if (!(obj instanceof XMLX509SubjectName)) { return false; @@ -92,6 +93,7 @@ public boolean equals(Object obj) { return thisSubject.equals(otherSubject); } + @Override public int hashCode() { int result = 17; result = 31 * result + this.getSubjectName().hashCode(); @@ -99,6 +101,7 @@ public int hashCode() { } /** {@inheritDoc} */ + @Override public String getBaseLocalName() { return Constants._TAG_X509SUBJECTNAME; } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/KeyResolver.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/KeyResolver.java index 7445013e9cbcc..f0e0785efe6d5 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/KeyResolver.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/KeyResolver.java @@ -31,9 +31,6 @@ import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.atomic.AtomicBoolean; -import org.w3c.dom.Element; -import org.w3c.dom.Node; - import com.sun.org.apache.xml.internal.security.keys.keyresolver.implementations.DEREncodedKeyValueResolver; import com.sun.org.apache.xml.internal.security.keys.keyresolver.implementations.DSAKeyValueResolver; import com.sun.org.apache.xml.internal.security.keys.keyresolver.implementations.ECKeyValueResolver; @@ -47,6 +44,8 @@ import com.sun.org.apache.xml.internal.security.keys.keyresolver.implementations.X509SubjectNameResolver; import com.sun.org.apache.xml.internal.security.keys.storage.StorageResolver; import com.sun.org.apache.xml.internal.security.utils.JavaUtils; +import org.w3c.dom.Element; +import org.w3c.dom.Node; /** * KeyResolver is factory class for subclass of KeyResolverSpi that @@ -295,10 +294,12 @@ public ResolverIterator(List list) { it = res.iterator(); } + @Override public boolean hasNext() { return it.hasNext(); } + @Override public KeyResolverSpi next() { KeyResolverSpi resolver = it.next(); if (resolver == null) { @@ -308,6 +309,7 @@ public KeyResolverSpi next() { return resolver; } + @Override public void remove() { throw new UnsupportedOperationException("Can't remove resolvers using the iterator"); } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/PrivateKeyResolver.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/PrivateKeyResolver.java index 20ecdbee0a5e9..a891104143fdd 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/PrivateKeyResolver.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/PrivateKeyResolver.java @@ -32,7 +32,9 @@ import java.security.cert.X509Certificate; import java.util.Arrays; import java.util.Enumeration; + import javax.crypto.SecretKey; + import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException; import com.sun.org.apache.xml.internal.security.keys.content.X509Data; import com.sun.org.apache.xml.internal.security.keys.content.x509.XMLX509Certificate; diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/RSAKeyValueResolver.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/RSAKeyValueResolver.java index 6c21cf0130ec9..3c44833379879 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/RSAKeyValueResolver.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/RSAKeyValueResolver.java @@ -26,7 +26,6 @@ import java.security.PublicKey; import java.security.cert.X509Certificate; - import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException; import com.sun.org.apache.xml.internal.security.keys.content.keyvalues.RSAKeyValue; import com.sun.org.apache.xml.internal.security.keys.keyresolver.KeyResolverSpi; diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/SecretKeyResolver.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/SecretKeyResolver.java index f8b6040234992..761ac9fd01215 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/SecretKeyResolver.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/SecretKeyResolver.java @@ -27,7 +27,9 @@ import java.security.PrivateKey; import java.security.PublicKey; import java.security.cert.X509Certificate; + import javax.crypto.SecretKey; + import com.sun.org.apache.xml.internal.security.keys.keyresolver.KeyResolverException; import com.sun.org.apache.xml.internal.security.keys.keyresolver.KeyResolverSpi; import com.sun.org.apache.xml.internal.security.keys.storage.StorageResolver; diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/SingleKeyResolver.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/SingleKeyResolver.java index 6d543808354f3..4e6223fad06b3 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/SingleKeyResolver.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/SingleKeyResolver.java @@ -25,7 +25,9 @@ import java.security.PrivateKey; import java.security.PublicKey; import java.security.cert.X509Certificate; + import javax.crypto.SecretKey; + import com.sun.org.apache.xml.internal.security.keys.keyresolver.KeyResolverException; import com.sun.org.apache.xml.internal.security.keys.keyresolver.KeyResolverSpi; import com.sun.org.apache.xml.internal.security.keys.storage.StorageResolver; diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/X509CertificateResolver.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/X509CertificateResolver.java index 0be1e5bf4f53e..7977a5538f29b 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/X509CertificateResolver.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/X509CertificateResolver.java @@ -86,8 +86,8 @@ protected X509Certificate engineResolveX509Certificate( } // populate Object array - for (int i = 0; i < els.length; i++) { - XMLX509Certificate xmlCert = new XMLX509Certificate(els[i], baseURI); + for (Element el : els) { + XMLX509Certificate xmlCert = new XMLX509Certificate(el, baseURI); X509Certificate cert = xmlCert.getX509Certificate(); if (cert != null) { return cert; diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/X509DigestResolver.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/X509DigestResolver.java index 9826ea3b9c8d7..047e7acbf5deb 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/X509DigestResolver.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/X509DigestResolver.java @@ -134,8 +134,7 @@ private X509Certificate resolveCertificate(Element element, String baseURI, Stor while (storageIterator.hasNext()) { X509Certificate cert = (X509Certificate) storageIterator.next(); - for (int i = 0; i < x509Digests.length; i++) { - XMLX509Digest keyInfoDigest = x509Digests[i]; + for (XMLX509Digest keyInfoDigest : x509Digests) { byte[] certDigestBytes = XMLX509Digest.getDigestBytesFromCert(cert, keyInfoDigest.getAlgorithm()); if (Arrays.equals(keyInfoDigest.getDigestBytes(), certDigestBytes)) { diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/X509SKIResolver.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/X509SKIResolver.java index c2d8f9cef608f..09150a548f129 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/X509SKIResolver.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/X509SKIResolver.java @@ -28,7 +28,6 @@ import java.security.cert.X509Certificate; import java.util.Iterator; - import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException; import com.sun.org.apache.xml.internal.security.keys.content.x509.XMLX509SKI; import com.sun.org.apache.xml.internal.security.keys.keyresolver.KeyResolverException; @@ -95,20 +94,18 @@ protected X509Certificate engineResolveX509Certificate( } XMLX509SKI[] x509childObject = new XMLX509SKI[x509childNodes.length]; - for (int i = 0; i < x509childNodes.length; i++) { x509childObject[i] = new XMLX509SKI(x509childNodes[i], baseURI); } Iterator storageIterator = storage.getIterator(); while (storageIterator.hasNext()) { - X509Certificate cert = (X509Certificate)storageIterator.next(); + X509Certificate cert = (X509Certificate) storageIterator.next(); XMLX509SKI certSKI = new XMLX509SKI(element.getOwnerDocument(), cert); - for (int i = 0; i < x509childObject.length; i++) { - if (certSKI.equals(x509childObject[i])) { + for (XMLX509SKI childNodeSKI : x509childObject) { + if (certSKI.equals(childNodeSKI)) { LOG.debug("Return PublicKey from {}", cert.getSubjectX500Principal().getName()); - return cert; } } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/X509SubjectNameResolver.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/X509SubjectNameResolver.java index f90ff89671143..b2bd0770b1546 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/X509SubjectNameResolver.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/keyresolver/implementations/X509SubjectNameResolver.java @@ -28,7 +28,6 @@ import java.security.cert.X509Certificate; import java.util.Iterator; - import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException; import com.sun.org.apache.xml.internal.security.keys.content.x509.XMLX509SubjectName; import com.sun.org.apache.xml.internal.security.keys.keyresolver.KeyResolverException; @@ -101,18 +100,15 @@ protected X509Certificate engineResolveX509Certificate( Iterator storageIterator = storage.getIterator(); while (storageIterator.hasNext()) { - X509Certificate cert = (X509Certificate)storageIterator.next(); - XMLX509SubjectName certSN = - new XMLX509SubjectName(element.getOwnerDocument(), cert); - + X509Certificate cert = (X509Certificate) storageIterator.next(); + XMLX509SubjectName certSN = new XMLX509SubjectName(element.getOwnerDocument(), cert); LOG.debug("Found Certificate SN: {}", certSN.getSubjectName()); - for (int i = 0; i < x509childObject.length; i++) { - LOG.debug("Found Element SN: {}", x509childObject[i].getSubjectName()); + for (XMLX509SubjectName childSubject : x509childObject) { + LOG.debug("Found Element SN: {}", childSubject.getSubjectName()); - if (certSN.equals(x509childObject[i])) { + if (certSN.equals(childSubject)) { LOG.debug("match !!! "); - return cert; } LOG.debug("no match..."); @@ -122,7 +118,6 @@ protected X509Certificate engineResolveX509Certificate( return null; } catch (XMLSecurityException ex) { LOG.debug("XMLSecurityException", ex); - throw new KeyResolverException(ex); } } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/storage/StorageResolver.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/storage/StorageResolver.java index 2da744cad8c44..2b90e7901fdbe 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/storage/StorageResolver.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/storage/StorageResolver.java @@ -133,6 +133,7 @@ public StorageResolverIterator(Iterator resolvers) { } /** {@inheritDoc} */ + @Override public boolean hasNext() { if (currentResolver == null) { return false; @@ -147,6 +148,7 @@ public boolean hasNext() { } /** {@inheritDoc} */ + @Override public Certificate next() { if (hasNext()) { return currentResolver.next(); @@ -158,6 +160,7 @@ public Certificate next() { /** * Method remove */ + @Override public void remove() { throw new UnsupportedOperationException("Can't remove keys from KeyStore"); } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/storage/implementations/KeyStoreResolver.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/storage/implementations/KeyStoreResolver.java index 6f7ff7deb92e4..cfe9c6e98a59a 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/storage/implementations/KeyStoreResolver.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/storage/implementations/KeyStoreResolver.java @@ -64,6 +64,7 @@ public KeyStoreResolver(KeyStore keyStore) throws StorageResolverException { } /** {@inheritDoc} */ + @Override public Iterator getIterator() { return new KeyStoreIterator(this.keyStore); } @@ -103,11 +104,13 @@ public KeyStoreIterator(KeyStore keyStore) { } /** {@inheritDoc} */ + @Override public boolean hasNext() { return this.i < this.certs.size(); } /** {@inheritDoc} */ + @Override public Certificate next() { if (hasNext()) { return this.certs.get(this.i++); @@ -119,6 +122,7 @@ public Certificate next() { /** * Method remove */ + @Override public void remove() { throw new UnsupportedOperationException("Can't remove keys from KeyStore"); } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/storage/implementations/SingleCertificateResolver.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/storage/implementations/SingleCertificateResolver.java index 2b57b3c4e2cba..9476cfdffe52b 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/storage/implementations/SingleCertificateResolver.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/keys/storage/implementations/SingleCertificateResolver.java @@ -46,6 +46,7 @@ public SingleCertificateResolver(X509Certificate x509cert) { } /** {@inheritDoc} */ + @Override public Iterator getIterator() { return new InternalIterator(this.certificate); } @@ -71,11 +72,13 @@ public InternalIterator(X509Certificate x509cert) { } /** {@inheritDoc} */ + @Override public boolean hasNext() { return !this.alreadyReturned; } /** {@inheritDoc} */ + @Override public Certificate next() { if (this.alreadyReturned) { throw new NoSuchElementException(); @@ -87,6 +90,7 @@ public Certificate next() { /** * Method remove */ + @Override public void remove() { throw new UnsupportedOperationException("Can't remove keys from KeyStore"); } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/parser/XMLParser.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/parser/XMLParser.java index 0942b6b296f7c..24acfe33aa93b 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/parser/XMLParser.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/parser/XMLParser.java @@ -31,6 +31,15 @@ */ public interface XMLParser { + /** + * Parses a document from the input stream. + * Caller is responsible for closing the stream. + * + * @param inputStream + * @param disallowDocTypeDeclarations + * @return {@link Document} + * @throws XMLParserException + */ Document parse(InputStream inputStream, boolean disallowDocTypeDeclarations) throws XMLParserException; } \ No newline at end of file diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/parser/XMLParserImpl.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/parser/XMLParserImpl.java index be28d2861a26e..91f4054dc896e 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/parser/XMLParserImpl.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/parser/XMLParserImpl.java @@ -51,10 +51,10 @@ public class XMLParserImpl implements XMLParser { (PrivilegedAction) () -> Integer.getInteger("com.sun.org.apache.xml.internal.security.parser.pool-size", 20)); private static final Map> DOCUMENT_BUILDERS = - Collections.synchronizedMap(new WeakHashMap>()); + Collections.synchronizedMap(new WeakHashMap<>()); private static final Map> DOCUMENT_BUILDERS_DISALLOW_DOCTYPE = - Collections.synchronizedMap(new WeakHashMap>()); + Collections.synchronizedMap(new WeakHashMap<>()); @Override public Document parse(InputStream inputStream, boolean disallowDocTypeDeclarations) throws XMLParserException { @@ -119,6 +119,7 @@ private static ClassLoader getContextClassLoader() { final SecurityManager sm = System.getSecurityManager(); if (sm != null) { return AccessController.doPrivileged(new PrivilegedAction() { + @Override public ClassLoader run() { return Thread.currentThread().getContextClassLoader(); } @@ -132,6 +133,7 @@ private static ClassLoader getClassLoader(final Class clazz) { final SecurityManager sm = System.getSecurityManager(); if (sm != null) { return AccessController.doPrivileged(new PrivilegedAction() { + @Override public ClassLoader run() { return clazz.getClassLoader(); } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/Manifest.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/Manifest.java index 9d0ac02d75ec1..f63ac107fd09d 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/Manifest.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/Manifest.java @@ -575,6 +575,7 @@ public int getSignedContentLength() { * * {@inheritDoc} */ + @Override public String getBaseLocalName() { return Constants._TAG_MANIFEST; } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/ObjectContainer.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/ObjectContainer.java index 5ab6c36164379..d1f049b5bc9e2 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/ObjectContainer.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/ObjectContainer.java @@ -130,6 +130,7 @@ public Node appendChild(Node node) { } /** {@inheritDoc} */ + @Override public String getBaseLocalName() { return Constants._TAG_OBJECT; } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/Reference.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/Reference.java index 384436b7b4e1b..9636031b9a5f8 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/Reference.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/Reference.java @@ -193,10 +193,12 @@ protected Reference( // Create DigestMethod Element without actually instantiating a MessageDigest Object Algorithm digestAlgorithm = new Algorithm(getDocument(), messageDigestAlgorithm) { + @Override public String getBaseNamespace() { return Constants.SignatureSpecNS; } + @Override public String getBaseLocalName() { return Constants._TAG_DIGESTMETHOD; } @@ -612,6 +614,7 @@ private void cacheDereferencedElement(XMLSignatureInput input) { try { final Set s = input.getNodeSet(); referenceData = new ReferenceNodeSetData() { + @Override public Iterator iterator() { return new Iterator() { @@ -808,6 +811,7 @@ public boolean verify() * Method getBaseLocalName * {@inheritDoc} */ + @Override public String getBaseLocalName() { return Constants._TAG_REFERENCE; } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/SignatureProperties.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/SignatureProperties.java index e409c99250010..8434b291c94d0 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/SignatureProperties.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/SignatureProperties.java @@ -139,6 +139,7 @@ public void addSignatureProperty(SignatureProperty sp) { } /** {@inheritDoc} */ + @Override public String getBaseLocalName() { return Constants._TAG_SIGNATUREPROPERTIES; } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/SignatureProperty.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/SignatureProperty.java index 1929f126a1434..bc9a7003c46a7 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/SignatureProperty.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/SignatureProperty.java @@ -126,6 +126,7 @@ public Node appendChild(Node node) { } /** {@inheritDoc} */ + @Override public String getBaseLocalName() { return Constants._TAG_SIGNATUREPROPERTY; } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/SignedInfo.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/SignedInfo.java index 6d4e4adf740df..90511f10fbc54 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/SignedInfo.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/SignedInfo.java @@ -27,6 +27,7 @@ import java.io.OutputStream; import java.security.Provider; import java.security.spec.AlgorithmParameterSpec; + import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; @@ -38,7 +39,6 @@ import com.sun.org.apache.xml.internal.security.transforms.params.InclusiveNamespaces; import com.sun.org.apache.xml.internal.security.utils.Constants; import com.sun.org.apache.xml.internal.security.utils.XMLUtils; - import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -401,6 +401,7 @@ public SignatureAlgorithm getSignatureAlgorithm() { * {@inheritDoc} * */ + @Override public String getBaseLocalName() { return Constants._TAG_SIGNEDINFO; } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignature.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignature.java index dff41c30e5180..cfa545e5826c6 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignature.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignature.java @@ -1031,6 +1031,7 @@ public void setFollowNestedManifests(boolean followManifests) { * * @return Constants._TAG_SIGNATURE */ + @Override public String getBaseLocalName() { return Constants._TAG_SIGNATURE; } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java index 165bc98721fb5..1f192e0553374 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java @@ -391,6 +391,7 @@ public void setSourceURI(String sourceURI) { * Method toString * {@inheritDoc} */ + @Override public String toString() { if (isNodeSet()) { return "XMLSignatureInput/NodeSet/" + inputNodeSet.size() diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/reference/ReferenceSubTreeData.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/reference/ReferenceSubTreeData.java index 215206015f871..14050f0715e3d 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/reference/ReferenceSubTreeData.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/reference/ReferenceSubTreeData.java @@ -30,6 +30,7 @@ import java.util.List; import java.util.ListIterator; import java.util.NoSuchElementException; + import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; @@ -51,6 +52,7 @@ public ReferenceSubTreeData(Node root, boolean excludeComments) { this.excludeComments = excludeComments; } + @Override public Iterator iterator() { return new DelayedNodeIterator(root, excludeComments); } @@ -78,6 +80,7 @@ static class DelayedNodeIterator implements Iterator { this.withComments = !excludeComments; } + @Override public boolean hasNext() { if (nodeSet == null) { nodeSet = dereferenceSameDocumentURI(root); @@ -86,6 +89,7 @@ public boolean hasNext() { return li.hasNext(); } + @Override public Node next() { if (nodeSet == null) { nodeSet = dereferenceSameDocumentURI(root); @@ -98,6 +102,7 @@ public Node next() { } } + @Override public void remove() { throw new UnsupportedOperationException(); } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/Base64.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/Base64.java index 0534fff3844b9..2d5c019654996 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/Base64.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/Base64.java @@ -108,7 +108,7 @@ private Base64() { * @param bitlen {@code int} the desired length in bits of the representation * @return a byte array with {@code bitlen} bits of {@code big} */ - static final byte[] getBytes(BigInteger big, int bitlen) { + static byte[] getBytes(BigInteger big, int bitlen) { //round bitlen bitlen = ((bitlen + 7) >> 3) << 3; @@ -148,7 +148,7 @@ static final byte[] getBytes(BigInteger big, int bitlen) { * @param big * @return String with Base64 encoding */ - public static final String encode(BigInteger big) { + public static String encode(BigInteger big) { byte[] bytes = XMLUtils.getBytes(big, big.bitLength()); return XMLUtils.encodeToString(bytes); } @@ -164,7 +164,7 @@ public static final String encode(BigInteger big) { * @param bitlen {@code int} the desired length in bits of the representation * @return a byte array with {@code bitlen} bits of {@code big} */ - public static final byte[] encode(BigInteger big, int bitlen) { + public static byte[] encode(BigInteger big, int bitlen) { //round bitlen bitlen = ((bitlen + 7) >> 3) << 3; @@ -205,7 +205,7 @@ public static final byte[] encode(BigInteger big, int bitlen) { * @return the biginteger obtained from the node * @throws Base64DecodingException */ - public static final BigInteger decodeBigIntegerFromElement(Element element) + public static BigInteger decodeBigIntegerFromElement(Element element) throws Base64DecodingException { return new BigInteger(1, Base64.decode(element)); } @@ -216,7 +216,7 @@ public static final BigInteger decodeBigIntegerFromElement(Element element) * @return a decoded BigInteger * @throws Base64DecodingException */ - public static final BigInteger decodeBigIntegerFromText(Text text) + public static BigInteger decodeBigIntegerFromText(Text text) throws Base64DecodingException { return new BigInteger(1, Base64.decode(text.getData())); } @@ -228,7 +228,7 @@ public static final BigInteger decodeBigIntegerFromText(Text text) * @param element * @param biginteger */ - public static final void fillElementWithBigInteger(Element element, BigInteger biginteger) { + public static void fillElementWithBigInteger(Element element, BigInteger biginteger) { String encodedInt = encode(biginteger); @@ -253,7 +253,7 @@ public static final void fillElementWithBigInteger(Element element, BigInteger b * $todo$ not tested yet * @throws Base64DecodingException */ - public static final byte[] decode(Element element) throws Base64DecodingException { + public static byte[] decode(Element element) throws Base64DecodingException { Node sibling = element.getFirstChild(); StringBuilder sb = new StringBuilder(); @@ -279,7 +279,7 @@ public static final byte[] decode(Element element) throws Base64DecodingExceptio * @return an Element with the base64 encoded in the text. * */ - public static final Element encodeToElement(Document doc, String localName, byte[] bytes) { + public static Element encodeToElement(Document doc, String localName, byte[] bytes) { Element el = XMLUtils.createElementInSignatureSpace(doc, localName); Text text = doc.createTextNode(encode(bytes)); @@ -296,7 +296,7 @@ public static final Element encodeToElement(Document doc, String localName, byte * @throws Base64DecodingException * */ - public static final byte[] decode(byte[] base64) throws Base64DecodingException { + public static byte[] decode(byte[] base64) throws Base64DecodingException { return decodeInternal(base64, -1); } @@ -307,7 +307,7 @@ public static final byte[] decode(byte[] base64) throws Base64DecodingException * @param binaryData {@code byte[]} to be base64 encoded * @return the {@code String} with encoded data */ - public static final String encode(byte[] binaryData) { + public static String encode(byte[] binaryData) { return XMLUtils.ignoreLineBreaks() ? encode(binaryData, Integer.MAX_VALUE) : encode(binaryData, BASE64DEFAULTLENGTH); @@ -323,7 +323,7 @@ public static final String encode(byte[] binaryData) { * @throws IOException * @throws Base64DecodingException */ - public static final byte[] decode(BufferedReader reader) + public static byte[] decode(BufferedReader reader) throws IOException, Base64DecodingException { byte[] retBytes = null; @@ -342,11 +342,11 @@ public static final byte[] decode(BufferedReader reader) return retBytes; } - protected static final boolean isWhiteSpace(byte octet) { + protected static boolean isWhiteSpace(byte octet) { return octet == 0x20 || octet == 0xd || octet == 0xa || octet == 0x9; } - protected static final boolean isPad(byte octet) { + protected static boolean isPad(byte octet) { return octet == PAD; } @@ -364,7 +364,7 @@ protected static final boolean isPad(byte octet) { * @param length {@code int} length of wrapped lines; No wrapping if less than 4. * @return a {@code String} with encoded data */ - public static final String encode(byte[] binaryData, int length) { + public static String encode(byte[] binaryData, int length) { if (length < 4) { length = Integer.MAX_VALUE; } @@ -474,7 +474,7 @@ public static final String encode(byte[] binaryData, int length) { * @return byte array containing the decoded data * @throws Base64DecodingException if there is a problem decoding the data */ - public static final byte[] decode(String encoded) throws Base64DecodingException { + public static byte[] decode(String encoded) throws Base64DecodingException { if (encoded == null) { return null; } @@ -483,7 +483,7 @@ public static final byte[] decode(String encoded) throws Base64DecodingException return decodeInternal(bytes, len); } - protected static final int getBytesInternal(String s, byte[] result) { + protected static int getBytesInternal(String s, byte[] result) { int length = s.length(); int newSize = 0; @@ -496,7 +496,7 @@ protected static final int getBytesInternal(String s, byte[] result) { return newSize; } - protected static final byte[] decodeInternal(byte[] base64Data, int len) + protected static byte[] decodeInternal(byte[] base64Data, int len) throws Base64DecodingException { // remove white spaces if (len == -1) { @@ -591,7 +591,7 @@ protected static final byte[] decodeInternal(byte[] base64Data, int len) * @throws IOException * @throws Base64DecodingException */ - public static final void decode(String base64Data, OutputStream os) + public static void decode(String base64Data, OutputStream os) throws Base64DecodingException, IOException { byte[] bytes = new byte[base64Data.length()]; int len = getBytesInternal(base64Data, bytes); @@ -606,12 +606,12 @@ public static final void decode(String base64Data, OutputStream os) * @throws IOException * @throws Base64DecodingException */ - public static final void decode(byte[] base64Data, OutputStream os) + public static void decode(byte[] base64Data, OutputStream os) throws Base64DecodingException, IOException { decode(base64Data, os, -1); } - protected static final void decode(byte[] base64Data, OutputStream os, int len) + protected static void decode(byte[] base64Data, OutputStream os, int len) throws Base64DecodingException, IOException { // remove white spaces if (len == -1) { @@ -694,7 +694,7 @@ protected static final void decode(byte[] base64Data, OutputStream os, int len) * @throws IOException * @throws Base64DecodingException */ - public static final void decode(InputStream is, OutputStream os) + public static void decode(InputStream is, OutputStream os) throws Base64DecodingException, IOException { //byte[] decodedData = null; byte b1 = 0, b2 = 0, b3 = 0, b4 = 0; @@ -771,7 +771,7 @@ public static final void decode(InputStream is, OutputStream os) * @param data the byte array of base64 data (with WS) * @return the new length */ - protected static final int removeWhiteSpace(byte[] data) { + protected static int removeWhiteSpace(byte[] data) { if (data == null) { return 0; } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/DOMNamespaceContext.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/DOMNamespaceContext.java index 6a2f5d5af260e..0c2c5c8404398 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/DOMNamespaceContext.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/DOMNamespaceContext.java @@ -84,6 +84,7 @@ public void setContext(Node context) { this.context = context; } + @Override public String getNamespaceURI(String prefix) { if (prefix == null) { throw new IllegalArgumentException("prefix is null"); @@ -107,6 +108,7 @@ public String getNamespaceURI(String prefix) { return NULL_NS_URI; } + @Override public String getPrefix(String namespaceURI) { if (namespaceURI == null) { throw new IllegalArgumentException("namespace URI is null"); @@ -140,6 +142,7 @@ public String getPrefix(String namespaceURI) { /** * Throws {@link UnsupportedOperationException}. */ + @Override public Iterator getPrefixes(String namespaceURI) { throw new UnsupportedOperationException(); } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/DigesterOutputStream.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/DigesterOutputStream.java index 8f584c354f6cd..06840f74e41b8 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/DigesterOutputStream.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/DigesterOutputStream.java @@ -43,16 +43,19 @@ public DigesterOutputStream(MessageDigestAlgorithm mda) { } /** {@inheritDoc} */ + @Override public void write(byte[] arg0) { write(arg0, 0, arg0.length); } /** {@inheritDoc} */ - public void write(int arg0) { + @Override + public synchronized void write(int arg0) { mda.update((byte)arg0); } /** {@inheritDoc} */ + @Override public void write(byte[] arg0, int arg1, int arg2) { if (LOG.isDebugEnabled()) { LOG.debug("Pre-digested input:"); diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/ElementProxy.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/ElementProxy.java index c1d4c5d0367b8..6f061fc977244 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/ElementProxy.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/ElementProxy.java @@ -23,8 +23,8 @@ package com.sun.org.apache.xml.internal.security.utils; import java.math.BigInteger; -import java.util.concurrent.ConcurrentHashMap; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import com.sun.org.apache.xml.internal.security.exceptions.XMLSecurityException; import org.w3c.dom.Attr; diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/HelperNodeList.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/HelperNodeList.java index 65f9b8f93f9ba..b198861d0419a 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/HelperNodeList.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/HelperNodeList.java @@ -57,6 +57,7 @@ public HelperNodeList(boolean allNodesMustHaveSameParent) { * @param index * @return node with index i */ + @Override public Node item(int index) { return nodes.get(index); } @@ -66,6 +67,7 @@ public Node item(int index) { * * @return length of the list */ + @Override public int getLength() { return nodes.size(); } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/JDKXPathAPI.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/JDKXPathAPI.java index e6b65e07a005f..ea5524e3b8bea 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/JDKXPathAPI.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/JDKXPathAPI.java @@ -57,6 +57,7 @@ class JDKXPathAPI implements XPathAPI { * * @throws TransformerException */ + @Override public NodeList selectNodeList( Node contextNode, Node xpathnode, String str, Node namespaceNode ) throws TransformerException { @@ -92,6 +93,7 @@ public NodeList selectNodeList( * @param str The XPath expression * @param namespaceNode The node from which prefixes in the XPath will be resolved to namespaces. */ + @Override public boolean evaluate(Node contextNode, Node xpathnode, String str, Node namespaceNode) throws TransformerException { if (!str.equals(xpathStr) || xpathExpression == null) { @@ -122,6 +124,7 @@ public boolean evaluate(Node contextNode, Node xpathnode, String str, Node names /** * Clear any context information from this object */ + @Override public void clear() { xpathStr = null; xpathExpression = null; diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/JDKXPathFactory.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/JDKXPathFactory.java index 98c1872898a61..2659fc0ecd0bc 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/JDKXPathFactory.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/JDKXPathFactory.java @@ -31,6 +31,7 @@ public class JDKXPathFactory extends XPathFactory { /** * Get a new XPathAPI instance */ + @Override public XPathAPI newXPathAPI() { return new JDKXPathAPI(); } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/JavaUtils.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/JavaUtils.java index 4f5cb7d68a99b..647675ae61cbe 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/JavaUtils.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/JavaUtils.java @@ -95,7 +95,7 @@ public static void writeBytesToFilename(String filename, byte[] bytes) { /** * This method reads all bytes from the given InputStream till EOF and - * returns them as a byte array. + * returns them as a byte array. The method doesn't close the input stream. * * @param inputStream * @return the bytes read from the stream diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/Signature11ElementProxy.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/Signature11ElementProxy.java index 6a5981f61cb9f..086698cdad512 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/Signature11ElementProxy.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/Signature11ElementProxy.java @@ -69,6 +69,7 @@ public Signature11ElementProxy(Element element, String baseURI) throws XMLSecuri } /** {@inheritDoc} */ + @Override public String getBaseNamespace() { return Constants.SignatureSpec11NS; } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/SignatureElementProxy.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/SignatureElementProxy.java index e10f09fa7e564..847ed4ecefbcf 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/SignatureElementProxy.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/SignatureElementProxy.java @@ -63,6 +63,7 @@ public SignatureElementProxy(Element element, String baseURI) throws XMLSecurity } /** {@inheritDoc} */ + @Override public String getBaseNamespace() { return Constants.SignatureSpecNS; } diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/SignerOutputStream.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/SignerOutputStream.java index beb0604f2e63b..04c255504ef80 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/SignerOutputStream.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/SignerOutputStream.java @@ -44,6 +44,7 @@ public SignerOutputStream(SignatureAlgorithm sa) { } /** {@inheritDoc} */ + @Override public void write(byte[] arg0) { try { sa.update(arg0); @@ -53,6 +54,7 @@ public void write(byte[] arg0) { } /** {@inheritDoc} */ + @Override public void write(int arg0) { try { sa.update((byte)arg0); @@ -62,6 +64,7 @@ public void write(int arg0) { } /** {@inheritDoc} */ + @Override public void write(byte[] arg0, int arg1, int arg2) { if (LOG.isDebugEnabled()) { LOG.debug("Canonicalized SignedInfo:"); diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/UnsyncByteArrayOutputStream.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/UnsyncByteArrayOutputStream.java index a0358ffbf770d..f0dc1432d5a9d 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/UnsyncByteArrayOutputStream.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/UnsyncByteArrayOutputStream.java @@ -44,6 +44,7 @@ public UnsyncByteArrayOutputStream() { buf = new byte[INITIAL_SIZE]; } + @Override public void write(byte[] arg0) { if ((VM_ARRAY_INDEX_MAX_VALUE - pos) < arg0.length) { throw new OutOfMemoryError("Required length exceeds implementation limit"); @@ -56,6 +57,7 @@ public void write(byte[] arg0) { pos = newPos; } + @Override public void write(byte[] arg0, int arg1, int arg2) { if ((VM_ARRAY_INDEX_MAX_VALUE - pos) < arg2) { throw new OutOfMemoryError("Required length exceeds implementation limit"); @@ -68,6 +70,7 @@ public void write(byte[] arg0, int arg1, int arg2) { pos = newPos; } + @Override public void write(int arg0) { if (VM_ARRAY_INDEX_MAX_VALUE - pos == 0) { throw new OutOfMemoryError("Required length exceeds implementation limit"); diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/XMLUtils.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/XMLUtils.java index 446d640194e09..ca1eea1da44cb 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/XMLUtils.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/XMLUtils.java @@ -22,11 +22,15 @@ */ package com.sun.org.apache.xml.internal.security.utils; +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.lang.reflect.InvocationTargetException; import java.math.BigInteger; +import java.nio.file.Files; import java.security.AccessController; import java.security.PrivilegedAction; import java.util.ArrayList; @@ -42,6 +46,8 @@ import com.sun.org.apache.xml.internal.security.parser.XMLParser; import com.sun.org.apache.xml.internal.security.parser.XMLParserException; import com.sun.org.apache.xml.internal.security.parser.XMLParserImpl; +import com.sun.org.slf4j.internal.Logger; +import com.sun.org.slf4j.internal.LoggerFactory; import org.w3c.dom.Attr; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -50,6 +56,8 @@ import org.w3c.dom.NodeList; import org.w3c.dom.Text; +import static java.nio.charset.StandardCharsets.UTF_8; + /** * DOM and XML accessibility and comfort functions. * @@ -61,8 +69,7 @@ public final class XMLUtils { AccessController.doPrivileged( (PrivilegedAction) () -> Boolean.getBoolean("com.sun.org.apache.xml.internal.security.ignoreLineBreaks")); - private static final com.sun.org.slf4j.internal.Logger LOG = - com.sun.org.slf4j.internal.LoggerFactory.getLogger(XMLUtils.class); + private static final Logger LOG = LoggerFactory.getLogger(XMLUtils.class); @SuppressWarnings("removal") private static XMLParser xmlParserImpl = @@ -74,7 +81,7 @@ public final class XMLUtils { return (XMLParser) JavaUtils.newInstanceWithEmptyConstructor( ClassLoaderUtils.loadClass(xmlParserClass, XMLUtils.class)); } catch (ClassNotFoundException | IllegalAccessException | InstantiationException | InvocationTargetException e) { - LOG.error("Error instantiating XMLParser. Falling back to XMLParserImpl"); + LOG.error("Error instantiating XMLParser. Falling back to XMLParserImpl", e); } } return new XMLParserImpl(); @@ -149,18 +156,18 @@ public static Element getNextElement(Node el) { * @param rootNode * @param result * @param exclude - * @param com whether comments or not + * @param comments whether comments or not */ - public static void getSet(Node rootNode, Set result, Node exclude, boolean com) { + public static void getSet(Node rootNode, Set result, Node exclude, boolean comments) { if (exclude != null && isDescendantOrSelf(exclude, rootNode)) { return; } - getSetRec(rootNode, result, exclude, com); + getSetRec(rootNode, result, exclude, comments); } @SuppressWarnings("fallthrough") private static void getSetRec(final Node rootNode, final Set result, - final Node exclude, final boolean com) { + final Node exclude, final boolean comments) { if (rootNode == exclude) { return; } @@ -187,11 +194,11 @@ private static void getSetRec(final Node rootNode, final Set result, return; } } - getSetRec(r, result, exclude, com); + getSetRec(r, result, exclude, comments); } break; case Node.COMMENT_NODE: - if (com) { + if (comments) { result.add(rootNode); } break; @@ -202,6 +209,18 @@ private static void getSetRec(final Node rootNode, final Set result, } } + /** + * Outputs a DOM tree to a {@link File}. + * + * @param contextNode root node of the DOM tree + * @param outputFile the file to write to + * @throws IOException + */ + public static void outputDOM(Node contextNode, File outputFile) throws IOException { + try (OutputStream os = new BufferedOutputStream(Files.newOutputStream(outputFile.toPath()), 8192)) { + outputDOM(contextNode, os, false); + } + } /** * Outputs a DOM tree to an {@link OutputStream}. @@ -210,7 +229,7 @@ private static void getSetRec(final Node rootNode, final Set result, * @param os the {@link OutputStream} */ public static void outputDOM(Node contextNode, OutputStream os) { - XMLUtils.outputDOM(contextNode, os, false); + outputDOM(contextNode, os, false); } /** @@ -225,13 +244,12 @@ public static void outputDOM(Node contextNode, OutputStream os) { public static void outputDOM(Node contextNode, OutputStream os, boolean addPreamble) { try { if (addPreamble) { - os.write("\n".getBytes(java.nio.charset.StandardCharsets.UTF_8)); + os.write("\n".getBytes(UTF_8)); } - Canonicalizer.getInstance( Canonicalizer.ALGO_ID_C14N_PHYSICAL).canonicalizeSubtree(contextNode, os); } catch (IOException | InvalidCanonicalizerException | CanonicalizationException ex) { - LOG.debug(ex.getMessage(), ex); + LOG.error(ex.getMessage(), ex); } } @@ -253,7 +271,7 @@ public static void outputDOMc14nWithComments(Node contextNode, OutputStream os) Canonicalizer.getInstance( Canonicalizer.ALGO_ID_C14N_WITH_COMMENTS).canonicalizeSubtree(contextNode, os); } catch (InvalidCanonicalizerException | CanonicalizationException ex) { - LOG.debug(ex.getMessage(), ex); + LOG.error(ex.getMessage(), ex); // throw new RuntimeException(ex.getMessage()); } } @@ -862,7 +880,7 @@ public static boolean protectAgainstWrappingAttack(Node startNode, String value) // Continue searching to find duplicates foundElement = attr.getOwnerElement(); } else { - LOG.debug("Multiple elements with the same 'Id' attribute value!"); + LOG.warn("Multiple elements with the same 'Id' attribute value!"); return false; } } @@ -921,8 +939,8 @@ public static boolean protectAgainstWrappingAttack( int length = attributes.getLength(); for (int i = 0; i < length; i++) { Attr attr = (Attr)attributes.item(i); - if (attr.isId() && id.equals(attr.getValue()) && se != knownElement) { - LOG.debug("Multiple elements with the same 'Id' attribute value!"); + if (attr.isId() && id.equals(attr.getValue()) && !knownElement.isSameNode(se)) { + LOG.warn("Multiple elements with the same 'Id' attribute value!"); return false; } } @@ -952,6 +970,49 @@ public static boolean protectAgainstWrappingAttack( return true; } + /** + * Reads a document from the input stream. + * + * @param file + * @param disallowDocTypeDeclarations + * @return {@link Document} + * @throws XMLParserException + * @throws IOException + */ + public static Document read(File file, boolean disallowDocTypeDeclarations) throws XMLParserException, IOException { + try (InputStream inputStream = new BufferedInputStream(Files.newInputStream(file.toPath()), 8192)) { + return read(inputStream, disallowDocTypeDeclarations); + } + } + + /** + * Reads a document from the input stream and closes it. + * + * @param name - resource name to be opened by the class loader + * @param loader + * @param disallowDocTypeDeclarations + * @return {@link Document} + * @throws XMLParserException + * @throws IOException inputStream.close() failed. + */ + public static Document readResource(String name, ClassLoader loader, boolean disallowDocTypeDeclarations) + throws XMLParserException, IOException { + // Delegate to XMLParser implementation + try (InputStream inputStream = loader.getResourceAsStream(name)) { + return read(inputStream, disallowDocTypeDeclarations); + } + + } + + /** + * Reads a document from the input stream. + * Caller is responsible for closing the stream. + * + * @param inputStream + * @param disallowDocTypeDeclarations + * @return {@link Document} + * @throws XMLParserException + */ public static Document read(InputStream inputStream, boolean disallowDocTypeDeclarations) throws XMLParserException { // Delegate to XMLParser implementation return xmlParserImpl.parse(inputStream, disallowDocTypeDeclarations); diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java index c1f9e199fb2c8..deda69e98b960 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java @@ -27,8 +27,8 @@ import java.io.InputStream; import java.net.InetSocketAddress; import java.net.Proxy; -import java.net.URISyntaxException; import java.net.URI; +import java.net.URISyntaxException; import java.net.URL; import java.net.URLConnection; import java.nio.charset.StandardCharsets; @@ -205,6 +205,7 @@ private URLConnection openConnection(URL url, ResourceResolverContext context) t * @param context * @return true if can be resolved */ + @Override public boolean engineCanResolveURI(ResourceResolverContext context) { if (context.uriToResolve == null) { LOG.debug("quick fail, uri == null"); diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverFragment.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverFragment.java index 9af7ee1feff2f..4526a8a1d51a5 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverFragment.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverFragment.java @@ -110,6 +110,7 @@ public XMLSignatureInput engineResolveURI(ResourceResolverContext context) * {@inheritDoc} * @param context */ + @Override public boolean engineCanResolveURI(ResourceResolverContext context) { if (context.uriToResolve == null) { LOG.debug("Quick fail for null uri"); diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverLocalFilesystem.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverLocalFilesystem.java index 9d7e00bdbd6bd..d3970a3ea6940 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverLocalFilesystem.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverLocalFilesystem.java @@ -66,6 +66,7 @@ public XMLSignatureInput engineResolveURI(ResourceResolverContext context) /** * {@inheritDoc} */ + @Override public boolean engineCanResolveURI(ResourceResolverContext context) { if (context.uriToResolve == null) { return false; diff --git a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverXPointer.java b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverXPointer.java index c3608800ece17..fc0447ec21b6c 100644 --- a/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverXPointer.java +++ b/src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverXPointer.java @@ -104,6 +104,7 @@ public XMLSignatureInput engineResolveURI(ResourceResolverContext context) /** * {@inheritDoc} */ + @Override public boolean engineCanResolveURI(ResourceResolverContext context) { return isXPointerSlash(context.uriToResolve) || isXPointerId(context.uriToResolve); } diff --git a/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/SignatureMethod.java b/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/SignatureMethod.java index 6bb1b2d2da090..bf7bb59c9e161 100644 --- a/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/SignatureMethod.java +++ b/src/java.xml.crypto/share/classes/javax/xml/crypto/dsig/SignatureMethod.java @@ -275,6 +275,43 @@ public interface SignatureMethod extends XMLStructure, AlgorithmMethod { */ String ED448 = "http://www.w3.org/2021/04/xmldsig-more#eddsa-ed448"; + /** + * The + * SHA3-224-RSA-MGF1 (PKCS #1) signature method algorithm URI. + * + * @since 22 + */ + String SHA3_224_RSA_MGF1 = + "http://www.w3.org/2007/05/xmldsig-more#sha3-224-rsa-MGF1"; + + /** + * The + * SHA3-256-RSA-MGF1 (PKCS #1) signature method algorithm URI. + * + * @since 22 + */ + String SHA3_256_RSA_MGF1 = + "http://www.w3.org/2007/05/xmldsig-more#sha3-256-rsa-MGF1"; + + /** + * The + * SHA3-384-RSA-MGF1 (PKCS #1) signature method algorithm URI. + * + * @since 22 + */ + String SHA3_384_RSA_MGF1 = + "http://www.w3.org/2007/05/xmldsig-more#sha3-384-rsa-MGF1"; + + /** + * The + * SHA3-512-RSA-MGF1 (PKCS #1) signature method algorithm URI. + * + * @since 22 + */ + String SHA3_512_RSA_MGF1 = + "http://www.w3.org/2007/05/xmldsig-more#sha3-512-rsa-MGF1"; + + /** * Returns the algorithm-specific input parameters of this * SignatureMethod. diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/DigesterOutputStream.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/DigesterOutputStream.java index 774eb36206521..3b03dc8024bb1 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/DigesterOutputStream.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/DigesterOutputStream.java @@ -71,6 +71,7 @@ public DigesterOutputStream(MessageDigest md, boolean buffer) { } } + @Override public void write(int input) { if (buffer) { bos.write(input); diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/MacOutputStream.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/MacOutputStream.java index be554308928ad..727b3b966a03f 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/MacOutputStream.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/MacOutputStream.java @@ -23,6 +23,7 @@ package org.jcp.xml.dsig.internal; import java.io.ByteArrayOutputStream; + import javax.crypto.Mac; /** diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/AbstractDOMSignatureMethod.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/AbstractDOMSignatureMethod.java index 4bc0a543117b5..75b21c16a02f4 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/AbstractDOMSignatureMethod.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/AbstractDOMSignatureMethod.java @@ -23,20 +23,22 @@ package org.jcp.xml.dsig.internal.dom; -import java.security.Key; import java.security.InvalidAlgorithmParameterException; import java.security.InvalidKeyException; +import java.security.Key; import java.security.SignatureException; import java.security.spec.AlgorithmParameterSpec; + import javax.xml.crypto.MarshalException; import javax.xml.crypto.dom.DOMCryptoContext; import javax.xml.crypto.dsig.SignatureMethod; import javax.xml.crypto.dsig.SignedInfo; +import javax.xml.crypto.dsig.XMLSignContext; import javax.xml.crypto.dsig.XMLSignature; import javax.xml.crypto.dsig.XMLSignatureException; -import javax.xml.crypto.dsig.XMLSignContext; import javax.xml.crypto.dsig.XMLValidateContext; import javax.xml.crypto.dsig.spec.SignatureMethodParameterSpec; + import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java index 7655866ad7402..5dff44e3ec0d3 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java @@ -28,11 +28,16 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.OutputStream; -import java.security.spec.AlgorithmParameterSpec; import java.security.InvalidAlgorithmParameterException; +import java.security.spec.AlgorithmParameterSpec; import java.util.Set; -import javax.xml.crypto.*; +import javax.xml.crypto.Data; +import javax.xml.crypto.MarshalException; +import javax.xml.crypto.NodeSetData; +import javax.xml.crypto.OctetStreamData; +import javax.xml.crypto.XMLCryptoContext; +import javax.xml.crypto.XMLStructure; import javax.xml.crypto.dom.DOMCryptoContext; import javax.xml.crypto.dsig.TransformException; import javax.xml.crypto.dsig.TransformService; @@ -61,11 +66,13 @@ public abstract class ApacheCanonicalizer extends TransformService { protected Document ownerDoc; protected Element transformElem; + @Override public final AlgorithmParameterSpec getParameterSpec() { return params; } + @Override public void init(XMLStructure parent, XMLCryptoContext context) throws InvalidAlgorithmParameterException { @@ -84,6 +91,7 @@ public void init(XMLStructure parent, XMLCryptoContext context) ownerDoc = DOMUtils.getOwnerDocument(transformElem); } + @Override public void marshalParams(XMLStructure parent, XMLCryptoContext context) throws MarshalException { @@ -182,6 +190,7 @@ private byte[] getC14nBytes(OutputStream outputStream, boolean isByteArrayOutput return null; } + @Override public Data transform(Data data, XMLCryptoContext xc, OutputStream os) throws TransformException { @@ -249,6 +258,7 @@ public Data transform(Data data, XMLCryptoContext xc, OutputStream os) } } + @Override public final boolean isFeatureSupported(String feature) { if (feature == null) { throw new NullPointerException(); diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheData.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheData.java index 109309d008601..0515066bbd5b6 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheData.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheData.java @@ -26,6 +26,7 @@ package org.jcp.xml.dsig.internal.dom; import javax.xml.crypto.Data; + import com.sun.org.apache.xml.internal.security.signature.XMLSignatureInput; /** diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheNodeSetData.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheNodeSetData.java index b15c8784d5c90..a59e41cce308c 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheNodeSetData.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheNodeSetData.java @@ -30,13 +30,14 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Set; + import javax.xml.crypto.NodeSetData; -import com.sun.org.apache.xml.internal.security.transforms.TransformationException; -import org.w3c.dom.Node; import com.sun.org.apache.xml.internal.security.signature.NodeFilter; import com.sun.org.apache.xml.internal.security.signature.XMLSignatureInput; +import com.sun.org.apache.xml.internal.security.transforms.TransformationException; import com.sun.org.apache.xml.internal.security.utils.XMLUtils; +import org.w3c.dom.Node; public class ApacheNodeSetData implements ApacheData, NodeSetData { @@ -46,6 +47,7 @@ public ApacheNodeSetData(XMLSignatureInput xi) { this.xi = xi; } + @Override public Iterator iterator() { // If nodefilters are set, must execute them first to create node-set try { @@ -61,6 +63,7 @@ public Iterator iterator() { } } + @Override public XMLSignatureInput getXMLSignatureInput() { return xi; } diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheOctetStreamData.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheOctetStreamData.java index f00bb802cfcb8..9b919fcd9099a 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheOctetStreamData.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheOctetStreamData.java @@ -26,7 +26,9 @@ package org.jcp.xml.dsig.internal.dom; import java.io.IOException; + import javax.xml.crypto.OctetStreamData; + import com.sun.org.apache.xml.internal.security.signature.XMLSignatureInput; public class ApacheOctetStreamData extends OctetStreamData @@ -41,6 +43,7 @@ public ApacheOctetStreamData(XMLSignatureInput xi) this.xi = xi; } + @Override public XMLSignatureInput getXMLSignatureInput() { return xi; } diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java index 25211920f6853..2efbcb8b54086 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java @@ -30,17 +30,26 @@ import java.security.spec.AlgorithmParameterSpec; import java.util.Set; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import com.sun.org.apache.xml.internal.security.signature.XMLSignatureInput; -import com.sun.org.apache.xml.internal.security.transforms.Transform; -import javax.xml.crypto.*; +import javax.xml.crypto.Data; +import javax.xml.crypto.MarshalException; +import javax.xml.crypto.NodeSetData; +import javax.xml.crypto.OctetStreamData; +import javax.xml.crypto.XMLCryptoContext; +import javax.xml.crypto.XMLStructure; import javax.xml.crypto.dom.DOMCryptoContext; -import javax.xml.crypto.dsig.*; +import javax.xml.crypto.dsig.TransformException; +import javax.xml.crypto.dsig.TransformService; import javax.xml.crypto.dsig.spec.TransformParameterSpec; +import com.sun.org.apache.xml.internal.security.signature.XMLSignatureInput; +import com.sun.org.apache.xml.internal.security.transforms.Transform; +import com.sun.org.apache.xml.internal.security.transforms.Transforms; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; + /** * This is a wrapper/glue class which invokes the Apache XML-Security * Transform. @@ -64,6 +73,7 @@ public final AlgorithmParameterSpec getParameterSpec() { return params; } + @Override public void init(XMLStructure parent, XMLCryptoContext context) throws InvalidAlgorithmParameterException { @@ -82,6 +92,7 @@ public void init(XMLStructure parent, XMLCryptoContext context) ownerDoc = DOMUtils.getOwnerDocument(transformElem); } + @Override public void marshalParams(XMLStructure parent, XMLCryptoContext context) throws MarshalException { @@ -100,6 +111,7 @@ public void marshalParams(XMLStructure parent, XMLCryptoContext context) ownerDoc = DOMUtils.getOwnerDocument(transformElem); } + @Override public Data transform(Data data, XMLCryptoContext xc) throws TransformException { @@ -109,6 +121,7 @@ public Data transform(Data data, XMLCryptoContext xc) return transformIt(data, xc, null); } + @Override public Data transform(Data data, XMLCryptoContext xc, OutputStream os) throws TransformException { @@ -197,6 +210,7 @@ private Data transformIt(Data data, XMLCryptoContext xc, OutputStream os) } } + @Override public final boolean isFeatureSupported(String feature) { if (feature == null) { throw new NullPointerException(); diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMCanonicalXMLC14N11Method.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMCanonicalXMLC14N11Method.java index 1c6c192e634a3..4ea74c62cc9b4 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMCanonicalXMLC14N11Method.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMCanonicalXMLC14N11Method.java @@ -25,12 +25,13 @@ */ package org.jcp.xml.dsig.internal.dom; -import javax.xml.crypto.*; -import javax.xml.crypto.dsig.*; -import javax.xml.crypto.dsig.spec.TransformParameterSpec; - import java.security.InvalidAlgorithmParameterException; +import javax.xml.crypto.Data; +import javax.xml.crypto.XMLCryptoContext; +import javax.xml.crypto.dsig.TransformException; +import javax.xml.crypto.dsig.spec.TransformParameterSpec; + import com.sun.org.apache.xml.internal.security.c14n.Canonicalizer; import com.sun.org.apache.xml.internal.security.c14n.InvalidCanonicalizerException; @@ -45,6 +46,7 @@ public final class DOMCanonicalXMLC14N11Method extends ApacheCanonicalizer { public static final String C14N_11_WITH_COMMENTS = "http://www.w3.org/2006/12/xml-c14n11#WithComments"; + @Override public void init(TransformParameterSpec params) throws InvalidAlgorithmParameterException { if (params != null) { @@ -53,6 +55,7 @@ public void init(TransformParameterSpec params) } } + @Override public Data transform(Data data, XMLCryptoContext xc) throws TransformException { diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMCanonicalXMLC14NMethod.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMCanonicalXMLC14NMethod.java index e2d524b3450d8..4b60015766426 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMCanonicalXMLC14NMethod.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMCanonicalXMLC14NMethod.java @@ -25,12 +25,14 @@ */ package org.jcp.xml.dsig.internal.dom; -import javax.xml.crypto.*; -import javax.xml.crypto.dsig.*; -import javax.xml.crypto.dsig.spec.TransformParameterSpec; - import java.security.InvalidAlgorithmParameterException; +import javax.xml.crypto.Data; +import javax.xml.crypto.XMLCryptoContext; +import javax.xml.crypto.dsig.CanonicalizationMethod; +import javax.xml.crypto.dsig.TransformException; +import javax.xml.crypto.dsig.spec.TransformParameterSpec; + import com.sun.org.apache.xml.internal.security.c14n.Canonicalizer; import com.sun.org.apache.xml.internal.security.c14n.InvalidCanonicalizerException; @@ -41,6 +43,7 @@ */ public final class DOMCanonicalXMLC14NMethod extends ApacheCanonicalizer { + @Override public void init(TransformParameterSpec params) throws InvalidAlgorithmParameterException { if (params != null) { @@ -49,6 +52,7 @@ public void init(TransformParameterSpec params) } } + @Override public Data transform(Data data, XMLCryptoContext xc) throws TransformException { diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMCanonicalizationMethod.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMCanonicalizationMethod.java index ecef17f35aed0..c182a2253630b 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMCanonicalizationMethod.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMCanonicalizationMethod.java @@ -33,10 +33,14 @@ import java.util.HashSet; import java.util.Set; -import org.w3c.dom.Element; +import javax.xml.crypto.Data; +import javax.xml.crypto.MarshalException; +import javax.xml.crypto.XMLCryptoContext; +import javax.xml.crypto.dsig.CanonicalizationMethod; +import javax.xml.crypto.dsig.TransformException; +import javax.xml.crypto.dsig.TransformService; -import javax.xml.crypto.*; -import javax.xml.crypto.dsig.*; +import org.w3c.dom.Element; /** * DOM-based abstract implementation of CanonicalizationMethod. diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMCryptoBinary.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMCryptoBinary.java index 9a81a215d220b..1b1248104510b 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMCryptoBinary.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMCryptoBinary.java @@ -26,7 +26,8 @@ package org.jcp.xml.dsig.internal.dom; import java.math.BigInteger; -import javax.xml.crypto.*; + +import javax.xml.crypto.MarshalException; import javax.xml.crypto.dom.DOMCryptoContext; import com.sun.org.apache.xml.internal.security.utils.XMLUtils; diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMDigestMethod.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMDigestMethod.java index a4d5fea4ab60a..259c7a988fcad 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMDigestMethod.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMDigestMethod.java @@ -25,13 +25,15 @@ */ package org.jcp.xml.dsig.internal.dom; -import javax.xml.crypto.*; +import java.security.InvalidAlgorithmParameterException; +import java.security.spec.AlgorithmParameterSpec; + +import javax.xml.crypto.MarshalException; import javax.xml.crypto.dom.DOMCryptoContext; -import javax.xml.crypto.dsig.*; +import javax.xml.crypto.dsig.DigestMethod; +import javax.xml.crypto.dsig.XMLSignature; import javax.xml.crypto.dsig.spec.DigestMethodParameterSpec; -import java.security.InvalidAlgorithmParameterException; -import java.security.spec.AlgorithmParameterSpec; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; @@ -147,6 +149,7 @@ void checkParams(DigestMethodParameterSpec params) } } + @Override public final AlgorithmParameterSpec getParameterSpec() { return params; } @@ -251,9 +254,11 @@ static final class SHA1 extends DOMDigestMethod { SHA1(Element dmElem) throws MarshalException { super(dmElem); } + @Override public String getAlgorithm() { return DigestMethod.SHA1; } + @Override String getMessageDigestAlgorithm() { return "SHA-1"; } @@ -285,9 +290,11 @@ static final class SHA256 extends DOMDigestMethod { SHA256(Element dmElem) throws MarshalException { super(dmElem); } + @Override public String getAlgorithm() { return DigestMethod.SHA256; } + @Override String getMessageDigestAlgorithm() { return "SHA-256"; } @@ -301,9 +308,11 @@ static final class SHA384 extends DOMDigestMethod { SHA384(Element dmElem) throws MarshalException { super(dmElem); } + @Override public String getAlgorithm() { return SHA384; } + @Override String getMessageDigestAlgorithm() { return "SHA-384"; } @@ -317,9 +326,11 @@ static final class SHA512 extends DOMDigestMethod { SHA512(Element dmElem) throws MarshalException { super(dmElem); } + @Override public String getAlgorithm() { return DigestMethod.SHA512; } + @Override String getMessageDigestAlgorithm() { return "SHA-512"; } diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMEnvelopedTransform.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMEnvelopedTransform.java index a43cb81567c8e..9a0ba0b2cae66 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMEnvelopedTransform.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMEnvelopedTransform.java @@ -26,6 +26,7 @@ package org.jcp.xml.dsig.internal.dom; import java.security.InvalidAlgorithmParameterException; + import javax.xml.crypto.dsig.spec.TransformParameterSpec; /** @@ -35,6 +36,7 @@ */ public final class DOMEnvelopedTransform extends ApacheTransform { + @Override public void init(TransformParameterSpec params) throws InvalidAlgorithmParameterException { if (params != null) { diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMExcC14NMethod.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMExcC14NMethod.java index a8cd434874cf9..0490e78153735 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMExcC14NMethod.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMExcC14NMethod.java @@ -25,19 +25,24 @@ */ package org.jcp.xml.dsig.internal.dom; -import javax.xml.crypto.*; -import javax.xml.crypto.dsig.*; +import java.security.InvalidAlgorithmParameterException; +import java.security.spec.AlgorithmParameterSpec; +import java.util.ArrayList; +import java.util.List; + +import javax.xml.crypto.Data; +import javax.xml.crypto.MarshalException; +import javax.xml.crypto.XMLCryptoContext; +import javax.xml.crypto.XMLStructure; +import javax.xml.crypto.dsig.CanonicalizationMethod; +import javax.xml.crypto.dsig.TransformException; import javax.xml.crypto.dsig.spec.C14NMethodParameterSpec; import javax.xml.crypto.dsig.spec.ExcC14NParameterSpec; import javax.xml.crypto.dsig.spec.TransformParameterSpec; -import java.security.InvalidAlgorithmParameterException; -import java.security.spec.AlgorithmParameterSpec; -import java.util.*; - -import org.w3c.dom.Element; import com.sun.org.apache.xml.internal.security.c14n.Canonicalizer; import com.sun.org.apache.xml.internal.security.c14n.InvalidCanonicalizerException; +import org.w3c.dom.Element; /** * DOM-based implementation of CanonicalizationMethod for Exclusive @@ -47,6 +52,7 @@ */ public final class DOMExcC14NMethod extends ApacheCanonicalizer { + @Override public void init(TransformParameterSpec params) throws InvalidAlgorithmParameterException { @@ -59,6 +65,7 @@ public void init(TransformParameterSpec params) } } + @Override public void init(XMLStructure parent, XMLCryptoContext context) throws InvalidAlgorithmParameterException { @@ -137,6 +144,7 @@ public String getParamsNSURI() { return CanonicalizationMethod.EXCLUSIVE; } + @Override public Data transform(Data data, XMLCryptoContext xc) throws TransformException { diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMHMACSignatureMethod.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMHMACSignatureMethod.java index 40bb99c3145c1..0a9ef187573ce 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMHMACSignatureMethod.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMHMACSignatureMethod.java @@ -25,11 +25,6 @@ */ package org.jcp.xml.dsig.internal.dom; -import javax.xml.crypto.*; -import javax.xml.crypto.dsig.*; -import javax.xml.crypto.dsig.spec.HMACParameterSpec; -import javax.xml.crypto.dsig.spec.SignatureMethodParameterSpec; - import java.security.InvalidAlgorithmParameterException; import java.security.InvalidKeyException; import java.security.Key; @@ -38,12 +33,22 @@ import java.security.Provider; import java.security.SignatureException; import java.security.spec.AlgorithmParameterSpec; + import javax.crypto.Mac; import javax.crypto.SecretKey; -import org.w3c.dom.Document; -import org.w3c.dom.Element; +import javax.xml.crypto.MarshalException; +import javax.xml.crypto.dsig.SignatureMethod; +import javax.xml.crypto.dsig.SignedInfo; +import javax.xml.crypto.dsig.XMLSignContext; +import javax.xml.crypto.dsig.XMLSignature; +import javax.xml.crypto.dsig.XMLSignatureException; +import javax.xml.crypto.dsig.XMLValidateContext; +import javax.xml.crypto.dsig.spec.HMACParameterSpec; +import javax.xml.crypto.dsig.spec.SignatureMethodParameterSpec; import org.jcp.xml.dsig.internal.MacOutputStream; +import org.w3c.dom.Document; +import org.w3c.dom.Element; /** * DOM-based implementation of HMAC SignatureMethod. @@ -118,10 +123,12 @@ void checkParams(SignatureMethodParameterSpec params) } } + @Override public final AlgorithmParameterSpec getParameterSpec() { return params; } + @Override SignatureMethodParameterSpec unmarshalParams(Element paramsElem) throws MarshalException { @@ -135,6 +142,7 @@ SignatureMethodParameterSpec unmarshalParams(Element paramsElem) return new HMACParameterSpec(outputLength); } + @Override void marshalParams(Element parent, String prefix) throws MarshalException { @@ -147,6 +155,7 @@ void marshalParams(Element parent, String prefix) parent.appendChild(hmacElem); } + @Override boolean verify(Key key, SignedInfo si, byte[] sig, XMLValidateContext context) throws InvalidKeyException, SignatureException, XMLSignatureException @@ -178,6 +187,7 @@ boolean verify(Key key, SignedInfo si, byte[] sig, return MessageDigest.isEqual(sig, result); } + @Override byte[] sign(Key key, SignedInfo si, XMLSignContext context) throws InvalidKeyException, XMLSignatureException { @@ -206,6 +216,7 @@ byte[] sign(Key key, SignedInfo si, XMLSignContext context) return hmac.doFinal(); } + @Override boolean paramsEqual(AlgorithmParameterSpec spec) { if (getParameterSpec() == spec) { return true; @@ -218,6 +229,7 @@ boolean paramsEqual(AlgorithmParameterSpec spec) { return outputLength == ospec.getOutputLength(); } + @Override Type getAlgorithmType() { return Type.HMAC; } @@ -235,12 +247,15 @@ static final class SHA1 extends DOMHMACSignatureMethod { SHA1(Element dmElem) throws MarshalException { super(dmElem); } + @Override public String getAlgorithm() { return SignatureMethod.HMAC_SHA1; } + @Override String getJCAAlgorithm() { return "HmacSHA1"; } + @Override int getDigestLength() { return 160; } @@ -276,12 +291,15 @@ static final class SHA256 extends DOMHMACSignatureMethod { SHA256(Element dmElem) throws MarshalException { super(dmElem); } + @Override public String getAlgorithm() { return HMAC_SHA256; } + @Override String getJCAAlgorithm() { return "HmacSHA256"; } + @Override int getDigestLength() { return 256; } @@ -295,12 +313,15 @@ static final class SHA384 extends DOMHMACSignatureMethod { SHA384(Element dmElem) throws MarshalException { super(dmElem); } + @Override public String getAlgorithm() { return HMAC_SHA384; } + @Override String getJCAAlgorithm() { return "HmacSHA384"; } + @Override int getDigestLength() { return 384; } @@ -314,12 +335,15 @@ static final class SHA512 extends DOMHMACSignatureMethod { SHA512(Element dmElem) throws MarshalException { super(dmElem); } + @Override public String getAlgorithm() { return HMAC_SHA512; } + @Override String getJCAAlgorithm() { return "HmacSHA512"; } + @Override int getDigestLength() { return 512; } diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyInfo.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyInfo.java index 19cedafd9fc09..d13b47ccdcfb0 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyInfo.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyInfo.java @@ -141,14 +141,17 @@ public DOMKeyInfo(Element kiElem, XMLCryptoContext context, keyInfoTypes = Collections.unmodifiableList(content); } + @Override public String getId() { return id; } + @Override public List getContent() { return keyInfoTypes; } + @Override public void marshal(XMLStructure parent, XMLCryptoContext context) throws MarshalException { diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyInfoFactory.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyInfoFactory.java index 99ca1dce72204..cec1224affade 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyInfoFactory.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyInfoFactory.java @@ -28,8 +28,8 @@ import java.math.BigInteger; import java.security.KeyException; import java.security.PublicKey; -import java.security.interfaces.ECPublicKey; import java.security.interfaces.DSAPublicKey; +import java.security.interfaces.ECPublicKey; import java.security.interfaces.RSAPublicKey; import java.util.List; @@ -59,20 +59,24 @@ public final class DOMKeyInfoFactory extends KeyInfoFactory { public DOMKeyInfoFactory() { } + @Override @SuppressWarnings("rawtypes") public KeyInfo newKeyInfo(List content) { return newKeyInfo(content, null); } + @Override @SuppressWarnings({ "unchecked", "rawtypes" }) public KeyInfo newKeyInfo(List content, String id) { return new DOMKeyInfo(content, id); } + @Override public KeyName newKeyName(String name) { return new DOMKeyName(name); } + @Override public KeyValue newKeyValue(PublicKey key) throws KeyException { String algorithm = key.getAlgorithm(); if ("DSA".equals(algorithm)) { @@ -86,24 +90,29 @@ public KeyValue newKeyValue(PublicKey key) throws KeyException { } } + @Override public PGPData newPGPData(byte[] keyId) { return newPGPData(keyId, null, null); } + @Override @SuppressWarnings({ "rawtypes", "unchecked" }) public PGPData newPGPData(byte[] keyId, byte[] keyPacket, List other) { return new DOMPGPData(keyId, keyPacket, other); } + @Override @SuppressWarnings({ "rawtypes", "unchecked" }) public PGPData newPGPData(byte[] keyPacket, List other) { return new DOMPGPData(keyPacket, other); } + @Override public RetrievalMethod newRetrievalMethod(String uri) { return newRetrievalMethod(uri, null, null); } + @Override @SuppressWarnings({ "rawtypes", "unchecked" }) public RetrievalMethod newRetrievalMethod(String uri, String type, List transforms) { @@ -113,6 +122,7 @@ public RetrievalMethod newRetrievalMethod(String uri, String type, return new DOMRetrievalMethod(uri, type, transforms); } + @Override @SuppressWarnings({ "rawtypes" }) public X509Data newX509Data(List content) { return new DOMX509Data(content); @@ -124,6 +134,7 @@ public X509IssuerSerial newX509IssuerSerial(String issuerName, return new DOMX509IssuerSerial(issuerName, serialNumber); } + @Override public boolean isFeatureSupported(String feature) { if (feature == null) { throw new NullPointerException(); @@ -132,6 +143,7 @@ public boolean isFeatureSupported(String feature) { } } + @Override public URIDereferencer getURIDereferencer() { return DOMURIDereferencer.INSTANCE; } diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyName.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyName.java index 888a9c760247a..3c83e48880bc2 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyName.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyName.java @@ -64,6 +64,7 @@ public DOMKeyName(Element knElem) { name = knElem.getFirstChild().getNodeValue(); } + @Override public String getName() { return name; } diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyValue.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyValue.java index 307d0ae45ce20..0933c21bfd3d4 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyValue.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMKeyValue.java @@ -101,6 +101,7 @@ static KeyValue unmarshal(Element kvElem) throws MarshalException { } } + @Override public PublicKey getPublicKey() throws KeyException { if (publicKey == null) { throw new KeyException("can't convert KeyValue to PublicKey"); @@ -198,6 +199,7 @@ static final class RSA extends DOMKeyValue { super(elem); } + @Override void marshalPublicKey(Node parent, Document doc, String dsPrefix, DOMCryptoContext context) throws MarshalException { Element rsaElem = DOMUtils.createElement(doc, "RSAKeyValue", diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMManifest.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMManifest.java index be65eb8fb1f35..6ed7ee8025dcb 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMManifest.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMManifest.java @@ -25,12 +25,17 @@ */ package org.jcp.xml.dsig.internal.dom; -import javax.xml.crypto.*; -import javax.xml.crypto.dom.DOMCryptoContext; -import javax.xml.crypto.dsig.*; - import java.security.Provider; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import javax.xml.crypto.MarshalException; +import javax.xml.crypto.XMLCryptoContext; +import javax.xml.crypto.dom.DOMCryptoContext; +import javax.xml.crypto.dsig.Manifest; +import javax.xml.crypto.dsig.Reference; +import javax.xml.crypto.dsig.XMLSignature; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -114,6 +119,7 @@ public DOMManifest(Element manElem, XMLCryptoContext context, this.references = Collections.unmodifiableList(refs); } + @Override public String getId() { return id; } diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMPGPData.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMPGPData.java index f9802c4698d10..df591ce00ef64 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMPGPData.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMPGPData.java @@ -25,19 +25,21 @@ */ package org.jcp.xml.dsig.internal.dom; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; -import javax.xml.crypto.*; +import javax.xml.crypto.MarshalException; +import javax.xml.crypto.XMLStructure; import javax.xml.crypto.dom.DOMCryptoContext; import javax.xml.crypto.dsig.XMLSignature; import javax.xml.crypto.dsig.keyinfo.PGPData; +import com.sun.org.apache.xml.internal.security.utils.XMLUtils; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; -import com.sun.org.apache.xml.internal.security.utils.XMLUtils; - /** * DOM-based implementation of PGPData. * @@ -171,14 +173,17 @@ public DOMPGPData(Element pdElem) throws MarshalException { this.externalElements = Collections.unmodifiableList(other); } + @Override public byte[] getKeyId() { return keyId == null ? null : keyId.clone(); } + @Override public byte[] getKeyPacket() { return keyPacket == null ? null : keyPacket.clone(); } + @Override public List getExternalElements() { return externalElements; } diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMRSAPSSSignatureMethod.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMRSAPSSSignatureMethod.java index 8e4c2424eb7fb..c131ab689d735 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMRSAPSSSignatureMethod.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMRSAPSSSignatureMethod.java @@ -25,25 +25,33 @@ */ package org.jcp.xml.dsig.internal.dom; -import javax.xml.crypto.*; -import javax.xml.crypto.dsig.*; -import javax.xml.crypto.dsig.spec.RSAPSSParameterSpec; -import javax.xml.crypto.dsig.spec.SignatureMethodParameterSpec; - import java.io.IOException; -import java.security.*; +import java.security.InvalidAlgorithmParameterException; +import java.security.InvalidKeyException; +import java.security.Key; +import java.security.NoSuchAlgorithmException; +import java.security.PrivateKey; +import java.security.Provider; +import java.security.PublicKey; +import java.security.Signature; +import java.security.SignatureException; import java.security.spec.AlgorithmParameterSpec; import java.security.spec.MGF1ParameterSpec; import java.security.spec.PSSParameterSpec; -import org.w3c.dom.DOMException; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Text; +import javax.xml.crypto.MarshalException; +import javax.xml.crypto.dsig.*; +import javax.xml.crypto.dsig.spec.RSAPSSParameterSpec; +import javax.xml.crypto.dsig.spec.SignatureMethodParameterSpec; + import org.jcp.xml.dsig.internal.SignerOutputStream; import com.sun.org.apache.xml.internal.security.algorithms.implementations.SignatureBaseRSA.SignatureRSASSAPSS.DigestAlgorithm; import com.sun.org.apache.xml.internal.security.utils.Constants; import com.sun.org.apache.xml.internal.security.utils.XMLUtils; +import org.w3c.dom.DOMException; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Text; /** * DOM-based abstract implementation of SignatureMethod for RSA-PSS. @@ -125,10 +133,12 @@ void checkParams(SignatureMethodParameterSpec params) LOG.debug("Setting RSAPSSParameterSpec to: {}", params.toString()); } + @Override public final AlgorithmParameterSpec getParameterSpec() { return params; } + @Override void marshalParams(Element parent, String prefix) throws MarshalException { @@ -203,6 +213,7 @@ private static DigestAlgorithm validateDigestAlgorithm(String input) } } + @Override SignatureMethodParameterSpec unmarshalParams(Element paramsElem) throws MarshalException { @@ -250,6 +261,7 @@ SignatureMethodParameterSpec unmarshalParams(Element paramsElem) return DEFAULT_PSS_SPEC; } + @Override boolean verify(Key key, SignedInfo si, byte[] sig, XMLValidateContext context) throws InvalidKeyException, SignatureException, XMLSignatureException @@ -291,6 +303,7 @@ boolean verify(Key key, SignedInfo si, byte[] sig, } } + @Override byte[] sign(Key key, SignedInfo si, XMLSignContext context) throws InvalidKeyException, XMLSignatureException { @@ -318,7 +331,6 @@ byte[] sign(Key key, SignedInfo si, XMLSignContext context) throw new XMLSignatureException(e); } LOG.debug("Signature provider: {}", signature.getProvider()); - LOG.debug("Signing with key: {}", key); LOG.debug("JCA Algorithm: {}", getJCAAlgorithm()); try (SignerOutputStream outputStream = new SignerOutputStream(signature)) { diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java index d278808ea0572..69215340089b8 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java @@ -32,28 +32,52 @@ */ package org.jcp.xml.dsig.internal.dom; -import javax.xml.crypto.*; -import javax.xml.crypto.dsig.*; -import javax.xml.crypto.dom.DOMCryptoContext; -import javax.xml.crypto.dom.DOMURIReference; - -import java.io.*; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.net.URI; import java.net.URISyntaxException; -import java.security.*; -import java.util.*; +import java.security.AccessController; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.security.PrivilegedAction; +import java.security.Provider; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.Set; + +import javax.xml.crypto.Data; +import javax.xml.crypto.MarshalException; +import javax.xml.crypto.NodeSetData; +import javax.xml.crypto.OctetStreamData; +import javax.xml.crypto.URIDereferencer; +import javax.xml.crypto.URIReferenceException; +import javax.xml.crypto.XMLCryptoContext; +import javax.xml.crypto.dom.DOMCryptoContext; +import javax.xml.crypto.dom.DOMURIReference; +import javax.xml.crypto.dsig.CanonicalizationMethod; +import javax.xml.crypto.dsig.DigestMethod; +import javax.xml.crypto.dsig.Reference; +import javax.xml.crypto.dsig.Transform; +import javax.xml.crypto.dsig.TransformException; +import javax.xml.crypto.dsig.TransformService; +import javax.xml.crypto.dsig.XMLSignContext; +import javax.xml.crypto.dsig.XMLSignature; +import javax.xml.crypto.dsig.XMLSignatureException; +import javax.xml.crypto.dsig.XMLValidateContext; +import org.jcp.xml.dsig.internal.DigesterOutputStream; +import com.sun.org.apache.xml.internal.security.signature.XMLSignatureInput; +import com.sun.org.apache.xml.internal.security.utils.UnsyncBufferedOutputStream; +import com.sun.org.apache.xml.internal.security.utils.XMLUtils; import org.w3c.dom.Attr; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; -import com.sun.org.apache.xml.internal.security.utils.XMLUtils; - -import org.jcp.xml.dsig.internal.DigesterOutputStream; -import com.sun.org.apache.xml.internal.security.signature.XMLSignatureInput; -import com.sun.org.apache.xml.internal.security.utils.UnsyncBufferedOutputStream; - /** * DOM-based implementation of Reference. * @@ -270,30 +294,37 @@ public DOMReference(Element refElem, XMLCryptoContext context, this.provider = provider; } + @Override public DigestMethod getDigestMethod() { return digestMethod; } + @Override public String getId() { return id; } + @Override public String getURI() { return uri; } + @Override public String getType() { return type; } + @Override public List getTransforms() { return Collections.unmodifiableList(allTransforms); } + @Override public byte[] getDigestValue() { return digestValue == null ? null : digestValue.clone(); } + @Override public byte[] getCalculatedDigestValue() { return calcDigestValue == null ? null : calcDigestValue.clone(); @@ -372,6 +403,7 @@ public void digest(XMLSignContext signContext) LOG.debug("Reference digesting completed"); } + @Override public boolean validate(XMLValidateContext validateContext) throws XMLSignatureException { @@ -394,10 +426,12 @@ public boolean validate(XMLValidateContext validateContext) return validationStatus; } + @Override public Data getDereferencedData() { return derefData; } + @Override public InputStream getDigestInputStream() { return dis; } @@ -568,6 +602,7 @@ private byte[] transform(Data dereferencedData, } } + @Override public Node getHere() { return here; } @@ -631,6 +666,7 @@ private static Data copyDerefData(Data dereferencedData) { try { final Set s = xsi.getNodeSet(); return new NodeSetData() { + @Override public Iterator iterator() { return s.iterator(); } }; } catch (Exception e) { diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMRetrievalMethod.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMRetrievalMethod.java index 33343808fadc4..e5c92e8c5352c 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMRetrievalMethod.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMRetrievalMethod.java @@ -176,14 +176,17 @@ public DOMRetrievalMethod(Element rmElem, XMLCryptoContext context, } } + @Override public String getURI() { return uri; } + @Override public String getType() { return type; } + @Override public List getTransforms() { return transforms; } @@ -219,10 +222,12 @@ public void marshal(Node parent, String dsPrefix, DOMCryptoContext context) here = rmElem.getAttributeNodeNS(null, "URI"); } + @Override public Node getHere() { return here; } + @Override public Data dereference(XMLCryptoContext context) throws URIReferenceException { diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignatureMethod.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignatureMethod.java index 267e29d901d69..5e44ccaeae8b0 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignatureMethod.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignatureMethod.java @@ -25,23 +25,36 @@ */ package org.jcp.xml.dsig.internal.dom; -import javax.xml.crypto.*; -import javax.xml.crypto.dsig.*; -import javax.xml.crypto.dsig.spec.SignatureMethodParameterSpec; - import java.io.IOException; -import java.security.*; +import java.security.InvalidAlgorithmParameterException; +import java.security.InvalidKeyException; +import java.security.Key; +import java.security.NoSuchAlgorithmException; +import java.security.PrivateKey; +import java.security.Provider; +import java.security.PublicKey; +import java.security.Signature; +import java.security.SignatureException; import java.security.interfaces.DSAKey; import java.security.interfaces.ECPrivateKey; import java.security.spec.AlgorithmParameterSpec; import java.security.spec.MGF1ParameterSpec; import java.security.spec.PSSParameterSpec; -import org.w3c.dom.Element; +import javax.xml.crypto.XMLCryptoContext; +import javax.xml.crypto.MarshalException; +import javax.xml.crypto.dsig.SignatureMethod; +import javax.xml.crypto.dsig.SignedInfo; +import javax.xml.crypto.dsig.XMLSignContext; +import javax.xml.crypto.dsig.XMLSignatureException; +import javax.xml.crypto.dsig.XMLValidateContext; +import javax.xml.crypto.dsig.spec.SignatureMethodParameterSpec; +import org.jcp.xml.dsig.internal.SignerOutputStream; import com.sun.org.apache.xml.internal.security.algorithms.implementations.SignatureECDSA; import com.sun.org.apache.xml.internal.security.utils.JavaUtils; -import org.jcp.xml.dsig.internal.SignerOutputStream; +import org.w3c.dom.Element; + import sun.security.util.KeyUtil; /** @@ -103,6 +116,14 @@ public abstract class DOMSignatureMethod extends AbstractDOMSignatureMethod { "http://www.w3.org/2007/05/xmldsig-more#sha512-rsa-MGF1"; static final String RSA_RIPEMD160_MGF1 = "http://www.w3.org/2007/05/xmldsig-more#ripemd160-rsa-MGF1"; + static final String RSA_SHA3_224_MGF1 = + "http://www.w3.org/2007/05/xmldsig-more#sha3-224-rsa-MGF1"; + static final String RSA_SHA3_256_MGF1 = + "http://www.w3.org/2007/05/xmldsig-more#sha3-256-rsa-MGF1"; + static final String RSA_SHA3_384_MGF1 = + "http://www.w3.org/2007/05/xmldsig-more#sha3-384-rsa-MGF1"; + static final String RSA_SHA3_512_MGF1 = + "http://www.w3.org/2007/05/xmldsig-more#sha3-512-rsa-MGF1"; /** * Creates a {@code DOMSignatureMethod}. @@ -194,6 +215,14 @@ static SignatureMethod unmarshal(Element smElem) throws MarshalException { return new SHA384withRSAandMGF1(smElem); } else if (alg.equals(RSA_SHA512_MGF1)) { return new SHA512withRSAandMGF1(smElem); + } else if (alg.equals(RSA_SHA3_224_MGF1)) { + return new SHA3_224withRSAandMGF1(smElem); + } else if (alg.equals(RSA_SHA3_256_MGF1)) { + return new SHA3_256withRSAandMGF1(smElem); + } else if (alg.equals(RSA_SHA3_384_MGF1)) { + return new SHA3_384withRSAandMGF1(smElem); + } else if (alg.equals(RSA_SHA3_512_MGF1)) { + return new SHA3_512withRSAandMGF1(smElem); } else if (alg.equals(DOMRSAPSSSignatureMethod.RSA_PSS)) { return new DOMRSAPSSSignatureMethod.RSAPSS(smElem); } else if (alg.equals(RSA_RIPEMD160_MGF1)) { @@ -236,6 +265,7 @@ static SignatureMethod unmarshal(Element smElem) throws MarshalException { } } + @Override public final AlgorithmParameterSpec getParameterSpec() { return params; } @@ -257,6 +287,7 @@ Signature getSignature(Provider p) : Signature.getInstance(getJCAAlgorithm(), p); } + @Override boolean verify(Key key, SignedInfo si, byte[] sig, XMLValidateContext context) throws InvalidKeyException, SignatureException, XMLSignatureException @@ -323,6 +354,7 @@ private static void checkKeySize(XMLCryptoContext context, Key key) } } + @Override byte[] sign(Key key, SignedInfo si, XMLSignContext context) throws InvalidKeyException, XMLSignatureException { @@ -344,7 +376,6 @@ byte[] sign(Key key, SignedInfo si, XMLSignContext context) } signature.initSign((PrivateKey)key); LOG.debug("Signature provider: {}", signature.getProvider()); - LOG.debug("Signing with key: {}", key); LOG.debug("JCA Algorithm: {}", getJCAAlgorithm()); try (SignerOutputStream outputStream = new SignerOutputStream(signature)) { @@ -383,6 +414,11 @@ byte[] postSignFormat(Key key, byte[] sig) { byte[] preVerifyFormat(Key key, byte[] sig) { return sig; } + + @Override + Type getAlgorithmType() { + return Type.RSA; + } } abstract static class AbstractRSAPSSSignatureMethod @@ -397,7 +433,7 @@ abstract static class AbstractRSAPSSSignatureMethod super(dmElem); } - abstract public PSSParameterSpec getPSSParameterSpec(); + public abstract PSSParameterSpec getPSSParameterSpec(); @Override Signature getSignature(Provider p) @@ -413,9 +449,7 @@ Signature getSignature(Provider p) } return s; } catch (NoSuchAlgorithmException nsae) { - return (p == null) - ? Signature.getInstance(getJCAAlgorithm()) - : Signature.getInstance(getJCAAlgorithm(), p); + return super.getSignature(p); } } } @@ -509,6 +543,11 @@ byte[] preVerifyFormat(Key key, byte[] sig) throws IOException { return sig; } } + + @Override + Type getAlgorithmType() { + return Type.DSA; + } } abstract static class AbstractECDSASignatureMethod @@ -550,6 +589,11 @@ byte[] preVerifyFormat(Key key, byte[] sig) throws IOException { return sig; } } + + @Override + Type getAlgorithmType() { + return Type.ECDSA; + } } abstract static class AbstractEDDSASignatureMethod @@ -583,6 +627,10 @@ byte[] preVerifyFormat(Key key, byte[] sig) { return sig; } + @Override + Type getAlgorithmType() { + return Type.EDDSA; + } } static final class SHA1withRSA extends AbstractRSASignatureMethod { @@ -601,10 +649,6 @@ public String getAlgorithm() { String getJCAAlgorithm() { return "SHA1withRSA"; } - @Override - Type getAlgorithmType() { - return Type.RSA; - } } static final class SHA224withRSA extends AbstractRSASignatureMethod { @@ -615,15 +659,14 @@ static final class SHA224withRSA extends AbstractRSASignatureMethod { SHA224withRSA(Element dmElem) throws MarshalException { super(dmElem); } + @Override public String getAlgorithm() { return RSA_SHA224; } + @Override String getJCAAlgorithm() { return "SHA224withRSA"; } - Type getAlgorithmType() { - return Type.RSA; - } } static final class SHA256withRSA extends AbstractRSASignatureMethod { @@ -634,15 +677,14 @@ static final class SHA256withRSA extends AbstractRSASignatureMethod { SHA256withRSA(Element dmElem) throws MarshalException { super(dmElem); } + @Override public String getAlgorithm() { return RSA_SHA256; } + @Override String getJCAAlgorithm() { return "SHA256withRSA"; } - Type getAlgorithmType() { - return Type.RSA; - } } static final class SHA384withRSA extends AbstractRSASignatureMethod { @@ -653,15 +695,14 @@ static final class SHA384withRSA extends AbstractRSASignatureMethod { SHA384withRSA(Element dmElem) throws MarshalException { super(dmElem); } + @Override public String getAlgorithm() { return RSA_SHA384; } + @Override String getJCAAlgorithm() { return "SHA384withRSA"; } - Type getAlgorithmType() { - return Type.RSA; - } } static final class SHA512withRSA extends AbstractRSASignatureMethod { @@ -672,15 +713,14 @@ static final class SHA512withRSA extends AbstractRSASignatureMethod { SHA512withRSA(Element dmElem) throws MarshalException { super(dmElem); } + @Override public String getAlgorithm() { return RSA_SHA512; } + @Override String getJCAAlgorithm() { return "SHA512withRSA"; } - Type getAlgorithmType() { - return Type.RSA; - } } static final class RIPEMD160withRSA extends AbstractRSASignatureMethod { @@ -699,15 +739,11 @@ public String getAlgorithm() { String getJCAAlgorithm() { return "RIPEMD160withRSA"; } - @Override - Type getAlgorithmType() { - return Type.RSA; - } } static final class SHA1withRSAandMGF1 extends AbstractRSAPSSSignatureMethod { - private static PSSParameterSpec spec + private static final PSSParameterSpec SHA1_MGF1_PARAMS = new PSSParameterSpec("SHA-1", "MGF1", MGF1ParameterSpec.SHA1, 20, PSSParameterSpec.TRAILER_FIELD_BC); @@ -724,21 +760,17 @@ public String getAlgorithm() { } @Override public PSSParameterSpec getPSSParameterSpec() { - return spec; + return SHA1_MGF1_PARAMS; } @Override String getJCAAlgorithm() { return "SHA1withRSAandMGF1"; } - @Override - Type getAlgorithmType() { - return Type.RSA; - } } static final class SHA224withRSAandMGF1 extends AbstractRSAPSSSignatureMethod { - private static PSSParameterSpec spec + private static final PSSParameterSpec SHA224_MGF1_PARAMS = new PSSParameterSpec("SHA-224", "MGF1", MGF1ParameterSpec.SHA224, 28, PSSParameterSpec.TRAILER_FIELD_BC); @@ -755,21 +787,17 @@ public String getAlgorithm() { } @Override public PSSParameterSpec getPSSParameterSpec() { - return spec; + return SHA224_MGF1_PARAMS; } @Override String getJCAAlgorithm() { return "SHA224withRSAandMGF1"; } - @Override - Type getAlgorithmType() { - return Type.RSA; - } } static final class SHA256withRSAandMGF1 extends AbstractRSAPSSSignatureMethod { - private static PSSParameterSpec spec + private static final PSSParameterSpec SHA256_MGF1_PARAMS = new PSSParameterSpec("SHA-256", "MGF1", MGF1ParameterSpec.SHA256, 32, PSSParameterSpec.TRAILER_FIELD_BC); @@ -786,21 +814,17 @@ public String getAlgorithm() { } @Override public PSSParameterSpec getPSSParameterSpec() { - return spec; + return SHA256_MGF1_PARAMS; } @Override String getJCAAlgorithm() { return "SHA256withRSAandMGF1"; } - @Override - Type getAlgorithmType() { - return Type.RSA; - } } static final class SHA384withRSAandMGF1 extends AbstractRSAPSSSignatureMethod { - private static PSSParameterSpec spec + private static final PSSParameterSpec SHA384_MGF1_PARAMS = new PSSParameterSpec("SHA-384", "MGF1", MGF1ParameterSpec.SHA384, 48, PSSParameterSpec.TRAILER_FIELD_BC); @@ -817,21 +841,17 @@ public String getAlgorithm() { } @Override public PSSParameterSpec getPSSParameterSpec() { - return spec; + return SHA384_MGF1_PARAMS; } @Override String getJCAAlgorithm() { return "SHA384withRSAandMGF1"; } - @Override - Type getAlgorithmType() { - return Type.RSA; - } } static final class SHA512withRSAandMGF1 extends AbstractRSAPSSSignatureMethod { - private static PSSParameterSpec spec + private static final PSSParameterSpec SHA512_MGF1_PARAMS = new PSSParameterSpec("SHA-512", "MGF1", MGF1ParameterSpec.SHA512, 64, PSSParameterSpec.TRAILER_FIELD_BC); @@ -848,15 +868,123 @@ public String getAlgorithm() { } @Override public PSSParameterSpec getPSSParameterSpec() { - return spec; + return SHA512_MGF1_PARAMS; } @Override String getJCAAlgorithm() { return "SHA512withRSAandMGF1"; } + } + + static final class SHA3_224withRSAandMGF1 extends AbstractRSAPSSSignatureMethod { + + private static final PSSParameterSpec SHA3_224_MGF1_PARAMS + = new PSSParameterSpec("SHA3-224", "MGF1", + new MGF1ParameterSpec("SHA3-224"), 28, + PSSParameterSpec.TRAILER_FIELD_BC); + + SHA3_224withRSAandMGF1(AlgorithmParameterSpec params) + throws InvalidAlgorithmParameterException { + super(params); + } + SHA3_224withRSAandMGF1(Element dmElem) throws MarshalException { + super(dmElem); + } @Override - Type getAlgorithmType() { - return Type.RSA; + public String getAlgorithm() { + return RSA_SHA3_224_MGF1; + } + @Override + public PSSParameterSpec getPSSParameterSpec() { + return SHA3_224_MGF1_PARAMS; + } + @Override + String getJCAAlgorithm() { + return "SHA3-224withRSAandMGF1"; + } + } + + static final class SHA3_256withRSAandMGF1 extends AbstractRSAPSSSignatureMethod { + + private static final PSSParameterSpec SHA3_256_MGF1_PARAMS + = new PSSParameterSpec("SHA3-256", "MGF1", + new MGF1ParameterSpec("SHA3-256"), 32, + PSSParameterSpec.TRAILER_FIELD_BC); + + SHA3_256withRSAandMGF1(AlgorithmParameterSpec params) + throws InvalidAlgorithmParameterException { + super(params); + } + SHA3_256withRSAandMGF1(Element dmElem) throws MarshalException { + super(dmElem); + } + @Override + public String getAlgorithm() { + return RSA_SHA3_256_MGF1; + } + @Override + public PSSParameterSpec getPSSParameterSpec() { + return SHA3_256_MGF1_PARAMS; + } + @Override + String getJCAAlgorithm() { + return "SHA3-256withRSAandMGF1"; + } + } + + static final class SHA3_384withRSAandMGF1 extends AbstractRSAPSSSignatureMethod { + + private static final PSSParameterSpec SHA3_384_MGF1_PARAMS + = new PSSParameterSpec("SHA3-384", "MGF1", + new MGF1ParameterSpec("SHA3-384"), 48, + PSSParameterSpec.TRAILER_FIELD_BC); + + SHA3_384withRSAandMGF1(AlgorithmParameterSpec params) + throws InvalidAlgorithmParameterException { + super(params); + } + SHA3_384withRSAandMGF1(Element dmElem) throws MarshalException { + super(dmElem); + } + @Override + public String getAlgorithm() { + return RSA_SHA3_384_MGF1; + } + @Override + public PSSParameterSpec getPSSParameterSpec() { + return SHA3_384_MGF1_PARAMS; + } + @Override + String getJCAAlgorithm() { + return "SHA3-384withRSAandMGF1"; + } + } + + static final class SHA3_512withRSAandMGF1 extends AbstractRSAPSSSignatureMethod { + + private static final PSSParameterSpec SHA3_512_MGF1_PARAMS + = new PSSParameterSpec("SHA3-512", "MGF1", + new MGF1ParameterSpec("SHA3-512"), 64, + PSSParameterSpec.TRAILER_FIELD_BC); + + SHA3_512withRSAandMGF1(AlgorithmParameterSpec params) + throws InvalidAlgorithmParameterException { + super(params); + } + SHA3_512withRSAandMGF1(Element dmElem) throws MarshalException { + super(dmElem); + } + @Override + public String getAlgorithm() { + return RSA_SHA3_512_MGF1; + } + @Override + public PSSParameterSpec getPSSParameterSpec() { + return SHA3_512_MGF1_PARAMS; + } + @Override + String getJCAAlgorithm() { + return "SHA3-512withRSAandMGF1"; } } @@ -876,10 +1004,6 @@ public String getAlgorithm() { String getJCAAlgorithm() { return "RIPEMD160withRSAandMGF1"; } - @Override - Type getAlgorithmType() { - return Type.RSA; - } } static final class SHA1withDSA extends AbstractDSASignatureMethod { @@ -890,18 +1014,18 @@ static final class SHA1withDSA extends AbstractDSASignatureMethod { SHA1withDSA(Element dmElem) throws MarshalException { super(dmElem); } + @Override public String getAlgorithm() { return SignatureMethod.DSA_SHA1; } + @Override String getJCAAlgorithm() { return "SHA1withDSAinP1363Format"; } + @Override String getJCAFallbackAlgorithm() { return "SHA1withDSA"; } - Type getAlgorithmType() { - return Type.DSA; - } } static final class SHA256withDSA extends AbstractDSASignatureMethod { @@ -912,18 +1036,18 @@ static final class SHA256withDSA extends AbstractDSASignatureMethod { SHA256withDSA(Element dmElem) throws MarshalException { super(dmElem); } + @Override public String getAlgorithm() { return DSA_SHA256; } + @Override String getJCAAlgorithm() { return "SHA256withDSAinP1363Format"; } + @Override String getJCAFallbackAlgorithm() { return "SHA256withDSA"; } - Type getAlgorithmType() { - return Type.DSA; - } } static final class SHA1withECDSA extends AbstractECDSASignatureMethod { @@ -934,18 +1058,18 @@ static final class SHA1withECDSA extends AbstractECDSASignatureMethod { SHA1withECDSA(Element dmElem) throws MarshalException { super(dmElem); } + @Override public String getAlgorithm() { return ECDSA_SHA1; } + @Override String getJCAAlgorithm() { return "SHA1withECDSAinP1363Format"; } + @Override String getJCAFallbackAlgorithm() { return "SHA1withECDSA"; } - Type getAlgorithmType() { - return Type.ECDSA; - } } static final class SHA224withECDSA extends AbstractECDSASignatureMethod { @@ -964,13 +1088,10 @@ public String getAlgorithm() { String getJCAAlgorithm() { return "SHA224withECDSAinP1363Format"; } + @Override String getJCAFallbackAlgorithm() { return "SHA224withECDSA"; } - @Override - Type getAlgorithmType() { - return Type.ECDSA; - } } static final class SHA256withECDSA extends AbstractECDSASignatureMethod { @@ -981,18 +1102,18 @@ static final class SHA256withECDSA extends AbstractECDSASignatureMethod { SHA256withECDSA(Element dmElem) throws MarshalException { super(dmElem); } + @Override public String getAlgorithm() { return ECDSA_SHA256; } + @Override String getJCAAlgorithm() { return "SHA256withECDSAinP1363Format"; } + @Override String getJCAFallbackAlgorithm() { return "SHA256withECDSA"; } - Type getAlgorithmType() { - return Type.ECDSA; - } } static final class SHA384withECDSA extends AbstractECDSASignatureMethod { @@ -1003,18 +1124,18 @@ static final class SHA384withECDSA extends AbstractECDSASignatureMethod { SHA384withECDSA(Element dmElem) throws MarshalException { super(dmElem); } + @Override public String getAlgorithm() { return ECDSA_SHA384; } + @Override String getJCAAlgorithm() { return "SHA384withECDSAinP1363Format"; } + @Override String getJCAFallbackAlgorithm() { return "SHA384withECDSA"; } - Type getAlgorithmType() { - return Type.ECDSA; - } } static final class SHA512withECDSA extends AbstractECDSASignatureMethod { @@ -1025,18 +1146,18 @@ static final class SHA512withECDSA extends AbstractECDSASignatureMethod { SHA512withECDSA(Element dmElem) throws MarshalException { super(dmElem); } + @Override public String getAlgorithm() { return ECDSA_SHA512; } + @Override String getJCAAlgorithm() { return "SHA512withECDSAinP1363Format"; } + @Override String getJCAFallbackAlgorithm() { return "SHA512withECDSA"; } - Type getAlgorithmType() { - return Type.ECDSA; - } } static final class RIPEMD160withECDSA extends AbstractECDSASignatureMethod { @@ -1055,13 +1176,10 @@ public String getAlgorithm() { String getJCAAlgorithm() { return "RIPEMD160withECDSAinP1363Format"; // Is this real? } + @Override String getJCAFallbackAlgorithm() { return "RIPEMD160withECDSA"; } - @Override - Type getAlgorithmType() { - return Type.ECDSA; - } } static final class EDDSA_ED25519 extends AbstractEDDSASignatureMethod { @@ -1084,11 +1202,6 @@ public String getAlgorithm() { String getJCAAlgorithm() { return "Ed25519"; } - - @Override - Type getAlgorithmType() { - return Type.EDDSA; - } } static final class EDDSA_ED448 extends AbstractEDDSASignatureMethod { @@ -1110,10 +1223,5 @@ public String getAlgorithm() { String getJCAAlgorithm() { return "Ed448"; } - - @Override - Type getAlgorithmType() { - return Type.EDDSA; - } } } diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignatureProperties.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignatureProperties.java index efa9d3fc80ab3..ba72b2725ea1d 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignatureProperties.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignatureProperties.java @@ -25,11 +25,15 @@ */ package org.jcp.xml.dsig.internal.dom; -import javax.xml.crypto.*; -import javax.xml.crypto.dom.DOMCryptoContext; -import javax.xml.crypto.dsig.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; -import java.util.*; +import javax.xml.crypto.MarshalException; +import javax.xml.crypto.dom.DOMCryptoContext; +import javax.xml.crypto.dsig.SignatureProperties; +import javax.xml.crypto.dsig.SignatureProperty; +import javax.xml.crypto.dsig.XMLSignature; import org.w3c.dom.Attr; import org.w3c.dom.Document; @@ -117,10 +121,12 @@ public DOMSignatureProperties(Element propsElem) } } + @Override public List getProperties() { return properties; } + @Override public String getId() { return id; } diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignatureProperty.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignatureProperty.java index 136847b491f0b..61994cd85f815 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignatureProperty.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignatureProperty.java @@ -25,11 +25,15 @@ */ package org.jcp.xml.dsig.internal.dom; -import javax.xml.crypto.*; -import javax.xml.crypto.dom.DOMCryptoContext; -import javax.xml.crypto.dsig.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; -import java.util.*; +import javax.xml.crypto.MarshalException; +import javax.xml.crypto.XMLStructure; +import javax.xml.crypto.dom.DOMCryptoContext; +import javax.xml.crypto.dsig.SignatureProperty; +import javax.xml.crypto.dsig.XMLSignature; import org.w3c.dom.Attr; import org.w3c.dom.Document; @@ -117,14 +121,17 @@ public DOMSignatureProperty(Element propElem) } } + @Override public List getContent() { return content; } + @Override public String getId() { return id; } + @Override public String getTarget() { return target; } diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignedInfo.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignedInfo.java index f4f8bfd438667..170b179564b99 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignedInfo.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMSignedInfo.java @@ -25,28 +25,38 @@ */ package org.jcp.xml.dsig.internal.dom; -import javax.xml.crypto.*; -import javax.xml.crypto.dom.DOMCryptoContext; -import javax.xml.crypto.dsig.*; -import javax.xml.crypto.dsig.spec.RSAPSSParameterSpec; - import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; +import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import java.io.IOException; import java.security.Provider; import java.security.spec.AlgorithmParameterSpec; import java.security.spec.MGF1ParameterSpec; import java.security.spec.PSSParameterSpec; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import javax.xml.crypto.MarshalException; +import javax.xml.crypto.XMLCryptoContext; +import javax.xml.crypto.dom.DOMCryptoContext; +import javax.xml.crypto.dsig.CanonicalizationMethod; +import javax.xml.crypto.dsig.Reference; +import javax.xml.crypto.dsig.SignatureMethod; +import javax.xml.crypto.dsig.SignedInfo; +import javax.xml.crypto.dsig.TransformException; +import javax.xml.crypto.dsig.XMLSignature; +import javax.xml.crypto.dsig.XMLSignatureException; +import javax.xml.crypto.dsig.spec.RSAPSSParameterSpec; import com.sun.org.apache.xml.internal.security.algorithms.implementations.SignatureBaseRSA; +import com.sun.org.apache.xml.internal.security.utils.UnsyncBufferedOutputStream; +import com.sun.org.apache.xml.internal.security.utils.XMLUtils; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; -import com.sun.org.apache.xml.internal.security.utils.UnsyncBufferedOutputStream; -import com.sun.org.apache.xml.internal.security.utils.XMLUtils; + /** * DOM-based implementation of SignedInfo. @@ -57,9 +67,9 @@ public final class DOMSignedInfo extends DOMStructure implements SignedInfo { private static final com.sun.org.slf4j.internal.Logger LOG = com.sun.org.slf4j.internal.LoggerFactory.getLogger(DOMSignedInfo.class); - private List references; - private CanonicalizationMethod canonicalizationMethod; - private SignatureMethod signatureMethod; + private final List references; + private final CanonicalizationMethod canonicalizationMethod; + private final SignatureMethod signatureMethod; private String id; private Document ownerDoc; private Element localSiElem; @@ -86,17 +96,13 @@ public DOMSignedInfo(CanonicalizationMethod cm, SignatureMethod sm, } this.canonicalizationMethod = cm; this.signatureMethod = sm; - this.references = Collections.unmodifiableList( - new ArrayList<>(references)); + this.references = Collections.unmodifiableList(new ArrayList<>(references)); if (this.references.isEmpty()) { - throw new IllegalArgumentException("list of references must " + - "contain at least one entry"); + throw new IllegalArgumentException("list of references must contain at least one entry"); } - for (int i = 0, size = this.references.size(); i < size; i++) { - Object obj = this.references.get(i); + for (Object obj : this.references) { if (!(obj instanceof Reference)) { - throw new ClassCastException("list of references contains " + - "an illegal type"); + throw new ClassCastException("list of references contains an illegal " + obj.getClass()); } } } @@ -210,22 +216,27 @@ public DOMSignedInfo(Element siElem, XMLCryptoContext context, Provider provider references = Collections.unmodifiableList(refList); } + @Override public CanonicalizationMethod getCanonicalizationMethod() { return canonicalizationMethod; } + @Override public SignatureMethod getSignatureMethod() { return signatureMethod; } + @Override public String getId() { return id; } + @Override public List getReferences() { return references; } + @Override public InputStream getCanonicalizedData() { return canonData; } @@ -249,8 +260,8 @@ public void canonicalize(XMLCryptoContext context, ByteArrayOutputStream bos) if (LOG.isDebugEnabled()) { LOG.debug("Canonicalized SignedInfo:"); StringBuilder sb = new StringBuilder(signedInfoBytes.length); - for (int i = 0; i < signedInfoBytes.length; i++) { - sb.append((char)signedInfoBytes[i]); + for (byte signedInfoByte : signedInfoBytes) { + sb.append((char) signedInfoByte); } LOG.debug(sb.toString()); LOG.debug("Data to be signed/verified:" + XMLUtils.encodeToString(signedInfoBytes)); diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMStructure.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMStructure.java index e7ddd0050dfc0..77818ea27c27b 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMStructure.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMStructure.java @@ -25,12 +25,13 @@ */ package org.jcp.xml.dsig.internal.dom; +import java.util.List; + import javax.xml.crypto.MarshalException; import javax.xml.crypto.XMLStructure; import javax.xml.crypto.dom.DOMCryptoContext; -import org.w3c.dom.Node; -import java.util.List; +import org.w3c.dom.Node; /** * DOM-based abstract implementation of XMLStructure. @@ -38,6 +39,7 @@ */ public abstract class DOMStructure implements XMLStructure { + @Override public final boolean isFeatureSupported(String feature) { if (feature == null) { throw new NullPointerException(); diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMSubTreeData.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMSubTreeData.java index 404942e72bf4b..dab41a917e05f 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMSubTreeData.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMSubTreeData.java @@ -25,12 +25,14 @@ */ package org.jcp.xml.dsig.internal.dom; -import javax.xml.crypto.NodeSetData; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.ListIterator; import java.util.NoSuchElementException; + +import javax.xml.crypto.NodeSetData; + import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; @@ -79,6 +81,7 @@ static class DelayedNodeIterator implements Iterator { this.withComments = !excludeComments; } + @Override public boolean hasNext() { if (nodeSet == null) { nodeSet = dereferenceSameDocumentURI(root); @@ -87,6 +90,7 @@ public boolean hasNext() { return li.hasNext(); } + @Override public Node next() { if (nodeSet == null) { nodeSet = dereferenceSameDocumentURI(root); @@ -99,6 +103,7 @@ public Node next() { } } + @Override public void remove() { throw new UnsupportedOperationException(); } diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMTransform.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMTransform.java index fd6a89229c49d..0e6fce6e60129 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMTransform.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMTransform.java @@ -98,10 +98,12 @@ public DOMTransform(Element transElem, XMLCryptoContext context, } } + @Override public final AlgorithmParameterSpec getParameterSpec() { return spi.getParameterSpec(); } + @Override public final String getAlgorithm() { return spi.getAlgorithm(); } @@ -145,6 +147,7 @@ public void marshal(Node parent, String dsPrefix, DOMCryptoContext context) * @throws XMLSignatureException if an unexpected error occurs while * executing the transform */ + @Override public Data transform(Data data, XMLCryptoContext xc) throws TransformException { @@ -164,6 +167,7 @@ public Data transform(Data data, XMLCryptoContext xc) * @throws XMLSignatureException if an unexpected error occurs while * executing the transform */ + @Override public Data transform(Data data, XMLCryptoContext xc, OutputStream os) throws TransformException { diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMURIDereferencer.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMURIDereferencer.java index e72642bbff355..212ffc9676ddd 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMURIDereferencer.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMURIDereferencer.java @@ -25,18 +25,23 @@ */ package org.jcp.xml.dsig.internal.dom; -import org.w3c.dom.Attr; -import org.w3c.dom.Element; -import org.w3c.dom.Node; +import javax.xml.crypto.Data; +import javax.xml.crypto.URIDereferencer; +import javax.xml.crypto.URIReference; +import javax.xml.crypto.URIReferenceException; +import javax.xml.crypto.XMLCryptoContext; +import javax.xml.crypto.dom.DOMCryptoContext; +import javax.xml.crypto.dom.DOMURIReference; import com.sun.org.apache.xml.internal.security.Init; +import com.sun.org.apache.xml.internal.security.signature.XMLSignatureInput; import com.sun.org.apache.xml.internal.security.utils.XMLUtils; import com.sun.org.apache.xml.internal.security.utils.resolver.ResourceResolver; import com.sun.org.apache.xml.internal.security.utils.resolver.ResourceResolverContext; -import com.sun.org.apache.xml.internal.security.signature.XMLSignatureInput; +import org.w3c.dom.Attr; +import org.w3c.dom.Element; +import org.w3c.dom.Node; -import javax.xml.crypto.*; -import javax.xml.crypto.dom.*; import java.net.URI; /** @@ -53,6 +58,7 @@ private DOMURIDereferencer() { Init.init(); } + @Override public Data dereference(URIReference uriRef, XMLCryptoContext context) throws URIReferenceException { diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMX509Data.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMX509Data.java index bf8de888bb5b3..2da7628d266b5 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMX509Data.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMX509Data.java @@ -46,12 +46,11 @@ import javax.xml.crypto.dsig.keyinfo.X509Data; import javax.xml.crypto.dsig.keyinfo.X509IssuerSerial; +import com.sun.org.apache.xml.internal.security.utils.XMLUtils; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; -import com.sun.org.apache.xml.internal.security.utils.XMLUtils; - /** * DOM-based implementation of X509Data. * @@ -134,6 +133,7 @@ public DOMX509Data(Element xdElem) throws MarshalException { this.content = Collections.unmodifiableList(newContent); } + @Override public List getContent() { return content; } @@ -147,8 +147,7 @@ public void marshal(Node parent, String dsPrefix, DOMCryptoContext context) XMLSignature.XMLNS, dsPrefix); // append children and preserve order - for (int i = 0, size = content.size(); i < size; i++) { - Object object = content.get(i); + for (Object object : content) { if (object instanceof X509Certificate) { marshalCert((X509Certificate)object,xdElem,ownerDoc,dsPrefix); } else if (object instanceof XMLStructure) { diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMX509IssuerSerial.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMX509IssuerSerial.java index 959b78636b959..c20088479bc3c 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMX509IssuerSerial.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMX509IssuerSerial.java @@ -25,14 +25,14 @@ */ package org.jcp.xml.dsig.internal.dom; +import java.math.BigInteger; + +import javax.security.auth.x500.X500Principal; import javax.xml.crypto.MarshalException; import javax.xml.crypto.dom.DOMCryptoContext; import javax.xml.crypto.dsig.XMLSignature; import javax.xml.crypto.dsig.keyinfo.X509IssuerSerial; -import java.math.BigInteger; - -import javax.security.auth.x500.X500Principal; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; @@ -88,10 +88,12 @@ public DOMX509IssuerSerial(Element isElem) throws MarshalException { serialNumber = new BigInteger(sNElem.getFirstChild().getNodeValue()); } + @Override public String getIssuerName() { return issuerName; } + @Override public BigInteger getSerialNumber() { return serialNumber; } diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLObject.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLObject.java index 925a6b81baf2d..bf36537e30828 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLObject.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLObject.java @@ -25,12 +25,17 @@ */ package org.jcp.xml.dsig.internal.dom; -import javax.xml.crypto.*; -import javax.xml.crypto.dom.DOMCryptoContext; -import javax.xml.crypto.dsig.*; - import java.security.Provider; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import javax.xml.crypto.MarshalException; +import javax.xml.crypto.XMLCryptoContext; +import javax.xml.crypto.XMLStructure; +import javax.xml.crypto.dom.DOMCryptoContext; +import javax.xml.crypto.dsig.XMLObject; +import javax.xml.crypto.dsig.XMLSignature; import org.w3c.dom.Attr; import org.w3c.dom.Document; @@ -145,18 +150,22 @@ public DOMXMLObject(Element objElem, XMLCryptoContext context, this.objectElem = objElem; } + @Override public List getContent() { return content; } + @Override public String getId() { return id; } + @Override public String getMimeType() { return mimeType; } + @Override public String getEncoding() { return encoding; } diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLSignature.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLSignature.java index 746a1e57cabea..30b35b45bc9c4 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLSignature.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLSignature.java @@ -32,29 +32,42 @@ */ package org.jcp.xml.dsig.internal.dom; -import javax.xml.crypto.*; -import javax.xml.crypto.dom.*; -import javax.xml.crypto.dsig.*; -import javax.xml.crypto.dsig.dom.DOMSignContext; -import javax.xml.crypto.dsig.dom.DOMValidateContext; -import javax.xml.crypto.dsig.keyinfo.KeyInfo; - import java.security.InvalidKeyException; import java.security.Key; import java.security.Provider; -import java.util.Collections; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import javax.xml.crypto.KeySelector; +import javax.xml.crypto.KeySelectorException; +import javax.xml.crypto.KeySelectorResult; +import javax.xml.crypto.MarshalException; +import javax.xml.crypto.XMLCryptoContext; +import javax.xml.crypto.XMLStructure; +import javax.xml.crypto.dom.DOMCryptoContext; +import javax.xml.crypto.dsig.Manifest; +import javax.xml.crypto.dsig.Reference; +import javax.xml.crypto.dsig.SignatureMethod; +import javax.xml.crypto.dsig.SignedInfo; +import javax.xml.crypto.dsig.Transform; +import javax.xml.crypto.dsig.XMLObject; +import javax.xml.crypto.dsig.XMLSignContext; +import javax.xml.crypto.dsig.XMLSignature; +import javax.xml.crypto.dsig.XMLSignatureException; +import javax.xml.crypto.dsig.XMLValidateContext; +import javax.xml.crypto.dsig.dom.DOMSignContext; +import javax.xml.crypto.dsig.dom.DOMValidateContext; +import javax.xml.crypto.dsig.keyinfo.KeyInfo; + +import com.sun.org.apache.xml.internal.security.utils.XMLUtils; import org.w3c.dom.Attr; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; -import com.sun.org.apache.xml.internal.security.utils.XMLUtils; - /** * DOM-based implementation of XMLSignature. * @@ -64,11 +77,11 @@ public final class DOMXMLSignature extends DOMStructure private static final com.sun.org.slf4j.internal.Logger LOG = com.sun.org.slf4j.internal.LoggerFactory.getLogger(DOMXMLSignature.class); - private String id; - private SignatureValue sv; + private final String id; + private final SignatureValue sv; private KeyInfo ki; private List objects; - private SignedInfo si; + private final SignedInfo si; private Document ownerDoc = null; private Element localSigElem = null; private Element sigElem = null; @@ -174,26 +187,32 @@ public DOMXMLSignature(Element sigElem, XMLCryptoContext context, } } + @Override public String getId() { return id; } + @Override public KeyInfo getKeyInfo() { return ki; } + @Override public SignedInfo getSignedInfo() { return si; } + @Override public List getObjects() { return objects; } + @Override public SignatureValue getSignatureValue() { return sv; } + @Override public KeySelectorResult getKeySelectorResult() { return ksr; } @@ -234,8 +253,8 @@ public void marshal(Node parent, Node nextSibling, String dsPrefix, } // create and append Object elements if necessary - for (int i = 0, size = objects.size(); i < size; i++) { - ((DOMXMLObject)objects.get(i)).marshal(sigElem, dsPrefix, context); + for (XMLObject object : objects) { + ((DOMXMLObject)object).marshal(sigElem, dsPrefix, context); } // append Id attribute @@ -460,13 +479,12 @@ private void digestReference(DOMReference ref, XMLSignContext signContext) if (parsedId != null && signatureIdMap.containsKey(parsedId)) { XMLStructure xs = signatureIdMap.get(parsedId); if (xs instanceof DOMReference) { - digestReference((DOMReference)xs, signContext); + digestReference((DOMReference) xs, signContext); } else if (xs instanceof Manifest) { - Manifest man = (Manifest)xs; + Manifest man = (Manifest) xs; List manRefs = DOMManifest.getManifestReferences(man); - for (int i = 0, size = manRefs.size(); i < size; i++) { - digestReference((DOMReference)manRefs.get(i), - signContext); + for (Reference manRef : manRefs) { + digestReference((DOMReference) manRef, signContext); } } } @@ -518,10 +536,12 @@ public class DOMSignatureValue extends DOMStructure this.sigValueElem = sigValueElem; } + @Override public String getId() { return id; } + @Override public byte[] getValue() { return (value == null) ? null : value.clone(); } @@ -605,6 +625,7 @@ public int hashCode() { return result; } + @Override public void marshal(Node parent, String dsPrefix, DOMCryptoContext context) throws MarshalException diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLSignatureFactory.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLSignatureFactory.java index 5ee0f78a05362..119bf16bc3236 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLSignatureFactory.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMXMLSignatureFactory.java @@ -25,17 +25,37 @@ */ package org.jcp.xml.dsig.internal.dom; -import javax.xml.crypto.*; -import javax.xml.crypto.dom.DOMCryptoContext; -import javax.xml.crypto.dsig.*; -import javax.xml.crypto.dsig.dom.DOMValidateContext; -import javax.xml.crypto.dsig.keyinfo.*; -import javax.xml.crypto.dsig.spec.*; - import java.security.InvalidAlgorithmParameterException; import java.security.NoSuchAlgorithmException; import java.util.List; +import javax.xml.crypto.Data; +import javax.xml.crypto.MarshalException; +import javax.xml.crypto.URIDereferencer; +import javax.xml.crypto.XMLCryptoContext; +import javax.xml.crypto.XMLStructure; +import javax.xml.crypto.dom.DOMCryptoContext; +import javax.xml.crypto.dsig.CanonicalizationMethod; +import javax.xml.crypto.dsig.DigestMethod; +import javax.xml.crypto.dsig.Manifest; +import javax.xml.crypto.dsig.Reference; +import javax.xml.crypto.dsig.SignatureMethod; +import javax.xml.crypto.dsig.SignatureProperties; +import javax.xml.crypto.dsig.SignatureProperty; +import javax.xml.crypto.dsig.SignedInfo; +import javax.xml.crypto.dsig.Transform; +import javax.xml.crypto.dsig.TransformService; +import javax.xml.crypto.dsig.XMLObject; +import javax.xml.crypto.dsig.XMLSignature; +import javax.xml.crypto.dsig.XMLSignatureFactory; +import javax.xml.crypto.dsig.XMLValidateContext; +import javax.xml.crypto.dsig.dom.DOMValidateContext; +import javax.xml.crypto.dsig.keyinfo.KeyInfo; +import javax.xml.crypto.dsig.spec.C14NMethodParameterSpec; +import javax.xml.crypto.dsig.spec.DigestMethodParameterSpec; +import javax.xml.crypto.dsig.spec.SignatureMethodParameterSpec; +import javax.xml.crypto.dsig.spec.TransformParameterSpec; + import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; @@ -51,20 +71,24 @@ public final class DOMXMLSignatureFactory extends XMLSignatureFactory { */ public DOMXMLSignatureFactory() {} + @Override public XMLSignature newXMLSignature(SignedInfo si, KeyInfo ki) { return new DOMXMLSignature(si, ki, null, null, null); } + @Override @SuppressWarnings({ "unchecked", "rawtypes" }) public XMLSignature newXMLSignature(SignedInfo si, KeyInfo ki, List objects, String id, String signatureValueId) { return new DOMXMLSignature(si, ki, objects, id, signatureValueId); } + @Override public Reference newReference(String uri, DigestMethod dm) { return newReference(uri, dm, null, null, null); } + @Override @SuppressWarnings({ "unchecked", "rawtypes" }) public Reference newReference(String uri, DigestMethod dm, List transforms, String type, String id) { @@ -89,6 +113,7 @@ public Reference newReference(String uri, DigestMethod dm, (uri, type, dm, appliedTransforms, result, transforms, id, getProvider()); } + @Override @SuppressWarnings({ "unchecked", "rawtypes" }) public Reference newReference(String uri, DigestMethod dm, List transforms, String type, String id, byte[] digestValue) { @@ -99,12 +124,14 @@ public Reference newReference(String uri, DigestMethod dm, List transforms, (uri, type, dm, null, null, transforms, id, digestValue, getProvider()); } + @Override @SuppressWarnings({ "rawtypes" }) public SignedInfo newSignedInfo(CanonicalizationMethod cm, SignatureMethod sm, List references) { return newSignedInfo(cm, sm, references, null); } + @Override @SuppressWarnings({ "unchecked", "rawtypes" }) public SignedInfo newSignedInfo(CanonicalizationMethod cm, SignatureMethod sm, List references, String id) { @@ -112,33 +139,39 @@ public SignedInfo newSignedInfo(CanonicalizationMethod cm, } // Object factory methods + @Override @SuppressWarnings({ "unchecked", "rawtypes" }) public XMLObject newXMLObject(List content, String id, String mimeType, String encoding) { return new DOMXMLObject(content, id, mimeType, encoding); } + @Override @SuppressWarnings({ "rawtypes" }) public Manifest newManifest(List references) { return newManifest(references, null); } + @Override @SuppressWarnings({ "unchecked", "rawtypes" }) public Manifest newManifest(List references, String id) { return new DOMManifest(references, id); } + @Override @SuppressWarnings({ "unchecked", "rawtypes" }) public SignatureProperties newSignatureProperties(List props, String id) { return new DOMSignatureProperties(props, id); } + @Override @SuppressWarnings({ "unchecked", "rawtypes" }) public SignatureProperty newSignatureProperty (List info, String target, String id) { return new DOMSignatureProperty(info, target, id); } + @Override public XMLSignature unmarshalXMLSignature(XMLValidateContext context) throws MarshalException { @@ -148,6 +181,7 @@ public XMLSignature unmarshalXMLSignature(XMLValidateContext context) return unmarshal(((DOMValidateContext) context).getNode(), context); } + @Override public XMLSignature unmarshalXMLSignature(XMLStructure xmlStructure) throws MarshalException { @@ -201,6 +235,7 @@ private XMLSignature unmarshal(Node node, XMLCryptoContext context) } } + @Override public boolean isFeatureSupported(String feature) { if (feature == null) { throw new NullPointerException(); @@ -209,6 +244,7 @@ public boolean isFeatureSupported(String feature) { } } + @Override public DigestMethod newDigestMethod(String algorithm, DigestMethodParameterSpec params) throws NoSuchAlgorithmException, InvalidAlgorithmParameterException { @@ -242,6 +278,7 @@ public DigestMethod newDigestMethod(String algorithm, } } + @Override public SignatureMethod newSignatureMethod(String algorithm, SignatureMethodParameterSpec params) throws NoSuchAlgorithmException, InvalidAlgorithmParameterException { @@ -270,6 +307,14 @@ public SignatureMethod newSignatureMethod(String algorithm, return new DOMSignatureMethod.SHA384withRSAandMGF1(params); } else if (algorithm.equals(DOMSignatureMethod.RSA_SHA512_MGF1)) { return new DOMSignatureMethod.SHA512withRSAandMGF1(params); + } else if (algorithm.equals(DOMSignatureMethod.RSA_SHA3_224_MGF1)) { + return new DOMSignatureMethod.SHA3_224withRSAandMGF1(params); + } else if (algorithm.equals(DOMSignatureMethod.RSA_SHA3_256_MGF1)) { + return new DOMSignatureMethod.SHA3_256withRSAandMGF1(params); + } else if (algorithm.equals(DOMSignatureMethod.RSA_SHA3_384_MGF1)) { + return new DOMSignatureMethod.SHA3_384withRSAandMGF1(params); + } else if (algorithm.equals(DOMSignatureMethod.RSA_SHA3_512_MGF1)) { + return new DOMSignatureMethod.SHA3_512withRSAandMGF1(params); } else if (algorithm.equals(DOMRSAPSSSignatureMethod.RSA_PSS)) { return new DOMRSAPSSSignatureMethod.RSAPSS(params); } else if (algorithm.equals(DOMSignatureMethod.RSA_RIPEMD160_MGF1)) { @@ -311,6 +356,7 @@ public SignatureMethod newSignatureMethod(String algorithm, } } + @Override public Transform newTransform(String algorithm, TransformParameterSpec params) throws NoSuchAlgorithmException, InvalidAlgorithmParameterException { @@ -330,6 +376,7 @@ public Transform newTransform(String algorithm, return new DOMTransform(spi); } + @Override public Transform newTransform(String algorithm, XMLStructure params) throws NoSuchAlgorithmException, InvalidAlgorithmParameterException { @@ -352,6 +399,7 @@ public Transform newTransform(String algorithm, return new DOMTransform(spi); } + @Override public CanonicalizationMethod newCanonicalizationMethod(String algorithm, C14NMethodParameterSpec params) throws NoSuchAlgorithmException, InvalidAlgorithmParameterException { @@ -370,6 +418,7 @@ public CanonicalizationMethod newCanonicalizationMethod(String algorithm, return new DOMCanonicalizationMethod(spi); } + @Override public CanonicalizationMethod newCanonicalizationMethod(String algorithm, XMLStructure params) throws NoSuchAlgorithmException, InvalidAlgorithmParameterException { @@ -392,6 +441,7 @@ public CanonicalizationMethod newCanonicalizationMethod(String algorithm, return new DOMCanonicalizationMethod(spi); } + @Override public URIDereferencer getURIDereferencer() { return DOMURIDereferencer.INSTANCE; } diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMXPathFilter2Transform.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMXPathFilter2Transform.java index 1d538aa3eddd5..bb7fee9f1cea5 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMXPathFilter2Transform.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMXPathFilter2Transform.java @@ -58,6 +58,7 @@ */ public final class DOMXPathFilter2Transform extends ApacheTransform { + @Override public void init(TransformParameterSpec params) throws InvalidAlgorithmParameterException { @@ -70,6 +71,7 @@ public void init(TransformParameterSpec params) this.params = params; } + @Override public void init(XMLStructure parent, XMLCryptoContext context) throws InvalidAlgorithmParameterException { @@ -125,6 +127,7 @@ private void unmarshalParams(Element curXPathElem) throws MarshalException this.params = new XPathFilter2ParameterSpec(list); } + @Override public void marshalParams(XMLStructure parent, XMLCryptoContext context) throws MarshalException { diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMXPathTransform.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMXPathTransform.java index 9888e63d74a2f..b427f7be4be05 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMXPathTransform.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMXPathTransform.java @@ -61,6 +61,7 @@ public void init(TransformParameterSpec params) this.params = params; } + @Override public void init(XMLStructure parent, XMLCryptoContext context) throws InvalidAlgorithmParameterException { @@ -89,6 +90,7 @@ private void unmarshalParams(Element paramsElem) { } } + @Override public void marshalParams(XMLStructure parent, XMLCryptoContext context) throws MarshalException { diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMXSLTTransform.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMXSLTTransform.java index 2551f949ae135..467157f4e6faf 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMXSLTTransform.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMXSLTTransform.java @@ -26,13 +26,16 @@ package org.jcp.xml.dsig.internal.dom; import java.security.InvalidAlgorithmParameterException; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import javax.xml.crypto.*; +import javax.xml.crypto.MarshalException; +import javax.xml.crypto.XMLCryptoContext; +import javax.xml.crypto.XMLStructure; import javax.xml.crypto.dsig.spec.TransformParameterSpec; import javax.xml.crypto.dsig.spec.XSLTTransformParameterSpec; +import org.w3c.dom.Element; +import org.w3c.dom.Node; + /** * DOM-based implementation of XSLT Transform. * (Uses Apache XML-Sec Transform implementation) @@ -52,6 +55,7 @@ public void init(TransformParameterSpec params) this.params = params; } + @Override public void init(XMLStructure parent, XMLCryptoContext context) throws InvalidAlgorithmParameterException { @@ -64,6 +68,7 @@ private void unmarshalParams(Element sheet) { (new javax.xml.crypto.dom.DOMStructure(sheet)); } + @Override public void marshalParams(XMLStructure parent, XMLCryptoContext context) throws MarshalException { super.marshalParams(parent, context); diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/Utils.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/Utils.java index 0e2a832e14503..70fb50e3c31d0 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/Utils.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/Utils.java @@ -30,8 +30,12 @@ import java.io.IOException; import java.security.AccessController; import java.security.PrivilegedAction; -import java.util.*; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; + import javax.xml.crypto.XMLCryptoContext; + import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; diff --git a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/XMLDSigRI.java b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/XMLDSigRI.java index f169a44391c38..2982291c8e253 100644 --- a/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/XMLDSigRI.java +++ b/src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/XMLDSigRI.java @@ -32,10 +32,18 @@ */ package org.jcp.xml.dsig.internal.dom; -import java.util.*; -import java.security.*; - -import javax.xml.crypto.dsig.*; +import java.security.AccessController; +import java.security.InvalidParameterException; +import java.security.NoSuchAlgorithmException; +import java.security.PrivilegedAction; +import java.security.Provider; +import java.security.ProviderException; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + +import javax.xml.crypto.dsig.CanonicalizationMethod; +import javax.xml.crypto.dsig.Transform; /** * The XMLDSig RI Provider. @@ -134,7 +142,7 @@ public Object newInstance(Object ctrParamObj) @SuppressWarnings("removal") public XMLDSigRI() { // This is the JDK XMLDSig provider, synced from - // Apache Santuario XML Security for Java, version 3.0.2 + // Apache Santuario XML Security for Java, version 3.0.3 super("XMLDSig", VER, INFO); final Provider p = this; diff --git a/src/java.xml.crypto/share/legal/santuario.md b/src/java.xml.crypto/share/legal/santuario.md index bee55d85a83f8..768f0c7b144a4 100644 --- a/src/java.xml.crypto/share/legal/santuario.md +++ b/src/java.xml.crypto/share/legal/santuario.md @@ -1,4 +1,4 @@ -## Apache Santuario v3.0.2 +## Apache Santuario v3.0.3 ### Apache 2.0 License ``` diff --git a/test/jdk/javax/xml/crypto/dsig/GenerationTests.java b/test/jdk/javax/xml/crypto/dsig/GenerationTests.java index 53cb147fa1d46..7ab2c7f4e9345 100644 --- a/test/jdk/javax/xml/crypto/dsig/GenerationTests.java +++ b/test/jdk/javax/xml/crypto/dsig/GenerationTests.java @@ -101,6 +101,7 @@ public class GenerationTests { ecdsaSha1, ecdsaSha224, ecdsaSha256, ecdsaSha384, ecdsaSha512, hmacSha1, hmacSha224, hmacSha256, hmacSha384, hmacSha512, rsaSha1mgf1, rsaSha224mgf1, rsaSha256mgf1, rsaSha384mgf1, rsaSha512mgf1, + rsaSha3_224mgf1, rsaSha3_256mgf1, rsaSha3_384mgf1, rsaSha3_512mgf1, rsaShaPSS, ed25519, ed448; private static DigestMethod sha1, sha224, sha256, sha384, sha512, sha3_224, sha3_256, sha3_384, sha3_512; @@ -209,6 +210,7 @@ public class GenerationTests { SignatureMethod.ECDSA_SHA256, SignatureMethod.HMAC_SHA256, SignatureMethod.SHA256_RSA_MGF1, + SignatureMethod.SHA3_256_RSA_MGF1, SignatureMethod.RSA_PSS, SignatureMethod.ED25519); @@ -242,9 +244,9 @@ public class GenerationTests { }) .toArray(String[]::new); - // As of JDK 17, the number of defined algorithms are... + // As of JDK 22, the number of defined algorithms are... static { - if (allSignatureMethods.length != 25 + if (allSignatureMethods.length != 29 || allDigestMethods.length != 9) { System.out.println(Arrays.toString(allSignatureMethods)); System.out.println(Arrays.toString(allDigestMethods)); @@ -334,6 +336,10 @@ public static void main(String args[]) throws Exception { test_create_signature_enveloping_sha512_rsa_sha256_mgf1(); test_create_signature_enveloping_sha512_rsa_sha384_mgf1(); test_create_signature_enveloping_sha512_rsa_sha512_mgf1(); + test_create_signature_enveloping_sha512_rsa_sha3_224_mgf1(); + test_create_signature_enveloping_sha512_rsa_sha3_256_mgf1(); + test_create_signature_enveloping_sha512_rsa_sha3_384_mgf1(); + test_create_signature_enveloping_sha512_rsa_sha3_512_mgf1(); test_create_signature_enveloping_sha512_rsa_pss(); test_create_signature_reference_dependency(); test_create_signature_with_attr_in_no_namespace(); @@ -542,6 +548,10 @@ private static void setup() throws Exception { rsaSha256mgf1 = fac.newSignatureMethod(SignatureMethod.SHA256_RSA_MGF1, null); rsaSha384mgf1 = fac.newSignatureMethod(SignatureMethod.SHA384_RSA_MGF1, null); rsaSha512mgf1 = fac.newSignatureMethod(SignatureMethod.SHA512_RSA_MGF1, null); + rsaSha3_224mgf1 = fac.newSignatureMethod(SignatureMethod.SHA3_224_RSA_MGF1, null); + rsaSha3_256mgf1 = fac.newSignatureMethod(SignatureMethod.SHA3_256_RSA_MGF1, null); + rsaSha3_384mgf1 = fac.newSignatureMethod(SignatureMethod.SHA3_384_RSA_MGF1, null); + rsaSha3_512mgf1 = fac.newSignatureMethod(SignatureMethod.SHA3_512_RSA_MGF1, null); rsaShaPSS = fac.newSignatureMethod(SignatureMethod. RSA_PSS, null); ecdsaSha1 = fac.newSignatureMethod(SignatureMethod.ECDSA_SHA1, null); @@ -807,6 +817,38 @@ static void test_create_signature_enveloping_sha512_rsa_sha512_mgf1() System.out.println(); } + static void test_create_signature_enveloping_sha512_rsa_sha3_224_mgf1() + throws Exception { + System.out.println("* Generating signature-enveloping-sha512-rsa_sha3_224_mgf1.xml"); + test_create_signature_enveloping(sha512, rsaSha3_224mgf1, rsa1024, + getPrivateKey("RSA", 1024), kvks, false, true); + System.out.println(); + } + + static void test_create_signature_enveloping_sha512_rsa_sha3_256_mgf1() + throws Exception { + System.out.println("* Generating signature-enveloping-sha512-rsa_sha3_256_mgf1.xml"); + test_create_signature_enveloping(sha512, rsaSha3_256mgf1, rsa1024, + getPrivateKey("RSA", 1024), kvks, false, true); + System.out.println(); + } + + static void test_create_signature_enveloping_sha512_rsa_sha3_384_mgf1() + throws Exception { + System.out.println("* Generating signature-enveloping-sha512-rsa_sha3_384_mgf1.xml"); + test_create_signature_enveloping(sha512, rsaSha3_384mgf1, rsa1024, + getPrivateKey("RSA", 1024), kvks, false, true); + System.out.println(); + } + + static void test_create_signature_enveloping_sha512_rsa_sha3_512_mgf1() + throws Exception { + System.out.println("* Generating signature-enveloping-sha512-rsa_sha3_512_mgf1.xml"); + test_create_signature_enveloping(sha512, rsaSha3_512mgf1, rsa2048, + getPrivateKey("RSA", 2048), kvks, false, true); + System.out.println(); + } + static void test_create_signature_enveloping_sha512_rsa_pss() throws Exception { System.out.println("* Generating signature-enveloping-sha512_rsa_pss.xml"); @@ -1973,7 +2015,7 @@ private static Key[] getCachedKeys(String signatureMethod) { || sm.contains("-rsa-MGF1")) { kpg = KeyPairGenerator.getInstance("RSA"); kpg.initialize( - sm.contains("#sha512-rsa-MGF1") ? 2048 : 1024); + sm.contains("512-rsa-MGF1") ? 2048 : 1024); } else if (sm.contains("#dsa-")) { kpg = KeyPairGenerator.getInstance("DSA"); kpg.initialize(1024); From f69e6653f86a7dd781db6c8523f114c0d3f7ccbc Mon Sep 17 00:00:00 2001 From: Phil Race Date: Tue, 21 Nov 2023 17:46:29 +0000 Subject: [PATCH 010/250] 8318364: Add an FFM-based implementation of harfbuzz OpenType layout Reviewed-by: jdv, psadhukhan --- src/java.base/share/classes/module-info.java | 1 + .../share/classes/sun/font/HBShaper.java | 659 ++++++++++++++++++ .../classes/sun/font/SunLayoutEngine.java | 30 +- .../native/libfontmanager/HBShaper_Panama.c | 145 ++++ .../native/libfontmanager/hb-jdk-font-p.cc | 241 +++++++ .../share/native/libfontmanager/hb-jdk-p.h | 89 +++ .../font/GlyphVector/LayoutCompatTest.java | 214 ++++++ 7 files changed, 1376 insertions(+), 3 deletions(-) create mode 100644 src/java.desktop/share/classes/sun/font/HBShaper.java create mode 100644 src/java.desktop/share/native/libfontmanager/HBShaper_Panama.c create mode 100644 src/java.desktop/share/native/libfontmanager/hb-jdk-font-p.cc create mode 100644 src/java.desktop/share/native/libfontmanager/hb-jdk-p.h create mode 100644 test/jdk/java/awt/font/GlyphVector/LayoutCompatTest.java diff --git a/src/java.base/share/classes/module-info.java b/src/java.base/share/classes/module-info.java index 161cbe380cf8f..2a4c5aa81ed90 100644 --- a/src/java.base/share/classes/module-info.java +++ b/src/java.base/share/classes/module-info.java @@ -148,6 +148,7 @@ // module declaration be annotated with jdk.internal.javac.ParticipatesInPreview exports jdk.internal.javac to java.compiler, + java.desktop, // for ScopedValue jdk.compiler, jdk.incubator.vector, jdk.jshell; diff --git a/src/java.desktop/share/classes/sun/font/HBShaper.java b/src/java.desktop/share/classes/sun/font/HBShaper.java new file mode 100644 index 0000000000000..90877623c2b33 --- /dev/null +++ b/src/java.desktop/share/classes/sun/font/HBShaper.java @@ -0,0 +1,659 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +package sun.font; + +import java.awt.geom.Point2D; +import sun.font.GlyphLayout.GVData; +import sun.java2d.Disposer; +import sun.java2d.DisposerRecord; + +import java.lang.foreign.Arena; +import java.lang.foreign.FunctionDescriptor; +import java.lang.foreign.Linker; +import java.lang.foreign.MemoryLayout; +import java.lang.foreign.MemorySegment; +import static java.lang.foreign.MemorySegment.NULL; +import java.lang.foreign.SequenceLayout; +import java.lang.foreign.StructLayout; +import java.lang.foreign.SymbolLookup; +import java.lang.foreign.UnionLayout; +import static java.lang.foreign.ValueLayout.*; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; +import java.lang.invoke.VarHandle; + +import java.util.Optional; +import java.util.WeakHashMap; + +public class HBShaper { + + /* + * union _hb_var_int_t { + * uint32_t u32; + * int32_t i32; + * uint16_t u16[2]; + * int16_t i16[2]; + * uint8_t u8[4]; + * int8_t i8[4]; + * }; + */ + private static final UnionLayout VarIntLayout = MemoryLayout.unionLayout( + JAVA_INT.withName("u32"), + JAVA_INT.withName("i32"), + MemoryLayout.sequenceLayout(2, JAVA_SHORT).withName("u16"), + MemoryLayout.sequenceLayout(2, JAVA_SHORT).withName("i16"), + MemoryLayout.sequenceLayout(4, JAVA_BYTE).withName("u8"), + MemoryLayout.sequenceLayout(4, JAVA_BYTE).withName("i8") + ).withName("_hb_var_int_t"); + + /* + * struct hb_glyph_position_t { + * hb_position_t x_advance; + * hb_position_t y_advance; + * hb_position_t x_offset; + * hb_position_t y_offset; + * hb_var_int_t var; + * }; + */ + private static final StructLayout PositionLayout = MemoryLayout.structLayout( + JAVA_INT.withName("x_advance"), + JAVA_INT.withName("y_advance"), + JAVA_INT.withName("x_offset"), + JAVA_INT.withName("y_offset"), + VarIntLayout.withName("var") + ).withName("hb_glyph_position_t"); + + /** + * struct hb_glyph_info_t { + * hb_codepoint_t codepoint; + * hb_mask_t mask; + * uint32_t cluster; + * hb_var_int_t var1; + * hb_var_int_t var2; + * }; + */ + private static final StructLayout GlyphInfoLayout = MemoryLayout.structLayout( + JAVA_INT.withName("codepoint"), + JAVA_INT.withName("mask"), + JAVA_INT.withName("cluster"), + VarIntLayout.withName("var1"), + VarIntLayout.withName("var2") + ).withName("hb_glyph_info_t"); + + private static VarHandle getVarHandle(StructLayout struct, String name) { + VarHandle h = struct.arrayElementVarHandle(PathElement.groupElement(name)); + /* insert 0 offset so don't need to pass arg every time */ + return MethodHandles.insertCoordinates(h, 1, 0L).withInvokeExactBehavior(); + } + + private static final VarHandle x_offsetHandle; + private static final VarHandle y_offsetHandle; + private static final VarHandle x_advanceHandle; + private static final VarHandle y_advanceHandle; + private static final VarHandle codePointHandle; + private static final VarHandle clusterHandle; + + private static final MethodHandles.Lookup MH_LOOKUP; + private static final Linker LINKER; + private static final SymbolLookup SYM_LOOKUP; + private static final MethodHandle malloc_handle; + private static final MethodHandle create_face_handle; + private static final MethodHandle dispose_face_handle; + private static final MethodHandle jdk_hb_shape_handle; + + /* hb_jdk_font_funcs_struct is a pointer to a harfbuzz font_funcs + * object which references the 5 following upcall stubs. + * The singleton shared font_funcs ptr is passed down in each + * call to shape() and installed on the hb_font. + */ + private static final MemorySegment hb_jdk_font_funcs_struct; + private static final MemorySegment get_var_glyph_stub; + private static final MemorySegment get_nominal_glyph_stub; + private static final MemorySegment get_h_advance_stub; + private static final MemorySegment get_v_advance_stub; + private static final MemorySegment get_contour_pt_stub; + + private static final MemorySegment store_layout_results_stub; + + private static FunctionDescriptor + getFunctionDescriptor(MemoryLayout retType, + MemoryLayout... argTypes) { + + return (retType == null) ? + FunctionDescriptor.ofVoid(argTypes) : + FunctionDescriptor.of(retType, argTypes); + } + + private static MethodHandle getMethodHandle + (String mName, + FunctionDescriptor fd) { + + try { + MethodType mType = fd.toMethodType(); + return MH_LOOKUP.findStatic(HBShaper.class, mName, mType); + } catch (IllegalAccessException | NoSuchMethodException e) { + return null; + } + } + + static { + MH_LOOKUP = MethodHandles.lookup(); + LINKER = Linker.nativeLinker(); + SYM_LOOKUP = SymbolLookup.loaderLookup().or(LINKER.defaultLookup()); + FunctionDescriptor mallocDescriptor = + FunctionDescriptor.of(ADDRESS, JAVA_LONG); + Optional malloc_symbol = SYM_LOOKUP.find("malloc"); + @SuppressWarnings("restricted") + MethodHandle tmp1 = LINKER.downcallHandle(malloc_symbol.get(), mallocDescriptor); + malloc_handle = tmp1; + + FunctionDescriptor createFaceDescriptor = + FunctionDescriptor.of(ADDRESS, ADDRESS); + Optional create_face_symbol = SYM_LOOKUP.find("HBCreateFace"); + @SuppressWarnings("restricted") + MethodHandle tmp2 = LINKER.downcallHandle(create_face_symbol.get(), createFaceDescriptor); + create_face_handle = tmp2; + + FunctionDescriptor disposeFaceDescriptor = FunctionDescriptor.ofVoid(ADDRESS); + Optional dispose_face_symbol = SYM_LOOKUP.find("HBDisposeFace"); + @SuppressWarnings("restricted") + MethodHandle tmp3 = LINKER.downcallHandle(dispose_face_symbol.get(), disposeFaceDescriptor); + dispose_face_handle = tmp3; + + FunctionDescriptor shapeDesc = FunctionDescriptor.ofVoid( + //JAVA_INT, // return type + JAVA_FLOAT, // ptSize + ADDRESS, // matrix + ADDRESS, // face + ADDRESS, // chars + JAVA_INT, // len + JAVA_INT, // script + JAVA_INT, // offset + JAVA_INT, // limit + JAVA_INT, // baseIndex + JAVA_FLOAT, // startX + JAVA_FLOAT, // startY + JAVA_INT, // flags, + JAVA_INT, // slot, + ADDRESS, // ptr to harfbuzz font_funcs object. + ADDRESS); // store_results_fn + + Optional shape_sym = SYM_LOOKUP.find("jdk_hb_shape"); + @SuppressWarnings("restricted") + MethodHandle tmp4 = LINKER.downcallHandle(shape_sym.get(), shapeDesc); + jdk_hb_shape_handle = tmp4; + + Arena garena = Arena.global(); // creating stubs that exist until VM exit. + FunctionDescriptor get_var_glyph_fd = getFunctionDescriptor(JAVA_INT, // return type + ADDRESS, ADDRESS, JAVA_INT, JAVA_INT, ADDRESS, ADDRESS); // arg types + MethodHandle get_var_glyph_mh = + getMethodHandle("get_variation_glyph", get_var_glyph_fd); + @SuppressWarnings("restricted") + MemorySegment tmp5 = LINKER.upcallStub(get_var_glyph_mh, get_var_glyph_fd, garena); + get_var_glyph_stub = tmp5; + + FunctionDescriptor get_nominal_glyph_fd = getFunctionDescriptor(JAVA_INT, // return type + ADDRESS, ADDRESS, JAVA_INT, ADDRESS, ADDRESS); // arg types + MethodHandle get_nominal_glyph_mh = + getMethodHandle("get_nominal_glyph", get_nominal_glyph_fd); + @SuppressWarnings("restricted") + MemorySegment tmp6 = LINKER.upcallStub(get_nominal_glyph_mh, get_nominal_glyph_fd, garena); + get_nominal_glyph_stub = tmp6; + + FunctionDescriptor get_h_adv_fd = getFunctionDescriptor(JAVA_INT, // return type + ADDRESS, ADDRESS, JAVA_INT, ADDRESS); // arg types + MethodHandle get_h_adv_mh = + getMethodHandle("get_glyph_h_advance", get_h_adv_fd); + @SuppressWarnings("restricted") + MemorySegment tmp7 = LINKER.upcallStub(get_h_adv_mh, get_h_adv_fd, garena); + get_h_advance_stub = tmp7; + + FunctionDescriptor get_v_adv_fd = getFunctionDescriptor(JAVA_INT, // return type + ADDRESS, ADDRESS, JAVA_INT, ADDRESS); // arg types + MethodHandle get_v_adv_mh = + getMethodHandle("get_glyph_v_advance", get_v_adv_fd); + @SuppressWarnings("restricted") + MemorySegment tmp8 = LINKER.upcallStub(get_v_adv_mh, get_v_adv_fd, garena); + get_v_advance_stub = tmp8; + + FunctionDescriptor get_contour_pt_fd = getFunctionDescriptor(JAVA_INT, // return type + ADDRESS, ADDRESS, JAVA_INT, JAVA_INT, ADDRESS, ADDRESS, ADDRESS); // arg types + MethodHandle get_contour_pt_mh = + getMethodHandle("get_glyph_contour_point", get_contour_pt_fd); + @SuppressWarnings("restricted") + MemorySegment tmp9 = LINKER.upcallStub(get_contour_pt_mh, get_contour_pt_fd, garena); + get_contour_pt_stub = tmp9; + + /* Having now created the font upcall stubs, we can call down to create + * the native harfbuzz object holding these. + */ + FunctionDescriptor createFontFuncsDescriptor = FunctionDescriptor.of( + ADDRESS, // hb_font_funcs* return type + ADDRESS, // glyph_fn upcall stub + ADDRESS, // variation_fn upcall stub + ADDRESS, // h_advance_fn upcall stub + ADDRESS, // v_advance_fn upcall stub + ADDRESS); // contour_pt_fn upcall stub + Optional create_font_funcs_symbol = SYM_LOOKUP.find("HBCreateFontFuncs"); + @SuppressWarnings("restricted") + MethodHandle create_font_funcs_handle = + LINKER.downcallHandle(create_font_funcs_symbol.get(), createFontFuncsDescriptor); + + MemorySegment s = null; + try { + s = (MemorySegment)create_font_funcs_handle.invokeExact( + get_nominal_glyph_stub, + get_var_glyph_stub, + get_h_advance_stub, + get_v_advance_stub, + get_contour_pt_stub); + } catch (Throwable t) { + t.printStackTrace(); + } + hb_jdk_font_funcs_struct = s; + + FunctionDescriptor store_layout_fd = + FunctionDescriptor.ofVoid( + JAVA_INT, // slot + JAVA_INT, // baseIndex + JAVA_INT, // offset + JAVA_FLOAT, // startX + JAVA_FLOAT, // startX + JAVA_FLOAT, // devScale + JAVA_INT, // charCount + JAVA_INT, // glyphCount + ADDRESS, // glyphInfo + ADDRESS); // glyphPos + MethodHandle store_layout_mh = + getMethodHandle("store_layout_results", store_layout_fd); + @SuppressWarnings("restricted") + MemorySegment tmp10 = LINKER.upcallStub(store_layout_mh, store_layout_fd, garena); + store_layout_results_stub = tmp10; + + x_offsetHandle = getVarHandle(PositionLayout, "x_offset"); + y_offsetHandle = getVarHandle(PositionLayout, "y_offset"); + x_advanceHandle = getVarHandle(PositionLayout, "x_advance"); + y_advanceHandle = getVarHandle(PositionLayout, "y_advance"); + codePointHandle = getVarHandle(GlyphInfoLayout, "codepoint"); + clusterHandle = getVarHandle(GlyphInfoLayout, "cluster"); + } + + + /* + * This is expensive but it is done just once per font. + * The unbound stub could be cached but the savings would + * be very low in the only case it is used. + */ + @SuppressWarnings("restricted") + private static MemorySegment getBoundUpcallStub + (Arena arena, Class clazz, Object bindArg, String mName, + MemoryLayout retType, MemoryLayout... argTypes) { + + try { + FunctionDescriptor nativeDescriptor = + (retType == null) ? + FunctionDescriptor.ofVoid(argTypes) : + FunctionDescriptor.of(retType, argTypes); + MethodType mType = nativeDescriptor.toMethodType(); + mType = mType.insertParameterTypes(0, clazz); + MethodHandle mh = MH_LOOKUP.findStatic(HBShaper.class, mName, mType); + MethodHandle bound_handle = mh.bindTo(bindArg); + return LINKER.upcallStub(bound_handle, nativeDescriptor, arena); + } catch (IllegalAccessException | NoSuchMethodException e) { + return null; + } + } + + private static int get_nominal_glyph( + MemorySegment font_ptr, /* Not used */ + MemorySegment font_data, /* Not used */ + int unicode, + MemorySegment glyph, /* pointer to location to store glyphID */ + MemorySegment user_data /* Not used */ + ) { + + Font2D font2D = scopedVars.get().font(); + int glyphID = font2D.charToGlyph(unicode); + @SuppressWarnings("restricted") + MemorySegment glyphIDPtr = glyph.reinterpret(4); + glyphIDPtr.setAtIndex(JAVA_INT, 0, glyphID); + return (glyphID != 0) ? 1 : 0; + } + + private static int get_variation_glyph( + MemorySegment font_ptr, /* Not used */ + MemorySegment font_data, /* Not used */ + int unicode, + int variation_selector, + MemorySegment glyph, /* pointer to location to store glyphID */ + MemorySegment user_data /* Not used */ + ) { + Font2D font2D = scopedVars.get().font(); + int glyphID = font2D.charToVariationGlyph(unicode, variation_selector); + @SuppressWarnings("restricted") + MemorySegment glyphIDPtr = glyph.reinterpret(4); + glyphIDPtr.setAtIndex(JAVA_INT, 0, glyphID); + return (glyphID != 0) ? 1 : 0; + } + + private static final float HBFloatToFixedScale = ((float)(1 << 16)); + private static final int HBFloatToFixed(float f) { + return ((int)((f) * HBFloatToFixedScale)); + } + + private static int get_glyph_h_advance( + MemorySegment font_ptr, /* Not used */ + MemorySegment font_data, /* Not used */ + int glyph, + MemorySegment user_data /* Not used */ + ) { + FontStrike strike = scopedVars.get().fontStrike(); + Point2D.Float pt = strike.getGlyphMetrics(glyph); + return (pt != null) ? HBFloatToFixed(pt.x) : 0; + } + + private static int get_glyph_v_advance( + MemorySegment font_ptr, /* Not used */ + MemorySegment font_data, /* Not used */ + int glyph, + MemorySegment user_data /* Not used */ + ) { + + FontStrike strike = scopedVars.get().fontStrike(); + Point2D.Float pt = strike.getGlyphMetrics(glyph); + return (pt != null) ? HBFloatToFixed(pt.y) : 0; + } + + /* + * This class exists to make the code that uses it less verbose + */ + private static class IntPtr { + MemorySegment seg; + IntPtr(MemorySegment seg) { + } + + void set(int i) { + seg.setAtIndex(JAVA_INT, 0, i); + } + } + + private static int get_glyph_contour_point( + MemorySegment font_ptr, /* Not used */ + MemorySegment font_data, /* Not used */ + int glyph, + int point_index, + MemorySegment x_ptr, /* ptr to return x */ + MemorySegment y_ptr, /* ptr to return y */ + MemorySegment user_data /* Not used */ + ) { + IntPtr x = new IntPtr(x_ptr); + IntPtr y = new IntPtr(y_ptr); + + if ((glyph & 0xfffe) == 0xfffe) { + x.set(0); + y.set(0); + return 1; + } + + FontStrike strike = scopedVars.get().fontStrike(); + Point2D.Float pt = ((PhysicalStrike)strike).getGlyphPoint(glyph, point_index); + x.set(HBFloatToFixed(pt.x)); + y.set(HBFloatToFixed(pt.y)); + + return 1; + } + + record ScopedVars ( + Font2D font, + FontStrike fontStrike, + GVData gvData, + Point2D.Float point) {} + + static final ScopedValue scopedVars = ScopedValue.newInstance(); + + static void shape( + Font2D font2D, + FontStrike fontStrike, + float ptSize, + float[] mat, + MemorySegment hbface, + char[] text, + GVData gvData, + int script, + int offset, + int limit, + int baseIndex, + Point2D.Float startPt, + int flags, + int slot) { + + /* + * ScopedValue is needed so that call backs into Java during + * shaping can locate the correct instances of these to query or update. + * The alternative of creating bound method handles is far too slow. + */ + ScopedVars vars = new ScopedVars(font2D, fontStrike, gvData, startPt); + ScopedValue.where(scopedVars, vars) + .run(() -> { + + try (Arena arena = Arena.ofConfined()) { + + float startX = (float)startPt.getX(); + float startY = (float)startPt.getY(); + + MemorySegment matrix = arena.allocateFrom(JAVA_FLOAT, mat); + MemorySegment chars = arena.allocateFrom(JAVA_CHAR, text); + + /*int ret =*/ jdk_hb_shape_handle.invokeExact( + ptSize, matrix, hbface, chars, text.length, + script, offset, limit, + baseIndex, startX, startY, flags, slot, + hb_jdk_font_funcs_struct, + store_layout_results_stub); + } catch (Throwable t) { + } + }); + } + + private static int getFontTableData(Font2D font2D, + int tag, + MemorySegment data_ptr_out) { + + /* + * On return, the data_out_ptr will point to memory allocated by native malloc, + * so it will be freed by the caller using native free - when it is + * done with it. + */ + @SuppressWarnings("restricted") + MemorySegment data_ptr = data_ptr_out.reinterpret(ADDRESS.byteSize()); + if (tag == 0) { + data_ptr.setAtIndex(ADDRESS, 0, NULL); + return 0; + } + byte[] data = font2D.getTableBytes(tag); + if (data == null) { + data_ptr.setAtIndex(ADDRESS, 0, NULL); + return 0; + } + int len = data.length; + MemorySegment zero_len = NULL; + try { + zero_len = (MemorySegment)malloc_handle.invokeExact((long)len); + } catch (Throwable t) { + } + if (zero_len.equals(NULL)) { + data_ptr.setAtIndex(ADDRESS, 0, NULL); + return 0; + } + @SuppressWarnings("restricted") + MemorySegment mem = zero_len.reinterpret(len); + MemorySegment.copy(data, 0, mem, JAVA_BYTE, 0, len); + data_ptr.setAtIndex(ADDRESS, 0, mem); + return len; + } + + /* WeakHashMap is used so that we do not retain temporary fonts + * + * The value is a class that implements the 2D Disposer, so + * that the native resources for temp. fonts can be freed. + * + * Installed fonts should never be cleared from the map as + * they are permanently referenced. + */ + private static final WeakHashMap + faceMap = new WeakHashMap<>(); + + static MemorySegment getFace(Font2D font2D) { + FaceRef ref; + synchronized (faceMap) { + ref = faceMap.computeIfAbsent(font2D, FaceRef::new); + } + return ref.getFace(); + } + + private static class FaceRef implements DisposerRecord { + private Font2D font2D; + private MemorySegment face; + // get_table_data_fn uses an Arena managed by GC, + // so we need to keep a reference to it here until + // this FaceRef is collected. + private MemorySegment get_table_data_fn; + + private FaceRef(Font2D font) { + this.font2D = font; + } + + private synchronized MemorySegment getFace() { + if (face == null) { + createFace(); + if (face != null) { + Disposer.addObjectRecord(font2D, this); + } + font2D = null; + } + return face; + } + + private void createFace() { + try { + get_table_data_fn = getBoundUpcallStub(Arena.ofAuto(), + Font2D.class, + font2D, // bind arg + "getFontTableData", // method name + JAVA_INT, // return type + JAVA_INT, ADDRESS); // arg types + if (get_table_data_fn == null) { + return; + } + face = (MemorySegment)create_face_handle.invokeExact(get_table_data_fn); + } catch (Throwable t) { + } + } + + @Override + public void dispose() { + try { + dispose_face_handle.invokeExact(face); + } catch (Throwable t) { + } + } + } + + + /* Upcall to receive results of layout */ + private static void store_layout_results( + int slot, + int baseIndex, + int offset, + float startX, + float startY, + float devScale, + int charCount, + int glyphCount, + MemorySegment /* hb_glyph_info_t* */ glyphInfo, + MemorySegment /* hb_glyph_position_t* */ glyphPos + ) { + + GVData gvdata = scopedVars.get().gvData(); + Point2D.Float startPt = scopedVars.get().point(); + float x=0, y=0; + float advX, advY; + float scale = 1.0f / HBFloatToFixedScale / devScale; + + int initialCount = gvdata._count; + + int maxGlyphs = (charCount > glyphCount) ? charCount : glyphCount; + int maxStore = maxGlyphs + initialCount; + boolean needToGrow = (maxStore > gvdata._glyphs.length) || + ((maxStore * 2 + 2) > gvdata._positions.length); + if (needToGrow) { + gvdata.grow(maxStore-initialCount); + } + + int glyphPosLen = glyphCount * 2 + 2; + long posSize = glyphPosLen * PositionLayout.byteSize(); + @SuppressWarnings("restricted") + MemorySegment glyphPosArr = glyphPos.reinterpret(posSize); + + long glyphInfoSize = glyphCount * GlyphInfoLayout.byteSize(); + @SuppressWarnings("restricted") + MemorySegment glyphInfoArr = glyphInfo.reinterpret(glyphInfoSize); + + for (int i = 0; i < glyphCount; i++) { + int storei = i + initialCount; + int cluster = (int)clusterHandle.get(glyphInfoArr, (long)i) - offset; + gvdata._indices[storei] = baseIndex + cluster; + int codePoint = (int)codePointHandle.get(glyphInfoArr, (long)i); + gvdata._glyphs[storei] = (slot | codePoint); + int x_offset = (int)x_offsetHandle.get(glyphPosArr, (long)i); + int y_offset = (int)y_offsetHandle.get(glyphPosArr, (long)i); + gvdata._positions[(storei*2)] = startX + x + (x_offset * scale); + gvdata._positions[(storei*2)+1] = startY + y - (y_offset * scale); + int x_advance = (int)x_advanceHandle.get(glyphPosArr, (long)i); + int y_advance = (int)y_advanceHandle.get(glyphPosArr, (long)i); + x += x_advance * scale; + y += y_advance * scale; + } + int storeadv = initialCount + glyphCount; + gvdata._count = storeadv; + // The final slot in the positions array is important + // because when the GlyphVector is created from this + // data it determines the overall advance of the glyphvector + // and this is used in positioning the next glyphvector + // during rendering where text is broken into runs. + // We also need to report it back into "pt", so layout can + // pass it back down for any next run. + advX = startX + x; + advY = startY + y; + gvdata._positions[(storeadv*2)] = advX; + gvdata._positions[(storeadv*2)+1] = advY; + startPt.x = advX; + startPt.y = advY; + } +} diff --git a/src/java.desktop/share/classes/sun/font/SunLayoutEngine.java b/src/java.desktop/share/classes/sun/font/SunLayoutEngine.java index bc3e6f2dad7c6..c291e45b5580c 100644 --- a/src/java.desktop/share/classes/sun/font/SunLayoutEngine.java +++ b/src/java.desktop/share/classes/sun/font/SunLayoutEngine.java @@ -35,7 +35,10 @@ import sun.java2d.DisposerRecord; import java.awt.geom.Point2D; +import java.lang.foreign.MemorySegment; import java.lang.ref.SoftReference; +import java.security.AccessController; +import java.security.PrivilegedAction; import java.util.concurrent.ConcurrentHashMap; import java.util.WeakHashMap; @@ -162,17 +165,38 @@ private long getFacePtr(Font2D font2D) { return ref.getNativePtr(); } + static boolean useFFM = true; + static { + @SuppressWarnings("removal") + String prop = AccessController.doPrivileged( + (PrivilegedAction) () -> + System.getProperty("sun.font.layout.ffm", "true")); + useFFM = "true".equals(prop); + + } + public void layout(FontStrikeDesc desc, float[] mat, float ptSize, int gmask, int baseIndex, TextRecord tr, int typo_flags, Point2D.Float pt, GVData data) { + Font2D font = key.font(); FontStrike strike = font.getStrike(desc); - long pFace = getFacePtr(font); - if (pFace != 0) { - shape(font, strike, ptSize, mat, pFace, + if (useFFM) { + MemorySegment face = HBShaper.getFace(font); + if (face != null) { + HBShaper.shape(font, strike, ptSize, mat, face, + tr.text, data, key.script(), + tr.start, tr.limit, baseIndex, pt, + typo_flags, gmask); + } + } else { + long pFace = getFacePtr(font); + if (pFace != 0) { + shape(font, strike, ptSize, mat, pFace, tr.text, data, key.script(), tr.start, tr.limit, baseIndex, pt, typo_flags, gmask); + } } } diff --git a/src/java.desktop/share/native/libfontmanager/HBShaper_Panama.c b/src/java.desktop/share/native/libfontmanager/HBShaper_Panama.c new file mode 100644 index 0000000000000..94289db7046c5 --- /dev/null +++ b/src/java.desktop/share/native/libfontmanager/HBShaper_Panama.c @@ -0,0 +1,145 @@ +/* + * Copyright (c) 2023, 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 +#include "hb.h" +#include "hb-jdk-p.h" +#include "hb-ot.h" +#include "scriptMapping.h" + +static float euclidianDistance(float a, float b) +{ + float root; + if (a < 0) { + a = -a; + } + + if (b < 0) { + b = -b; + } + + if (a == 0) { + return b; + } + + if (b == 0) { + return a; + } + + /* Do an initial approximation, in root */ + root = a > b ? a + (b / 2) : b + (a / 2); + + /* An unrolled Newton-Raphson iteration sequence */ + root = (root + (a * (a / root)) + (b * (b / root)) + 1) / 2; + root = (root + (a * (a / root)) + (b * (b / root)) + 1) / 2; + root = (root + (a * (a / root)) + (b * (b / root)) + 1) / 2; + + return root; +} + +#define TYPO_KERN 0x00000001 +#define TYPO_LIGA 0x00000002 +#define TYPO_RTL 0x80000000 + +JDKEXPORT int jdk_hb_shape( + float ptSize, + float *matrix, + void* pFace, + unsigned short *chars, + int len, + int script, + int offset, + int limit, + int baseIndex, + float startX, + float startY, + int flags, + int slot, + hb_font_funcs_t* font_funcs, + store_layoutdata_func_t store_layout_results_fn + ) { + + hb_buffer_t *buffer; + hb_face_t* hbface; + hb_font_t* hbfont; + int glyphCount; + hb_glyph_info_t *glyphInfo; + hb_glyph_position_t *glyphPos; + hb_direction_t direction = HB_DIRECTION_LTR; + hb_feature_t *features = NULL; + int featureCount = 0; + char* kern = (flags & TYPO_KERN) ? "kern" : "-kern"; + char* liga = (flags & TYPO_LIGA) ? "liga" : "-liga"; + int ret; + unsigned int buflen; + + float devScale = 1.0f; + if (getenv("HB_NODEVTX") != NULL) { + float xPtSize = euclidianDistance(matrix[0], matrix[1]); + float yPtSize = euclidianDistance(matrix[2], matrix[3]); + devScale = xPtSize / ptSize; + } + + hbface = (hb_face_t*)pFace; + hbfont = jdk_font_create_hbp(hbface, + ptSize, devScale, NULL, + font_funcs); + + buffer = hb_buffer_create(); + hb_buffer_set_script(buffer, getHBScriptCode(script)); + hb_buffer_set_language(buffer, + hb_ot_tag_to_language(HB_OT_TAG_DEFAULT_LANGUAGE)); + if ((flags & TYPO_RTL) != 0) { + direction = HB_DIRECTION_RTL; + } + hb_buffer_set_direction(buffer, direction); + hb_buffer_set_cluster_level(buffer, + HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS); + + int charCount = limit - offset; + hb_buffer_add_utf16(buffer, chars, len, offset, charCount); + + features = calloc(2, sizeof(hb_feature_t)); + if (features) { + hb_feature_from_string(kern, -1, &features[featureCount++]); + hb_feature_from_string(liga, -1, &features[featureCount++]); + } + + hb_shape_full(hbfont, buffer, features, featureCount, 0); + glyphCount = hb_buffer_get_length(buffer); + glyphInfo = hb_buffer_get_glyph_infos(buffer, 0); + glyphPos = hb_buffer_get_glyph_positions(buffer, &buflen); + + ret = (*store_layout_results_fn) + (slot, baseIndex, offset, startX, startY, devScale, + charCount, glyphCount, glyphInfo, glyphPos); + + hb_buffer_destroy (buffer); + hb_font_destroy(hbfont); + if (features != NULL) { + free(features); + } + return ret; +} diff --git a/src/java.desktop/share/native/libfontmanager/hb-jdk-font-p.cc b/src/java.desktop/share/native/libfontmanager/hb-jdk-font-p.cc new file mode 100644 index 0000000000000..590c273d151a4 --- /dev/null +++ b/src/java.desktop/share/native/libfontmanager/hb-jdk-font-p.cc @@ -0,0 +1,241 @@ +/* + * Copyright (c) 2023, 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 "hb.h" +#include "hb-jdk-p.h" +#include + +#if defined(__GNUC__) && __GNUC__ >= 4 +#define HB_UNUSED __attribute__((unused)) +#else +#define HB_UNUSED +#endif + +static hb_bool_t +hb_jdk_get_glyph_h_origin (hb_font_t *font HB_UNUSED, + void *font_data HB_UNUSED, + hb_codepoint_t glyph HB_UNUSED, + hb_position_t *x HB_UNUSED, + hb_position_t *y HB_UNUSED, + void *user_data HB_UNUSED) +{ + /* We always work in the horizontal coordinates. */ + return true; +} + +static hb_bool_t +hb_jdk_get_glyph_v_origin (hb_font_t *font HB_UNUSED, + void *font_data, + hb_codepoint_t glyph, + hb_position_t *x, + hb_position_t *y, + void *user_data HB_UNUSED) +{ + return false; +} + +static hb_position_t +hb_jdk_get_glyph_h_kerning (hb_font_t *font, + void *font_data, + hb_codepoint_t lejdk_glyph, + hb_codepoint_t right_glyph, + void *user_data HB_UNUSED) +{ + /* Not implemented. This seems to be in the HB API + * as a way to fall back to Freetype's kerning support + * which could be based on some on-the fly glyph analysis. + * But more likely it reads the kern table. That is easy + * enough code to add if we find a need to fall back + * to that instead of using gpos. It seems like if + * there is a gpos table at all, the practice is to + * use that and ignore kern, no matter that gpos does + * not implement the kern feature. + */ + return 0; +} + +static hb_position_t +hb_jdk_get_glyph_v_kerning (hb_font_t *font HB_UNUSED, + void *font_data HB_UNUSED, + hb_codepoint_t top_glyph HB_UNUSED, + hb_codepoint_t bottom_glyph HB_UNUSED, + void *user_data HB_UNUSED) +{ + /* OpenType doesn't have vertical-kerning other than GPOS. */ + return 0; +} + +static hb_bool_t +hb_jdk_get_glyph_extents (hb_font_t *font HB_UNUSED, + void *font_data, + hb_codepoint_t glyph, + hb_glyph_extents_t *extents, + void *user_data HB_UNUSED) +{ + /* TODO */ + return false; +} + +static hb_bool_t +hb_jdk_get_glyph_name (hb_font_t *font HB_UNUSED, + void *font_data, + hb_codepoint_t glyph, + char *name, unsigned int size, + void *user_data HB_UNUSED) +{ + return false; +} + +static hb_bool_t +hb_jdk_get_glyph_from_name (hb_font_t *font HB_UNUSED, + void *font_data, + const char *name, int len, + hb_codepoint_t *glyph, + void *user_data HB_UNUSED) +{ + return false; +} + +extern "C" { +/* + * This is called exactly once, from Java code, and the result is + * used by all downcalls to do shaping(), installing the functions + * on the hb_font. + * The parameters are all FFM upcall stubs. + * I was surprised we can cache these native pointers to upcall + * stubs on the native side, but it seems to be fine using the global Arena. + * These stubs don't need to be bound to a particular font or strike + * since they use Scoped Locals to access the data they need to operate on. + * This is how we can cache them. + * Also caching the hb_font_funcs_t on the Java side means we can + * marshall fewer args to the calls to shape(). + */ +JDKEXPORT hb_font_funcs_t * +HBCreateFontFuncs(hb_font_get_nominal_glyph_func_t nominal_fn, + hb_font_get_variation_glyph_func_t variation_fn, + hb_font_get_glyph_h_advance_func_t h_advance_fn, + hb_font_get_glyph_v_advance_func_t v_advance_fn, + hb_font_get_glyph_contour_point_func_t contour_pt_fn) +{ + hb_font_funcs_t *ff = hb_font_funcs_create(); + + hb_font_funcs_set_nominal_glyph_func(ff, nominal_fn, NULL, NULL); + hb_font_funcs_set_variation_glyph_func(ff, variation_fn, NULL, NULL); + hb_font_funcs_set_glyph_h_advance_func(ff, h_advance_fn, NULL, NULL); + hb_font_funcs_set_glyph_v_advance_func(ff, v_advance_fn, NULL, NULL); + hb_font_funcs_set_glyph_contour_point_func(ff, contour_pt_fn, NULL, NULL); + + /* These are all simple default implementations */ + hb_font_funcs_set_glyph_h_origin_func(ff, + hb_jdk_get_glyph_h_origin, NULL, NULL); + hb_font_funcs_set_glyph_v_origin_func(ff, + hb_jdk_get_glyph_v_origin, NULL, NULL); + hb_font_funcs_set_glyph_h_kerning_func(ff, + hb_jdk_get_glyph_h_kerning, NULL, NULL); + hb_font_funcs_set_glyph_v_kerning_func(ff, + hb_jdk_get_glyph_v_kerning, NULL, NULL); + hb_font_funcs_set_glyph_extents_func(ff, + hb_jdk_get_glyph_extents, NULL, NULL); + hb_font_funcs_set_glyph_name_func(ff, + hb_jdk_get_glyph_name, NULL, NULL); + hb_font_funcs_set_glyph_from_name_func(ff, + hb_jdk_get_glyph_from_name, NULL, NULL); + hb_font_funcs_make_immutable(ff); // done setting functions. + + return ff; +} + +} /* extern "C" */ + +static void _do_nothing(void) { +} + +typedef int (*GetTableDataFn) (int tag, char **dataPtr); + +static hb_blob_t * +reference_table(hb_face_t *face HB_UNUSED, hb_tag_t tag, void *user_data) { + + // HB_TAG_NONE is 0 and is used to get the whole font file. + // It is not expected to be needed for JDK. + if (tag == 0) { + return NULL; + } + + // This has to be a method handle bound to the right Font2D + GetTableDataFn getDataFn = (GetTableDataFn)user_data; + + char *tableData = NULL; + int length = (*getDataFn)(tag, &tableData); + if ((length == 0) || (tableData == NULL)) { + return NULL; + } + + /* Can't call this non-exported hb fn from Java so can't have + * a Java version of the reference_table fn, which is why it + * has as a parameter the upcall stub that will be used. + * And the memory is freed by 'free' so the upcall needs to + * call back down to malloc to allocate it. + */ + return hb_blob_create((const char *)tableData, length, + HB_MEMORY_MODE_WRITABLE, + tableData, free); +} + +extern "C" { + +JDKEXPORT hb_face_t* HBCreateFace(GetTableDataFn *get_data_upcall_fn) { + + hb_face_t *face = hb_face_create_for_tables(reference_table, get_data_upcall_fn, NULL); + return face; +} + +JDKEXPORT void HBDisposeFace(hb_face_t* face) { + hb_face_destroy(face); +} + +// Use 16.16 for better precision than 26.6 +#define HBFloatToFixedScale ((float)(1 << 16)) +#define HBFloatToFixed(f) ((unsigned int)((f) * HBFloatToFixedScale)) + +hb_font_t* jdk_font_create_hbp( + hb_face_t* face, + float ptSize, float devScale, + hb_destroy_func_t destroy, + hb_font_funcs_t *font_funcs) { + + hb_font_t *font; + + font = hb_font_create(face); + hb_font_set_funcs(font, + font_funcs, + NULL, + (hb_destroy_func_t)_do_nothing); + hb_font_set_scale(font, + HBFloatToFixed(ptSize*devScale), + HBFloatToFixed(ptSize*devScale)); + return font; +} + +} // extern "C" diff --git a/src/java.desktop/share/native/libfontmanager/hb-jdk-p.h b/src/java.desktop/share/native/libfontmanager/hb-jdk-p.h new file mode 100644 index 0000000000000..58d39816b7591 --- /dev/null +++ b/src/java.desktop/share/native/libfontmanager/hb-jdk-p.h @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2023, 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 HB_JDK_H +#define HB_JDK_H + +#ifndef JDKEXPORT + #ifdef WIN32 + #define JDKEXPORT __declspec(dllexport) + #else + #if (defined(__GNUC__) && ((__GNUC__ > 4) || (__GNUC__ == 4) && (__GNUC_MINOR__ > 2))) || __has_attribute(visibility) + #ifdef ARM + #define JDKEXPORT __attribute__((externally_visible,visibility("default"))) + #else + #define JDKEXPORT __attribute__((visibility("default"))) + #endif + #else + #define JDKEXPORT + #endif + #endif +#endif + +#include "hb.h" + +# ifdef __cplusplus +extern "C" { +#endif + + +hb_font_t* jdk_font_create_hbp( + hb_face_t* face, + float ptSize, float devScale, + hb_destroy_func_t destroy, + hb_font_funcs_t* font_funcs); + + +typedef int (*store_layoutdata_func_t) + (int slot, int baseIndex, int offset, + float startX, float startY, float devScale, + int charCount, int glyphCount, + hb_glyph_info_t *glyphInfo, hb_glyph_position_t *glyphPos); + +JDKEXPORT int jdk_hb_shape( + + float ptSize, + float *matrix, + void* pFace, + unsigned short* chars, + int len, + int script, + int offset, + int limit, + int baseIndex, // used only to store results. + float startX, // used only to store results. + float startY, // used only to store results. + int flags, + int slot, // used only to store results + // Provide upcall Method handles that harfbuzz needs + hb_font_funcs_t* font_funcs, + store_layoutdata_func_t store_layout_data_upcall +); + +# ifdef __cplusplus +} +#endif + +#endif /* HB_JDK_H */ diff --git a/test/jdk/java/awt/font/GlyphVector/LayoutCompatTest.java b/test/jdk/java/awt/font/GlyphVector/LayoutCompatTest.java new file mode 100644 index 0000000000000..35aa90374d504 --- /dev/null +++ b/test/jdk/java/awt/font/GlyphVector/LayoutCompatTest.java @@ -0,0 +1,214 @@ +/* + * Copyright (c) 2023, 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. + * + */ + +/* + @test + @summary verify JNI and FFM harfbuzz OpenType layout implementations are equivalent. +*/ + +import java.io.File; +import java.io.FileInputStream; +import java.io.PrintStream; +import java.util.Arrays; +import java.util.List; +import java.awt.Font; +import java.awt.GraphicsEnvironment; +import java.awt.font.FontRenderContext; +import java.awt.font.GlyphVector; +import java.awt.geom.AffineTransform; + +public class LayoutCompatTest { + + static String jni = "jni.txt"; + static String ffm = "ffm.txt"; + static final AffineTransform tx = new AffineTransform(); + static final FontRenderContext frc = new FontRenderContext(tx, false, false); + + static final String englishText = + "OpenType font layout is a critical technology for proper rendering of many of the world's natural languages."; + + + static final String arabicText = + // " يعد تخطيط خطوط OpenType تقنية مهمة للعرض الصحيح للعديد من اللغات الطبيعية في العالم.יות"; + "\u064a\u0639\u062f\u0020\u062a\u062e\u0637\u064a\u0637\u0020\u062e\u0637\u0648\u0637\u0020\u004f\u0070\u0065\u006e\u0054\u0079\u0070\u0065\u0020\u062a\u0642\u0646\u064a\u0629\u0020\u0645\u0647\u0645\u0629\u0020\u0644\u0644\u0639\u0631\u0636\u0020\u0627\u0644\u0635\u062d\u064a\u062d\u0020\u0644\u0644\u0639\u062f\u064a\u062f\u0020\u0645\u0646\u0020\u0627\u0644\u0644\u063a\u0627\u062a\u0020\u0627\u0644\u0637\u0628\u064a\u0639\u064a\u0629\u0020\u0641\u064a\u0020\u0627\u0644\u0639\u0627\u0644\u0645\u002e\u05d9\u05d5\u05ea"; + + static final String hebrewText = + // פריסת גופן OpenType היא טכנולוגיה קריטית לעיבוד נכון של רבות מהשפות הטבעיות בעולם. + "\u05e4\u05e8\u05d9\u05e1\u05ea\u0020\u05d2\u05d5\u05e4\u05df\u0020\u004f\u0070\u0065\u006e\u0054\u0079\u0070\u0065\u0020\u05d4\u05d9\u05d0\u0020\u05d8\u05db\u05e0\u05d5\u05dc\u05d5\u05d2\u05d9\u05d4\u0020\u05e7\u05e8\u05d9\u05d8\u05d9\u05ea\u0020\u05dc\u05e2\u05d9\u05d1\u05d5\u05d3\u0020\u05e0\u05db\u05d5\u05df\u0020\u05e9\u05dc\u0020\u05e8\u05d1\u05d5\u05ea\u0020\u05de\u05d4\u05e9\u05e4\u05d5\u05ea\u0020\u05d4\u05d8\u05d1\u05e2\u05d9\u05d5\u05ea\u0020\u05d1\u05e2\u05d5\u05dc\u05dd\u002e"; + + static final String thaiText = + // เค้าโครงแบบอักษร OpenType เป็นเทคโนโลยีที่สำคัญสำหรับการแสดงผลภาษาธรรมชาติจำนวนมากของโลกอย่างเหมาะสม + "\u0e40\u0e04\u0e49\u0e32\u0e42\u0e04\u0e23\u0e07\u0e41\u0e1a\u0e1a\u0e2d\u0e31\u0e01\u0e29\u0e23\u0020\u004f\u0070\u0065\u006e\u0054\u0079\u0070\u0065\u0020\u0e40\u0e1b\u0e47\u0e19\u0e40\u0e17\u0e04\u0e42\u0e19\u0e42\u0e25\u0e22\u0e35\u0e17\u0e35\u0e48\u0e2a\u0e33\u0e04\u0e31\u0e0d\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e01\u0e32\u0e23\u0e41\u0e2a\u0e14\u0e07\u0e1c\u0e25\u0e20\u0e32\u0e29\u0e32\u0e18\u0e23\u0e23\u0e21\u0e0a\u0e32\u0e15\u0e34\u0e08\u0e33\u0e19\u0e27\u0e19\u0e21\u0e32\u0e01\u0e02\u0e2d\u0e07\u0e42\u0e25\u0e01\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e40\u0e2b\u0e21\u0e32\u0e30\u0e2a\u0e21"; + + static final String khmerText = + // ប្លង់ពុម្ពអក្សរ OpenType គឺជាបច្ចេកវិជ្ជាសំខាន់មួយសម្រាប់ការបង្ហាញត្រឹមត្រូវនៃភាសាធម្មជាតិជាច្រើនរបស់ពិភពលោក។ + "\u1794\u17d2\u179b\u1784\u17cb\u1796\u17bb\u1798\u17d2\u1796\u17a2\u1780\u17d2\u179f\u179a\u0020\u004f\u0070\u0065\u006e\u0054\u0079\u0070\u0065\u0020\u1782\u17ba\u1787\u17b6\u1794\u1785\u17d2\u1785\u17c1\u1780\u179c\u17b7\u1787\u17d2\u1787\u17b6\u179f\u17c6\u1781\u17b6\u1793\u17cb\u1798\u17bd\u1799\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1780\u17b6\u179a\u1794\u1784\u17d2\u17a0\u17b6\u1789\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u1793\u17c3\u1797\u17b6\u179f\u17b6\u1792\u1798\u17d2\u1798\u1787\u17b6\u178f\u17b7\u1787\u17b6\u1785\u17d2\u179a\u17be\u1793\u179a\u1794\u179f\u17cb\u1796\u17b7\u1797\u1796\u179b\u17c4\u1780\u17d4"; + + static final String laoText = + // ຮູບແບບຕົວອັກສອນ OpenType ເປັນເທັກໂນໂລຍີສຳຄັນສຳລັບການສະແດງຜົນຂອງພາສາທຳມະຊາດຫຼາຍພາສາຂອງໂລກ. + "\u0eae\u0eb9\u0e9a\u0ec1\u0e9a\u0e9a\u0e95\u0ebb\u0ea7\u0ead\u0eb1\u0e81\u0eaa\u0ead\u0e99\u0020\u004f\u0070\u0065\u006e\u0054\u0079\u0070\u0065\u0020\u0ec0\u0e9b\u0eb1\u0e99\u0ec0\u0e97\u0eb1\u0e81\u0ec2\u0e99\u0ec2\u0ea5\u0e8d\u0eb5\u0eaa\u0eb3\u0e84\u0eb1\u0e99\u0eaa\u0eb3\u0ea5\u0eb1\u0e9a\u0e81\u0eb2\u0e99\u0eaa\u0eb0\u0ec1\u0e94\u0e87\u0e9c\u0ebb\u0e99\u0e82\u0ead\u0e87\u0e9e\u0eb2\u0eaa\u0eb2\u0e97\u0eb3\u0ea1\u0eb0\u0e8a\u0eb2\u0e94\u0eab\u0ebc\u0eb2\u0e8d\u0e9e\u0eb2\u0eaa\u0eb2\u0e82\u0ead\u0e87\u0ec2\u0ea5\u0e81\u002e"; + + static final String hindiText = + // ओपनटाइप फ़ॉन्ट लेआउट दुनिया की कई प्राकृतिक भाषाओं के उचित प्रतिपादन के लिए एक महत्वपूर्ण तकनीक है। + "\u0913\u092a\u0928\u091f\u093e\u0907\u092a\u0020\u092b\u093c\u0949\u0928\u094d\u091f\u0020\u0932\u0947\u0906\u0909\u091f\u0020\u0926\u0941\u0928\u093f\u092f\u093e\u0020\u0915\u0940\u0020\u0915\u0908\u0020\u092a\u094d\u0930\u093e\u0915\u0943\u0924\u093f\u0915\u0020\u092d\u093e\u0937\u093e\u0913\u0902\u0020\u0915\u0947\u0020\u0909\u091a\u093f\u0924\u0020\u092a\u094d\u0930\u0924\u093f\u092a\u093e\u0926\u0928\u0020\u0915\u0947\u0020\u0932\u093f\u090f\u0020\u090f\u0915\u0020\u092e\u0939\u0924\u094d\u0935\u092a\u0942\u0930\u094d\u0923\u0020\u0924\u0915\u0928\u0940\u0915\u0020\u0939\u0948\u0964"; + + static final String kannadaText = + // ಓಪನ್‌ಟೈಪ್ ಫಾಂಟ್ ವಿನ್ಯಾಸವು ಪ್ರಪಂಚದ ಅನೇಕ ನೈಸರ್ಗಿಕ ಭಾಷೆಗಳ ಸರಿಯಾದ ರೆಂಡರಿಂಗ್‌ಗೆ ನಿರ್ಣಾಯಕ ತಂತ್ರಜ್ಞಾನವಾಗಿದೆ. + "\u0c93\u0caa\u0ca8\u0ccd\u200c\u0c9f\u0cc8\u0caa\u0ccd\u0020\u0cab\u0cbe\u0c82\u0c9f\u0ccd\u0020\u0cb5\u0cbf\u0ca8\u0ccd\u0caf\u0cbe\u0cb8\u0cb5\u0cc1\u0020\u0caa\u0ccd\u0cb0\u0caa\u0c82\u0c9a\u0ca6\u0020\u0c85\u0ca8\u0cc7\u0c95\u0020\u0ca8\u0cc8\u0cb8\u0cb0\u0ccd\u0c97\u0cbf\u0c95\u0020\u0cad\u0cbe\u0cb7\u0cc6\u0c97\u0cb3\u0020\u0cb8\u0cb0\u0cbf\u0caf\u0cbe\u0ca6\u0020\u0cb0\u0cc6\u0c82\u0ca1\u0cb0\u0cbf\u0c82\u0c97\u0ccd\u200c\u0c97\u0cc6\u0020\u0ca8\u0cbf\u0cb0\u0ccd\u0ca3\u0cbe\u0caf\u0c95\u0020\u0ca4\u0c82\u0ca4\u0ccd\u0cb0\u0c9c\u0ccd\u0c9e\u0cbe\u0ca8\u0cb5\u0cbe\u0c97\u0cbf\u0ca6\u0cc6\u002e"; + + static final String tamilText = + // ஓபன் டைப் எழுத்துரு அமைப்பு என்பது உலகின் பல இயற்கை மொழிகளைச் சரியாக வழங்குவதற்கான ஒரு முக்கியமான தொழில்நுட்பமாகும். + "\u0b93\u0baa\u0ba9\u0bcd\u0020\u0b9f\u0bc8\u0baa\u0bcd\u0020\u0b8e\u0bb4\u0bc1\u0ba4\u0bcd\u0ba4\u0bc1\u0bb0\u0bc1\u0020\u0b85\u0bae\u0bc8\u0baa\u0bcd\u0baa\u0bc1\u0020\u0b8e\u0ba9\u0bcd\u0baa\u0ba4\u0bc1\u0020\u0b89\u0bb2\u0b95\u0bbf\u0ba9\u0bcd\u0020\u0baa\u0bb2\u0020\u0b87\u0baf\u0bb1\u0bcd\u0b95\u0bc8\u0020\u0bae\u0bca\u0bb4\u0bbf\u0b95\u0bb3\u0bc8\u0b9a\u0bcd\u0020\u0b9a\u0bb0\u0bbf\u0baf\u0bbe\u0b95\u0020\u0bb5\u0bb4\u0b99\u0bcd\u0b95\u0bc1\u0bb5\u0ba4\u0bb1\u0bcd\u0b95\u0bbe\u0ba9\u0020\u0b92\u0bb0\u0bc1\u0020\u0bae\u0bc1\u0b95\u0bcd\u0b95\u0bbf\u0baf\u0bae\u0bbe\u0ba9\u0020\u0ba4\u0bca\u0bb4\u0bbf\u0bb2\u0bcd\u0ba8\u0bc1\u0b9f\u0bcd\u0baa\u0bae\u0bbe\u0b95\u0bc1\u0bae\u0bcd\u002e"; + + static final String malayalamText = + // ഓപ്പൺടൈപ്പ് ഫോണ്ട് ലേഔട്ട് ലോകത്തിലെ പല സ്വാഭാവിക ഭാഷകളുടെയും ശരിയായ റെൻഡറിംഗിനുള്ള ഒരു നിർണായക സാങ്കേതികവിദ്യയാണ്. + "\u0d13\u0d2a\u0d4d\u0d2a\u0d7a\u0d1f\u0d48\u0d2a\u0d4d\u0d2a\u0d4d\u0020\u0d2b\u0d4b\u0d23\u0d4d\u0d1f\u0d4d\u0020\u0d32\u0d47\u0d14\u0d1f\u0d4d\u0d1f\u0d4d\u0020\u0d32\u0d4b\u0d15\u0d24\u0d4d\u0d24\u0d3f\u0d32\u0d46\u0020\u0d2a\u0d32\u0020\u0d38\u0d4d\u0d35\u0d3e\u0d2d\u0d3e\u0d35\u0d3f\u0d15\u0020\u0d2d\u0d3e\u0d37\u0d15\u0d33\u0d41\u0d1f\u0d46\u0d2f\u0d41\u0d02\u0020\u0d36\u0d30\u0d3f\u0d2f\u0d3e\u0d2f\u0020\u0d31\u0d46\u0d7b\u0d21\u0d31\u0d3f\u0d02\u0d17\u0d3f\u0d28\u0d41\u0d33\u0d4d\u0d33\u0020\u0d12\u0d30\u0d41\u0020\u0d28\u0d3f\u0d7c\u0d23\u0d3e\u0d2f\u0d15\u0020\u0d38\u0d3e\u0d19\u0d4d\u0d15\u0d47\u0d24\u0d3f\u0d15\u0d35\u0d3f\u0d26\u0d4d\u0d2f\u0d2f\u0d3e\u0d23\u0d4d\u002e"; + + static final String gujaratiText = + // ຮູບແບບຕົວອັກສອນ OpenType ເປັນເທັກໂນໂລຍີສຳຄັນສຳລັບການສະແດງຜົນຂອງພາສາທຳມະຊາດຫຼາຍພາສາຂອງໂລກ. + "\u0eae\u0eb9\u0e9a\u0ec1\u0e9a\u0e9a\u0e95\u0ebb\u0ea7\u0ead\u0eb1\u0e81\u0eaa\u0ead\u0e99\u0020\u004f\u0070\u0065\u006e\u0054\u0079\u0070\u0065\u0020\u0ec0\u0e9b\u0eb1\u0e99\u0ec0\u0e97\u0eb1\u0e81\u0ec2\u0e99\u0ec2\u0ea5\u0e8d\u0eb5\u0eaa\u0eb3\u0e84\u0eb1\u0e99\u0eaa\u0eb3\u0ea5\u0eb1\u0e9a\u0e81\u0eb2\u0e99\u0eaa\u0eb0\u0ec1\u0e94\u0e87\u0e9c\u0ebb\u0e99\u0e82\u0ead\u0e87\u0e9e\u0eb2\u0eaa\u0eb2\u0e97\u0eb3\u0ea1\u0eb0\u0e8a\u0eb2\u0e94\u0eab\u0ebc\u0eb2\u0e8d\u0e9e\u0eb2\u0eaa\u0eb2\u0e82\u0ead\u0e87\u0ec2\u0ea5\u0e81\u002e"; + + static final String teluguText = + // ఓపెన్‌టైప్ ఫాంట్ లేఅవుట్ అనేది ప్రపంచంలోని అనేక సహజ భాషలను సరిగ్గా రెండరింగ్ చేయడానికి కీలకమైన సాంకేతికత. + "\u0c13\u0c2a\u0c46\u0c28\u0c4d\u200c\u0c1f\u0c48\u0c2a\u0c4d\u0020\u0c2b\u0c3e\u0c02\u0c1f\u0c4d\u0020\u0c32\u0c47\u0c05\u0c35\u0c41\u0c1f\u0c4d\u0020\u0c05\u0c28\u0c47\u0c26\u0c3f\u0020\u0c2a\u0c4d\u0c30\u0c2a\u0c02\u0c1a\u0c02\u0c32\u0c4b\u0c28\u0c3f\u0020\u0c05\u0c28\u0c47\u0c15\u0020\u0c38\u0c39\u0c1c\u0020\u0c2d\u0c3e\u0c37\u0c32\u0c28\u0c41\u0020\u0c38\u0c30\u0c3f\u0c17\u0c4d\u0c17\u0c3e\u0020\u0c30\u0c46\u0c02\u0c21\u0c30\u0c3f\u0c02\u0c17\u0c4d\u0020\u0c1a\u0c47\u0c2f\u0c21\u0c3e\u0c28\u0c3f\u0c15\u0c3f\u0020\u0c15\u0c40\u0c32\u0c15\u0c2e\u0c48\u0c28\u0020\u0c38\u0c3e\u0c02\u0c15\u0c47\u0c24\u0c3f\u0c15\u0c24\u002e"; + + + static Font[] allFonts; + + public static void main(String args[]) throws Exception { + if (args.length > 0) { + writeLayouts(args[0]); + return; + } + String classesDir = System.getProperty("test.classes"); + if (classesDir != null) { + String sep = System.getProperty("file.separator"); + String fileDir = classesDir + sep; + jni = fileDir + jni; + ffm = fileDir + ffm; + } + forkAndWait(jni, false); + forkAndWait(ffm, true); + compareLayouts(jni, ffm); + } + + static void compareLayouts(String file1, String file2) throws Exception { + FileInputStream i1 = new FileInputStream(file1); + FileInputStream i2 = new FileInputStream(file2); + byte[] ba1 = i1.readAllBytes(); + byte[] ba2 = i2.readAllBytes(); + for (int i = 0; i < ba1.length; i++) { + if (ba1[i] != ba2[i]) { + throw new RuntimeException("files differ byte offset=" + i); + } + } + } + + static boolean isLogicalFont(Font f) { + String s = f.getFamily().toLowerCase(); + if (s.startsWith(".") || // skip Apple System fonts - not supposed to be used + s.equals("serif") || + s.equals("sansserif") || + s.equals("dialog") || + s.equals("dialoginput") || + s.equals("monospaced")) { + return true; + } + return false; + } + + static Font findFont(char c) { + for (Font f : allFonts) { + if (isLogicalFont(f)) continue; + if (f.canDisplay(c)) { // not for supplementary chars + return f.deriveFont(24.0f); + } + } + return new Font(Font.DIALOG, 24, Font.PLAIN); + } + + static void writeGV(PrintStream out, String title, String text) { + char[] chars = text.toCharArray(); + Font font = findFont(chars[0]); + GlyphVector gv = font.layoutGlyphVector(frc, chars, 0, chars.length, 0); + int ng = gv.getNumGlyphs(); + int[] codes = gv.getGlyphCodes(0, ng, null); + float[] positions = gv.getGlyphPositions(0, ng, null); + out.println(title); + out.println(font); + out.println("num glyphs = " + ng); + out.print("Codes="); + for (int code : codes) out.print(" "+code); out.println(); + out.print("Positions="); + for (float pos : positions) out.print(" "+pos); out.println(); + out.println(); + } + + static void writeLayouts(String fileName) throws Exception { + allFonts = GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts(); + PrintStream out = new PrintStream(fileName); + out.println("java.home="+javaHome); + out.println("javaExe="+javaExe); + out.println("classpath="+classpath); + writeGV(out,"English:", englishText); + writeGV(out,"Arabic:", arabicText); + writeGV(out,"Hebrew:", hebrewText); + writeGV(out,"Thai:", thaiText); + writeGV(out,"Khmer:", khmerText); + writeGV(out,"Lao:", laoText); + writeGV(out,"Hindi:", hindiText); + writeGV(out,"Kannada:", kannadaText); + writeGV(out,"Tamil:", tamilText); + writeGV(out,"Malayalam:", malayalamText); + writeGV(out,"Gujarati:", gujaratiText); + writeGV(out,"Telugu:", teluguText); + out.close(); + } + + static final String javaHome = (System.getProperty("test.jdk") != null) + ? System.getProperty("test.jdk") + : System.getProperty("java.home"); + + static final String javaExe = + javaHome + File.separator + "bin" + File.separator + "java"; + + static final String classpath = + System.getProperty("java.class.path"); + + static void forkAndWait(String fileName, boolean val) throws Exception { + List args = + Arrays.asList(javaExe, + "-cp", classpath, + "-Dsun.font.layout.ffm="+Boolean.toString(val), + "-Dsun.font.layout.logtime=true", + "LayoutCompatTest", + fileName); + ProcessBuilder pb = new ProcessBuilder(args); + Process p = pb.start(); + p.waitFor(); + p.destroy(); + } +} From 6d824364c2fefa3185a8a15bdd41537fad31427c Mon Sep 17 00:00:00 2001 From: Matias Saavedra Silva Date: Tue, 21 Nov 2023 19:02:48 +0000 Subject: [PATCH 011/250] 8320278: ARM32 build is broken after JDK-8301997 Reviewed-by: coleenp, stuefe --- src/hotspot/cpu/arm/interp_masm_arm.cpp | 57 +--- src/hotspot/cpu/arm/interp_masm_arm.hpp | 6 +- .../arm/templateInterpreterGenerator_arm.cpp | 10 +- src/hotspot/cpu/arm/templateTable_arm.cpp | 277 +++++++++--------- src/hotspot/cpu/arm/templateTable_arm.hpp | 9 +- 5 files changed, 168 insertions(+), 191 deletions(-) diff --git a/src/hotspot/cpu/arm/interp_masm_arm.cpp b/src/hotspot/cpu/arm/interp_masm_arm.cpp index 643aea681ddde..481c3d09e584e 100644 --- a/src/hotspot/cpu/arm/interp_masm_arm.cpp +++ b/src/hotspot/cpu/arm/interp_masm_arm.cpp @@ -39,6 +39,7 @@ #include "oops/methodData.hpp" #include "oops/resolvedFieldEntry.hpp" #include "oops/resolvedIndyEntry.hpp" +#include "oops/resolvedMethodEntry.hpp" #include "prims/jvmtiExport.hpp" #include "prims/jvmtiThreadState.hpp" #include "runtime/basicLock.hpp" @@ -222,48 +223,6 @@ void InterpreterMacroAssembler::get_index_at_bcp(Register index, int bcp_offset, } } -// Sets cache, index. -void InterpreterMacroAssembler::get_cache_and_index_at_bcp(Register cache, Register index, int bcp_offset, size_t index_size) { - assert(bcp_offset > 0, "bcp is still pointing to start of bytecode"); - assert_different_registers(cache, index); - - get_index_at_bcp(index, bcp_offset, cache, index_size); - - // load constant pool cache pointer - ldr(cache, Address(FP, frame::interpreter_frame_cache_offset * wordSize)); - - // convert from field index to ConstantPoolCacheEntry index - assert(sizeof(ConstantPoolCacheEntry) == 4*wordSize, "adjust code below"); - logical_shift_left(index, index, 2); -} - -// Sets cache, index, bytecode. -void InterpreterMacroAssembler::get_cache_and_index_and_bytecode_at_bcp(Register cache, Register index, Register bytecode, int byte_no, int bcp_offset, size_t index_size) { - get_cache_and_index_at_bcp(cache, index, bcp_offset, index_size); - // caution index and bytecode can be the same - add(bytecode, cache, AsmOperand(index, lsl, LogBytesPerWord)); - ldrb(bytecode, Address(bytecode, (1 + byte_no) + in_bytes(ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::indices_offset()))); - TemplateTable::volatile_barrier(MacroAssembler::LoadLoad, noreg, true); -} - -// Sets cache. Blows reg_tmp. -void InterpreterMacroAssembler::get_cache_entry_pointer_at_bcp(Register cache, Register reg_tmp, int bcp_offset, size_t index_size) { - assert(bcp_offset > 0, "bcp is still pointing to start of bytecode"); - assert_different_registers(cache, reg_tmp); - - get_index_at_bcp(reg_tmp, bcp_offset, cache, index_size); - - // load constant pool cache pointer - ldr(cache, Address(FP, frame::interpreter_frame_cache_offset * wordSize)); - - // skip past the header - add(cache, cache, in_bytes(ConstantPoolCache::base_offset())); - // convert from field index to ConstantPoolCacheEntry index - // and from word offset to byte offset - assert(sizeof(ConstantPoolCacheEntry) == 4*wordSize, "adjust code below"); - add(cache, cache, AsmOperand(reg_tmp, lsl, 2 + LogBytesPerWord)); -} - // Load object from cpool->resolved_references(index) void InterpreterMacroAssembler::load_resolved_reference_at_index( Register result, Register index) { @@ -343,6 +302,20 @@ void InterpreterMacroAssembler::load_field_entry(Register cache, Register index, } } +void InterpreterMacroAssembler::load_method_entry(Register cache, Register index, int bcp_offset) { + // Get index out of bytecode pointer + get_index_at_bcp(index, bcp_offset, cache /* as tmp */, sizeof(u2)); + mov(cache, sizeof(ResolvedMethodEntry)); + mul(index, index, cache); // Scale the index to be the entry index * sizeof(ResolvedMethodEntry) + + // load constant pool cache pointer + ldr(cache, Address(FP, frame::interpreter_frame_cache_offset * wordSize)); + // Get address of method entries array + ldr(cache, Address(cache, ConstantPoolCache::method_entries_offset())); + add(cache, cache, Array::base_offset_in_bytes()); + add(cache, cache, index); +} + // Generate a subtype check: branch to not_subtype if sub_klass is // not a subtype of super_klass. // Profiling code for the subtype check failure (profile_typecheck_failed) diff --git a/src/hotspot/cpu/arm/interp_masm_arm.hpp b/src/hotspot/cpu/arm/interp_masm_arm.hpp index f02c474f0c08e..58eeda6fbbbf2 100644 --- a/src/hotspot/cpu/arm/interp_masm_arm.hpp +++ b/src/hotspot/cpu/arm/interp_masm_arm.hpp @@ -89,11 +89,6 @@ class InterpreterMacroAssembler: public MacroAssembler { // Sets index. Blows reg_tmp. void get_index_at_bcp(Register index, int bcp_offset, Register reg_tmp, size_t index_size = sizeof(u2)); - // Sets cache, index. - void get_cache_and_index_at_bcp(Register cache, Register index, int bcp_offset, size_t index_size = sizeof(u2)); - void get_cache_and_index_and_bytecode_at_bcp(Register cache, Register index, Register bytecode, int byte_no, int bcp_offset, size_t index_size = sizeof(u2)); - // Sets cache. Blows reg_tmp. - void get_cache_entry_pointer_at_bcp(Register cache, Register reg_tmp, int bcp_offset, size_t index_size = sizeof(u2)); // Load object from cpool->resolved_references(*bcp+1) void load_resolved_reference_at_index(Register result, Register tmp); @@ -103,6 +98,7 @@ class InterpreterMacroAssembler: public MacroAssembler { void load_resolved_indy_entry(Register cache, Register index); void load_field_entry(Register cache, Register index, int bcp_offset = 1); + void load_method_entry(Register cache, Register index, int bcp_offset = 1); void pop_ptr(Register r); void pop_i(Register r = R0_tos); diff --git a/src/hotspot/cpu/arm/templateInterpreterGenerator_arm.cpp b/src/hotspot/cpu/arm/templateInterpreterGenerator_arm.cpp index 4c65c05eb1d21..ba9a3fd7a9b2a 100644 --- a/src/hotspot/cpu/arm/templateInterpreterGenerator_arm.cpp +++ b/src/hotspot/cpu/arm/templateInterpreterGenerator_arm.cpp @@ -37,6 +37,7 @@ #include "oops/method.inline.hpp" #include "oops/oop.inline.hpp" #include "oops/resolvedIndyEntry.hpp" +#include "oops/resolvedMethodEntry.hpp" #include "prims/jvmtiExport.hpp" #include "prims/jvmtiThreadState.hpp" #include "prims/methodHandles.hpp" @@ -373,12 +374,11 @@ address TemplateInterpreterGenerator::generate_return_entry_for(TosState state, __ add(Rstack_top, Rstack_top, AsmOperand(Rcache, lsl, Interpreter::logStackElementSize)); } else { // Pop N words from the stack - __ get_cache_and_index_at_bcp(Rcache, Rindex, 1, index_size); - - __ add(Rtemp, Rcache, AsmOperand(Rindex, lsl, LogBytesPerWord)); - __ ldrb(Rtemp, Address(Rtemp, ConstantPoolCache::base_offset() + ConstantPoolCacheEntry::flags_offset())); + assert(index_size == sizeof(u2), "Can only be u2"); + __ load_method_entry(Rcache, Rindex); + __ ldrh(Rcache, Address(Rcache, in_bytes(ResolvedIndyEntry::num_parameters_offset()))); __ check_stack_top(); - __ add(Rstack_top, Rstack_top, AsmOperand(Rtemp, lsl, Interpreter::logStackElementSize)); + __ add(Rstack_top, Rstack_top, AsmOperand(Rcache, lsl, Interpreter::logStackElementSize)); } __ convert_retval_to_tos(state); diff --git a/src/hotspot/cpu/arm/templateTable_arm.cpp b/src/hotspot/cpu/arm/templateTable_arm.cpp index 334e6fb9441ea..e478f08c977b6 100644 --- a/src/hotspot/cpu/arm/templateTable_arm.cpp +++ b/src/hotspot/cpu/arm/templateTable_arm.cpp @@ -40,6 +40,7 @@ #include "oops/oop.inline.hpp" #include "oops/resolvedIndyEntry.hpp" #include "oops/resolvedFieldEntry.hpp" +#include "oops/resolvedMethodEntry.hpp" #include "prims/jvmtiExport.hpp" #include "prims/methodHandles.hpp" #include "runtime/frame.inline.hpp" @@ -544,14 +545,12 @@ void TemplateTable::condy_helper(Label& Done) // VMr2 = flags = (tos, off) using format of CPCE::_flags __ mov(off, flags); - __ logical_shift_left( off, off, 32 - ConstantPoolCacheEntry::field_index_bits); - __ logical_shift_right(off, off, 32 - ConstantPoolCacheEntry::field_index_bits); + __ logical_shift_left( off, off, 32 - ConstantPoolCache::field_index_bits); + __ logical_shift_right(off, off, 32 - ConstantPoolCache::field_index_bits); const Address field(obj, off); - __ logical_shift_right(flags, flags, ConstantPoolCacheEntry::tos_state_shift); - // Make sure we don't need to mask flags after the above shift - ConstantPoolCacheEntry::verify_tos_state_shift(); + __ logical_shift_right(flags, flags, ConstantPoolCache::tos_state_shift); switch (bytecode()) { case Bytecodes::_ldc: @@ -2569,16 +2568,26 @@ void TemplateTable::volatile_barrier(MacroAssembler::Membar_mask_bits order_cons } // Blows all volatile registers: R0-R3, Rtemp, LR. -void TemplateTable::resolve_cache_and_index(int byte_no, - Register Rcache, - Register Rindex, - size_t index_size) { +void TemplateTable::resolve_cache_and_index_for_method(int byte_no, + Register Rcache, + Register Rindex) { assert_different_registers(Rcache, Rindex, Rtemp); + assert(byte_no == f1_byte || byte_no == f2_byte, "byte_no out of range"); Label resolved; Bytecodes::Code code = bytecode(); - assert(byte_no == f1_byte || byte_no == f2_byte, "byte_no out of range"); - __ get_cache_and_index_and_bytecode_at_bcp(Rcache, Rindex, Rtemp, byte_no, 1, index_size); + __ load_method_entry(Rcache, Rindex); + switch(byte_no) { + case f1_byte: + __ add(Rtemp, Rcache, in_bytes(ResolvedMethodEntry::bytecode1_offset())); + break; + case f2_byte: + __ add(Rtemp, Rcache, in_bytes(ResolvedMethodEntry::bytecode2_offset())); + break; + } + // Load-acquire the bytecode to match store-release in InterpreterRuntime + __ ldrb(Rtemp, Rtemp); + __ membar(MacroAssembler::Membar_mask_bits(MacroAssembler::LoadLoad | MacroAssembler::LoadStore), noreg, true); __ cmp(Rtemp, code); // have we resolved this bytecode? __ b(resolved, eq); @@ -2587,7 +2596,7 @@ void TemplateTable::resolve_cache_and_index(int byte_no, __ mov(R1, code); __ call_VM(noreg, entry, R1); // Update registers with resolved info - __ get_cache_and_index_at_bcp(Rcache, Rindex, 1, index_size); + __ load_method_entry(Rcache, Rindex); __ bind(resolved); } @@ -2655,38 +2664,6 @@ void TemplateTable::load_resolved_field_entry(Register obj, } } -// The Rcache and Rindex registers must be set before call -void TemplateTable::load_field_cp_cache_entry(Register Rcache, - Register Rindex, - Register Roffset, - Register Rflags, - Register Robj, - bool is_static = false) { - - assert_different_registers(Rcache, Rindex, Rtemp); - assert_different_registers(Roffset, Rflags, Robj, Rtemp); - - ByteSize cp_base_offset = ConstantPoolCache::base_offset(); - - __ add(Rtemp, Rcache, AsmOperand(Rindex, lsl, LogBytesPerWord)); - - // Field offset - __ ldr(Roffset, Address(Rtemp, - cp_base_offset + ConstantPoolCacheEntry::f2_offset())); - - // Flags - __ ldr_u32(Rflags, Address(Rtemp, - cp_base_offset + ConstantPoolCacheEntry::flags_offset())); - - if (is_static) { - __ ldr(Robj, Address(Rtemp, - cp_base_offset + ConstantPoolCacheEntry::f1_offset())); - const int mirror_offset = in_bytes(Klass::java_mirror_offset()); - __ ldr(Robj, Address(Robj, mirror_offset)); - __ resolve_oop_handle(Robj); - } -} - // The rmethod register is input and overwritten to be the adapter method for the // indy call. Link Register (lr) is set to the return address for the adapter and // an appendix may be pushed to the stack. Registers R1-R3, Rtemp (R12) are clobbered @@ -2749,46 +2726,99 @@ void TemplateTable::load_invokedynamic_entry(Register method) { } // Blows all volatile registers: R0-R3, Rtemp, LR. -void TemplateTable::load_invoke_cp_cache_entry(int byte_no, - Register method, - Register itable_index, - Register flags, - bool is_invokevirtual, - bool is_invokevfinal/*unused*/, - bool is_invokedynamic /*unused*/) { +void TemplateTable::load_resolved_method_entry_special_or_static(Register Rcache, + Register method, + Register flags) { + Register index = flags; + assert_different_registers(Rcache, method, flags); + resolve_cache_and_index_for_method(f1_byte, Rcache, index); + __ ldrb(flags, Address(Rcache, in_bytes(ResolvedMethodEntry::flags_offset()))); + __ ldr(method, Address(Rcache, in_bytes(ResolvedMethodEntry::method_offset()))); +} + +void TemplateTable::load_resolved_method_entry_handle(Register Rcache, + Register method, + Register ref_index, + Register flags) { + Register index = ref_index; + assert_different_registers(method, flags); + assert_different_registers(Rcache, method, index); + + + resolve_cache_and_index_for_method(f1_byte, Rcache, index); + __ ldrb(flags, Address(Rcache, in_bytes(ResolvedMethodEntry::flags_offset()))); + + // maybe push appendix to arguments (just before return address) + Label L_no_push; + __ tbz(flags, ResolvedMethodEntry::has_appendix_shift, L_no_push); + // invokehandle uses an index into the resolved references array + __ ldrh(ref_index, Address(Rcache, in_bytes(ResolvedMethodEntry::resolved_references_index_offset()))); + // Push the appendix as a trailing parameter. + // This must be done before we get the receiver, + // since the parameter_size includes it. + Register appendix = method; + __ load_resolved_reference_at_index(appendix, ref_index); + __ push(appendix); // push appendix (MethodType, CallSite, etc.) + __ bind(L_no_push); + + __ ldr(method, Address(Rcache, in_bytes(ResolvedMethodEntry::method_offset()))); +} + +void TemplateTable::load_resolved_method_entry_interface(Register Rcache, + Register klass, + Register method_or_table_index, + Register flags) { // setup registers - const Register cache = R2_tmp; - const Register index = R3_tmp; - const Register temp_reg = Rtemp; - assert_different_registers(cache, index, temp_reg); - assert_different_registers(method, itable_index, temp_reg); + const Register index = method_or_table_index; + assert_different_registers(method_or_table_index, Rcache, flags); // determine constant pool cache field offsets - assert(is_invokevirtual == (byte_no == f2_byte), "is_invokevirtual flag redundant"); - const int method_offset = in_bytes( - ConstantPoolCache::base_offset() + - ((byte_no == f2_byte) - ? ConstantPoolCacheEntry::f2_offset() - : ConstantPoolCacheEntry::f1_offset() - ) - ); - const int flags_offset = in_bytes(ConstantPoolCache::base_offset() + - ConstantPoolCacheEntry::flags_offset()); - // access constant pool cache fields - const int index_offset = in_bytes(ConstantPoolCache::base_offset() + - ConstantPoolCacheEntry::f2_offset()); - - size_t index_size = sizeof(u2); - resolve_cache_and_index(byte_no, cache, index, index_size); - __ add(temp_reg, cache, AsmOperand(index, lsl, LogBytesPerWord)); - __ ldr(method, Address(temp_reg, method_offset)); - - if (itable_index != noreg) { - __ ldr(itable_index, Address(temp_reg, index_offset)); - } - __ ldr_u32(flags, Address(temp_reg, flags_offset)); + resolve_cache_and_index_for_method(f1_byte, Rcache, index); + __ ldrb(flags, Address(Rcache, in_bytes(ResolvedMethodEntry::flags_offset()))); + + // Invokeinterface can behave in different ways: + // If calling a method from java.lang.Object, the forced virtual flag is true so the invocation will + // behave like an invokevirtual call. The state of the virtual final flag will determine whether a method or + // vtable index is placed in the register. + // Otherwise, the registers will be populated with the klass and method. + + Label NotVirtual; Label NotVFinal; Label Done; + __ tbz(flags, ResolvedMethodEntry::is_forced_virtual_shift, NotVirtual); + __ tbz(flags, ResolvedMethodEntry::is_vfinal_shift, NotVFinal); + __ ldr(method_or_table_index, Address(Rcache, in_bytes(ResolvedMethodEntry::method_offset()))); + __ b(Done); + + __ bind(NotVFinal); + __ ldrh(method_or_table_index, Address(Rcache, in_bytes(ResolvedMethodEntry::table_index_offset()))); + __ b(Done); + + __ bind(NotVirtual); + __ ldr(method_or_table_index, Address(Rcache, in_bytes(ResolvedMethodEntry::method_offset()))); + __ ldr(klass, Address(Rcache, in_bytes(ResolvedMethodEntry::klass_offset()))); + __ bind(Done); } +void TemplateTable::load_resolved_method_entry_virtual(Register Rcache, + Register method_or_table_index, + Register flags) { + // setup registers + const Register index = flags; + assert_different_registers(method_or_table_index, Rcache, flags); + + // determine constant pool cache field offsets + resolve_cache_and_index_for_method(f2_byte, Rcache, index); + __ ldrb(flags, Address(Rcache, in_bytes(ResolvedMethodEntry::flags_offset()))); + + // method_or_table_index can either be an itable index or a method depending on the virtual final flag + Label NotVFinal; Label Done; + __ tbz(flags, ResolvedMethodEntry::is_vfinal_shift, NotVFinal); + __ ldr(method_or_table_index, Address(Rcache, in_bytes(ResolvedMethodEntry::method_offset()))); + __ b(Done); + + __ bind(NotVFinal); + __ ldrh(method_or_table_index, Address(Rcache, in_bytes(ResolvedMethodEntry::table_index_offset()))); + __ bind(Done); +} // The registers cache and index expected to be set before call, and should not be Rtemp. // Blows volatile registers R0-R3, Rtemp, LR, @@ -3620,63 +3650,31 @@ void TemplateTable::fast_xaccess(TosState state) { //---------------------------------------------------------------------------------------------------- // Calls -void TemplateTable::prepare_invoke(int byte_no, - Register method, // linked method (or i-klass) - Register index, // itable index, MethodType, etc. - Register recv, // if caller wants to see it - Register flags // if caller wants to test it - ) { - // determine flags - const Bytecodes::Code code = bytecode(); - const bool is_invokeinterface = code == Bytecodes::_invokeinterface; - const bool is_invokedynamic = code == Bytecodes::_invokedynamic; - const bool is_invokehandle = code == Bytecodes::_invokehandle; - const bool is_invokevirtual = code == Bytecodes::_invokevirtual; - const bool is_invokespecial = code == Bytecodes::_invokespecial; - const bool load_receiver = (recv != noreg); - assert(load_receiver == (code != Bytecodes::_invokestatic && code != Bytecodes::_invokedynamic), ""); - assert(recv == noreg || recv == R2, ""); - assert(flags == noreg || flags == R3, ""); - - // setup registers & access constant pool cache - if (recv == noreg) recv = R2; - if (flags == noreg) flags = R3; - const Register temp = Rtemp; +void TemplateTable::prepare_invoke(Register Rcache, Register recv) { + const Register ret_type = R1_tmp; - assert_different_registers(method, index, flags, recv, LR, ret_type, temp); + + const Bytecodes::Code code = bytecode(); + const bool load_receiver = (code != Bytecodes::_invokestatic && code != Bytecodes::_invokedynamic); // save 'interpreter return address' __ save_bcp(); - load_invoke_cp_cache_entry(byte_no, method, index, flags, is_invokevirtual, false, is_invokedynamic); - - // maybe push extra argument - if (is_invokehandle) { - Label L_no_push; - __ tbz(flags, ConstantPoolCacheEntry::has_appendix_shift, L_no_push); - __ mov(temp, index); - __ load_resolved_reference_at_index(index, temp); - __ verify_oop(index); - __ push_ptr(index); // push appendix (MethodType, CallSite, etc.) - __ bind(L_no_push); - } + // Load TOS state for later + __ ldrb(ret_type, Address(Rcache, in_bytes(ResolvedMethodEntry::type_offset()))); // load receiver if needed (after extra argument is pushed so parameter size is correct) if (load_receiver) { - __ andr(temp, flags, (uintx)ConstantPoolCacheEntry::parameter_size_mask); // get parameter size - Address recv_addr = __ receiver_argument_address(Rstack_top, temp, recv); + __ ldrh(recv, Address(Rcache, in_bytes(ResolvedMethodEntry::num_parameters_offset()))); + Address recv_addr = __ receiver_argument_address(Rstack_top, Rtemp, recv); __ ldr(recv, recv_addr); __ verify_oop(recv); } - // compute return type - __ logical_shift_right(ret_type, flags, ConstantPoolCacheEntry::tos_state_shift); - // Make sure we don't need to mask flags after the above shift - ConstantPoolCacheEntry::verify_tos_state_shift(); // load return address { const address table = (address) Interpreter::invoke_return_entry_table_for(code); - __ mov_slow(temp, table); - __ ldr(LR, Address::indexed_ptr(temp, ret_type)); + __ mov_slow(Rtemp, table); + __ ldr(LR, Address::indexed_ptr(Rtemp, ret_type)); } } @@ -3692,7 +3690,7 @@ void TemplateTable::invokevirtual_helper(Register index, // Test for an invoke of a final method Label notFinal; - __ tbz(flags, ConstantPoolCacheEntry::is_vfinal_shift, notFinal); + __ tbz(flags, ResolvedMethodEntry::is_vfinal_shift, notFinal); assert(index == Rmethod, "Method* must be Rmethod, for interpreter calling convention"); @@ -3729,7 +3727,10 @@ void TemplateTable::invokevirtual(int byte_no) { const Register Rrecv = R2_tmp; const Register Rflags = R3_tmp; - prepare_invoke(byte_no, Rmethod, noreg, Rrecv, Rflags); + load_resolved_method_entry_virtual(Rrecv, // ResolvedMethodEntry* + Rmethod, // Method* or itable index + Rflags); // Flags + prepare_invoke(Rrecv, Rrecv); // Rmethod: index // Rrecv: receiver @@ -3744,7 +3745,10 @@ void TemplateTable::invokespecial(int byte_no) { transition(vtos, vtos); assert(byte_no == f1_byte, "use this argument"); const Register Rrecv = R2_tmp; - prepare_invoke(byte_no, Rmethod, noreg, Rrecv); + load_resolved_method_entry_special_or_static(R2_tmp, // ResolvedMethodEntry* + Rmethod, // Method* + R3_tmp); // Flags + prepare_invoke(Rrecv, Rrecv); __ verify_oop(Rrecv); __ null_check(Rrecv, Rtemp); // do the call @@ -3756,7 +3760,10 @@ void TemplateTable::invokespecial(int byte_no) { void TemplateTable::invokestatic(int byte_no) { transition(vtos, vtos); assert(byte_no == f1_byte, "use this argument"); - prepare_invoke(byte_no, Rmethod); + load_resolved_method_entry_special_or_static(R2_tmp, // ResolvedMethodEntry* + Rmethod, // Method* + R3_tmp); // Flags + prepare_invoke(R2_tmp, R2_tmp); // do the call __ profile_call(R2_tmp); __ jump_from_interpreted(Rmethod); @@ -3781,7 +3788,11 @@ void TemplateTable::invokeinterface(int byte_no) { const Register Rflags = R3_tmp; const Register Rklass = R2_tmp; // Note! Same register with Rrecv - prepare_invoke(byte_no, Rinterf, Rmethod, Rrecv, Rflags); + load_resolved_method_entry_interface(R2_tmp, // ResolvedMethodEntry* + R1_tmp, // Klass* + Rmethod, // Method* or itable/vtable index + R3_tmp); // Flags + prepare_invoke(Rrecv, Rrecv); // First check for Object case, then private interface method, // then regular interface method. @@ -3789,7 +3800,7 @@ void TemplateTable::invokeinterface(int byte_no) { // Special case of invokeinterface called for virtual method of // java.lang.Object. See cpCache.cpp for details. Label notObjectMethod; - __ tbz(Rflags, ConstantPoolCacheEntry::is_forced_virtual_shift, notObjectMethod); + __ tbz(Rflags, ResolvedMethodEntry::is_forced_virtual_shift, notObjectMethod); invokevirtual_helper(Rmethod, Rrecv, Rflags); __ bind(notObjectMethod); @@ -3800,7 +3811,7 @@ void TemplateTable::invokeinterface(int byte_no) { Label no_such_interface; Label notVFinal; - __ tbz(Rflags, ConstantPoolCacheEntry::is_vfinal_shift, notVFinal); + __ tbz(Rflags, ResolvedMethodEntry::is_vfinal_shift, notVFinal); Label subtype; __ check_klass_subtype(Rklass, Rinterf, R1_tmp, R3_tmp, noreg, subtype); @@ -3874,9 +3885,12 @@ void TemplateTable::invokehandle(int byte_no) { const Register Rrecv = R2_tmp; const Register Rmtype = R4_tmp; - const Register R5_method = R5_tmp; // can't reuse Rmethod! - prepare_invoke(byte_no, R5_method, Rmtype, Rrecv); + load_resolved_method_entry_handle(R2_tmp, // ResolvedMethodEntry* + Rmethod, // Method* + Rmtype, // Resolved Reference + R3_tmp); // Flags + prepare_invoke(Rrecv, Rrecv); __ null_check(Rrecv, Rtemp); // Rmtype: MethodType object (from cpool->resolved_references[f1], if necessary) @@ -3886,7 +3900,6 @@ void TemplateTable::invokehandle(int byte_no) { // do the call __ profile_final_call(R3_tmp); // FIXME: profile the LambdaForm also - __ mov(Rmethod, R5_method); __ jump_from_interpreted(Rmethod); } diff --git a/src/hotspot/cpu/arm/templateTable_arm.hpp b/src/hotspot/cpu/arm/templateTable_arm.hpp index 06c9d665ae74f..5b19bc68e7719 100644 --- a/src/hotspot/cpu/arm/templateTable_arm.hpp +++ b/src/hotspot/cpu/arm/templateTable_arm.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2023, 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,12 +25,7 @@ #ifndef CPU_ARM_TEMPLATETABLE_ARM_HPP #define CPU_ARM_TEMPLATETABLE_ARM_HPP - static void prepare_invoke(int byte_no, - Register method, // linked method (or i-klass) - Register index = noreg, // itable index, MethodType, etc. - Register recv = noreg, // if caller wants to see it - Register flags = noreg // if caller wants to test it - ); + static void prepare_invoke(Register cache, Register recv); static void invokevirtual_helper(Register index, Register recv, Register flags); From e47cf611c9490225e50a548787cbba66ab147058 Mon Sep 17 00:00:00 2001 From: Alec Su Date: Tue, 21 Nov 2023 19:26:49 +0000 Subject: [PATCH 012/250] 8074211: javax.sound.midi: Error with send System Exclusive messages of different length 8250667: MIDI sysex over USB scrambled when reply length matches previous message Reviewed-by: prr --- .../libjsound/PLATFORM_API_WinOS_MidiIn.cpp | 8 ++--- .../libjsound/PLATFORM_API_WinOS_MidiOut.c | 29 ++++++++++++------- .../libjsound/PLATFORM_API_WinOS_Util.c | 11 +++---- .../libjsound/PLATFORM_API_WinOS_Util.h | 17 +++++++---- .../SysexMessage/SendRawSysexMessage.java | 7 ++++- 5 files changed, 46 insertions(+), 26 deletions(-) diff --git a/src/java.desktop/windows/native/libjsound/PLATFORM_API_WinOS_MidiIn.cpp b/src/java.desktop/windows/native/libjsound/PLATFORM_API_WinOS_MidiIn.cpp index 4d1f4fee19e9e..91e1a50c66129 100644 --- a/src/java.desktop/windows/native/libjsound/PLATFORM_API_WinOS_MidiIn.cpp +++ b/src/java.desktop/windows/native/libjsound/PLATFORM_API_WinOS_MidiIn.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2023, 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 @@ -301,7 +301,7 @@ INT32 prepareBuffers(MidiDeviceHandle* handle) { } sysex = (SysExQueue*) handle->longBuffers; for (i = 0; icount; i++) { - MIDIHDR* hdr = &(sysex->header[i]); + MIDIHDR* hdr = &(sysex->headerInfo[i].header); midiInPrepareHeader((HMIDIIN) handle->deviceHandle, hdr, sizeof(MIDIHDR)); err = midiInAddBuffer((HMIDIIN) handle->deviceHandle, hdr, sizeof(MIDIHDR)); } @@ -320,7 +320,7 @@ INT32 unprepareBuffers(MidiDeviceHandle* handle) { } sysex = (SysExQueue*) handle->longBuffers; for (i = 0; icount; i++) { - err = midiInUnprepareHeader((HMIDIIN) handle->deviceHandle, &(sysex->header[i]), sizeof(MIDIHDR)); + err = midiInUnprepareHeader((HMIDIIN) handle->deviceHandle, &(sysex->headerInfo[i].header), sizeof(MIDIHDR)); } MIDIIN_CHECK_ERROR; return (INT32) err; @@ -502,7 +502,7 @@ void MIDI_IN_ReleaseMessage(MidiDeviceHandle* handle, MidiMessage* msg) { } sysex = (SysExQueue*) handle->longBuffers; if (msg->type == LONG_MESSAGE && sysex) { - MIDIHDR* hdr = &(sysex->header[msg->data.l.index]); + MIDIHDR* hdr = &(sysex->headerInfo[msg->data.l.index].header); //fprintf(stdout, "ReleaseMessage index %d\n", msg->data.l.index); fflush(stdout); hdr->dwBytesRecorded = 0; midiInAddBuffer((HMIDIIN) handle->deviceHandle, hdr, sizeof(MIDIHDR)); diff --git a/src/java.desktop/windows/native/libjsound/PLATFORM_API_WinOS_MidiOut.c b/src/java.desktop/windows/native/libjsound/PLATFORM_API_WinOS_MidiOut.c index 01f2cc866d4b9..dc872d541bcc0 100644 --- a/src/java.desktop/windows/native/libjsound/PLATFORM_API_WinOS_MidiOut.c +++ b/src/java.desktop/windows/native/libjsound/PLATFORM_API_WinOS_MidiOut.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2023, 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 @@ -161,7 +161,7 @@ INT32 unprepareLongBuffers(MidiDeviceHandle* handle) { } sysex = (SysExQueue*) handle->longBuffers; for (i = 0; icount; i++) { - MIDIHDR* hdr = &(sysex->header[i]); + MIDIHDR* hdr = &(sysex->headerInfo[i].header); if (hdr->dwFlags) { err = midiOutUnprepareHeader((HMIDIOUT) handle->deviceHandle, hdr, sizeof(MIDIHDR)); } @@ -170,8 +170,9 @@ INT32 unprepareLongBuffers(MidiDeviceHandle* handle) { return (INT32) err; } -INT32 freeLongBuffer(MIDIHDR* hdr, HMIDIOUT deviceHandle, INT32 minToLeaveData) { +INT32 freeLongBuffer(MidiHeaderInfo* info, HMIDIOUT deviceHandle, INT32 minToLeaveData) { MMRESULT err = MMSYSERR_NOERROR; + MIDIHDR* hdr = &(info->header); if (!hdr) { ERROR0("MIDI_OUT_freeLongBuffer: hdr == NULL\n"); @@ -180,10 +181,11 @@ INT32 freeLongBuffer(MIDIHDR* hdr, HMIDIOUT deviceHandle, INT32 minToLeaveData) if (hdr->dwFlags && deviceHandle) { err = midiOutUnprepareHeader(deviceHandle, hdr, sizeof(MIDIHDR)); } - if (hdr->lpData && (((INT32) hdr->dwBufferLength) < minToLeaveData || minToLeaveData < 0)) { + if (hdr->lpData && (info->bufferLength < minToLeaveData || minToLeaveData < 0)) { free(hdr->lpData); hdr->lpData=NULL; hdr->dwBufferLength=0; + info->bufferLength=0; } hdr->dwBytesRecorded=0; hdr->dwFlags=0; @@ -201,7 +203,7 @@ INT32 freeLongBuffers(MidiDeviceHandle* handle) { } sysex = (SysExQueue*) handle->longBuffers; for (i = 0; icount; i++) { - err = freeLongBuffer(&(sysex->header[i]), (HMIDIOUT) handle->deviceHandle, -1); + err = freeLongBuffer(&(sysex->headerInfo[i]), (HMIDIOUT) handle->deviceHandle, -1); } MIDIOUT_CHECK_ERROR; return (INT32) err; @@ -352,6 +354,7 @@ INT32 MIDI_OUT_SendShortMessage(MidiDeviceHandle* handle, UINT32 packedMsg, UINT INT32 MIDI_OUT_SendLongMessage(MidiDeviceHandle* handle, UBYTE* data, UINT32 size, UINT32 timestamp) { MMRESULT err; SysExQueue* sysex; + MidiHeaderInfo* info = NULL; MIDIHDR* hdr = NULL; INT32 remainingSize; int i; @@ -378,10 +381,12 @@ INT32 MIDI_OUT_SendLongMessage(MidiDeviceHandle* handle, UBYTE* data, UINT32 siz while (!hdr && handle->platformData) { /* find a non-queued header */ for (i = 0; i < sysex->count; i++) { - hdr = &(sysex->header[i]); + info = &(sysex->headerInfo[i]); + hdr = &(info->header); if ((hdr->dwFlags & MHDR_DONE) || (hdr->dwFlags == 0)) { break; } + info = NULL; hdr = NULL; } /* wait for a buffer to free up */ @@ -404,22 +409,26 @@ INT32 MIDI_OUT_SendLongMessage(MidiDeviceHandle* handle, UBYTE* data, UINT32 siz } TRACE2("-> sending %d bytes with buffer index=%d\n", (int) size, (int) hdr->dwUser); - freeLongBuffer(hdr, handle->deviceHandle, (INT32) size); + freeLongBuffer(info, handle->deviceHandle, (INT32) size); if (hdr->lpData == NULL) { hdr->lpData = malloc(size); - hdr->dwBufferLength = size; + info->bufferLength = size; } + // Because midiOutLongMsg() ignores dwBytesRecorded, set both + // dwBufferLength to the size of the data. The actual buffer + // size is recorded in info->bufferLength. + hdr->dwBufferLength = size; hdr->dwBytesRecorded = size; memcpy(hdr->lpData, data, size); err = midiOutPrepareHeader((HMIDIOUT) handle->deviceHandle, hdr, sizeof(MIDIHDR)); if (err != MMSYSERR_NOERROR) { - freeLongBuffer(hdr, handle->deviceHandle, -1); + freeLongBuffer(info, handle->deviceHandle, -1); MIDIOUT_CHECK_ERROR; return (INT32) err; } err = midiOutLongMsg((HMIDIOUT) handle->deviceHandle, hdr, sizeof(MIDIHDR)); if (err != MMSYSERR_NOERROR) { - freeLongBuffer(hdr, handle->deviceHandle, -1); + freeLongBuffer(info, handle->deviceHandle, -1); ERROR0("ERROR: MIDI_OUT_SendLongMessage: midiOutLongMsg returned error:\n"); MIDIOUT_CHECK_ERROR; return (INT32) err; diff --git a/src/java.desktop/windows/native/libjsound/PLATFORM_API_WinOS_Util.c b/src/java.desktop/windows/native/libjsound/PLATFORM_API_WinOS_Util.c index 7823195987155..249887d776138 100644 --- a/src/java.desktop/windows/native/libjsound/PLATFORM_API_WinOS_Util.c +++ b/src/java.desktop/windows/native/libjsound/PLATFORM_API_WinOS_Util.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2023, 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 @@ -89,7 +89,7 @@ int MIDI_WinCreateLongBufferQueue(MidiDeviceHandle* handle, int count, int size, SysExQueue* sysex; int i; UBYTE* dataPtr; - int structSize = sizeof(SysExQueue) + ((count - 1) * sizeof(MIDIHDR)); + int structSize = sizeof(SysExQueue) + ((count - 1) * sizeof(MidiHeaderInfo)); sysex = (SysExQueue*) malloc(structSize); if (!sysex) return FALSE; @@ -112,10 +112,11 @@ int MIDI_WinCreateLongBufferQueue(MidiDeviceHandle* handle, int count, int size, // set up headers dataPtr = preAllocatedMem; for (i=0; iheader[i].lpData = dataPtr; - sysex->header[i].dwBufferLength = size; + sysex->headerInfo[i].header.lpData = dataPtr; + sysex->headerInfo[i].header.dwBufferLength = size; + sysex->headerInfo[i].bufferLength = size; // user data is the index of the buffer - sysex->header[i].dwUser = (DWORD) i; + sysex->headerInfo[i].header.dwUser = (DWORD) i; dataPtr += size; } return TRUE; diff --git a/src/java.desktop/windows/native/libjsound/PLATFORM_API_WinOS_Util.h b/src/java.desktop/windows/native/libjsound/PLATFORM_API_WinOS_Util.h index 20ce55b19fb76..dddca80f1050c 100644 --- a/src/java.desktop/windows/native/libjsound/PLATFORM_API_WinOS_Util.h +++ b/src/java.desktop/windows/native/libjsound/PLATFORM_API_WinOS_Util.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -46,12 +46,17 @@ #include "PlatformMidi.h" +typedef struct tag_MidiHeaderInfo { + MIDIHDR header; // Windows specific structure to hold meta info + INT32 bufferLength; // the actual length of the buffer in MIDIHDR +} MidiHeaderInfo; + typedef struct tag_SysExQueue { - int count; // number of sys ex headers - int size; // data size per sys ex header - int ownsLinearMem; // true when linearMem is to be disposed - UBYTE* linearMem; // where the actual sys ex data is, count*size bytes - MIDIHDR header[1]; // Windows specific structure to hold meta info + int count; // number of sys ex headers + int size; // data size per sys ex header + int ownsLinearMem; // true when linearMem is to be disposed + UBYTE* linearMem; // where the actual sys ex data is, count*size bytes + MidiHeaderInfo headerInfo[1]; // a structure to hold MIDIHDR and the actual buffer length } SysExQueue; /* set the startTime field in MidiDeviceHandle */ diff --git a/test/jdk/javax/sound/midi/SysexMessage/SendRawSysexMessage.java b/test/jdk/javax/sound/midi/SysexMessage/SendRawSysexMessage.java index 2a33d28b3f535..00c57f46c98cf 100644 --- a/test/jdk/javax/sound/midi/SysexMessage/SendRawSysexMessage.java +++ b/test/jdk/javax/sound/midi/SysexMessage/SendRawSysexMessage.java @@ -34,7 +34,7 @@ /** * @test - * @bug 8237495 8301310 + * @bug 8074211 8237495 8301310 * @summary fail with memory errors when asked to send a sysex message starting * with 0xF7 */ @@ -114,6 +114,11 @@ private static void test(MidiDevice.Info info) throws Exception { (byte) SPECIAL_SYSTEM_EXCLUSIVE}), -1); System.err.println("note off"); r.send(new ShortMessage(ShortMessage.NOTE_OFF, 5, 5), -1); + // The three parts of the sysex below are added for + // JDK-8301310, but it can also used to test JDK-8074211. + // However, The testcase does not fail when JDK-8074211 occurs. + // It's recommended to setup a loopback MIDI device then check + // whether the sysex received is the same as the testcase. System.err.println("sysex part 1 of 3"); r.send(new SysexMessage(new byte[]{ (byte) SYSTEM_EXCLUSIVE, 0x7D, 0x01, 0x02}, 4), -1); From d1af748ab470e1068d03a8f8bc1a7445eff721fa Mon Sep 17 00:00:00 2001 From: Xin Liu Date: Wed, 22 Nov 2023 03:23:45 +0000 Subject: [PATCH 013/250] 8309067: gtest/AsyncLogGtest.java fails again in stderrOutput_vm Reviewed-by: jsjolen, dholmes --- test/hotspot/gtest/logging/test_asynclog.cpp | 66 ++++++++++---------- 1 file changed, 34 insertions(+), 32 deletions(-) diff --git a/test/hotspot/gtest/logging/test_asynclog.cpp b/test/hotspot/gtest/logging/test_asynclog.cpp index 89a1d6fef8a94..8573d93cdf1ee 100644 --- a/test/hotspot/gtest/logging/test_asynclog.cpp +++ b/test/hotspot/gtest/logging/test_asynclog.cpp @@ -69,21 +69,22 @@ LOG_LEVEL_LIST log_debug(logging)("log_debug-test"); } + // Caveat: BufferUpdater is not MT-safe. We use it only for testing. + // We would observe missing loglines if we interleaved buffers. + // Emit all logs between constructor and destructor of BufferUpdater. void test_asynclog_drop_messages() { - auto writer = AsyncLogWriter::instance(); - if (writer != nullptr) { - const size_t sz = 2000; + const size_t sz = 2000; - // shrink async buffer. - AsyncLogWriter::BufferUpdater saver(1024); - LogMessage(logging) lm; + // shrink async buffer. + AsyncLogWriter::BufferUpdater saver(1024); + test_asynclog_ls(); // roughly 200 bytes. + LogMessage(logging) lm; - // write more messages than its capacity in burst - for (size_t i = 0; i < sz; ++i) { - lm.debug("a lot of log..."); - } - lm.flush(); + // write more messages than its capacity in burst + for (size_t i = 0; i < sz; ++i) { + lm.debug("a lot of log..."); } + lm.flush(); } // stdout/stderr support @@ -93,8 +94,7 @@ LOG_LEVEL_LIST if (f != NULL) { size_t sz = output.size(); size_t written = fwrite(output.c_str(), sizeof(char), output.size(), f); - // at least see "header" - return fclose(f) == 0 && sz == written && sz >= 6; + return fclose(f) == 0 && sz == written; } return false; @@ -244,67 +244,69 @@ TEST_VM_F(AsyncLogTest, logBuffer) { } TEST_VM_F(AsyncLogTest, droppingMessage) { + if (AsyncLogWriter::instance() == nullptr) { + return; + } + set_log_config(TestLogFileName, "logging=debug"); test_asynclog_drop_messages(); - - AsyncLogWriter::flush(); - if (AsyncLogWriter::instance() != nullptr) { - EXPECT_TRUE(file_contains_substring(TestLogFileName, "messages dropped due to async logging")); - } + EXPECT_TRUE(file_contains_substring(TestLogFileName, "messages dropped due to async logging")); } TEST_VM_F(AsyncLogTest, stdoutOutput) { testing::internal::CaptureStdout(); - fprintf(stdout, "header"); if (!set_log_config("stdout", "logging=debug")) { return; } - test_asynclog_ls(); - test_asynclog_drop_messages(); + bool async = AsyncLogWriter::instance() != nullptr; + if (async) { + test_asynclog_drop_messages(); + AsyncLogWriter::flush(); + } else { + test_asynclog_ls(); + } - AsyncLogWriter::flush(); fflush(nullptr); - if (!write_to_file(testing::internal::GetCapturedStdout())) { return; } - EXPECT_TRUE(file_contains_substring(TestLogFileName, "header")); EXPECT_TRUE(file_contains_substring(TestLogFileName, "LogStreamWithAsyncLogImpl")); EXPECT_TRUE(file_contains_substring(TestLogFileName, "logStream msg1-msg2-msg3")); EXPECT_TRUE(file_contains_substring(TestLogFileName, "logStream newline")); - if (AsyncLogWriter::instance() != nullptr) { + if (async) { EXPECT_TRUE(file_contains_substring(TestLogFileName, "messages dropped due to async logging")); } } TEST_VM_F(AsyncLogTest, stderrOutput) { testing::internal::CaptureStderr(); - fprintf(stderr, "header"); if (!set_log_config("stderr", "logging=debug")) { return; } - test_asynclog_ls(); - test_asynclog_drop_messages(); + bool async = AsyncLogWriter::instance() != nullptr; + if (async) { + test_asynclog_drop_messages(); + AsyncLogWriter::flush(); + } else { + test_asynclog_ls(); + } - AsyncLogWriter::flush(); fflush(nullptr); - if (!write_to_file(testing::internal::GetCapturedStderr())) { return; } - EXPECT_TRUE(file_contains_substring(TestLogFileName, "header")); EXPECT_TRUE(file_contains_substring(TestLogFileName, "LogStreamWithAsyncLogImpl")); EXPECT_TRUE(file_contains_substring(TestLogFileName, "logStream msg1-msg2-msg3")); EXPECT_TRUE(file_contains_substring(TestLogFileName, "logStream newline")); - if (AsyncLogWriter::instance() != nullptr) { + if (async) { EXPECT_TRUE(file_contains_substring(TestLogFileName, "messages dropped due to async logging")); } } From b3616c9ac09a29824441dea4588ce53fa443067d Mon Sep 17 00:00:00 2001 From: Hao Sun Date: Wed, 22 Nov 2023 05:32:57 +0000 Subject: [PATCH 014/250] 8320131: Zero build fails on macOS after JDK-8254693 Reviewed-by: dholmes, jvernee --- src/java.base/share/native/libfallbackLinker/fallbackLinker.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/java.base/share/native/libfallbackLinker/fallbackLinker.c b/src/java.base/share/native/libfallbackLinker/fallbackLinker.c index 5c7531dcd75ba..39d869adb639e 100644 --- a/src/java.base/share/native/libfallbackLinker/fallbackLinker.c +++ b/src/java.base/share/native/libfallbackLinker/fallbackLinker.c @@ -28,8 +28,8 @@ #include #include -#include #include +#include #include #ifdef _WIN64 #include From 2c31ca525b1cd70c3dfcb0463c8c984bdd7c886a Mon Sep 17 00:00:00 2001 From: Dan Heidinga Date: Wed, 22 Nov 2023 05:49:51 +0000 Subject: [PATCH 015/250] 8320335: Deprecate `RegisterFinalizersAtInit` option and code Reviewed-by: eosterlund, dholmes --- src/hotspot/share/runtime/arguments.cpp | 1 + src/hotspot/share/runtime/globals.hpp | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/hotspot/share/runtime/arguments.cpp b/src/hotspot/share/runtime/arguments.cpp index ded0d655ff4e9..477a1ebe8d110 100644 --- a/src/hotspot/share/runtime/arguments.cpp +++ b/src/hotspot/share/runtime/arguments.cpp @@ -509,6 +509,7 @@ static SpecialFlag const special_jvm_flags[] = { { "DynamicDumpSharedSpaces", JDK_Version::jdk(18), JDK_Version::jdk(19), JDK_Version::undefined() }, { "RequireSharedSpaces", JDK_Version::jdk(18), JDK_Version::jdk(19), JDK_Version::undefined() }, { "UseSharedSpaces", JDK_Version::jdk(18), JDK_Version::jdk(19), JDK_Version::undefined() }, + { "RegisterFinalizersAtInit", JDK_Version::jdk(22), JDK_Version::jdk(23), JDK_Version::jdk(24) }, // --- Deprecated alias flags (see also aliased_jvm_flags) - sorted by obsolete_in then expired_in: { "DefaultMaxRAMFraction", JDK_Version::jdk(8), JDK_Version::undefined(), JDK_Version::undefined() }, diff --git a/src/hotspot/share/runtime/globals.hpp b/src/hotspot/share/runtime/globals.hpp index b780b040f9416..76621ac014d32 100644 --- a/src/hotspot/share/runtime/globals.hpp +++ b/src/hotspot/share/runtime/globals.hpp @@ -667,8 +667,8 @@ const int ObjectAlignmentInBytes = 8; "Print JVM warnings to output stream") \ \ product(bool, RegisterFinalizersAtInit, true, \ - "Register finalizable objects at end of Object. or " \ - "after allocation") \ + "(Deprecated) Register finalizable objects at end of " \ + "Object. or after allocation") \ \ develop(bool, RegisterReferences, true, \ "Tell whether the VM should register soft/weak/final/phantom " \ From 98edb03abe1692dcf5c6c463011b895d6e59b8cb Mon Sep 17 00:00:00 2001 From: Thomas Stuefe Date: Wed, 22 Nov 2023 09:20:19 +0000 Subject: [PATCH 016/250] 8320382: Remove CompressedKlassPointers::is_valid_base() Reviewed-by: rkennke, aph --- src/hotspot/share/cds/metaspaceShared.cpp | 22 ++++++++++------------ src/hotspot/share/oops/compressedKlass.cpp | 18 ------------------ src/hotspot/share/oops/compressedKlass.hpp | 5 ----- 3 files changed, 10 insertions(+), 35 deletions(-) diff --git a/src/hotspot/share/cds/metaspaceShared.cpp b/src/hotspot/share/cds/metaspaceShared.cpp index 0c70dab3f60c2..b73048a9bf58e 100644 --- a/src/hotspot/share/cds/metaspaceShared.cpp +++ b/src/hotspot/share/cds/metaspaceShared.cpp @@ -141,11 +141,16 @@ size_t MetaspaceShared::core_region_alignment() { } static bool shared_base_valid(char* shared_base) { -#ifdef _LP64 - return CompressedKlassPointers::is_valid_base((address)shared_base); -#else - return true; -#endif + // We check user input for SharedBaseAddress at dump time. We must weed out values + // we already know to be invalid later. + + // At CDS runtime, "shared_base" will be the (attempted) mapping start. It will also + // be the encoding base, since the the headers of archived base objects (and with Lilliput, + // the prototype mark words) carry pre-computed narrow Klass IDs that refer to the mapping + // start as base. + // + // Therefore, "shared_base" must be later usable as encoding base. + return AARCH64_ONLY(is_aligned(shared_base, 4 * G)) NOT_AARCH64(true); } class DumpClassListCLDClosure : public CLDClosure { @@ -1257,12 +1262,6 @@ char* MetaspaceShared::reserve_address_space_for_archives(FileMapInfo* static_ma if (base_address != nullptr) { assert(is_aligned(base_address, archive_space_alignment), "Archive base address invalid: " PTR_FORMAT ".", p2i(base_address)); -#ifdef _LP64 - if (Metaspace::using_class_space()) { - assert(CompressedKlassPointers::is_valid_base(base_address), - "Archive base address invalid: " PTR_FORMAT ".", p2i(base_address)); - } -#endif } if (!Metaspace::using_class_space()) { @@ -1348,7 +1347,6 @@ char* MetaspaceShared::reserve_address_space_for_archives(FileMapInfo* static_ma "Sanity (" PTR_FORMAT " vs " PTR_FORMAT ")", p2i(base_address), p2i(total_space_rs.base())); assert(is_aligned(total_space_rs.base(), archive_space_alignment), "Sanity"); assert(total_space_rs.size() == total_range_size, "Sanity"); - assert(CompressedKlassPointers::is_valid_base((address)total_space_rs.base()), "Sanity"); // Now split up the space into ccs and cds archive. For simplicity, just leave // the gap reserved at the end of the archive space. Do not do real splitting. diff --git a/src/hotspot/share/oops/compressedKlass.cpp b/src/hotspot/share/oops/compressedKlass.cpp index 947085b02e3fa..40b4ae170114a 100644 --- a/src/hotspot/share/oops/compressedKlass.cpp +++ b/src/hotspot/share/oops/compressedKlass.cpp @@ -39,7 +39,6 @@ size_t CompressedKlassPointers::_range = 0; // set this encoding scheme. Used by CDS at runtime to re-instate the scheme used to pre-compute klass ids for // archived heap objects. void CompressedKlassPointers::initialize_for_given_encoding(address addr, size_t len, address requested_base, int requested_shift) { - assert(is_valid_base(requested_base), "Address must be a valid encoding base"); address const end = addr + len; const int narrow_klasspointer_bits = sizeof(narrowKlass) * 8; @@ -89,23 +88,6 @@ void CompressedKlassPointers::initialize(address addr, size_t len) { set_base(base); set_shift(shift); set_range(range); - - assert(is_valid_base(_base), "Address must be a valid encoding base"); -} - -// Given an address p, return true if p can be used as an encoding base. -// (Some platforms have restrictions of what constitutes a valid base address). -bool CompressedKlassPointers::is_valid_base(address p) { -#ifdef AARCH64 - // Below 32G, base must be aligned to 4G. - // Above that point, base must be aligned to 32G - if (p < (address)(32 * G)) { - return is_aligned(p, 4 * G); - } - return is_aligned(p, (4 << LogKlassAlignmentInBytes) * G); -#else - return true; -#endif } void CompressedKlassPointers::print_mode(outputStream* st) { diff --git a/src/hotspot/share/oops/compressedKlass.hpp b/src/hotspot/share/oops/compressedKlass.hpp index e4a2550a5996b..ac0bad9ea82e3 100644 --- a/src/hotspot/share/oops/compressedKlass.hpp +++ b/src/hotspot/share/oops/compressedKlass.hpp @@ -62,11 +62,6 @@ class CompressedKlassPointers : public AllStatic { public: - // Given an address p, return true if p can be used as an encoding base. - // (Some platforms have restrictions of what constitutes a valid base - // address). - static bool is_valid_base(address p); - // Given a klass range [addr, addr+len) and a given encoding scheme, assert that this scheme covers the range, then // set this encoding scheme. Used by CDS at runtime to re-instate the scheme used to pre-compute klass ids for // archived heap objects. From ceb0290335269374da3a366a5d24dd0b7fa722a0 Mon Sep 17 00:00:00 2001 From: Christian Stein Date: Wed, 22 Nov 2023 09:49:37 +0000 Subject: [PATCH 017/250] 8320447: Remove obsolete `LintCategory.hidden` Reviewed-by: jjg --- .../share/classes/com/sun/tools/javac/code/Lint.java | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Lint.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Lint.java index de37229f68f29..92b2a773ffa98 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Lint.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Lint.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2023, 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 @@ -349,12 +349,7 @@ public enum LintCategory { RESTRICTED("restricted"); LintCategory(String option) { - this(option, false); - } - - LintCategory(String option, boolean hidden) { this.option = option; - this.hidden = hidden; map.put(option, this); } @@ -363,7 +358,6 @@ static LintCategory get(String option) { } public final String option; - public final boolean hidden; } /** From 5e818318eac8cda7d42b599dc7d7d44e5c299a9f Mon Sep 17 00:00:00 2001 From: Feilong Jiang Date: Wed, 22 Nov 2023 10:13:17 +0000 Subject: [PATCH 018/250] 8320399: RISC-V: Some format clean-up in opto assembly code Reviewed-by: fyang --- .../cpu/riscv/c2_MacroAssembler_riscv.cpp | 9 +++--- src/hotspot/cpu/riscv/riscv.ad | 31 +++++++++++-------- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/hotspot/cpu/riscv/c2_MacroAssembler_riscv.cpp b/src/hotspot/cpu/riscv/c2_MacroAssembler_riscv.cpp index 647f56db73eed..5daeff511922c 100644 --- a/src/hotspot/cpu/riscv/c2_MacroAssembler_riscv.cpp +++ b/src/hotspot/cpu/riscv/c2_MacroAssembler_riscv.cpp @@ -1036,12 +1036,13 @@ void C2_MacroAssembler::string_indexof_linearscan(Register haystack, Register ne // Compare strings. void C2_MacroAssembler::string_compare(Register str1, Register str2, - Register cnt1, Register cnt2, Register result, Register tmp1, Register tmp2, - Register tmp3, int ae) + Register cnt1, Register cnt2, Register result, + Register tmp1, Register tmp2, Register tmp3, + int ae) { Label DONE, SHORT_LOOP, SHORT_STRING, SHORT_LAST, TAIL, STUB, - DIFFERENCE, NEXT_WORD, SHORT_LOOP_TAIL, SHORT_LAST2, SHORT_LAST_INIT, - SHORT_LOOP_START, TAIL_CHECK, L; + DIFFERENCE, NEXT_WORD, SHORT_LOOP_TAIL, SHORT_LAST2, SHORT_LAST_INIT, + SHORT_LOOP_START, TAIL_CHECK, L; const int STUB_THRESHOLD = 64 + 8; bool isLL = ae == StrIntrinsicNode::LL; diff --git a/src/hotspot/cpu/riscv/riscv.ad b/src/hotspot/cpu/riscv/riscv.ad index cb2d540322aee..87f240873a85b 100644 --- a/src/hotspot/cpu/riscv/riscv.ad +++ b/src/hotspot/cpu/riscv/riscv.ad @@ -8645,7 +8645,7 @@ instruct MoveF2I_reg_reg(iRegINoSp dst, fRegF src) %{ ins_cost(XFER_COST); - format %{ "fmv.x.w $dst, $src\t#@MoveL2D_reg_stack" %} + format %{ "fmv.x.w $dst, $src\t#@MoveF2I_reg_reg" %} ins_encode %{ __ fmv_x_w(as_Register($dst$$reg), as_FloatRegister($src$$reg)); @@ -8699,7 +8699,7 @@ instruct MoveL2D_reg_reg(fRegD dst, iRegL src) %{ ins_cost(XFER_COST); - format %{ "fmv.d.x $dst, $src\t#@MoveD2L_reg_reg" %} + format %{ "fmv.d.x $dst, $src\t#@MoveL2D_reg_reg" %} ins_encode %{ __ fmv_d_x(as_FloatRegister($dst$$reg), as_Register($src$$reg)); @@ -8720,7 +8720,8 @@ instruct cmpF3_reg_reg(iRegINoSp dst, fRegF op1, fRegF op2) format %{ "flt.s $dst, $op2, $op1\t#@cmpF3_reg_reg\n\t" "bgtz $dst, done\n\t" "feq.s $dst, $op1, $op2\n\t" - "addi $dst, $dst, -1\t#@cmpF3_reg_reg" + "addi $dst, $dst, -1\n\t" + "done:" %} ins_encode %{ @@ -8740,7 +8741,8 @@ instruct cmpD3_reg_reg(iRegINoSp dst, fRegD op1, fRegD op2) format %{ "flt.d $dst, $op2, $op1\t#@cmpD3_reg_reg\n\t" "bgtz $dst, done\n\t" "feq.d $dst, $op1, $op2\n\t" - "addi $dst, $dst, -1\t#@cmpD3_reg_reg" + "addi $dst, $dst, -1\n\t" + "done:" %} ins_encode %{ @@ -8758,8 +8760,9 @@ instruct cmpL3_reg_reg(iRegINoSp dst, iRegL op1, iRegL op2) ins_cost(ALU_COST * 3 + BRANCH_COST); format %{ "slt $dst, $op2, $op1\t#@cmpL3_reg_reg\n\t" "bnez $dst, done\n\t" - "slt $dst, $op1, $op2\n\t" - "neg $dst, $dst\t#@cmpL3_reg_reg" + "slt $dst, $op1, $op2\n\t" + "neg $dst, $dst\n\t" + "done:" %} ins_encode %{ __ cmp_l2i(t0, as_Register($op1$$reg), as_Register($op2$$reg)); @@ -8777,7 +8780,8 @@ instruct cmpUL3_reg_reg(iRegINoSp dst, iRegL op1, iRegL op2) format %{ "sltu $dst, $op2, $op1\t#@cmpUL3_reg_reg\n\t" "bnez $dst, done\n\t" "sltu $dst, $op1, $op2\n\t" - "neg $dst, $dst\t#@cmpUL3_reg_reg" + "neg $dst, $dst\n\t" + "done:" %} ins_encode %{ __ cmp_ul2i(t0, as_Register($op1$$reg), as_Register($op2$$reg)); @@ -8795,7 +8799,8 @@ instruct cmpU3_reg_reg(iRegINoSp dst, iRegI op1, iRegI op2) format %{ "sltu $dst, $op2, $op1\t#@cmpU3_reg_reg\n\t" "bnez $dst, done\n\t" "sltu $dst, $op1, $op2\n\t" - "neg $dst, $dst\t#@cmpU3_reg_reg" + "neg $dst, $dst\n\t" + "done:" %} ins_encode %{ __ cmp_uw2i(t0, as_Register($op1$$reg), as_Register($op2$$reg)); @@ -8940,12 +8945,12 @@ instruct minI_rReg(iRegINoSp dst, iRegI src1, iRegI src2) ins_cost(BRANCH_COST + ALU_COST * 2); format %{ - "ble $src1, $src2, Lsrc1.\t#@minI_rReg\n\t" + "ble $src1, $src2, Lsrc1\t#@minI_rReg\n\t" "mv $dst, $src2\n\t" "j Ldone\n\t" - "bind Lsrc1\n\t" + "Lsrc1:\n\t" "mv $dst, $src1\n\t" - "bind\t#@minI_rReg" + "Ldone:" %} ins_encode %{ @@ -8972,9 +8977,9 @@ instruct maxI_rReg(iRegINoSp dst, iRegI src1, iRegI src2) "bge $src1, $src2, Lsrc1\t#@maxI_rReg\n\t" "mv $dst, $src2\n\t" "j Ldone\n\t" - "bind Lsrc1\n\t" + "Lsrc1:\n\t" "mv $dst, $src1\n\t" - "bind\t#@maxI_rReg" + "Ldone:" %} ins_encode %{ From 6ce0ebb858d3112f136e12d3ad595f805f6871a0 Mon Sep 17 00:00:00 2001 From: Matthew Donovan Date: Wed, 22 Nov 2023 13:00:56 +0000 Subject: [PATCH 019/250] 8295343: sun/security/pkcs11 tests fail on Linux RHEL 8.6 and newer Reviewed-by: erikj, ihse, valeriep --- doc/testing.html | 11 ++- doc/testing.md | 8 +- test/jdk/ProblemList.txt | 6 -- test/jdk/sun/security/pkcs11/PKCS11Test.java | 97 ++----------------- test/jdk/sun/security/pkcs11/README | 13 +-- .../sun/security/tools/keytool/NssTest.java | 9 +- .../sun/security/tools/keytool/p11-nss.txt | 2 +- 7 files changed, 34 insertions(+), 112 deletions(-) diff --git a/doc/testing.html b/doc/testing.html index 00bb3c678a513..251475808498b 100644 --- a/doc/testing.html +++ b/doc/testing.html @@ -586,12 +586,15 @@

    PKCS11 Tests

    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.

    +correctly, the system property +jdk.test.lib.artifacts.<NAME> is required on Ubuntu +18.04 to specify the alternative NSS lib directory. The +<NAME> component should be replaced with the name +element of the appropriate @Artifact class. (See +test/jdk/sun/security/pkcs11/PKCS11Test.java)

    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"
    + JTREG="JAVA_OPTIONS=-Djdk.test.lib.artifacts.nsslib-linux_aarch64=/path/to/NSS-libs"

    For more notes about the PKCS11 tests, please refer to test/jdk/sun/security/pkcs11/README.

    Client UI Tests

    diff --git a/doc/testing.md b/doc/testing.md index c43ebc23c3f96..63a869bfc1c0d 100644 --- a/doc/testing.md +++ b/doc/testing.md @@ -604,14 +604,16 @@ 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. +correctly, the system property `jdk.test.lib.artifacts.` is required on +Ubuntu 18.04 to specify the alternative NSS lib directory. The `` +component should be replaced with the name element of the appropriate +`@Artifact` class. (See `test/jdk/sun/security/pkcs11/PKCS11Test.java`) 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" + JTREG="JAVA_OPTIONS=-Djdk.test.lib.artifacts.nsslib-linux_aarch64=/path/to/NSS-libs" ``` For more notes about the PKCS11 tests, please refer to diff --git a/test/jdk/ProblemList.txt b/test/jdk/ProblemList.txt index a510a1e15e952..da3bbccd6d668 100644 --- a/test/jdk/ProblemList.txt +++ b/test/jdk/ProblemList.txt @@ -622,12 +622,6 @@ com/sun/security/sasl/gsskerb/NoSecurityLayer.java 8039280 generic- sun/security/provider/PolicyFile/GrantAllPermToExtWhenNoPolicy.java 8039280 generic-all sun/security/provider/PolicyParser/PrincipalExpansionError.java 8039280 generic-all -sun/security/tools/keytool/NssTest.java 8295343 generic-all -sun/security/pkcs11/Signature/TestRSAKeyLength.java 8295343 generic-all -sun/security/pkcs11/rsa/TestSignatures.java 8295343 generic-all -sun/security/pkcs11/rsa/TestKeyPairGenerator.java 8295343 generic-all -sun/security/pkcs11/rsa/TestKeyFactory.java 8295343 generic-all -sun/security/pkcs11/KeyStore/Basic.java 8295343 generic-all sun/security/pkcs11/sslecc/ClientJSSEServerJSSE.java 8316183 linux-ppc64le sun/security/pkcs11/Provider/MultipleLogins.sh 8319128 linux-aarch64 diff --git a/test/jdk/sun/security/pkcs11/PKCS11Test.java b/test/jdk/sun/security/pkcs11/PKCS11Test.java index 91dfd6670fa1c..ccdbd2d8e49cf 100644 --- a/test/jdk/sun/security/pkcs11/PKCS11Test.java +++ b/test/jdk/sun/security/pkcs11/PKCS11Test.java @@ -46,7 +46,6 @@ import java.security.spec.ECParameterSpec; import java.util.ArrayList; import java.util.Arrays; -import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -258,30 +257,19 @@ private static Path getNSSLibPath() throws Exception { static Path getNSSLibPath(String library) throws Exception { String osid = getOsId(); - String[] nssLibDirs = getNssLibPaths(osid); - if (nssLibDirs == null) { - System.out.println("Warning: unsupported OS: " + osid + String nssLibDir = fetchNssLib(osid); + if (nssLibDir == null) { + throw new SkippedException("Warning: unsupported OS: " + osid + ", please initialize NSS library location, skipping test"); - return null; - } - if (nssLibDirs.length == 0) { - System.out.println("Warning: NSS not supported on this platform, skipping test"); - return null; } - Path nssLibPath = null; - for (String dir : nssLibDirs) { - Path libPath = Paths.get(dir).resolve(System.mapLibraryName(library)); - if (Files.exists(libPath)) { - nssLibPath = libPath; - break; - } + String libraryName = System.mapLibraryName(library); + Path libPath = Paths.get(nssLibDir).resolve(libraryName); + if (!Files.exists(libPath)) { + throw new SkippedException("NSS library \"" + libraryName + "\" was not found in " + nssLibDir); } - if (nssLibPath == null) { - System.out.println("Warning: can't find NSS library on this machine, skipping test"); - return null; - } - return nssLibPath; + + return libPath; } private static String getOsId() { @@ -605,73 +593,6 @@ private static ECParameterSpec getECParameterSpec(Provider p, String name) return parameters.getParameterSpec(ECParameterSpec.class); } - // Location of the NSS libraries on each supported platform - private static Map getOsMap() { - if (osMap != null) { - return osMap; - } - - osMap = new HashMap<>(); - osMap.put("Linux-i386-32", new String[]{ - "/usr/lib/i386-linux-gnu/", - "/usr/lib32/", - "/usr/lib/"}); - osMap.put("Linux-amd64-64", new String[]{ - "/usr/lib/x86_64-linux-gnu/", - "/usr/lib/x86_64-linux-gnu/nss/", - "/usr/lib64/"}); - osMap.put("Linux-ppc64-64", new String[]{"/usr/lib64/"}); - osMap.put("Linux-ppc64le-64", new String[]{ - "/usr/lib/powerpc64le-linux-gnu/", - "/usr/lib/powerpc64le-linux-gnu/nss/", - "/usr/lib64/"}); - osMap.put("Linux-s390x-64", new String[]{"/usr/lib64/"}); - osMap.put("Windows-x86-32", new String[]{}); - osMap.put("Windows-amd64-64", new String[]{}); - osMap.put("MacOSX-x86_64-64", new String[]{}); - osMap.put("Linux-arm-32", new String[]{ - "/usr/lib/arm-linux-gnueabi/nss/", - "/usr/lib/arm-linux-gnueabihf/nss/"}); - osMap.put("Linux-aarch64-64", new String[] { - "/usr/lib/aarch64-linux-gnu/", - "/usr/lib/aarch64-linux-gnu/nss/", - "/usr/lib64/" }); - return osMap; - } - - private static String[] getNssLibPaths(String osId) { - String[] preferablePaths = getPreferableNssLibPaths(osId); - if (preferablePaths.length != 0) { - return preferablePaths; - } else { - return getOsMap().get(osId); - } - } - - private static String[] getPreferableNssLibPaths(String osId) { - List nssLibPaths = new ArrayList<>(); - - String customNssLibPaths = System.getProperty("test.nss.lib.paths"); - if (customNssLibPaths == null) { - // If custom local NSS lib path is not provided, - // try to download NSS libs from artifactory - String path = fetchNssLib(osId); - if (path != null) { - nssLibPaths.add(path); - } - } else { - String[] paths = customNssLibPaths.split(","); - for (String path : paths) { - if (!path.endsWith(File.separator)) { - nssLibPaths.add(path + File.separator); - } else { - nssLibPaths.add(path); - } - } - } - - return nssLibPaths.toArray(new String[0]); - } public static String toString(byte[] b) { if (b == null) { diff --git a/test/jdk/sun/security/pkcs11/README b/test/jdk/sun/security/pkcs11/README index 31efd034501f3..9b4c39dd41c20 100644 --- a/test/jdk/sun/security/pkcs11/README +++ b/test/jdk/sun/security/pkcs11/README @@ -4,14 +4,15 @@ perform as a result of bugs or features in NSS or other pkcs11 libraries. - How to get NSS libraries? The libraries come from the following sources. -1. Specified by system property test.nss.lib.paths -System property test.nss.lib.paths can specify a set of absolute paths to -the local NSS library directories. The paths are separated by comma. +1. Specified by system property jdk.test.lib.artifacts. +The system property, jdk.test.lib.artifacts., can specify an absolute path +to the local NSS library directory. The component should be replaced with +the name element of the appropriate @Artifact class. +(See `test/jdk/sun/security/pkcs11/PKCS11Test.java`) 2. Pre-built NSS libraries from artifactory server -If the value of system property test.nss.lib.paths is not set, the tests will try -to download pre-built NSS libraries from artifactory server. Currently, the -tests only looks for libraries for Windows and MacOSX platforms on artifactory. +If the value of system property jdk.test.lib.artifacts. is not set, the +tests will try to download pre-built NSS libraries from artifactory server. Please note that JIB jar MUST be present in classpath when downloading the libraries. diff --git a/test/jdk/sun/security/tools/keytool/NssTest.java b/test/jdk/sun/security/tools/keytool/NssTest.java index 968e19df28dcc..db5d124015308 100644 --- a/test/jdk/sun/security/tools/keytool/NssTest.java +++ b/test/jdk/sun/security/tools/keytool/NssTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2023, 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 @@ -58,8 +58,9 @@ private static void copyFiles() throws IOException { Path dbPath = srcPath.getParent().getParent() .resolve("pkcs11").resolve("nss").resolve("db"); - Files.copy(dbPath.resolve("cert8.db"), Paths.get("cert8.db")); - Files.copy(dbPath.resolve("key3.db"), Paths.get("key3.db")); - Files.copy(dbPath.resolve("secmod.db"), Paths.get("secmod.db")); + Path destDir = Path.of( "tmpdb"); + Files.createDirectory(destDir); + Files.copy(dbPath.resolve("cert9.db"), destDir.resolve("cert9.db")); + Files.copy(dbPath.resolve("key4.db"), destDir.resolve("key4.db")); } } diff --git a/test/jdk/sun/security/tools/keytool/p11-nss.txt b/test/jdk/sun/security/tools/keytool/p11-nss.txt index dd200a326c002..9c8ac0a43ab98 100644 --- a/test/jdk/sun/security/tools/keytool/p11-nss.txt +++ b/test/jdk/sun/security/tools/keytool/p11-nss.txt @@ -6,7 +6,7 @@ slot = 2 library = ${nss.lib} -nssArgs = "configdir='.' certPrefix='' keyPrefix='' secmod='secmod.db'" +nssArgs = "configdir='sql:./tmpdb' certPrefix='' keyPrefix='' secmod='secmod.db'" #forceLogin = true From bf0a904f0e2f29e9967c38e437b702d92c096e88 Mon Sep 17 00:00:00 2001 From: suchismith Date: Wed, 22 Nov 2023 13:39:25 +0000 Subject: [PATCH 020/250] 8318175: AIX PPC64: Handle alignment of double in structs Reviewed-by: mdoerr, amitkumar --- test/jdk/java/foreign/nested/libNested.c | 7 +++++++ test/jdk/java/foreign/shared.h | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/test/jdk/java/foreign/nested/libNested.c b/test/jdk/java/foreign/nested/libNested.c index a1414d6ed6179..c31fb0dc4cc92 100644 --- a/test/jdk/java/foreign/nested/libNested.c +++ b/test/jdk/java/foreign/nested/libNested.c @@ -26,6 +26,9 @@ #else #define EXPORT #endif +#ifdef _AIX +#pragma align (natural) +#endif struct S1{ double f0; long long f1; double f2; int f3; }; union U1{ short f0; long long f1; short f2; char f3[4][3]; }; @@ -92,3 +95,7 @@ EXPORT struct S13 test_S13(struct S13 arg, struct S13(*cb)(struct S13)) { return EXPORT struct S14 test_S14(struct S14 arg, struct S14(*cb)(struct S14)) { return cb(arg); } EXPORT union U16 test_U16(union U16 arg, union U16(*cb)(union U16)) { return cb(arg); } EXPORT struct S15 test_S15(struct S15 arg, struct S15(*cb)(struct S15)) { return cb(arg); } + +#ifdef _AIX +#pragma align (reset) +#endif diff --git a/test/jdk/java/foreign/shared.h b/test/jdk/java/foreign/shared.h index 1cadc1075d613..0f6183891a720 100644 --- a/test/jdk/java/foreign/shared.h +++ b/test/jdk/java/foreign/shared.h @@ -34,6 +34,9 @@ #else #define EXPORT #endif +#ifdef _AIX +#pragma align (natural) +#endif struct S_I { int p0; }; struct S_F { float p0; }; @@ -120,3 +123,7 @@ struct S_PPF { void* p0; void* p1; float p2; }; struct S_PPD { void* p0; void* p1; double p2; }; struct S_PPP { void* p0; void* p1; void* p2; }; struct S_FFFF { float p0; float p1; float p2; float p3; }; + +#ifdef _AIX +#pragma align (reset) +#endif From 8b47a14958913c70291d46afdde4e527f9bdc91a Mon Sep 17 00:00:00 2001 From: Varada M Date: Wed, 22 Nov 2023 13:43:33 +0000 Subject: [PATCH 021/250] 8320309: AIX: pthreads created by foreign test library don't work as expected Reviewed-by: mdoerr, mbaesken, stuefe --- test/lib/native/testlib_threads.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/test/lib/native/testlib_threads.h b/test/lib/native/testlib_threads.h index 3faf94f8e9fca..575a5a3c15fc5 100644 --- a/test/lib/native/testlib_threads.h +++ b/test/lib/native/testlib_threads.h @@ -81,10 +81,15 @@ void run_in_new_thread_and_join(PROCEDURE proc, void* context) { } #else pthread_t thread; - int result = pthread_create(&thread, NULL, procedure, &helper); + pthread_attr_t attr; + pthread_attr_init(&attr); + size_t stack_size = 0x100000; + pthread_attr_setstacksize(&attr, stack_size); + int result = pthread_create(&thread, &attr, procedure, &helper); if (result != 0) { fatal("failed to create thread", result); } + pthread_attr_destroy(&attr); result = pthread_join(thread, NULL); if (result != 0) { fatal("failed to join thread", result); From c39d001c7a1ae9eb322a7bb621a03e18c9bf02a1 Mon Sep 17 00:00:00 2001 From: Patricio Chilano Mateo Date: Wed, 22 Nov 2023 14:59:47 +0000 Subject: [PATCH 022/250] 8319137: release _object in ObjectMonitor dtor to avoid races Reviewed-by: stefank, aboldtch, shade, dcubed, eosterlund --- src/hotspot/share/runtime/objectMonitor.cpp | 14 +------- src/hotspot/share/runtime/objectMonitor.hpp | 1 - src/hotspot/share/runtime/synchronizer.cpp | 37 +++++---------------- 3 files changed, 10 insertions(+), 42 deletions(-) diff --git a/src/hotspot/share/runtime/objectMonitor.cpp b/src/hotspot/share/runtime/objectMonitor.cpp index 627f24102dbc3..2214713aa4bf6 100644 --- a/src/hotspot/share/runtime/objectMonitor.cpp +++ b/src/hotspot/share/runtime/objectMonitor.cpp @@ -276,24 +276,15 @@ ObjectMonitor::ObjectMonitor(oop object) : { } ObjectMonitor::~ObjectMonitor() { - if (!_object.is_null()) { - // Release object's oop storage if it hasn't already been done. - release_object(); - } + _object.release(_oop_storage); } oop ObjectMonitor::object() const { check_object_context(); - if (_object.is_null()) { - return nullptr; - } return _object.resolve(); } oop ObjectMonitor::object_peek() const { - if (_object.is_null()) { - return nullptr; - } return _object.peek(); } @@ -588,9 +579,6 @@ bool ObjectMonitor::deflate_monitor() { install_displaced_markword_in_object(obj); } - // Release object's oop storage since the ObjectMonitor has been deflated: - release_object(); - // We leave owner == DEFLATER_MARKER and contentions < 0 // to force any racing threads to retry. return true; // Success, ObjectMonitor has been deflated. diff --git a/src/hotspot/share/runtime/objectMonitor.hpp b/src/hotspot/share/runtime/objectMonitor.hpp index afcad7f0cdf44..fc15e20309f77 100644 --- a/src/hotspot/share/runtime/objectMonitor.hpp +++ b/src/hotspot/share/runtime/objectMonitor.hpp @@ -364,7 +364,6 @@ class ObjectMonitor : public CHeapObj { // Deflation support bool deflate_monitor(); void install_displaced_markword_in_object(const oop obj); - void release_object() { _object.release(_oop_storage); } }; #endif // SHARE_RUNTIME_OBJECTMONITOR_HPP diff --git a/src/hotspot/share/runtime/synchronizer.cpp b/src/hotspot/share/runtime/synchronizer.cpp index 0d27376fdff2a..42edb6fe9aec4 100644 --- a/src/hotspot/share/runtime/synchronizer.cpp +++ b/src/hotspot/share/runtime/synchronizer.cpp @@ -1581,14 +1581,18 @@ class VM_RendezvousGCThreads : public VM_Operation { }; }; -static size_t delete_monitors(GrowableArray* delete_list) { +static size_t delete_monitors(JavaThread* current, GrowableArray* delete_list, + LogStream* ls, elapsedTimer* timer_p) { NativeHeapTrimmer::SuspendMark sm("monitor deletion"); - size_t count = 0; + size_t deleted_count = 0; for (ObjectMonitor* monitor: *delete_list) { delete monitor; - count++; + deleted_count++; + // A JavaThread must check for a safepoint/handshake and honor it. + ObjectSynchronizer::chk_for_block_req(current, "deletion", "deleted_count", + deleted_count, ls, timer_p); } - return count; + return deleted_count; } // This function is called by the MonitorDeflationThread to deflate @@ -1662,30 +1666,7 @@ size_t ObjectSynchronizer::deflate_idle_monitors() { // After the handshake, safely free the ObjectMonitors that were // deflated and unlinked in this cycle. - if (current->is_Java_thread()) { - if (ls != NULL) { - timer.stop(); - ls->print_cr("before setting blocked: unlinked_count=" SIZE_FORMAT - ", in_use_list stats: ceiling=" SIZE_FORMAT ", count=" - SIZE_FORMAT ", max=" SIZE_FORMAT, - unlinked_count, in_use_list_ceiling(), - _in_use_list.count(), _in_use_list.max()); - } - // Mark the calling JavaThread blocked (safepoint safe) while we free - // the ObjectMonitors so we don't delay safepoints whilst doing that. - ThreadBlockInVM tbivm(JavaThread::cast(current)); - if (ls != NULL) { - ls->print_cr("after setting blocked: in_use_list stats: ceiling=" - SIZE_FORMAT ", count=" SIZE_FORMAT ", max=" SIZE_FORMAT, - in_use_list_ceiling(), _in_use_list.count(), _in_use_list.max()); - timer.start(); - } - deleted_count = delete_monitors(&delete_list); - // ThreadBlockInVM is destroyed here - } else { - // A non-JavaThread can just free the ObjectMonitors: - deleted_count = delete_monitors(&delete_list); - } + deleted_count = delete_monitors(JavaThread::cast(current), &delete_list, ls, &timer); assert(unlinked_count == deleted_count, "must be"); } From 25cebe8c3ed5c03b4da2da5bb2f7637c8cd40581 Mon Sep 17 00:00:00 2001 From: suchismith1993 Date: Wed, 22 Nov 2023 15:43:34 +0000 Subject: [PATCH 023/250] 8317799: AIX PPC64: FFI symbol lookup doesn't find symbols Reviewed-by: mdoerr, ihse, dholmes, jvernee --- make/modules/java.base/Lib.gmk | 2 + .../aix/native/libsyslookup/syslookup.c | 204 ++++++++++++++++++ 2 files changed, 206 insertions(+) create mode 100644 src/java.base/aix/native/libsyslookup/syslookup.c diff --git a/make/modules/java.base/Lib.gmk b/make/modules/java.base/Lib.gmk index 6d63795f6de63..30261bab6e1eb 100644 --- a/make/modules/java.base/Lib.gmk +++ b/make/modules/java.base/Lib.gmk @@ -213,8 +213,10 @@ $(eval $(call SetupJdkLibrary, BUILD_SYSLOOKUPLIB, \ CXXFLAGS := $(CXXFLAGS_JDKLIB), \ LDFLAGS := $(LDFLAGS_JDKLIB), \ LDFLAGS_linux := -Wl$(COMMA)--no-as-needed, \ + LDFLAGS_aix := -brtl -bexpfull, \ LIBS := $(LIBCXX), \ LIBS_linux := -lc -lm -ldl, \ + LIBS_aix := -lc -lm -ldecNumber, \ )) TARGETS += $(BUILD_SYSLOOKUPLIB) diff --git a/src/java.base/aix/native/libsyslookup/syslookup.c b/src/java.base/aix/native/libsyslookup/syslookup.c new file mode 100644 index 0000000000000..66bd50e01a0ef --- /dev/null +++ b/src/java.base/aix/native/libsyslookup/syslookup.c @@ -0,0 +1,204 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, IBM Corp. + * 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. + */ + +// Note: the include below is not strictly required, as dependencies will be pulled using linker flags. +// Adding at least one #include removes unwanted warnings on some platforms. +#include +#include + +// Addresses of functions to be referenced using static linking. +void* funcs[] = { + //string.h + &strlen, + &strcat, + //math.h + &abs, + &fabs, + &fabsf, + &fabsl, + &fmod, + &fmodf, + &fmodl, + &remainder, + &remainderf, + &remainderl, + &remquo, + &remquof, + &remquol, + &fma, + &fmaf, + &fmal, + &fmax, + &fmaxf, + &fmaxl, + &fmin, + &fminf, + &fminl, + &fdim, + &fdimf, + &fdiml, + &nan, + &nanf, + &nanl, + &exp, + &expf, + &expl, + &exp2, + &exp2f, + &exp2l, + &expm1, + &expm1f, + &expm1l, + &log, + &logf, + &logl, + &log10, + &log10f, + &log10l, + &log2, + &log2f, + &log2l, + &log1p, + &log1pf, + &log1pl, + &pow, + &powf, + &powl, + &sqrt, + &sqrtf, + &sqrtl, + &cbrt, + &cbrtf, + &cbrtl, + &hypot, + &hypotf, + &hypotl, + &sin, + &sinf, + &sinl, + &cos, + &cosf, + &cosl, + &tan, + &tanf, + &tanl, + &asin, + &asinf, + &asinl, + &acos, + &acosf, + &acosl, + &atan, + &atanf, + &atanl, + &atan2, + &atan2f, + &atan2l, + &sinh, + &sinhf, + &sinhl, + &cosh, + &coshf, + &coshl, + &tanh, + &tanhf, + &tanhl, + &asinh, + &asinhf, + &asinhl, + &acosh, + &acoshf, + &acoshl, + &atanh, + &atanhf, + &atanhl, + &erf, + &erff, + &erfl, + &erfc, + &erfcf, + &erfcl, + &tgamma, + &tgammaf, + &tgammal, + &lgamma, + &lgammaf, + &lgammal, + &ceil, + &ceilf, + &ceill, + &floor, + &floorf, + &floorl, + &trunc, + &truncf, + &truncl, + &round, + &roundf, + &roundl, + &lround, + &lroundf, + &lroundl, + &llround, + &llroundf, + &llroundl, + &nearbyint, + &nearbyintf, + &nearbyintl, + &rintf, + &rintl, + &lrint, + &lrintf, + &lrintl, + &llrint, + &llrintf, + &llrintl, + &frexpf, + &ldexpf, + &modff, + &scalbn, + &scalbnf, + &scalbnl, + &scalbln, + &scalblnf, + &scalblnl, + &ilogb, + &ilogbf, + &ilogbl, + &logb, + &logbf, + &logbl, + &nextafter, + &nextafterf, + &nextafterl, + &nexttoward, + &nexttowardf, + &nexttowardl, + ©sign, + ©signf, + ©signl, + &isnan +}; From 35526d02c3fc6c31112a97a510d000c357b7e308 Mon Sep 17 00:00:00 2001 From: Sonia Zaldana Calles Date: Wed, 22 Nov 2023 16:01:27 +0000 Subject: [PATCH 024/250] 8257076: os::scan_pages is empty on all platforms Reviewed-by: dholmes, stuefe --- src/hotspot/os/aix/os_aix.cpp | 4 -- src/hotspot/os/bsd/os_bsd.cpp | 5 -- src/hotspot/os/linux/os_linux.cpp | 6 --- src/hotspot/os/windows/os_windows.cpp | 5 -- .../share/gc/parallel/mutableNUMASpace.cpp | 54 ------------------- .../share/gc/parallel/mutableNUMASpace.hpp | 8 +-- src/hotspot/share/runtime/os.hpp | 2 - 7 files changed, 1 insertion(+), 83 deletions(-) diff --git a/src/hotspot/os/aix/os_aix.cpp b/src/hotspot/os/aix/os_aix.cpp index c29e666c0fc4c..bfff8fc86b513 100644 --- a/src/hotspot/os/aix/os_aix.cpp +++ b/src/hotspot/os/aix/os_aix.cpp @@ -1914,10 +1914,6 @@ bool os::numa_get_group_ids_for_range(const void** addresses, int* lgrp_ids, siz return false; } -char *os::scan_pages(char *start, char* end, page_info* page_expected, page_info* page_found) { - return end; -} - // Reserves and attaches a shared memory segment. char* os::pd_reserve_memory(size_t bytes, bool exec) { // Always round to os::vm_page_size(), which may be larger than 4K. diff --git a/src/hotspot/os/bsd/os_bsd.cpp b/src/hotspot/os/bsd/os_bsd.cpp index f5968d20420d5..c1cfb9a171746 100644 --- a/src/hotspot/os/bsd/os_bsd.cpp +++ b/src/hotspot/os/bsd/os_bsd.cpp @@ -1674,11 +1674,6 @@ bool os::numa_get_group_ids_for_range(const void** addresses, int* lgrp_ids, siz return false; } -char *os::scan_pages(char *start, char* end, page_info* page_expected, page_info* page_found) { - return end; -} - - bool os::pd_uncommit_memory(char* addr, size_t size, bool exec) { #if defined(__OpenBSD__) // XXX: Work-around mmap/MAP_FIXED bug temporarily on OpenBSD diff --git a/src/hotspot/os/linux/os_linux.cpp b/src/hotspot/os/linux/os_linux.cpp index 5bd817b28729c..0608831a7dc27 100644 --- a/src/hotspot/os/linux/os_linux.cpp +++ b/src/hotspot/os/linux/os_linux.cpp @@ -3012,12 +3012,6 @@ size_t os::numa_get_leaf_groups(uint *ids, size_t size) { return i; } -char *os::scan_pages(char *start, char* end, page_info* page_expected, - page_info* page_found) { - return end; -} - - int os::Linux::sched_getcpu_syscall(void) { unsigned int cpu = 0; long retval = -1; diff --git a/src/hotspot/os/windows/os_windows.cpp b/src/hotspot/os/windows/os_windows.cpp index 1b7fadab7dbfe..646fe7206a19a 100644 --- a/src/hotspot/os/windows/os_windows.cpp +++ b/src/hotspot/os/windows/os_windows.cpp @@ -3825,11 +3825,6 @@ bool os::numa_get_group_ids_for_range(const void** addresses, int* lgrp_ids, siz return false; } -char *os::scan_pages(char *start, char* end, page_info* page_expected, - page_info* page_found) { - return end; -} - char* os::non_memory_address_word() { // Must never look like an address returned by reserve_memory, // even in its subfields (as defined by the CPU immediate fields, diff --git a/src/hotspot/share/gc/parallel/mutableNUMASpace.cpp b/src/hotspot/share/gc/parallel/mutableNUMASpace.cpp index a0bf561ab587f..93fa7c5519076 100644 --- a/src/hotspot/share/gc/parallel/mutableNUMASpace.cpp +++ b/src/hotspot/share/gc/parallel/mutableNUMASpace.cpp @@ -236,20 +236,6 @@ void MutableNUMASpace::update() { SpaceDecorator::Clear, SpaceDecorator::DontMangle); } - - scan_pages(NUMAPageScanRate); -} - -// Scan pages. Free pages that have smaller size or wrong placement. -void MutableNUMASpace::scan_pages(size_t page_count) -{ - size_t pages_per_chunk = page_count / lgrp_spaces()->length(); - if (pages_per_chunk > 0) { - for (int i = 0; i < lgrp_spaces()->length(); i++) { - LGRPSpace *ls = lgrp_spaces()->at(i); - ls->scan_pages(page_size(), pages_per_chunk); - } - } } // Accumulate statistics about the allocation rate of each lgrp. @@ -691,43 +677,3 @@ void MutableNUMASpace::LGRPSpace::accumulate_statistics(size_t page_size) { pointer_delta(space()->end(), end, sizeof(char)); } - -// Scan page_count pages and verify if they have the right size and right placement. -// If invalid pages are found they are freed in hope that subsequent reallocation -// will be more successful. -void MutableNUMASpace::LGRPSpace::scan_pages(size_t page_size, size_t page_count) -{ - char* range_start = (char*)align_up(space()->bottom(), page_size); - char* range_end = (char*)align_down(space()->end(), page_size); - - if (range_start > last_page_scanned() || last_page_scanned() >= range_end) { - set_last_page_scanned(range_start); - } - - char *scan_start = last_page_scanned(); - char* scan_end = MIN2(scan_start + page_size * page_count, range_end); - - os::page_info page_expected, page_found; - page_expected.size = page_size; - page_expected.lgrp_id = checked_cast(lgrp_id()); - - char *s = scan_start; - while (s < scan_end) { - char *e = os::scan_pages(s, (char*)scan_end, &page_expected, &page_found); - if (e == nullptr) { - break; - } - if (e != scan_end) { - assert(e < scan_end, "e: " PTR_FORMAT " scan_end: " PTR_FORMAT, p2i(e), p2i(scan_end)); - - if ((page_expected.size != page_size || checked_cast(page_expected.lgrp_id) != lgrp_id()) - && page_expected.size != 0) { - os::free_memory(s, pointer_delta(e, s, sizeof(char)), page_size); - } - page_expected = page_found; - } - s = e; - } - - set_last_page_scanned(scan_end); -} diff --git a/src/hotspot/share/gc/parallel/mutableNUMASpace.hpp b/src/hotspot/share/gc/parallel/mutableNUMASpace.hpp index 721ad35b8bcf0..8ed25006ccf24 100644 --- a/src/hotspot/share/gc/parallel/mutableNUMASpace.hpp +++ b/src/hotspot/share/gc/parallel/mutableNUMASpace.hpp @@ -83,11 +83,8 @@ class MutableNUMASpace : public MutableSpace { SpaceStats _space_stats; - char* _last_page_scanned; - char* last_page_scanned() { return _last_page_scanned; } - void set_last_page_scanned(char* p) { _last_page_scanned = p; } public: - LGRPSpace(uint l, size_t alignment) : _lgrp_id(l), _allocation_failed(false), _last_page_scanned(nullptr) { + LGRPSpace(uint l, size_t alignment) : _lgrp_id(l), _allocation_failed(false) { _space = new MutableSpace(alignment); _alloc_rate = new AdaptiveWeightedAverage(NUMAChunkResizeWeight); } @@ -125,7 +122,6 @@ class MutableNUMASpace : public MutableSpace { void clear_space_stats() { _space_stats = SpaceStats(); } void accumulate_statistics(size_t page_size); - void scan_pages(size_t page_size, size_t page_count); }; GrowableArray* _lgrp_spaces; @@ -156,8 +152,6 @@ class MutableNUMASpace : public MutableSpace { size_t default_chunk_size(); // Adapt the chunk size to follow the allocation rate. size_t adaptive_chunk_size(int i, size_t limit); - // Scan and free invalid pages. - void scan_pages(size_t page_count); // Return the bottom_region and the top_region. Align them to page_size() boundary. // |------------------new_region---------------------------------| // |----bottom_region--|---intersection---|------top_region------| diff --git a/src/hotspot/share/runtime/os.hpp b/src/hotspot/share/runtime/os.hpp index 3df2aa27c6af8..2f0b589c4e8c9 100644 --- a/src/hotspot/share/runtime/os.hpp +++ b/src/hotspot/share/runtime/os.hpp @@ -523,8 +523,6 @@ class os: AllStatic { size_t size; int lgrp_id; }; - static char* scan_pages(char *start, char* end, page_info* page_expected, page_info* page_found); - static char* non_memory_address_word(); // reserve, commit and pin the entire memory region static char* reserve_memory_special(size_t size, size_t alignment, size_t page_size, From 5d4a54bccd9f7a163944f8fdf805af95b0ae1ade Mon Sep 17 00:00:00 2001 From: Sonia Zaldana Calles Date: Wed, 22 Nov 2023 16:03:45 +0000 Subject: [PATCH 025/250] 8319449: compiler/print/CompileCommandPrintMemStat.java fails on Graal Reviewed-by: kvn, stuefe --- .../hotspot/jtreg/compiler/print/CompileCommandPrintMemStat.java | 1 + 1 file changed, 1 insertion(+) diff --git a/test/hotspot/jtreg/compiler/print/CompileCommandPrintMemStat.java b/test/hotspot/jtreg/compiler/print/CompileCommandPrintMemStat.java index 90682278760d2..3d68f10723436 100644 --- a/test/hotspot/jtreg/compiler/print/CompileCommandPrintMemStat.java +++ b/test/hotspot/jtreg/compiler/print/CompileCommandPrintMemStat.java @@ -24,6 +24,7 @@ /* * @test * @summary Checks that -XX:CompileCommand=PrintMemStat,... works + * @requires vm.compiler1.enabled | vm.compiler2.enabled * @library /test/lib * @run driver compiler.print.CompileCommandPrintMemStat */ From 524da141e7976cb136fa1769714a01235cd39508 Mon Sep 17 00:00:00 2001 From: Martin Doerr Date: Wed, 22 Nov 2023 16:08:54 +0000 Subject: [PATCH 026/250] 8320418: PPC64: invokevfinal_helper duplicates code to handle ResolvedMethodEntry Reviewed-by: rrich, lucy --- src/hotspot/cpu/ppc/templateTable_ppc.hpp | 2 +- src/hotspot/cpu/ppc/templateTable_ppc_64.cpp | 52 +++++++------------ .../share/interpreter/templateInterpreter.cpp | 1 + 3 files changed, 22 insertions(+), 33 deletions(-) diff --git a/src/hotspot/cpu/ppc/templateTable_ppc.hpp b/src/hotspot/cpu/ppc/templateTable_ppc.hpp index 2245533be1298..3396acb192643 100644 --- a/src/hotspot/cpu/ppc/templateTable_ppc.hpp +++ b/src/hotspot/cpu/ppc/templateTable_ppc.hpp @@ -27,7 +27,7 @@ #define CPU_PPC_TEMPLATETABLE_PPC_HPP static void prepare_invoke(Register Rcache, Register Rret_addr, Register Rrecv, Register Rscratch); - static void invokevfinal_helper(Register Rcache, Register Rscratch1, Register Rscratch2, Register Rscratch3); + static void invokevfinal_helper(Register Rcache, Register Rscratch1, Register Rscratch2, Register Rscratch3, Register Rscratch4); static void generate_vtable_call(Register Rrecv_klass, Register Rindex, Register Rret, Register Rtemp); static void invokeinterface_object_method(Register Rrecv_klass, Register Rret, Register Rflags, Register Rcache, Register Rtemp, Register Rtemp2); diff --git a/src/hotspot/cpu/ppc/templateTable_ppc_64.cpp b/src/hotspot/cpu/ppc/templateTable_ppc_64.cpp index 7d6e14d26c127..84ecfc4f934e7 100644 --- a/src/hotspot/cpu/ppc/templateTable_ppc_64.cpp +++ b/src/hotspot/cpu/ppc/templateTable_ppc_64.cpp @@ -3487,7 +3487,7 @@ void TemplateTable::invokevirtual(int byte_no) { if (RewriteBytecodes && !UseSharedSpaces && !CDSConfig::is_dumping_static_archive()) { patch_bytecode(Bytecodes::_fast_invokevfinal, Rnew_bc, R12_scratch2); } - invokevfinal_helper(Rcache, R11_scratch1, R12_scratch2, Rflags /* tmp */); + invokevfinal_helper(Rcache, R11_scratch1, R12_scratch2, Rflags /* tmp */, Rrecv /* tmp */); __ align(32, 12); __ bind(LnotFinal); @@ -3510,36 +3510,24 @@ void TemplateTable::fast_invokevfinal(int byte_no) { assert(byte_no == f2_byte, "use this argument"); Register Rcache = R31; __ load_method_entry(Rcache, R11_scratch1); - invokevfinal_helper(Rcache, R11_scratch1, R12_scratch2, R22_tmp2); + invokevfinal_helper(Rcache, R11_scratch1, R12_scratch2, R22_tmp2, R23_tmp3); } -void TemplateTable::invokevfinal_helper(Register Rcache, Register Rscratch1, Register Rscratch2, Register Rscratch3) { +void TemplateTable::invokevfinal_helper(Register Rcache, + Register Rscratch1, Register Rscratch2, Register Rscratch3, Register Rscratch4) { - assert_different_registers(Rcache, Rscratch1, Rscratch2, Rscratch3); + assert_different_registers(Rcache, Rscratch1, Rscratch2, Rscratch3, Rscratch4); - // Load receiver from stack slot. - Register Rmethod = Rscratch3; - __ ld(Rmethod, in_bytes(ResolvedMethodEntry::method_offset()), Rcache); + Register Rrecv = Rscratch2, + Rmethod = Rscratch3, + Rret_addr = Rscratch4; + prepare_invoke(Rcache, Rret_addr, Rrecv, Rscratch1); - // Get return address. - Register Rtable_addr = Rscratch2, - Rret_addr = Rcache, - Rret_type = Rscratch1; - // Get return type. It's coded into the upper 4 bits of the lower half of the 64 bit value. - __ lbz(Rret_type, in_bytes(ResolvedMethodEntry::type_offset()), Rcache); - __ load_dispatch_table(Rtable_addr, Interpreter::invoke_return_entry_table()); - __ sldi(Rret_type, Rret_type, LogBytesPerWord); - __ ldx(Rret_addr, Rret_type, Rtable_addr); // kills Rcache - - Register Rnum_params = Rscratch2, - Rrecv = Rscratch2; - __ ld(Rnum_params, in_bytes(Method::const_offset()), Rmethod); - __ lhz(Rnum_params /* number of params */, in_bytes(ConstMethod::size_of_parameters_offset()), Rnum_params); - - // Load receiver and receiver null check. - __ load_receiver(Rnum_params, Rrecv); + // Receiver null check. __ null_check_throw(Rrecv, -1, Rscratch1); + __ ld(Rmethod, in_bytes(ResolvedMethodEntry::method_offset()), Rcache); + __ profile_final_call(Rrecv, Rscratch1); // Argument and return type profiling. __ profile_arguments_type(Rmethod, Rscratch1, Rscratch2, true); @@ -3558,9 +3546,9 @@ void TemplateTable::invokespecial(int byte_no) { Rmethod = R31; load_resolved_method_entry_special_or_static(Rcache, // ResolvedMethodEntry* - Rmethod, // Method* or itable index + Rmethod, // Method* noreg); // flags - prepare_invoke(Rcache, Rret_addr, Rreceiver, R11_scratch1); // recv + prepare_invoke(Rcache, Rret_addr, Rreceiver, R11_scratch1); // Receiver null check. __ null_check_throw(Rreceiver, -1, R11_scratch1); @@ -3578,10 +3566,10 @@ void TemplateTable::invokestatic(int byte_no) { Register Rcache = R3_ARG1, Rret_addr = R4_ARG2; - load_resolved_method_entry_special_or_static(Rcache, // ResolvedMethodEntry* - R19_method, // Method* or itable index - noreg); // flags - prepare_invoke(Rcache, Rret_addr, noreg, R11_scratch1); // recv + load_resolved_method_entry_special_or_static(Rcache, // ResolvedMethodEntry* + R19_method, // Method* + noreg); // flags + prepare_invoke(Rcache, Rret_addr, noreg, R11_scratch1); __ profile_call(R11_scratch1, R12_scratch2); // Argument and return type profiling. @@ -3639,7 +3627,7 @@ void TemplateTable::invokeinterface(int byte_no) { Rcache = R31; load_resolved_method_entry_interface(Rcache, noreg, noreg, Rflags); - prepare_invoke(Rcache, Rret_addr, Rreceiver, Rscratch1); // recv + prepare_invoke(Rcache, Rret_addr, Rreceiver, Rscratch1); // First check for Object case, then private interface method, // then regular interface method. @@ -3757,7 +3745,7 @@ void TemplateTable::invokehandle(int byte_no) { Rcache = R31; load_resolved_method_entry_handle(Rcache, // ResolvedMethodEntry* - Rmethod, // Method* or itable index + Rmethod, // Method* Rscratch1, Rflags); prepare_invoke(Rcache, Rret_addr, Rrecv, Rscratch1); diff --git a/src/hotspot/share/interpreter/templateInterpreter.cpp b/src/hotspot/share/interpreter/templateInterpreter.cpp index 8f8abd30288e7..58559481e5ddc 100644 --- a/src/hotspot/share/interpreter/templateInterpreter.cpp +++ b/src/hotspot/share/interpreter/templateInterpreter.cpp @@ -244,6 +244,7 @@ address* TemplateInterpreter::invoke_return_entry_table_for(Bytecodes::Code code case Bytecodes::_invokespecial: case Bytecodes::_invokevirtual: case Bytecodes::_invokehandle: + case Bytecodes::_fast_invokevfinal: return Interpreter::invoke_return_entry_table(); case Bytecodes::_invokeinterface: return Interpreter::invokeinterface_return_entry_table(); From a4bd9e4d0bca0218f27a405b8154425441c10f3f Mon Sep 17 00:00:00 2001 From: Arseny Bochkarev Date: Wed, 22 Nov 2023 16:13:49 +0000 Subject: [PATCH 027/250] 8319440: RISC-V: jdk can't be built with clang due to register keyword Reviewed-by: fyang --- src/hotspot/os_cpu/linux_riscv/vm_version_linux_riscv.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hotspot/os_cpu/linux_riscv/vm_version_linux_riscv.cpp b/src/hotspot/os_cpu/linux_riscv/vm_version_linux_riscv.cpp index d471cf14d1381..6e93406b1a353 100644 --- a/src/hotspot/os_cpu/linux_riscv/vm_version_linux_riscv.cpp +++ b/src/hotspot/os_cpu/linux_riscv/vm_version_linux_riscv.cpp @@ -74,7 +74,7 @@ #define read_csr(csr) \ ({ \ - register unsigned long __v; \ + unsigned long __v; \ __asm__ __volatile__ ("csrr %0, %1" \ : "=r" (__v) \ : "i" (csr) \ From 93bdc2a6db91a95d6ee52ec92080e586c694dad5 Mon Sep 17 00:00:00 2001 From: Joe Wang Date: Wed, 22 Nov 2023 17:11:26 +0000 Subject: [PATCH 028/250] 8306055: Add a built-in Catalog to JDK XML module Reviewed-by: ihse, lancea, alanb --- make/modules/java.xml/Java.gmk | 1 + .../xerces/internal/impl/PropertyManager.java | 7 +- .../impl/XMLDocumentFragmentScannerImpl.java | 9 +- .../internal/impl/XMLDocumentScannerImpl.java | 9 +- .../internal/impl/XMLEntityManager.java | 245 ++++++------ .../xerces/internal/jaxp/SAXParserImpl.java | 4 +- .../jaxp/validation/XMLSchemaFactory.java | 3 - .../xerces/internal/parsers/SAXParser.java | 36 +- .../XIncludeAwareParserConfiguration.java | 24 +- .../internal/parsers/XML11Configuration.java | 31 +- .../xerces/internal/parsers/XMLParser.java | 31 +- .../util/ParserConfigurationSettings.java | 7 +- .../share/classes/javax/xml/catalog/Util.java | 2 +- .../classes/jdk/xml/internal/JdkCatalog.java | 46 +++ .../jdk/xml/internal/JdkConstants.java | 12 + .../classes/jdk/xml/internal/JdkXmlUtils.java | 26 ++ .../jdk/xml/internal/SecuritySupport.java | 41 ++ .../jdk/xml/internal/XMLSecurityManager.java | 64 +++- .../xml/internal/jdkcatalog/JDKCatalog.xml | 41 ++ .../jdkcatalog/java/dtd/preferences.dtd | 110 ++++++ .../jdkcatalog/java/dtd/properties.dtd | 15 + src/java.xml/share/classes/module-info.java | 68 +++- .../libs/jaxp/library/JAXPPolicyManager.java | 4 +- .../unittest/catalog/CatalogSupportBase.java | 19 +- .../common/catalog/CatalogTestBase.java | 361 ++++++++++++++++++ .../jaxp/unittest/common/catalog/DOMTest.java | 51 +++ .../jaxp/unittest/common/catalog/SAXTest.java | 51 +++ .../unittest/common/catalog/SchemaTest.java | 66 ++++ .../unittest/common/catalog/StAXTest.java | 51 +++ .../common/catalog/TransformTest.java | 58 +++ .../catalog/testcatalog/TestCatalog.xml | 32 ++ .../catalog/testcatalog/dtds/XSLDTD.dtd | 108 ++++++ .../catalog/testcatalog/dtds/paramEntity.dtd | 2 + .../common/catalog/testcatalog/dtds/test.dtd | 6 + .../catalog/testcatalog/xinclude/XI_red.dtd | 4 + .../testcatalog/xinclude/XI_simple.xml | 18 + .../catalog/testcatalog/xinclude/XI_test2.xml | 10 + .../catalog/testcatalog/xinclude/XI_utf8.xml | 4 + .../testcatalog/xsds/XSDImport_person.xsd | 12 + .../testcatalog/xsds/XSDImport_product.xsd | 11 + .../testcatalog/xsds/XSDInclude_person.xsd | 12 + .../testcatalog/xsds/XSDInclude_product.xsd | 11 + .../catalog/testcatalog/xsds/val_test.xsd | 16 + .../common/config/files/catalog2.properties | 36 ++ .../common/config/files/jaxp.properties | 5 + .../jaxp/unittest/common/dtd/DTDTestBase.java | 9 - .../jaxp/unittest/common/util/TestBase.java | 127 +++++- .../unittest/common/xmlfiles/XI_roottest.xml | 6 + .../jaxp/unittest/common/xmlfiles/test.xml | 6 + .../common/xmlfiles/testExternalParameter.xml | 12 + 50 files changed, 1727 insertions(+), 213 deletions(-) create mode 100644 src/java.xml/share/classes/jdk/xml/internal/JdkCatalog.java create mode 100644 src/java.xml/share/classes/jdk/xml/internal/jdkcatalog/JDKCatalog.xml create mode 100644 src/java.xml/share/classes/jdk/xml/internal/jdkcatalog/java/dtd/preferences.dtd create mode 100644 src/java.xml/share/classes/jdk/xml/internal/jdkcatalog/java/dtd/properties.dtd create mode 100644 test/jaxp/javax/xml/jaxp/unittest/common/catalog/CatalogTestBase.java create mode 100644 test/jaxp/javax/xml/jaxp/unittest/common/catalog/DOMTest.java create mode 100644 test/jaxp/javax/xml/jaxp/unittest/common/catalog/SAXTest.java create mode 100644 test/jaxp/javax/xml/jaxp/unittest/common/catalog/SchemaTest.java create mode 100644 test/jaxp/javax/xml/jaxp/unittest/common/catalog/StAXTest.java create mode 100644 test/jaxp/javax/xml/jaxp/unittest/common/catalog/TransformTest.java create mode 100644 test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/TestCatalog.xml create mode 100644 test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/dtds/XSLDTD.dtd create mode 100644 test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/dtds/paramEntity.dtd create mode 100644 test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/dtds/test.dtd create mode 100644 test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/xinclude/XI_red.dtd create mode 100644 test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/xinclude/XI_simple.xml create mode 100644 test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/xinclude/XI_test2.xml create mode 100644 test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/xinclude/XI_utf8.xml create mode 100644 test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/xsds/XSDImport_person.xsd create mode 100644 test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/xsds/XSDImport_product.xsd create mode 100644 test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/xsds/XSDInclude_person.xsd create mode 100644 test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/xsds/XSDInclude_product.xsd create mode 100644 test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/xsds/val_test.xsd create mode 100644 test/jaxp/javax/xml/jaxp/unittest/common/config/files/catalog2.properties create mode 100644 test/jaxp/javax/xml/jaxp/unittest/common/xmlfiles/XI_roottest.xml create mode 100644 test/jaxp/javax/xml/jaxp/unittest/common/xmlfiles/test.xml create mode 100644 test/jaxp/javax/xml/jaxp/unittest/common/xmlfiles/testExternalParameter.xml diff --git a/make/modules/java.xml/Java.gmk b/make/modules/java.xml/Java.gmk index 7d64387548b77..70ae760066305 100644 --- a/make/modules/java.xml/Java.gmk +++ b/make/modules/java.xml/Java.gmk @@ -27,4 +27,5 @@ DISABLED_WARNINGS_java += lossy-conversions this-escape DOCLINT += -Xdoclint:all/protected \ '-Xdoclint/package:$(call CommaList, javax.xml.catalog javax.xml.datatype \ javax.xml.transform javax.xml.validation javax.xml.xpath)' +COPY += .dtd .xsd .xml CLEAN += .properties diff --git a/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/PropertyManager.java b/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/PropertyManager.java index 92b81685a94e2..da21fb4a511b6 100644 --- a/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/PropertyManager.java +++ b/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/PropertyManager.java @@ -46,7 +46,7 @@ * @author K Venugopal * @author Sunitha Reddy * - * @LastModified: July 2023 + * @LastModified: Nov 2023 */ public class PropertyManager { @@ -150,10 +150,7 @@ private void initConfigurableReaderProperties() { // Initialize Catalog features supportedProps.put(XMLConstants.USE_CATALOG, JdkXmlUtils.USE_CATALOG_DEFAULT); - for (CatalogFeatures.Feature f : CatalogFeatures.Feature.values()) { - supportedProps.put(f.getPropertyName(), null); - } - + JdkXmlUtils.initCatalogFeatures(supportedProps); supportedProps.put(JdkConstants.CDATA_CHUNK_SIZE, JdkConstants.CDATA_CHUNK_SIZE_DEFAULT); } diff --git a/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLDocumentFragmentScannerImpl.java b/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLDocumentFragmentScannerImpl.java index 8f55114af337a..b77108b1e0eba 100644 --- a/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLDocumentFragmentScannerImpl.java +++ b/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLDocumentFragmentScannerImpl.java @@ -74,7 +74,7 @@ * @author Eric Ye, IBM * @author Sunitha Reddy, SUN Microsystems * - * @LastModified: July 2023 + * @LastModified: Nov 2023 */ public class XMLDocumentFragmentScannerImpl extends XMLScanner @@ -343,6 +343,13 @@ public class XMLDocumentFragmentScannerImpl */ protected String fAccessExternalDTD = EXTERNAL_ACCESS_DEFAULT; + /** + * Properties to determine whether to use a user-specified Catalog: + * Feature USE_CATALOG, Resolve and Catalog File + */ + protected boolean fUseCatalog = true; + protected String fCatalogFile; + /** * standard uri conformant (strict uri). * http://apache.org/xml/features/standard-uri-conformant diff --git a/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLDocumentScannerImpl.java b/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLDocumentScannerImpl.java index f859a499d29b7..52bfcd7aeec90 100644 --- a/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLDocumentScannerImpl.java +++ b/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLDocumentScannerImpl.java @@ -43,9 +43,11 @@ import java.io.CharConversionException; import java.io.EOFException; import java.io.IOException; +import javax.xml.XMLConstants; import javax.xml.stream.events.XMLEvent; import jdk.xml.internal.JdkConstants; import jdk.xml.internal.JdkProperty.State; +import jdk.xml.internal.JdkXmlUtils; import jdk.xml.internal.SecuritySupport; import jdk.xml.internal.XMLSecurityManager.Limit; @@ -69,7 +71,7 @@ * Refer to the table in unit-test javax.xml.stream.XMLStreamReaderTest.SupportDTD for changes * related to property SupportDTD. * @author Joe Wang, Sun Microsystems - * @LastModified: July 2023 + * @LastModified: Nov 2023 */ public class XMLDocumentScannerImpl extends XMLDocumentFragmentScannerImpl{ @@ -281,6 +283,9 @@ public void reset(PropertyManager propertyManager) { fLoadExternalDTD = !((Boolean)propertyManager.getProperty( Constants.ZEPHYR_PROPERTY_PREFIX + Constants.IGNORE_EXTERNAL_DTD)); + fUseCatalog = (Boolean)propertyManager.getProperty(XMLConstants.USE_CATALOG); + fCatalogFile = (String)propertyManager.getProperty(JdkXmlUtils.CATALOG_FILES); + setScannerState(XMLEvent.START_DOCUMENT); setDriver(fXMLDeclDriver); fSeenInternalSubset = false; @@ -327,6 +332,8 @@ public void reset(XMLComponentManager componentManager) // xerces features fLoadExternalDTD = componentManager.getFeature(LOAD_EXTERNAL_DTD, true); + fUseCatalog = componentManager.getFeature(XMLConstants.USE_CATALOG, true); + fCatalogFile = (String)componentManager.getProperty(JdkXmlUtils.CATALOG_FILES); fNamespaces = componentManager.getFeature(NAMESPACES, true); fSeenInternalSubset = false; diff --git a/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java b/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java index d127f7c8ec1bb..22de24ea8f058 100644 --- a/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java +++ b/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java @@ -56,6 +56,7 @@ import javax.xml.catalog.CatalogResolver; import javax.xml.stream.XMLInputFactory; import javax.xml.transform.Source; +import jdk.xml.internal.JdkCatalog; import jdk.xml.internal.JdkConstants; import jdk.xml.internal.JdkProperty; import jdk.xml.internal.JdkXmlUtils; @@ -93,7 +94,7 @@ * @author K.Venugopal SUN Microsystems * @author Neeraj Bajaj SUN Microsystems * @author Sunitha Reddy SUN Microsystems - * @LastModified: July 2023 + * @LastModified: Nov 2023 */ public class XMLEntityManager implements XMLComponent, XMLEntityResolver { @@ -265,9 +266,6 @@ public class XMLEntityManager implements XMLComponent, XMLEntityResolver { /** Debug switching readers for encodings. */ private static final boolean DEBUG_ENCODINGS = false; - // should be diplayed trace resolving messages - private static final boolean DEBUG_RESOLVER = false ; - // // Data // @@ -355,6 +353,7 @@ public class XMLEntityManager implements XMLComponent, XMLEntityResolver { /** Security Manager */ protected XMLSecurityManager fSecurityManager = null; + XMLSecurityPropertyManager fSecurityPropertyMgr; protected XMLLimitAnalyzer fLimitAnalyzer = null; @@ -418,8 +417,11 @@ public class XMLEntityManager implements XMLComponent, XMLEntityResolver { /** indicate whether Catalog should be used for resolving external resources */ private boolean fUseCatalog = true; + // user-specified Catalog Resolver CatalogFeatures fCatalogFeatures; CatalogResolver fCatalogResolver; + // the default JDK Catalog Resolver + CatalogResolver fDefCR; private String fCatalogFile; private String fDefer; @@ -434,11 +436,16 @@ public class XMLEntityManager implements XMLComponent, XMLEntityResolver { * If this constructor is used to create the object, reset() should be invoked on this object */ public XMLEntityManager() { + this(null, new XMLSecurityManager(true)); + } + + public XMLEntityManager(XMLSecurityPropertyManager securityPropertyMgr, XMLSecurityManager securityManager) { //for entity managers not created by parsers - fSecurityManager = new XMLSecurityManager(true); + fSecurityManager = securityManager; + fSecurityPropertyMgr = securityPropertyMgr; fEntityStorage = new XMLEntityStorage(this) ; setScannerVersion(Constants.XML_VERSION_1_0); - } // () + } /** Default constructor. */ public XMLEntityManager(PropertyManager propertyManager) { @@ -653,7 +660,11 @@ public String setupCurrentEntity(boolean reference, String name, XMLInputSource URL location = new URL(expandedSystemId); URLConnection connect = location.openConnection(); if (!(connect instanceof HttpURLConnection)) { - stream = connect.getInputStream(); + if (expandedSystemId.startsWith("jrt:/java.xml")) { + stream = SecuritySupport.getInputStream(connect); + } else { + stream = connect.getInputStream(); + } } else { boolean followRedirects = true; @@ -1012,73 +1023,126 @@ public StaxXMLInputSource resolveEntityAsPerStax(XMLResourceIdentifier resourceI ri = fResourceIdentifier; } ri.setValues(publicId, literalSystemId, baseSystemId, expandedSystemId); - if(DEBUG_RESOLVER){ - System.out.println("BEFORE Calling resolveEntity") ; - } fISCreatedByResolver = false; - //either of Stax or Xerces would be null - if(fStaxEntityResolver != null){ + // Step 1: custom resolver, either StAX or Entity + if (fStaxEntityResolver != null) { staxInputSource = fStaxEntityResolver.resolveEntity(ri); - if(staxInputSource != null) { + } else if (fEntityResolver != null) { + xmlInputSource = fEntityResolver.resolveEntity(ri); + if (xmlInputSource != null) { + //wrap it in StaxXMLInputSource fISCreatedByResolver = true; + staxInputSource = new StaxXMLInputSource(xmlInputSource, fISCreatedByResolver); } } - if(fEntityResolver != null){ - xmlInputSource = fEntityResolver.resolveEntity(ri); - if(xmlInputSource != null) { - fISCreatedByResolver = true; + // Step 2: custom catalog if specified + if (staxInputSource == null && (fUseCatalog && fCatalogFile != null)) { + if (fCatalogResolver == null) { + fCatalogFeatures = JdkXmlUtils.getCatalogFeatures(fDefer, fCatalogFile, fPrefer, fResolve); + fCatalogResolver = CatalogManager.catalogResolver(fCatalogFeatures); } - } - if(xmlInputSource != null){ - //wrap this XMLInputSource to StaxInputSource - staxInputSource = new StaxXMLInputSource(xmlInputSource, fISCreatedByResolver); + staxInputSource = resolveWithCatalogStAX(fCatalogResolver, fCatalogFile, publicId, literalSystemId); } - if (staxInputSource == null && fUseCatalog) { - if (fCatalogFeatures == null) { - fCatalogFeatures = JdkXmlUtils.getCatalogFeatures(fDefer, fCatalogFile, fPrefer, fResolve); - } - fCatalogFile = fCatalogFeatures.get(Feature.FILES); - if (fCatalogFile != null) { - try { - if (fCatalogResolver == null) { - fCatalogResolver = CatalogManager.catalogResolver(fCatalogFeatures); - } - InputSource is = fCatalogResolver.resolveEntity(publicId, literalSystemId); - if (is != null && !is.isEmpty()) { - staxInputSource = new StaxXMLInputSource(new XMLInputSource(is, true), true); - } - } catch (CatalogException e) { - fErrorReporter.reportError(XMLMessageFormatter.XML_DOMAIN,"CatalogException", - new Object[]{SecuritySupport.sanitizePath(fCatalogFile)}, - XMLErrorReporter.SEVERITY_FATAL_ERROR, e ); - } - } + // Step 3: use the default JDK Catalog Resolver if Step 2's resolve is continue + if (staxInputSource == null && JdkXmlUtils.isResolveContinue(fCatalogFeatures)) { + initJdkCatalogResolver(); + + staxInputSource = resolveWithCatalogStAX(fDefCR, JdkCatalog.JDKCATALOG, publicId, literalSystemId); } - // do default resolution - //this works for both stax & Xerces, if staxInputSource is null, - //it means parser need to revert to default resolution - if (staxInputSource == null) { - // REVISIT: when systemId is null, I think we should return null. - // is this the right solution? -SG - //if (systemId != null) + // Step 4: default resolution if not resolved by a resolver and the RESOLVE + // feature is set to 'continue' + if (staxInputSource != null) { + fISCreatedByResolver = true; + } else if (JdkXmlUtils.isResolveContinue(fCatalogFeatures) && + fSecurityManager.is(Limit.JDKCATALOG_RESOLVE, JdkConstants.CONTINUE)) { staxInputSource = new StaxXMLInputSource( new XMLInputSource(publicId, literalSystemId, baseSystemId, true), false); - }else if(staxInputSource.hasXMLStreamOrXMLEventReader()){ - //Waiting for the clarification from EG. - nb } - if (DEBUG_RESOLVER) { - System.err.println("XMLEntityManager.resolveEntity(" + publicId + ")"); - System.err.println(" = " + xmlInputSource); + return staxInputSource; + + } + + private void initJdkCatalogResolver() { + if (fDefCR == null) { + fDefCR = fSecurityManager.getJDKCatalogResolver(); } + } - return staxInputSource; + /** + * Resolves the external resource using the Catalog specified and returns + * a StaxXMLInputSource. + */ + private StaxXMLInputSource resolveWithCatalogStAX(CatalogResolver cr, String cFile, + String publicId, String systemId) { + InputSource is = resolveWithCatalog(cr, cFile, publicId, systemId); + // note that empty source isn't considered resolved + if (is != null) { + return new StaxXMLInputSource(new XMLInputSource(is, true), true); + } + return null; + } + /** + * Resolves the external resource using the Catalog specified and returns + * a InputSource. + */ + private InputSource resolveWithCatalog(CatalogResolver cr, String cFile, + String publicId, String systemId) { + if (cr != null) { + try { + return cr.resolveEntity(publicId, systemId); + } catch (CatalogException e) { + fErrorReporter.reportError(XMLMessageFormatter.XML_DOMAIN,"CatalogException", + new Object[]{SecuritySupport.sanitizePath(cFile)}, + XMLErrorReporter.SEVERITY_FATAL_ERROR, e ); + } + } + return null; + } + + /** + * Resolves the external resource using the Catalog specified and returns + * a XMLInputSource. Since the Resolve method can be called from various processors, + * this method attempts to resolve the resource as an EntityResolver first + * and then URIResolver if no match is found. + */ + private XMLInputSource resolveEntityOrURI(CatalogResolver cr, String publicId, String systemId, String base) { + XMLInputSource xis = resolveEntity(cr, publicId, systemId, base); + + if (xis != null) { + return xis; + } else if (systemId != null) { + Source source = null; + try { + source = cr.resolve(systemId, base); + } catch (CatalogException e) { + throw new XNIException(e); + } + if (source != null && !source.isEmpty()) { + return new XMLInputSource(publicId, source.getSystemId(), base, true); + } + } + return null; + } + + private XMLInputSource resolveEntity(CatalogResolver cr, String publicId, String systemId, String base) { + InputSource is = null; + try { + if (publicId != null || systemId != null) { + is = cr.resolveEntity(publicId, systemId); + } + } catch (CatalogException e) {} + + if (is != null && !is.isEmpty()) { + return new XMLInputSource(is, true); + } + return null; } /** @@ -1128,7 +1192,7 @@ public XMLInputSource resolveEntity(XMLResourceIdentifier resourceIdentifier) th if (needExpand) expandedSystemId = expandSystemId(literalSystemId, baseSystemId,false); - // give the entity resolver a chance + // Step 1: custom Entity resolver XMLInputSource xmlInputSource = null; if (fEntityResolver != null) { @@ -1137,63 +1201,30 @@ public XMLInputSource resolveEntity(XMLResourceIdentifier resourceIdentifier) th xmlInputSource = fEntityResolver.resolveEntity(resourceIdentifier); } - if (xmlInputSource == null && fUseCatalog) { - if (fCatalogFeatures == null) { + // Step 2: custom catalog if specified + if ((publicId != null || literalSystemId != null || resourceIdentifier.getNamespace() !=null) + && xmlInputSource == null && (fUseCatalog && fCatalogFile != null)) { + if (fCatalogResolver == null) { fCatalogFeatures = JdkXmlUtils.getCatalogFeatures(fDefer, fCatalogFile, fPrefer, fResolve); + fCatalogResolver = CatalogManager.catalogResolver(fCatalogFeatures); } - fCatalogFile = fCatalogFeatures.get(Feature.FILES); - if (fCatalogFile != null) { - /* - since the method can be called from various processors, both - EntityResolver and URIResolver are used to attempt to find - a match - */ - InputSource is = null; - try { - if (fCatalogResolver == null) { - fCatalogResolver = CatalogManager.catalogResolver(fCatalogFeatures); - } - String pid = (publicId != null? publicId : resourceIdentifier.getNamespace()); - if (pid != null || literalSystemId != null) { - is = fCatalogResolver.resolveEntity(pid, literalSystemId); - } - } catch (CatalogException e) {} - - if (is != null && !is.isEmpty()) { - xmlInputSource = new XMLInputSource(is, true); - } else if (literalSystemId != null) { - if (fCatalogResolver == null) { - fCatalogResolver = CatalogManager.catalogResolver(fCatalogFeatures); - } - - Source source = null; - try { - source = fCatalogResolver.resolve(literalSystemId, baseSystemId); - } catch (CatalogException e) { - throw new XNIException(e); - } - if (source != null && !source.isEmpty()) { - xmlInputSource = new XMLInputSource(publicId, source.getSystemId(), baseSystemId, true); - } - } - } + String pid = (publicId != null? publicId : resourceIdentifier.getNamespace()); + xmlInputSource = resolveEntityOrURI(fCatalogResolver, pid, literalSystemId, baseSystemId); } - // do default resolution - // REVISIT: what's the correct behavior if the user provided an entity - // resolver (fEntityResolver != null), but resolveEntity doesn't return - // an input source (xmlInputSource == null)? - // do we do default resolution, or do we just return null? -SG - if (xmlInputSource == null) { - // REVISIT: when systemId is null, I think we should return null. - // is this the right solution? -SG - //if (systemId != null) - xmlInputSource = new XMLInputSource(publicId, literalSystemId, baseSystemId, false); + // Step 3: use the default JDK Catalog Resolver if Step 2's resolve is continue + if ((publicId != null || literalSystemId != null) + && xmlInputSource == null && JdkXmlUtils.isResolveContinue(fCatalogFeatures)) { + initJdkCatalogResolver(); + // unlike a custom catalog, the JDK Catalog only contains entity references + xmlInputSource = resolveEntity(fDefCR, publicId, literalSystemId, baseSystemId); } - if (DEBUG_RESOLVER) { - System.err.println("XMLEntityManager.resolveEntity(" + publicId + ")"); - System.err.println(" = " + xmlInputSource); + // Step 4: default resolution if not resolved by a resolver and the RESOLVE + // feature is set to 'continue' + if ((xmlInputSource == null) && JdkXmlUtils.isResolveContinue(fCatalogFeatures) && + fSecurityManager.is(Limit.JDKCATALOG_RESOLVE, JdkConstants.CONTINUE)) { + xmlInputSource = new XMLInputSource(publicId, literalSystemId, baseSystemId, false); } return xmlInputSource; @@ -1411,7 +1442,7 @@ public void startEntity(boolean isGE, String name, fSecurityManager.debugPrint(fLimitAnalyzer); fErrorReporter.reportError(XMLMessageFormatter.XML_DOMAIN,"EntityExpansionLimit", new Object[]{fSecurityManager.getLimitValueByIndex(entityExpansionIndex)}, - XMLErrorReporter.SEVERITY_FATAL_ERROR ); + XMLErrorReporter.SEVERITY_FATAL_ERROR ); // is there anything better to do than reset the counter? // at least one can envision debugging applications where this might // be useful... diff --git a/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/jaxp/SAXParserImpl.java b/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/jaxp/SAXParserImpl.java index c0ae87c08a64d..e5dd8a3c25e4c 100644 --- a/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/jaxp/SAXParserImpl.java +++ b/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/jaxp/SAXParserImpl.java @@ -63,7 +63,7 @@ * @author Rajiv Mordani * @author Edwin Goei * - * @LastModified: July 2023 + * @LastModified: Nov 2023 */ @SuppressWarnings("deprecation") public class SAXParserImpl extends javax.xml.parsers.SAXParser @@ -402,7 +402,7 @@ public JAXPSAXParser() { JAXPSAXParser(SAXParserImpl saxParser, XMLSecurityPropertyManager securityPropertyMgr, XMLSecurityManager securityManager) { - super(); + super(null, null, securityPropertyMgr, securityManager); fSAXParser = saxParser; fSecurityManager = securityManager; fSecurityPropertyMgr = securityPropertyMgr; diff --git a/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchemaFactory.java b/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchemaFactory.java index bb1eb23284d81..f36d2bd14bbbd 100644 --- a/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchemaFactory.java +++ b/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchemaFactory.java @@ -162,9 +162,6 @@ public XMLSchemaFactory() { // use catalog fXMLSchemaLoader.setFeature(XMLConstants.USE_CATALOG, JdkXmlUtils.USE_CATALOG_DEFAULT); - for (Feature f : Feature.values()) { - fXMLSchemaLoader.setProperty(f.getPropertyName(), null); - } fXMLSchemaLoader.setProperty(JdkConstants.CDATA_CHUNK_SIZE, JdkConstants.CDATA_CHUNK_SIZE_DEFAULT); fXmlFeatures = new JdkXmlFeatures(fSecurityManager.isSecureProcessing()); diff --git a/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/SAXParser.java b/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/SAXParser.java index e8fd5424265d0..a71c8cc56d12d 100644 --- a/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/SAXParser.java +++ b/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/SAXParser.java @@ -41,7 +41,7 @@ * @author Arnaud Le Hors, IBM * @author Andy Clark, IBM * - * @LastModified: Sep 2023 + * @LastModified: Nov 2023 */ public class SAXParser extends AbstractSAXParser { @@ -91,21 +91,21 @@ public class SAXParser */ public SAXParser(XMLParserConfiguration config) { super(config); - initSecurityManager(); + initSecurityManager(null, null); } // (XMLParserConfiguration) /** * Constructs a SAX parser using the dtd/xml schema parser configuration. */ public SAXParser() { - this(null, null); + this(null, null, null, null); } // () /** * Constructs a SAX parser using the specified symbol table. */ public SAXParser(SymbolTable symbolTable) { - this(symbolTable, null); + this(symbolTable, null, null, null); } // (SymbolTable) /** @@ -113,6 +113,11 @@ public SAXParser(SymbolTable symbolTable) { * grammar pool. */ public SAXParser(SymbolTable symbolTable, XMLGrammarPool grammarPool) { + this(symbolTable, grammarPool, null, null); + } + + public SAXParser(SymbolTable symbolTable, XMLGrammarPool grammarPool, + XMLSecurityPropertyManager securityPropertyMgr, XMLSecurityManager securityManager) { super(new XIncludeAwareParserConfiguration()); // set features @@ -128,7 +133,7 @@ public SAXParser(SymbolTable symbolTable, XMLGrammarPool grammarPool) { fConfiguration.setProperty(XMLGRAMMAR_POOL, grammarPool); } - initSecurityManager(); + initSecurityManager(securityPropertyMgr, securityManager); } // (SymbolTable,XMLGrammarPool) /** @@ -172,25 +177,4 @@ public void setProperty(String name, Object value) } } } - - /** - * Initiates the SecurityManager. This becomes necessary when the SAXParser - * is constructed directly by, for example, XMLReaderFactory rather than - * through SAXParserFactory. - */ - private void initSecurityManager() { - try { - if (securityManager == null) { - securityManager = new XMLSecurityManager(true); - super.setProperty(Constants.SECURITY_MANAGER, securityManager); - } - - if (securityPropertyManager == null) { - securityPropertyManager = new XMLSecurityPropertyManager(); - super.setProperty(JdkConstants.XML_SECURITY_PROPERTY_MANAGER, securityPropertyManager); - } - } catch (SAXException e) { - Utils.dPrint(() -> e.getMessage()); - } - } } // class SAXParser diff --git a/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XIncludeAwareParserConfiguration.java b/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XIncludeAwareParserConfiguration.java index 07a5498a7120d..cbe555adcd120 100644 --- a/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XIncludeAwareParserConfiguration.java +++ b/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XIncludeAwareParserConfiguration.java @@ -1,6 +1,5 @@ /* - * reserved comment block - * DO NOT REMOVE OR ALTER! + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. */ /* * Licensed to the Apache Software Foundation (ASF) under one or more @@ -25,6 +24,7 @@ import com.sun.org.apache.xerces.internal.util.FeatureState; import com.sun.org.apache.xerces.internal.util.NamespaceSupport; import com.sun.org.apache.xerces.internal.util.SymbolTable; +import com.sun.org.apache.xerces.internal.utils.XMLSecurityPropertyManager; import com.sun.org.apache.xerces.internal.xinclude.XIncludeHandler; import com.sun.org.apache.xerces.internal.xinclude.XIncludeNamespaceSupport; import com.sun.org.apache.xerces.internal.xni.NamespaceContext; @@ -33,6 +33,7 @@ import com.sun.org.apache.xerces.internal.xni.parser.XMLComponentManager; import com.sun.org.apache.xerces.internal.xni.parser.XMLConfigurationException; import com.sun.org.apache.xerces.internal.xni.parser.XMLDocumentSource; +import jdk.xml.internal.XMLSecurityManager; /** * This class is the configuration used to parse XML 1.0 and XML 1.1 documents @@ -40,6 +41,7 @@ * * @author Michael Glavassevich, IBM * + * @LastModified: Nov 2023 */ public class XIncludeAwareParserConfiguration extends XML11Configuration { @@ -88,7 +90,7 @@ public class XIncludeAwareParserConfiguration extends XML11Configuration { /** Default constructor. */ public XIncludeAwareParserConfiguration() { - this(null, null, null); + this(null, null, null, null, null); } // () /** @@ -97,7 +99,7 @@ public XIncludeAwareParserConfiguration() { * @param symbolTable The symbol table to use. */ public XIncludeAwareParserConfiguration(SymbolTable symbolTable) { - this(symbolTable, null, null); + this(symbolTable, null, null, null, null); } // (SymbolTable) /** @@ -111,7 +113,7 @@ public XIncludeAwareParserConfiguration(SymbolTable symbolTable) { public XIncludeAwareParserConfiguration( SymbolTable symbolTable, XMLGrammarPool grammarPool) { - this(symbolTable, grammarPool, null); + this(symbolTable, grammarPool, null, null, null); } // (SymbolTable,XMLGrammarPool) /** @@ -123,11 +125,15 @@ public XIncludeAwareParserConfiguration( * @param grammarPool The grammar pool to use. * @param parentSettings The parent settings. */ - public XIncludeAwareParserConfiguration( - SymbolTable symbolTable, - XMLGrammarPool grammarPool, + public XIncludeAwareParserConfiguration(SymbolTable symbolTable, XMLGrammarPool grammarPool, XMLComponentManager parentSettings) { - super(symbolTable, grammarPool, parentSettings); + this(symbolTable, grammarPool, parentSettings, null, null); + } + + public XIncludeAwareParserConfiguration(SymbolTable symbolTable, XMLGrammarPool grammarPool, + XMLComponentManager parentSettings, XMLSecurityPropertyManager securityPropertyMgr, + XMLSecurityManager securityManager) { + super(symbolTable, grammarPool, parentSettings, securityPropertyMgr, securityManager); final String[] recognizedFeatures = { ALLOW_UE_AND_NOTATION_EVENTS, diff --git a/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XML11Configuration.java b/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XML11Configuration.java index b85e0f319d0c7..d4db3be16cf9f 100644 --- a/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XML11Configuration.java +++ b/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XML11Configuration.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2023, Oracle and/or its affiliates. All rights reserved. */ /* * Licensed to the Apache Software Foundation (ASF) under one or more @@ -46,6 +46,7 @@ import com.sun.org.apache.xerces.internal.util.ParserConfigurationSettings; import com.sun.org.apache.xerces.internal.util.PropertyState; import com.sun.org.apache.xerces.internal.util.SymbolTable; +import com.sun.org.apache.xerces.internal.utils.XMLSecurityPropertyManager; import com.sun.org.apache.xerces.internal.xni.XMLDTDContentModelHandler; import com.sun.org.apache.xerces.internal.xni.XMLDTDHandler; import com.sun.org.apache.xerces.internal.xni.XMLDocumentHandler; @@ -70,6 +71,7 @@ import javax.xml.catalog.CatalogFeatures; import jdk.xml.internal.JdkConstants; import jdk.xml.internal.JdkXmlUtils; +import jdk.xml.internal.XMLSecurityManager; /** * This class is the configuration used to parse XML 1.0 and XML 1.1 documents. @@ -78,7 +80,7 @@ * @author Neil Graham, IBM * @author Michael Glavassevich, IBM * - * @LastModified: May 2021 + * @LastModified: Nov 2023 */ public class XML11Configuration extends ParserConfigurationSettings implements XMLPullParserConfiguration, XML11Configurable { @@ -432,7 +434,7 @@ public class XML11Configuration extends ParserConfigurationSettings /** Default constructor. */ public XML11Configuration() { - this(null, null, null); + this(null, null, null, null, null); } // () /** @@ -441,7 +443,7 @@ public XML11Configuration() { * @param symbolTable The symbol table to use. */ public XML11Configuration(SymbolTable symbolTable) { - this(symbolTable, null, null); + this(symbolTable, null, null, null, null); } // (SymbolTable) /** @@ -456,7 +458,7 @@ public XML11Configuration(SymbolTable symbolTable) { * @param grammarPool The grammar pool to use. */ public XML11Configuration(SymbolTable symbolTable, XMLGrammarPool grammarPool) { - this(symbolTable, grammarPool, null); + this(symbolTable, grammarPool, null, null, null); } // (SymbolTable,XMLGrammarPool) /** @@ -471,10 +473,14 @@ public XML11Configuration(SymbolTable symbolTable, XMLGrammarPool grammarPool) { * @param grammarPool The grammar pool to use. * @param parentSettings The parent settings. */ - public XML11Configuration( - SymbolTable symbolTable, - XMLGrammarPool grammarPool, - XMLComponentManager parentSettings) { + public XML11Configuration(SymbolTable symbolTable, XMLGrammarPool grammarPool, + XMLComponentManager parentSettings) { + this(symbolTable, grammarPool, parentSettings, null, null); + } + + public XML11Configuration(SymbolTable symbolTable, XMLGrammarPool grammarPool, + XMLComponentManager parentSettings, XMLSecurityPropertyManager securityPropertyMgr, + XMLSecurityManager securityManager) { super(parentSettings); @@ -592,7 +598,7 @@ public XML11Configuration( fProperties.put(XMLGRAMMAR_POOL, fGrammarPool); } - fEntityManager = new XMLEntityManager(); + fEntityManager = new XMLEntityManager(securityPropertyMgr, securityManager); fProperties.put(ENTITY_MANAGER, fEntityManager); addCommonComponent(fEntityManager); @@ -640,11 +646,6 @@ public XML11Configuration( // REVISIT: What is the right thing to do? -Ac } - // Initialize Catalog features - for( CatalogFeatures.Feature f : CatalogFeatures.Feature.values()) { - fProperties.put(f.getPropertyName(), null); - } - setProperty(JdkConstants.CDATA_CHUNK_SIZE, JdkConstants.CDATA_CHUNK_SIZE_DEFAULT); fConfigUpdated = false; diff --git a/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XMLParser.java b/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XMLParser.java index 0bd3dab5678d0..01d1c904b5e94 100644 --- a/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XMLParser.java +++ b/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XMLParser.java @@ -28,7 +28,9 @@ import com.sun.org.apache.xerces.internal.xni.parser.XMLInputSource; import com.sun.org.apache.xerces.internal.xni.parser.XMLParserConfiguration; import jdk.xml.internal.JdkConstants; +import jdk.xml.internal.Utils; import jdk.xml.internal.XMLSecurityManager; +import org.xml.sax.SAXException; import org.xml.sax.SAXNotSupportedException; import org.xml.sax.SAXNotRecognizedException; @@ -48,7 +50,7 @@ * * @author Arnaud Le Hors, IBM * @author Andy Clark, IBM - * @LastModified: July 2023 + * @LastModified: Nov 2023 */ public abstract class XMLParser { @@ -127,20 +129,29 @@ protected XMLParser(XMLParserConfiguration config) { public void parse(XMLInputSource inputSource) throws XNIException, IOException { // null indicates that the parser is called directly, initialize them - if (securityManager == null) { - securityManager = new XMLSecurityManager(true); - fConfiguration.setProperty(Constants.SECURITY_MANAGER, securityManager); - } - if (securityPropertyManager == null) { - securityPropertyManager = new XMLSecurityPropertyManager(); - fConfiguration.setProperty(JdkConstants.XML_SECURITY_PROPERTY_MANAGER, securityPropertyManager); - } - + initSecurityManager(null, null); reset(); fConfiguration.parse(inputSource); } // parse(XMLInputSource) + /** + * Initiates the SecurityManager. This becomes necessary when the Parser + * is constructed directly by, for example, XMLReaderFactory rather than + * through SAXParserFactory. + */ + void initSecurityManager(XMLSecurityPropertyManager spm, XMLSecurityManager sm) { + if (securityManager == null) { + securityManager = sm != null ? sm : new XMLSecurityManager(true); + } + fConfiguration.setProperty(Constants.SECURITY_MANAGER, securityManager); + + if (securityPropertyManager == null) { + securityPropertyManager = spm != null ? spm : new XMLSecurityPropertyManager(); + } + fConfiguration.setProperty(JdkConstants.XML_SECURITY_PROPERTY_MANAGER, securityPropertyManager); + } + // // Protected methods // diff --git a/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/util/ParserConfigurationSettings.java b/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/util/ParserConfigurationSettings.java index 377bb108750be..caa4ade1df84c 100644 --- a/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/util/ParserConfigurationSettings.java +++ b/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/util/ParserConfigurationSettings.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2023, Oracle and/or its affiliates. All rights reserved. */ /* * Licensed to the Apache Software Foundation (ASF) under one or more @@ -28,6 +28,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import jdk.xml.internal.JdkXmlUtils; /** * This class implements the basic operations for managing parser @@ -42,7 +43,7 @@ * * @author Andy Clark, IBM * - * @LastModified: Apr 2019 + * @LastModified: Nov 2023 */ public class ParserConfigurationSettings implements XMLComponentManager { @@ -97,6 +98,8 @@ public ParserConfigurationSettings(XMLComponentManager parent) { // save parent fParentSettings = parent; + // Initialize Catalog features + JdkXmlUtils.initCatalogFeatures(fProperties); } // (XMLComponentManager) // diff --git a/src/java.xml/share/classes/javax/xml/catalog/Util.java b/src/java.xml/share/classes/javax/xml/catalog/Util.java index 3bf6e31f98bba..496626d64fa20 100644 --- a/src/java.xml/share/classes/javax/xml/catalog/Util.java +++ b/src/java.xml/share/classes/javax/xml/catalog/Util.java @@ -165,7 +165,7 @@ static boolean isFileUriExist(URI uri, boolean openJarFile) { case SCHEME_FILE: String path = uri.getPath(); File f1 = new File(path); - if (f1.isFile()) { + if (SecuritySupport.isFile(f1)) { return true; } break; diff --git a/src/java.xml/share/classes/jdk/xml/internal/JdkCatalog.java b/src/java.xml/share/classes/jdk/xml/internal/JdkCatalog.java new file mode 100644 index 0000000000000..518903073998d --- /dev/null +++ b/src/java.xml/share/classes/jdk/xml/internal/JdkCatalog.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package jdk.xml.internal; + +import java.net.URI; +import javax.xml.catalog.Catalog; +import javax.xml.catalog.CatalogFeatures; +import javax.xml.catalog.CatalogManager; + +/** + * Represents the built-in Catalog that hosts the DTDs for the Java platform. + */ +public class JdkCatalog { + public static final String JDKCATALOG = "/jdk/xml/internal/jdkcatalog/JDKCatalog.xml"; + private static final String JDKCATALOG_URL = SecuritySupport.getResource(JDKCATALOG).toExternalForm(); + public static Catalog catalog; + + public static void init(String resolve) { + if (catalog == null) { + CatalogFeatures cf = JdkXmlUtils.getCatalogFeatures(null, JDKCATALOG_URL, null, resolve); + catalog = CatalogManager.catalog(cf, URI.create(JDKCATALOG_URL)); + } + } +} diff --git a/src/java.xml/share/classes/jdk/xml/internal/JdkConstants.java b/src/java.xml/share/classes/jdk/xml/internal/JdkConstants.java index da373c3813f78..26f163878ea6d 100644 --- a/src/java.xml/share/classes/jdk/xml/internal/JdkConstants.java +++ b/src/java.xml/share/classes/jdk/xml/internal/JdkConstants.java @@ -291,6 +291,7 @@ public final class JdkConstants { /** * System Property for the DTD property + * @since 22 */ public static final String DTD_PROPNAME = "jdk.xml.dtd.support"; @@ -299,6 +300,17 @@ public final class JdkConstants { public static final int IGNORE = 1; public static final int DENY = 2; + /** + * System Property for the JDKCatalog' RESOLVE property + * @since 22 + */ + public static final String JDKCATALOG_RESOLVE = "jdk.xml.jdkCatalog.resolve"; + + // Catalog Resolve Integer mappings for String values + public static final int CONTINUE = 0; + //public static final int IGNORE = 1; // same as that of DTD + public static final int STRICT = 2; + /** * Values for a feature */ diff --git a/src/java.xml/share/classes/jdk/xml/internal/JdkXmlUtils.java b/src/java.xml/share/classes/jdk/xml/internal/JdkXmlUtils.java index 5acfdf6cbe82d..7ee98622317f1 100644 --- a/src/java.xml/share/classes/jdk/xml/internal/JdkXmlUtils.java +++ b/src/java.xml/share/classes/jdk/xml/internal/JdkXmlUtils.java @@ -31,6 +31,7 @@ import com.sun.org.apache.xerces.internal.util.ParserConfigurationSettings; import com.sun.org.apache.xerces.internal.xni.parser.XMLComponentManager; import com.sun.org.apache.xerces.internal.xni.parser.XMLConfigurationException; +import java.util.Map; import javax.xml.XMLConstants; import javax.xml.catalog.CatalogFeatures; import javax.xml.catalog.CatalogFeatures.Feature; @@ -156,6 +157,31 @@ public static String getCatalogFeature(CatalogFeatures features, String name) { return null; } + /** + * Initialize catalog features, including setting the default values and reading + * from the JAXP configuration file and System Properties. + * + * @param properties the Map object that holds the properties + */ + public static void initCatalogFeatures(Map properties) { + CatalogFeatures cf = getCatalogFeatures(); + for( CatalogFeatures.Feature f : CatalogFeatures.Feature.values()) { + properties.put(f.getPropertyName(), cf.get(f)); + } + } + + /** + * Creates an instance of a CatalogFeatures with default settings. + * Note: the CatalogFeatures is initialized with settings in the following + * order: + * Default values -> values in the config -> values set with System Properties + * + * @return an instance of a CatalogFeatures + */ + public static CatalogFeatures getCatalogFeatures() { + return CatalogFeatures.builder().build(); + } + /** * Creates an instance of a CatalogFeatures. * diff --git a/src/java.xml/share/classes/jdk/xml/internal/SecuritySupport.java b/src/java.xml/share/classes/jdk/xml/internal/SecuritySupport.java index 0a4f10cea4f6d..cfb2a264f7b36 100644 --- a/src/java.xml/share/classes/jdk/xml/internal/SecuritySupport.java +++ b/src/java.xml/share/classes/jdk/xml/internal/SecuritySupport.java @@ -30,6 +30,7 @@ import java.io.IOException; import java.io.InputStream; import java.net.URL; +import java.net.URLConnection; import java.nio.file.Paths; import java.security.AccessController; import java.security.CodeSource; @@ -266,6 +267,18 @@ public static boolean isFileExists(final File f) { -> f.exists())); } + /** + * Tests whether the input is file. + * + * @param f the file to be tested + * @return true if the input is file, false otherwise + */ + @SuppressWarnings("removal") + public static boolean isFile(final File f) { + return (AccessController.doPrivileged((PrivilegedAction) () + -> f.isFile())); + } + /** * Creates and returns a new FileInputStream from a file. * @param file the specified file @@ -283,6 +296,23 @@ public static FileInputStream getFileInputStream(final File file) } } + /** + * Returns an InputStream from a URLConnection. + * @param uc the URLConnection + * @return the InputStream + * @throws IOException if an I/O error occurs while creating the input stream + */ + @SuppressWarnings("removal") + public static InputStream getInputStream(final URLConnection uc) + throws IOException { + try { + return AccessController.doPrivileged((PrivilegedExceptionAction) () + -> uc.getInputStream()); + } catch (PrivilegedActionException e) { + throw (IOException) e.getException(); + } + } + /** * Returns the resource as a stream. * @param name the resource name @@ -294,6 +324,17 @@ public static InputStream getResourceAsStream(final String name) { SecuritySupport.class.getResourceAsStream("/"+name)); } + /** + * Returns the resource by the name. + * @param name the resource name + * @return the resource + */ + @SuppressWarnings("removal") + public static URL getResource(final String name) { + return AccessController.doPrivileged((PrivilegedAction) () -> + SecuritySupport.class.getResource(name)); + } + /** * Gets a resource bundle using the specified base name, the default locale, and the caller's class loader. * @param bundle the base name of the resource bundle, a fully qualified class name diff --git a/src/java.xml/share/classes/jdk/xml/internal/XMLSecurityManager.java b/src/java.xml/share/classes/jdk/xml/internal/XMLSecurityManager.java index 07493c1b32569..d343b99cf14ac 100644 --- a/src/java.xml/share/classes/jdk/xml/internal/XMLSecurityManager.java +++ b/src/java.xml/share/classes/jdk/xml/internal/XMLSecurityManager.java @@ -32,6 +32,9 @@ import java.util.Objects; import java.util.concurrent.CopyOnWriteArrayList; import java.util.stream.Collectors; +import javax.xml.catalog.CatalogManager; +import javax.xml.catalog.CatalogResolver; +import javax.xml.catalog.CatalogResolver.NotFoundAction; import javax.xml.stream.XMLInputFactory; import jdk.xml.internal.JdkProperty.State; import jdk.xml.internal.JdkProperty.ImplPropMap; @@ -67,15 +70,30 @@ public final class XMLSecurityManager { DTD_MAP = Collections.unmodifiableMap(map); } + // Valid values for Catalog Resolve, and mappings between the string and + // interger values + static final Map CR_MAP; + // Source Level JDK 8 + static { + Map map = new HashMap<>(); + map.put("continue", 0); + map.put("ignore", 1); + map.put("strict", 2); + CR_MAP = Collections.unmodifiableMap(map); + } + // Value converter for properties of type Boolean private static final BooleanMapper BOOLMAPPER = new BooleanMapper(); // Value converter for properties of type Integer private static final IntegerMapper INTMAPPER = new IntegerMapper(); - // DTD value map + // DTD value mapper private static final StringMapper DTDMAPPER = new StringMapper(DTD_MAP); + // Catalog Resolve value mapper + private static final StringMapper CRMAPPER = new StringMapper(CR_MAP); + /** * Limits managed by the security manager */ @@ -109,6 +127,8 @@ public static enum Limit { JdkConstants.ALLOW, JdkConstants.ALLOW, Processor.PARSER, DTDMAPPER), XERCES_DISALLOW_DTD("disallowDTD", DISALLOW_DTD, null, null, 0, 0, Processor.PARSER, BOOLMAPPER), STAX_SUPPORT_DTD("supportDTD", XMLInputFactory.SUPPORT_DTD, null, null, 1, 1, Processor.PARSER, BOOLMAPPER), + JDKCATALOG_RESOLVE("JDKCatalogResolve", JdkConstants.JDKCATALOG_RESOLVE, JdkConstants.JDKCATALOG_RESOLVE, null, + JdkConstants.CONTINUE, JdkConstants.CONTINUE, Processor.PARSER, CRMAPPER), ; final String key; @@ -266,6 +286,48 @@ public XMLSecurityManager(boolean secureProcessing) { //read system properties or the config file (jaxp.properties by default) readSystemProperties(); + // prepare the JDK Catalog + prepareCatalog(); + } + + /** + * Flag indicating whether the JDK Catalog has been initialized + */ + static volatile boolean jdkcatalogInitialized = false; + private final Object lock = new Object(); + + private void prepareCatalog() { + if (!jdkcatalogInitialized) { + synchronized (lock) { + if (!jdkcatalogInitialized) { + jdkcatalogInitialized = true; + String resolve = getLimitValueAsString(Limit.JDKCATALOG_RESOLVE); + JdkCatalog.init(resolve); + } + } + } + } + + /** + * Returns the JDKCatalogResolver with the current setting of the RESOLVE + * property. + * + * @return the JDKCatalogResolver + */ + public CatalogResolver getJDKCatalogResolver() { + String resolve = getLimitValueAsString(Limit.JDKCATALOG_RESOLVE); + return CatalogManager.catalogResolver(JdkCatalog.catalog, toActionType(resolve)); + } + + // convert the string value of the RESOLVE property to the corresponding + // action type + private NotFoundAction toActionType(String resolve) { + for (NotFoundAction type : NotFoundAction.values()) { + if (type.toString().equals(resolve)) { + return type; + } + } + return null; } /** diff --git a/src/java.xml/share/classes/jdk/xml/internal/jdkcatalog/JDKCatalog.xml b/src/java.xml/share/classes/jdk/xml/internal/jdkcatalog/JDKCatalog.xml new file mode 100644 index 0000000000000..3919dd4981d75 --- /dev/null +++ b/src/java.xml/share/classes/jdk/xml/internal/jdkcatalog/JDKCatalog.xml @@ -0,0 +1,41 @@ + + + + + + + + + diff --git a/src/java.xml/share/classes/jdk/xml/internal/jdkcatalog/java/dtd/preferences.dtd b/src/java.xml/share/classes/jdk/xml/internal/jdkcatalog/java/dtd/preferences.dtd new file mode 100644 index 0000000000000..27166e805c699 --- /dev/null +++ b/src/java.xml/share/classes/jdk/xml/internal/jdkcatalog/java/dtd/preferences.dtd @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/java.xml/share/classes/jdk/xml/internal/jdkcatalog/java/dtd/properties.dtd b/src/java.xml/share/classes/jdk/xml/internal/jdkcatalog/java/dtd/properties.dtd new file mode 100644 index 0000000000000..4a22bd53d8569 --- /dev/null +++ b/src/java.xml/share/classes/jdk/xml/internal/jdkcatalog/java/dtd/properties.dtd @@ -0,0 +1,15 @@ + + + + + + + + + + + + + diff --git a/src/java.xml/share/classes/module-info.java b/src/java.xml/share/classes/module-info.java index bb15ee81b513c..0ed2ebfbe2641 100644 --- a/src/java.xml/share/classes/module-info.java +++ b/src/java.xml/share/classes/module-info.java @@ -402,6 +402,11 @@ * @implNote * *
      + *
    • JDK built-in Catalog + * + *
    • *
    • Implementation Specific Properties * * + *

      JDK built-in Catalog

      + * The JDK has a built-in catalog that hosts the following DTDs defined by the Java Platform: + *
        + *
      • DTD for {@link java.util.prefs.Preferences java.util.prefs.Preferences}, preferences.dtd
      • + *
      • DTD for {@link java.util.Properties java.util.Properties}, properties.dtd
      • + *
      + *

      + * The catalog is loaded once when the first JAXP processor factory is created. + * + *

      External Resource Resolution Process with the built-in Catalog

      + * The JDK creates a {@link javax.xml.catalog.CatalogResolver CatalogResolver} + * with the built-in catalog when needed. This CatalogResolver is used as the + * default external resource resolver. + *

      + * XML processors may use resolvers (such as {@link org.xml.sax.EntityResolver EntityResolver}, + * {@link javax.xml.stream.XMLResolver XMLResolver}, and {@link javax.xml.catalog.CatalogResolver CatalogResolver}) + * to handle external references. In the absence of the user-defined resolvers, + * the JDK XML processors fall back to the default CatalogResolver to attempt to + * find a resolution before making a connection to fetch the resources. The fall-back + * also takes place if a user-defined resolver exists but allows the process to + * continue when unable to resolve the resource. + *

      + * If the default CatalogResolver is unable to locate a resource, it may signal + * the XML processors to continue processing, or skip the resource, or + * throw a CatalogException. The behavior is configured with the + * {@code jdk.xml.jdkcatalog.resolve} property. + * *

      Implementation Specific Properties

      * In addition to the standard JAXP Properties, * the JDK implementation supports a number of implementation specific properties @@ -752,7 +784,7 @@ * {@systemProperty jdk.xml.enableExtensionFunctions} * Determines if XSLT and XPath extension functions are to be allowed. * - * yes + * yes * Boolean * * true or false. True indicates that extension functions are allowed; False otherwise. @@ -842,6 +874,40 @@ * Method 1 * 22 * + * + * {@systemProperty jdk.xml.jdkcatalog.resolve} + * Instructs the JDK default CatalogResolver to act in accordance with the setting + * of this property when unable to resolve an external reference with the built-in Catalog. + * The options are: + *
        + *
      • + * {@code continue} -- Indicates that the processing should continue + *

      • + *
      • + * {@code ignore} -- Indicates that the reference is skipped + *

      • + *
      • + * {@code strict} -- Indicates that the resolver should throw a CatalogException + *

      • + *
      + * + * String + * + * {@code continue, ignore, and strict}. Values are case-insensitive. + * + * continue + * No + * Yes + * + * DOM
      + * SAX
      + * StAX
      + * Validation
      + * Transform + * + * Method 1 + * 22 + * * * *

      diff --git a/test/jaxp/javax/xml/jaxp/libs/jaxp/library/JAXPPolicyManager.java b/test/jaxp/javax/xml/jaxp/libs/jaxp/library/JAXPPolicyManager.java index 4d0598696f356..2940045352c85 100644 --- a/test/jaxp/javax/xml/jaxp/libs/jaxp/library/JAXPPolicyManager.java +++ b/test/jaxp/javax/xml/jaxp/libs/jaxp/library/JAXPPolicyManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2023, 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 @@ -45,6 +45,7 @@ * This is a base class that every test class must extend if it needs to be run * with security mode. */ +@SuppressWarnings("removal") public class JAXPPolicyManager { /* * Backing up policy. @@ -161,6 +162,7 @@ void removeTmpPermission(int index) { * Simple Policy class that supports the required Permissions to validate the * JAXP concrete classes. */ +@SuppressWarnings("removal") class TestPolicy extends Policy { private final static Set TEST_JARS = Set.of("jtreg.*jar", "javatest.*jar", "testng.*jar", "jcommander.*jar"); diff --git a/test/jaxp/javax/xml/jaxp/unittest/catalog/CatalogSupportBase.java b/test/jaxp/javax/xml/jaxp/unittest/catalog/CatalogSupportBase.java index 5ddacba953b8b..e22c1edf6c295 100644 --- a/test/jaxp/javax/xml/jaxp/unittest/catalog/CatalogSupportBase.java +++ b/test/jaxp/javax/xml/jaxp/unittest/catalog/CatalogSupportBase.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2023, 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 @@ -371,7 +371,9 @@ public void testValidation(boolean setUseCatalog, boolean useCatalog, String cat if (setUseCatalog) { factory.setFeature(XMLConstants.USE_CATALOG, useCatalog); } - factory.setProperty(CatalogFeatures.Feature.FILES.getPropertyName(), catalog); + if (catalog != null) { + factory.setProperty(CatalogFeatures.Feature.FILES.getPropertyName(), catalog); + } Schema schema = factory.newSchema(new StreamSource(new StringReader(xsd))); success("XMLSchema.dtd and datatypes.dtd are resolved."); @@ -472,7 +474,9 @@ SAXParser getSAXParser(boolean setUseCatalog, boolean useCatalog, String catalog } SAXParser parser = spf.newSAXParser(); - parser.setProperty(CatalogFeatures.Feature.FILES.getPropertyName(), catalog); + if (catalog != null) { + parser.setProperty(CatalogFeatures.Feature.FILES.getPropertyName(), catalog); + } return parser; } @@ -495,7 +499,9 @@ XMLReader getXMLReader(boolean setUseCatalog, boolean useCatalog, String catalog if (setUseCatalog) { reader.setFeature(XMLConstants.USE_CATALOG, useCatalog); } - reader.setProperty(CatalogFeatures.Feature.FILES.getPropertyName(), catalog); + if (catalog != null) { + reader.setProperty(CatalogFeatures.Feature.FILES.getPropertyName(), catalog); + } return reader; } @@ -566,7 +572,9 @@ StAXSource getStaxSource(String xmlFile, String xmlFileId, boolean setUseCatalog if (setUseCatalog) { xif.setProperty(XMLConstants.USE_CATALOG, useCatalog); } - xif.setProperty(CatalogFeatures.Feature.FILES.getPropertyName(), catalog); + if (catalog != null) { + xif.setProperty(CatalogFeatures.Feature.FILES.getPropertyName(), catalog); + } ss = new StAXSource(xif.createXMLEventReader( xmlFileId, new FileInputStream(xmlFile))); } catch (Exception e) {} @@ -1013,6 +1021,7 @@ public Source resolve(String href, String base) throws TransformerException { * Simple policy implementation that grants a set of permissions to all code * sources and protection domains. */ + @SuppressWarnings("removal") static class SimplePolicy extends Policy { private final Permissions perms; diff --git a/test/jaxp/javax/xml/jaxp/unittest/common/catalog/CatalogTestBase.java b/test/jaxp/javax/xml/jaxp/unittest/common/catalog/CatalogTestBase.java new file mode 100644 index 0000000000000..17141fb474e4c --- /dev/null +++ b/test/jaxp/javax/xml/jaxp/unittest/common/catalog/CatalogTestBase.java @@ -0,0 +1,361 @@ +/* + * Copyright (c) 2023, 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. + */ +package common.catalog; + +import common.util.TestBase; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.SAXParser; +import javax.xml.stream.XMLInputFactory; +import javax.xml.transform.TransformerFactory; +import javax.xml.validation.SchemaFactory; +//import org.testng.annotations.DataProvider; + +/** + * Tests the JDK Catalog + */ +public class CatalogTestBase extends TestBase { + /* + * DataProvider for testing configuring properties for parsers. + * + * Fields: + * file, FSP, state of setting, config file, system property, api property, + * Custom Catalog, error expected, error code or expected result + */ + //@DataProvider(name = "configWCatalogForParsers") + public Object[][] getConfigs(Processor processor) { + // file with an external DTD that's not in JdkCatalog + String fileDTDNotInC = "properties1.xml"; + // file with an external DTD that's in the Custom Catalog + String fileDTDInCC = "test.xml"; + // file with an external DTD that's in JdkCatalog + String javaDTD = "properties.xml"; + // file with an external DTD thats in the Custom Catalog + String w3cDTD = "xhtml11.xml"; + + // error code when CATALOG=strict; The cause for DOM + String errCode = "JAXP09040001"; + + // error (not from catalog) is expect when CATALOG=continue + boolean isErrExpected = true; + String expected1 = "invalid.site.com"; + + // expected when reference is resolved by Catalog + String expected3 = "", expected4 = ""; + switch (processor) { + case SAX: + errCode = "JAXP00090001"; + break; + case STAX: + errCode = "JAXP00090001"; + //errCode = "JAXP00090001"; + // StAX is non-validating parser + isErrExpected = false; + expected1 = ".*[\\w\\s]*(value1)[\\w\\s]*.*"; + expected3 = "Minimal XHTML 1.1 DocumentThis is a minimal XHTML 1.1 document."; + expected4 = ".*(123)[\\w\\s]*.*"; + break; + default: + break; + } + + return new Object[][]{ + // Case 1: external reference not in the JDKCatalog + /** + * Case 1-1: default setting; no Config file; Catalog: continue (by default) + * Expect: error as the parser continues and tries to access an invalid site + * java.net.UnknownHostException: invalid.site.com + */ + {fileDTDNotInC, null, null, null, null, null, null, isErrExpected, expected1}, + + /** + * Case 1-2: set JDK Catalog to strict in a Config file + * Expect: Exception since the external reference is not in the Catalog + * Error Msg: + * [Fatal Error] properties1.xml:2:75: JAXP00090001: The CatalogResolver is enabled with the catalog "JdkCatalog.xml", but a CatalogException is returned. + * org.xml.sax.SAXException: javax.xml.catalog.CatalogException: JAXP09040001: No match found for publicId 'null' and systemId 'http://invalid.site.com/dtd/properties1.dtd'. + * javax.xml.catalog.CatalogException: JAXP09040001: No match found for publicId 'null' and systemId 'http://invalid.site.com/dtd/properties1.dtd'. + */ + {fileDTDNotInC, null, PropertyState.CONFIG_FILE, Properties.CONFIG_FILE_CATALOG_STRICT, null, null, null, true, errCode}, + + /** + * Case 1-3: set CATALOG back to continue through the System Property + * Expect: error as the parser continues and tries to access an invalid site + * java.net.UnknownHostException: invalid.site.com + */ + {fileDTDNotInC, null, PropertyState.CONFIG_FILE_SYSTEM, Properties.CONFIG_FILE_CATALOG_STRICT, new Properties[]{Properties.CATALOG0}, null, null, isErrExpected, expected1}, + + /** + * Case 1-4: override the settings in Case 3 with the API property, and set Catalog to strict + * Expect: Exception since the external reference is not in the Catalog + */ + {fileDTDNotInC, null, PropertyState.CONFIG_FILE_SYSTEM_API, Properties.CONFIG_FILE_CATALOG_STRICT, new Properties[]{Properties.CATALOG0}, new Properties[]{Properties.CATALOG2}, null, true, errCode}, + + // Case 2: external reference in the JDKCatalog + /** + * Case 2-1: set CATALOG to strict in a Config file + * Compare to: case 1-2 + * Expect: pass without error + */ + {javaDTD, null, PropertyState.CONFIG_FILE, Properties.CONFIG_FILE_CATALOG_STRICT, null, null, null, false, expected1}, + + /** + * Case 2-2: override the settings in Case 3 with the API property, and set Catalog to strict + * Compare to: case 1-4 + * Expect: pass without error + */ + {javaDTD, null, PropertyState.CONFIG_FILE_SYSTEM_API, Properties.CONFIG_FILE_CATALOG_STRICT, new Properties[]{Properties.CATALOG0}, new Properties[]{Properties.CATALOG2}, null, false, expected1}, + + // Case 3: external reference in the Custom Catalog + /** + * Case 3-1: set CATALOG to strict in a Config file + * Compare to: case 1-2, would have resulted in an error without the + * custom catalog + * Expect: pass without error because the external reference is in + * the custom catalog + */ + {fileDTDInCC, null, PropertyState.CONFIG_FILE, Properties.CONFIG_FILE_CATALOG_STRICT, null, null, CustomCatalog.STRICT, false, expected4}, + + /** + * Case 3-2: override the settings in Case 3 with the API property, and set Catalog to strict + * Compare to: case 1-4, would have resulted in an error without the + * custom catalog + * Expect: pass without error + */ + {fileDTDInCC, null, PropertyState.CONFIG_FILE_SYSTEM_API, Properties.CONFIG_FILE_CATALOG_STRICT, new Properties[]{Properties.CATALOG0}, new Properties[]{Properties.CATALOG2}, CustomCatalog.STRICT, false, expected4}, + + // Case 4: Parameter Entity reference + /** + * Case 4-1: set CATALOG to strict in a Config file + * Compare to: case 1-2, would have resulted in an error since the external + * reference can not be found + * Expect: pass without error because the external reference is in + * the custom catalog + */ + {"testExternalParameter.xml", null, PropertyState.CONFIG_FILE, Properties.CONFIG_FILE_CATALOG_STRICT, null, null, CustomCatalog.STRICT, false, expected1}, + + // Case 5: resolve xInclude with the Custom Catalog + /** + * Case 5-1: set CATALOG to strict in a Config file + * Compare to: case 1-2, would have resulted in an error without the + * custom catalog + * Expect: pass without error because the external reference is in + * the custom catalog + */ + {"XI_roottest.xml", null, PropertyState.CONFIG_FILE, Properties.CONFIG_FILE_CATALOG_STRICT, null, null, CustomCatalog.STRICT, false, ""}, + + }; + } + + /* + * DataProvider for testing configuring properties for validation or transform. + * + * Fields: + * xml file, xsd or xsl file, FSP, state of setting, config file, system property, + * api property, Custom Catalog, error expected, error code or expected result + */ + //@DataProvider(name = "validationOrTransform") + public Object[][] getConfig(String m) { + // Schema Import + String xmlFile = "XSDImport_company.xsd"; + String xsdOrXsl = null; + String expected = ""; + String errCode = "JAXP00090001"; + + switch (m) { + case "SchemaTest2": + // Schema Include + xmlFile = "XSDInclude_company.xsd"; + break; + case "Validation": + // Schema Location + xmlFile = "val_test.xml"; + break; + case "Stylesheet": + errCode = "JAXP09040001"; + xmlFile = "XSLDTD.xsl"; + break; + case "Transform": + xmlFile = "XSLPI.xml"; + errCode = "JAXP09040001"; + xsdOrXsl = "" + + "" + + "" + + "" + +"]>" + + "" + + "" + + " "; + break; + default: + break; + } + + return new Object[][]{ + // Case 1: external reference not in the JDKCatalog + /** + * Case 1-1: default setting; no Config file; Catalog: continue + * Expect: pass without error + */ + {xmlFile, xsdOrXsl, null, null, null, null, null, null, false, expected}, + + /** + * Case 1-2: set CATALOG to strict in a Config file + * Expect: Exception since the external reference is not in the Catalog + * Sample Error Msg: + * org.xml.sax.SAXParseException; systemId: file:path/XSDImport_company.xsd; + * lineNumber: 10; columnNumber: 11; + * JAXP00090001: The CatalogResolver is enabled with the catalog "JdkCatalog.xml", + * but a CatalogException is returned. + */ + {xmlFile, xsdOrXsl, null, PropertyState.CONFIG_FILE, Properties.CONFIG_FILE_CATALOG_STRICT, null, null, null, true, errCode}, + + /** + * Case 1-3: set CATALOG back to continue through the System Property + * Expect: pass without error + */ + {xmlFile, xsdOrXsl, null, PropertyState.CONFIG_FILE_SYSTEM, Properties.CONFIG_FILE_CATALOG_STRICT, new Properties[]{Properties.CATALOG0}, null, null, false, expected}, + + /** + * Case 1-4: override the settings in Case 3 with the API property, and set Catalog to strict + * Expect: Exception since the external reference is not in the Catalog + */ + {xmlFile, xsdOrXsl, null, PropertyState.CONFIG_FILE_SYSTEM_API, Properties.CONFIG_FILE_CATALOG_STRICT, new Properties[]{Properties.CATALOG0}, new Properties[]{Properties.CATALOG2}, null, true, errCode}, + + /** + * Case 1-5: use Custom Catalog to resolve external references + * Expect: pass without error + */ + {xmlFile, xsdOrXsl, null, PropertyState.CONFIG_FILE_SYSTEM_API, Properties.CONFIG_FILE_CATALOG_STRICT, new Properties[]{Properties.CATALOG0}, new Properties[]{Properties.CATALOG2}, CustomCatalog.STRICT, false, expected}, + + }; + } + +// @Test(dataProvider = "configWCatalogForParsers", priority=0) + public void testDOM(String filename, Properties fsp, PropertyState state, + Properties config, Properties[] sysProp, Properties[] apiProp, CustomCatalog cc, + boolean expectError, String error) throws Exception { + + DocumentBuilderFactory dbf = getDBF(fsp, state, config, sysProp, apiProp, cc); + process(filename, dbf, expectError, error); + } + +// @Test(dataProvider = "configWCatalogForParsers") + public void testSAX(String filename, Properties fsp, PropertyState state, + Properties config, Properties[] sysProp, Properties[] apiProp, CustomCatalog cc, + boolean expectError, String error) throws Exception { + + SAXParser parser = getSAXParser(fsp, state, config, sysProp, apiProp, cc); + process(filename, parser, expectError, error); + } + +// @Test(dataProvider = "configWCatalogForParsers") + public void testStAX(String filename, Properties fsp, PropertyState state, + Properties config, Properties[] sysProp, Properties[] apiProp, CustomCatalog cc, + boolean expectError, String error) throws Exception { + + XMLInputFactory xif = getXMLInputFactory(state, config, sysProp, apiProp, cc); + process(filename, xif, expectError, error); + } + +// @Test(dataProvider = "validationOrTransform") + public void testSchema1(String filename, String xsd, Properties fsp, PropertyState state, + Properties config, Properties[] sysProp, Properties[] apiProp, CustomCatalog cc, + boolean expectError, String error) throws Exception { + + SchemaFactory sf = getSchemaFactory(fsp, state, config, sysProp, apiProp, cc); + process(filename, sf, expectError, error); + } + +// @Test(dataProvider = "validationOrTransform") + public void testSchema2(String filename, String xsd, Properties fsp, PropertyState state, + Properties config, Properties[] sysProp, Properties[] apiProp, CustomCatalog cc, + boolean expectError, String error) throws Exception { + testSchema1(filename, xsd, fsp, state, config, sysProp, apiProp, cc, expectError, error); + } + +// @Test(dataProvider = "validationOrTransform") + public void testValidation(String filename, String xsd, Properties fsp, PropertyState state, + Properties config, Properties[] sysProp, Properties[] apiProp, CustomCatalog cc, + boolean expectError, String error) throws Exception { + + SchemaFactory sf = getSchemaFactory(fsp, state, config, sysProp, apiProp, cc); + validate(filename, sf, expectError, error); + } + +// @Test(dataProvider = "validationOrTransform") + public void testStylesheet(String filename, String xsl, Properties fsp, PropertyState state, + Properties config, Properties[] sysProp, Properties[] apiProp, CustomCatalog cc, + boolean expectError, String error) throws Exception { + + TransformerFactory tf = getTransformerFactory(fsp, state, config, sysProp, apiProp, cc); + process(filename, tf, expectError, error); + } + +// @Test(dataProvider = "validationOrTransform") + public void testTransform(String filename, String xsl, Properties fsp, PropertyState state, + Properties config, Properties[] sysProp, Properties[] apiProp, CustomCatalog cc, + boolean expectError, String error) throws Exception { + + TransformerFactory tf = getTransformerFactory(fsp, state, config, sysProp, apiProp, cc); + transform(filename, xsl, tf, expectError, error); + } + + // parameters in the same order as the test method + String filename; String xsd; String xsl; Properties fsp; PropertyState state; + Properties config; Properties[] sysProp; Properties[] apiProp; CustomCatalog cc; + boolean expectError; String error; + + // Maps the DataProvider array to individual parameters + public void paramMap(Processor processor, String method, String index) { + int i = 0; + Object[][] params; + if (processor == Processor.VALIDATOR || + processor == Processor.TRANSFORMER) { + params = getConfig(method); + i = 1; + } else { + params = getConfigs(processor); + } + Object[] param = params[Integer.parseInt(index)]; + filename = (String)param[0]; + if (processor == Processor.VALIDATOR) { + xsd = (String)param[i]; + } else if (processor == Processor.TRANSFORMER) { + xsl = (String)param[i]; + } + fsp = (Properties)param[i + 1]; + state = (PropertyState)param[i + 2]; + config = (Properties)param[i + 3]; + sysProp = (Properties[])param[i + 4]; + apiProp = (Properties[])param[i + 5]; + cc = (CustomCatalog)param[i + 6]; + expectError = (boolean)param[i + 7]; + error = (String)param[i + 8]; + } +} diff --git a/test/jaxp/javax/xml/jaxp/unittest/common/catalog/DOMTest.java b/test/jaxp/javax/xml/jaxp/unittest/common/catalog/DOMTest.java new file mode 100644 index 0000000000000..b5eeed4829014 --- /dev/null +++ b/test/jaxp/javax/xml/jaxp/unittest/common/catalog/DOMTest.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2023, 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. + */ +package common.catalog; + +/** + * @test @bug 8306055 + * @library /javax/xml/jaxp/libs /javax/xml/jaxp/unittest + * @modules java.xml/jdk.xml.internal + * @run driver common.catalog.DOMTest 0 // verifies default setting catalog.resolve=allow + * @run driver common.catalog.DOMTest 1 // verifies overriding with catalog.resolve=strict in a config file + * @run driver common.catalog.DOMTest 2 // verifies overriding with system property + * @run driver common.catalog.DOMTest 3 // verifies overriding with factory setting (catalog.resolve=strict) + * @run driver common.catalog.DOMTest 4 // verifies external DTD resolution with the JDK Catalog while resolve=strict in config file + * @run driver common.catalog.DOMTest 5 // verifies external DTD resolution with the JDK Catalog while resolve=strict in API setting + * @run driver common.catalog.DOMTest 6 // verifies external DTD resolution with a custom Catalog while resolve=strict in config file + * @run driver common.catalog.DOMTest 7 // verifies external DTD resolution with a custom Catalog while resolve=strict in API setting + * @run driver common.catalog.DOMTest 8 // verifies external parameter are resolved with a custom Catalog though resolve=strict in API setting + * @run driver common.catalog.DOMTest 9 // verifies XInclude are resolved with a custom Catalog though resolve=strict in API setting + * @summary verifies DOM's support of the JDK Catalog. + */ +public class DOMTest extends CatalogTestBase { + public static void main(String args[]) throws Exception { + new DOMTest().run(args[0]); + } + + public void run(String index) throws Exception { + paramMap(Processor.DOM, null, index); + super.testDOM(filename, fsp, state, config, sysProp, apiProp, cc, expectError, error); + + } +} diff --git a/test/jaxp/javax/xml/jaxp/unittest/common/catalog/SAXTest.java b/test/jaxp/javax/xml/jaxp/unittest/common/catalog/SAXTest.java new file mode 100644 index 0000000000000..109568de28766 --- /dev/null +++ b/test/jaxp/javax/xml/jaxp/unittest/common/catalog/SAXTest.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2023, 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. + */ +package common.catalog; + +/** + * @test @bug 8306055 + * @library /javax/xml/jaxp/libs /javax/xml/jaxp/unittest + * @modules java.xml/jdk.xml.internal + * @run driver common.catalog.SAXTest 0 // verifies default setting catalog.resolve=allow + * @run driver common.catalog.SAXTest 1 // verifies overriding with catalog.resolve=strict in a config file + * @run driver common.catalog.SAXTest 2 // verifies overriding with system property + * @run driver common.catalog.SAXTest 3 // verifies overriding with factory setting (catalog.resolve=strict) + * @run driver common.catalog.SAXTest 4 // verifies external DTD resolution with the JDK Catalog while resolve=strict in config file + * @run driver common.catalog.SAXTest 5 // verifies external DTD resolution with the JDK Catalog while resolve=strict in API setting + * @run driver common.catalog.SAXTest 6 // verifies external DTD resolution with a custom Catalog while resolve=strict in config file + * @run driver common.catalog.SAXTest 7 // verifies external DTD resolution with a custom Catalog while resolve=strict in API setting + * @run driver common.catalog.SAXTest 8 // verifies external parameter are resolved with a custom Catalog though resolve=strict in API setting + * @run driver common.catalog.SAXTest 9 // verifies XInclude are resolved with a custom Catalog though resolve=strict in API setting + * @summary verifies DOM's support of the JDK Catalog. + + */ +public class SAXTest extends CatalogTestBase { + public static void main(String args[]) throws Exception { + new SAXTest().run(args[0]); + } + + public void run(String index) throws Exception { + paramMap(Processor.SAX, null, index); + super.testSAX(filename, fsp, state, config, sysProp, apiProp, cc, expectError, error); + } +} diff --git a/test/jaxp/javax/xml/jaxp/unittest/common/catalog/SchemaTest.java b/test/jaxp/javax/xml/jaxp/unittest/common/catalog/SchemaTest.java new file mode 100644 index 0000000000000..698a5882d615a --- /dev/null +++ b/test/jaxp/javax/xml/jaxp/unittest/common/catalog/SchemaTest.java @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2023, 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. + */ +package common.catalog; + +/** + * @test @bug 8306632 + * @library /javax/xml/jaxp/libs /javax/xml/jaxp/unittest + * @modules java.xml/jdk.xml.internal + * @run driver common.catalog.SchemaTest SchemaTest1 0 // verifies default setting dtd.support=allow + * @run driver common.catalog.SchemaTest SchemaTest1 1 // verifies overriding with config file + * @run driver common.catalog.SchemaTest SchemaTest1 2 // verifies overriding with system property + * @run driver common.catalog.SchemaTest SchemaTest1 3 // verifies overriding with factory setting (DTD=deny) + * @run driver common.catalog.SchemaTest SchemaTest1 4 // verifies DTD=ignore + * @run driver common.catalog.SchemaTest SchemaTest2 0 // verifies default setting dtd.support=allow + * @run driver common.catalog.SchemaTest SchemaTest2 1 // verifies overriding with config file + * @run driver common.catalog.SchemaTest SchemaTest2 2 // verifies overriding with system property + * @run driver common.catalog.SchemaTest SchemaTest2 3 // verifies overriding with factory setting (DTD=deny) + * @run driver common.catalog.SchemaTest SchemaTest2 4 // verifies DTD=ignore + * @run driver common.catalog.SchemaTest Validation 0 // verifies default setting dtd.support=allow + * @run driver common.catalog.SchemaTest Validation 1 // verifies overriding with config file + * @run driver common.catalog.SchemaTest Validation 2 // verifies overriding with system property + * @run driver common.catalog.SchemaTest Validation 3 // verifies overriding with factory setting (DTD=deny) + * @run driver common.catalog.SchemaTest Validation 4 // verifies DTD=ignore + * @summary verifies Schema and Validation's support of the property jdk.xml.dtd.support. + */ +public class SchemaTest extends CatalogTestBase { + + public static void main(String args[]) throws Exception { + new SchemaTest().run(args[0], args[1]); + } + + public void run(String method, String index) throws Exception { + paramMap(Processor.VALIDATOR, method, index); + switch (method) { + case "SchemaTest1": + super.testSchema1(filename, xsd, fsp, state, config, sysProp, apiProp, cc, expectError, error); + break; + case "SchemaTest2": + super.testSchema2(filename, xsd, fsp, state, config, sysProp, apiProp, cc, expectError, error); + break; + case "Validation": + super.testValidation(filename, xsd, fsp, state, config, sysProp, apiProp, cc, expectError, error); + break; + } + } +} diff --git a/test/jaxp/javax/xml/jaxp/unittest/common/catalog/StAXTest.java b/test/jaxp/javax/xml/jaxp/unittest/common/catalog/StAXTest.java new file mode 100644 index 0000000000000..d5a530bac2505 --- /dev/null +++ b/test/jaxp/javax/xml/jaxp/unittest/common/catalog/StAXTest.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2023, 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. + */ +package common.catalog; + +/** + * @test @bug 8306055 + * @library /javax/xml/jaxp/libs /javax/xml/jaxp/unittest + * @modules java.xml/jdk.xml.internal + * @run driver common.catalog.StAXTest 0 // verifies default setting catalog.resolve=allow + * @run driver common.catalog.StAXTest 1 // verifies overriding with catalog.resolve=strict in a config file + * @run driver common.catalog.StAXTest 2 // verifies overriding with system property + * @run driver common.catalog.StAXTest 3 // verifies overriding with factory setting (catalog.resolve=strict) + * @run driver common.catalog.StAXTest 4 // verifies external DTD resolution with the JDK Catalog while resolve=strict in config file + * @run driver common.catalog.StAXTest 5 // verifies external DTD resolution with the JDK Catalog while resolve=strict in API setting + * @run driver common.catalog.StAXTest 6 // verifies external DTD resolution with a custom Catalog while resolve=strict in config file + * @run driver common.catalog.StAXTest 7 // verifies external DTD resolution with a custom Catalog while resolve=strict in API setting + * @run driver common.catalog.StAXTest 8 // verifies external parameter are resolved with a custom Catalog though resolve=strict in API setting + * @run driver common.catalog.StAXTest 9 // verifies XInclude are resolved with a custom Catalog though resolve=strict in API setting + * @summary verifies DOM's support of the JDK Catalog. + */ +public class StAXTest extends CatalogTestBase { + public static void main(String args[]) throws Exception { + new StAXTest().run(args[0]); + } + + public void run(String index) throws Exception { + paramMap(Processor.STAX, null, index); + super.testStAX(filename, fsp, state, config, sysProp, apiProp, cc, expectError, error); + + } +} diff --git a/test/jaxp/javax/xml/jaxp/unittest/common/catalog/TransformTest.java b/test/jaxp/javax/xml/jaxp/unittest/common/catalog/TransformTest.java new file mode 100644 index 0000000000000..ff88a0054482b --- /dev/null +++ b/test/jaxp/javax/xml/jaxp/unittest/common/catalog/TransformTest.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2023, 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. + */ +package common.catalog; + +/** + * @test @bug 8306632 + * @library /javax/xml/jaxp/libs /javax/xml/jaxp/unittest + * @modules java.xml/jdk.xml.internal + * @run driver common.catalog.TransformTest Stylesheet 0 // verifies default setting dtd.support=allow + * @run driver common.catalog.TransformTest Stylesheet 1 // verifies overriding with config file + * @run driver common.catalog.TransformTest Stylesheet 2 // verifies overriding with system property + * @run driver common.catalog.TransformTest Stylesheet 3 // verifies overriding with factory setting (DTD=deny) + * @run driver common.catalog.TransformTest Stylesheet 4 // verifies DTD=ignore + * @run driver common.catalog.TransformTest Transform 0 // verifies default setting dtd.support=allow + * @run driver common.catalog.TransformTest Transform 1 // verifies overriding with config file + * @run driver common.catalog.TransformTest Transform 2 // verifies overriding with system property + * @run driver common.catalog.TransformTest Transform 3 // verifies overriding with factory setting (DTD=deny) + * @run driver common.catalog.TransformTest Transform 4 // verifies DTD=ignore + * @summary verifies Transform's support of the property jdk.xml.dtd.support. + */ +public class TransformTest extends CatalogTestBase { + + public static void main(String args[]) throws Exception { + new TransformTest().run(args[0], args[1]); + } + + public void run(String method, String index) throws Exception { + paramMap(Processor.TRANSFORMER, method, index); + switch (method) { + case "Stylesheet": + super.testStylesheet(filename, xsl, fsp, state, config, sysProp, apiProp, cc, expectError, error); + break; + case "Transform": + super.testTransform(filename, xsl, fsp, state, config, sysProp, apiProp, cc, expectError, error); + break; + } + } +} diff --git a/test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/TestCatalog.xml b/test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/TestCatalog.xml new file mode 100644 index 0000000000000..216b3b81543cc --- /dev/null +++ b/test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/TestCatalog.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/dtds/XSLDTD.dtd b/test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/dtds/XSLDTD.dtd new file mode 100644 index 0000000000000..4317283e3d10b --- /dev/null +++ b/test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/dtds/XSLDTD.dtd @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/dtds/paramEntity.dtd b/test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/dtds/paramEntity.dtd new file mode 100644 index 0000000000000..61768c96412e5 --- /dev/null +++ b/test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/dtds/paramEntity.dtd @@ -0,0 +1,2 @@ + + diff --git a/test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/dtds/test.dtd b/test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/dtds/test.dtd new file mode 100644 index 0000000000000..eb32c89a739e7 --- /dev/null +++ b/test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/dtds/test.dtd @@ -0,0 +1,6 @@ + + + + + + diff --git a/test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/xinclude/XI_red.dtd b/test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/xinclude/XI_red.dtd new file mode 100644 index 0000000000000..147fe93bde0ee --- /dev/null +++ b/test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/xinclude/XI_red.dtd @@ -0,0 +1,4 @@ + diff --git a/test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/xinclude/XI_simple.xml b/test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/xinclude/XI_simple.xml new file mode 100644 index 0000000000000..da7b962b62c6f --- /dev/null +++ b/test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/xinclude/XI_simple.xml @@ -0,0 +1,18 @@ + + + + + + + + text + + + + + + + + + + diff --git a/test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/xinclude/XI_test2.xml b/test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/xinclude/XI_test2.xml new file mode 100644 index 0000000000000..96c173a833ff2 --- /dev/null +++ b/test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/xinclude/XI_test2.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/xinclude/XI_utf8.xml b/test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/xinclude/XI_utf8.xml new file mode 100644 index 0000000000000..8b591c92888ad --- /dev/null +++ b/test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/xinclude/XI_utf8.xml @@ -0,0 +1,4 @@ + + value1 trjsagdkasgdhasdgashgdhsadgashdg + + diff --git a/test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/xsds/XSDImport_person.xsd b/test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/xsds/XSDImport_person.xsd new file mode 100644 index 0000000000000..ac5d718f5d31d --- /dev/null +++ b/test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/xsds/XSDImport_person.xsd @@ -0,0 +1,12 @@ + + + + + + + + + \ No newline at end of file diff --git a/test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/xsds/XSDImport_product.xsd b/test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/xsds/XSDImport_product.xsd new file mode 100644 index 0000000000000..73385552b4208 --- /dev/null +++ b/test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/xsds/XSDImport_product.xsd @@ -0,0 +1,11 @@ + + + + + + + + \ No newline at end of file diff --git a/test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/xsds/XSDInclude_person.xsd b/test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/xsds/XSDInclude_person.xsd new file mode 100644 index 0000000000000..f4a5586bf7766 --- /dev/null +++ b/test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/xsds/XSDInclude_person.xsd @@ -0,0 +1,12 @@ + + + + + + + + + \ No newline at end of file diff --git a/test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/xsds/XSDInclude_product.xsd b/test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/xsds/XSDInclude_product.xsd new file mode 100644 index 0000000000000..0c4ee7a2b9282 --- /dev/null +++ b/test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/xsds/XSDInclude_product.xsd @@ -0,0 +1,11 @@ + + + + + + + + \ No newline at end of file diff --git a/test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/xsds/val_test.xsd b/test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/xsds/val_test.xsd new file mode 100644 index 0000000000000..562eb6b2291f1 --- /dev/null +++ b/test/jaxp/javax/xml/jaxp/unittest/common/catalog/testcatalog/xsds/val_test.xsd @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/jaxp/javax/xml/jaxp/unittest/common/config/files/catalog2.properties b/test/jaxp/javax/xml/jaxp/unittest/common/config/files/catalog2.properties new file mode 100644 index 0000000000000..16cf13c1a9603 --- /dev/null +++ b/test/jaxp/javax/xml/jaxp/unittest/common/config/files/catalog2.properties @@ -0,0 +1,36 @@ +################################################################################ +# XML Library (java.xml) Configuration File +# +# This file is in java.util.Properties format and typically located in the conf +# directory of the Java installation. It may contain key/value pairs for specifying +# the implementation class of a factory and/or properties that have corresponding +# system properties. +# +# This file can be replaced by specifying a filename with the java.xml.config.file +# system property. For example java -Djava.xml.config.file=myfile +################################################################################ + +# ---- Config File: for testing the CATALOG property ---- +# +# strict: report error if not resolved by the JDK Catalog +jdk.xml.jdkCatalog.resolve=strict +# Enable Extension Functions +jdk.xml.enableExtensionFunctions=true +# Disallow overriding the default parser +jdk.xml.overrideDefaultParser=false +# +# Implementation specific limits: +# +jdk.xml.entityExpansionLimit=64000 +jdk.xml.elementAttributeLimit=10000 +jdk.xml.maxOccurLimit=5000 +jdk.xml.totalEntitySizeLimit=100000 +jdk.xml.maxGeneralEntitySizeLimit=0 +jdk.xml.maxParameterEntitySizeLimit=1000000 +jdk.xml.entityReplacementLimit=300000 +jdk.xml.maxElementDepth=0 +jdk.xml.maxXMLNameLimit=1000 +jdk.xml.xpathExprGrpLimit=10 +jdk.xml.xpathExprOpLimit=100 +jdk.xml.xpathTotalOpLimit=10000 + diff --git a/test/jaxp/javax/xml/jaxp/unittest/common/config/files/jaxp.properties b/test/jaxp/javax/xml/jaxp/unittest/common/config/files/jaxp.properties index b43b5a3e8d178..7f1a48e7c1cfd 100644 --- a/test/jaxp/javax/xml/jaxp/unittest/common/config/files/jaxp.properties +++ b/test/jaxp/javax/xml/jaxp/unittest/common/config/files/jaxp.properties @@ -128,6 +128,11 @@ jdk.xml.overrideDefaultParser=false # # javax.xml.useCatalog=true # +# Implementation Specific Properties - DTD +# +# This property instructs the parsers to: deny, ignore or allow DTD processing. +# The following setting would cause the parser to reject DTD by throwing an exception. +# jdk.xml.dtd.support=deny # # Implementation Specific Properties - Limits # diff --git a/test/jaxp/javax/xml/jaxp/unittest/common/dtd/DTDTestBase.java b/test/jaxp/javax/xml/jaxp/unittest/common/dtd/DTDTestBase.java index f5985bd3615a9..b37b7da4e9a26 100644 --- a/test/jaxp/javax/xml/jaxp/unittest/common/dtd/DTDTestBase.java +++ b/test/jaxp/javax/xml/jaxp/unittest/common/dtd/DTDTestBase.java @@ -17,15 +17,6 @@ * The DTD property controls how DTDs are processed. */ public class DTDTestBase extends TestBase { - static final String SRC_DIR; - static { - String srcDir = System.getProperty("test.src", "."); - if (IS_WINDOWS) { - srcDir = srcDir.replace('\\', '/'); - } - SRC_DIR = srcDir; - TEST_SOURCE_DIR = srcDir + "/../xmlfiles/"; - } public void testDOM(String filename, Properties fsp, PropertyState state, Properties config, Properties[] sysProp, Properties[] apiProp, diff --git a/test/jaxp/javax/xml/jaxp/unittest/common/util/TestBase.java b/test/jaxp/javax/xml/jaxp/unittest/common/util/TestBase.java index de0316aa79fd2..fa7d32fe4e4e6 100644 --- a/test/jaxp/javax/xml/jaxp/unittest/common/util/TestBase.java +++ b/test/jaxp/javax/xml/jaxp/unittest/common/util/TestBase.java @@ -67,13 +67,31 @@ public class TestBase { ORACLE_JAXP_PROPERTY_PREFIX + "getEntityCountInfo"; public static final String CATALOG_FILE = CatalogFeatures.Feature.FILES.getPropertyName(); public static final boolean IS_WINDOWS = System.getProperty("os.name").contains("Windows"); - public static String SRC_DIR = System.getProperty("test.src", "."); - public static String TEST_SOURCE_DIR; + public static String SRC_DIR; + public static String TEST_SOURCE_DIR, CONFIG_FILE_PATH, CATALOG_PATH; + static { + String srcDir = System.getProperty("test.src", "."); + if (IS_WINDOWS) { + srcDir = srcDir.replace('\\', '/'); + } + SRC_DIR = srcDir; + if (IS_WINDOWS) { + CATALOG_PATH = "file:///" + SRC_DIR + "/../catalog/testcatalog/TestCatalog.xml"; + } else { + CATALOG_PATH = "file://" + SRC_DIR + "/../catalog/testcatalog/TestCatalog.xml"; + } + TEST_SOURCE_DIR = srcDir + "/../xmlfiles/"; + CONFIG_FILE_PATH = SRC_DIR + "/../config/files/"; + } // configuration file system property private static final String CONFIG_FILE = "java.xml.config.file"; + // CATALOG Abbreviation: C + static final String C_FILE = CatalogFeatures.Feature.FILES.getPropertyName(); + static final String C_RESOLVE = CatalogFeatures.Feature.RESOLVE.getPropertyName(); + // Xerces Property public static final String DISALLOW_DTD = "http://apache.org/xml/features/disallow-doctype-decl"; public static final String LOAD_EXTERNAL_DTD = "http://apache.org/xml/features/nonvalidating/load-external-dtd"; @@ -84,6 +102,7 @@ public class TestBase { // Impl Specific Properties public static final String SP_DTD = "jdk.xml.dtd.support"; + public static final String SP_CATALOG = "jdk.xml.jdkCatalog.resolve"; public static final String OVERRIDE_PARSER = "jdk.xml.overrideDefaultParser"; // DTD/CATALOG constants @@ -97,7 +116,10 @@ public class TestBase { // JAXP Configuration File(JCF) location // DTD = deny - public static final String JCF_DTD2 = "../config/files/dtd2.properties"; + public static final String JCF_DTD2 = "dtd2.properties"; + + // CATALOG=strict + public static final String CONFIG_CATALOG_STRICT = "catalog2.properties"; String xmlExternalEntity, xmlExternalEntityId; @@ -107,7 +129,9 @@ public static enum Processor { DOM, SAX, STAX, VALIDATOR, TRANSFORMER }; static enum SourceType { STREAM, SAX, STAX, DOM }; public static enum Properties { - CONFIG_FILE_DTD2(null, CONFIG_FILE, Type.FEATURE, getPath(JCF_DTD2)), + // config file: CATALOG = strict + CONFIG_FILE_CATALOG_STRICT(null, CONFIG_FILE, Type.FEATURE, getPath(CONFIG_FILE_PATH, CONFIG_CATALOG_STRICT)), + CONFIG_FILE_DTD2(null, CONFIG_FILE, Type.FEATURE, getPath(CONFIG_FILE_PATH, JCF_DTD2)), FSP(XMLConstants.FEATURE_SECURE_PROCESSING, null, Type.FEATURE, "true"), FSP_FALSE(XMLConstants.FEATURE_SECURE_PROCESSING, null, Type.FEATURE, "false"), @@ -115,6 +139,9 @@ public static enum Properties { DTD0(SP_DTD, "ditto", Type.PROPERTY, DTD_ALLOW), DTD1(SP_DTD, "ditto", Type.PROPERTY, DTD_IGNORE), DTD2(SP_DTD, "ditto", Type.PROPERTY, DTD_DENY), + CATALOG0(SP_CATALOG, "ditto", Type.PROPERTY, RESOLVE_CONTINUE), + CATALOG1(SP_CATALOG, "ditto", Type.PROPERTY, RESOLVE_IGNORE), + CATALOG2(SP_CATALOG, "ditto", Type.PROPERTY, RESOLVE_STRICT), // StAX properties SUPPORT_DTD(XMLInputFactory.SUPPORT_DTD, null, Type.FEATURE, "true"), @@ -181,11 +208,34 @@ public static enum PropertyState { CONFIG_FILE_SYSTEM_API, } + public static enum CustomCatalog { + // continue processing if no match found + CONTINUE(CATALOG_PATH, "continue"), + // skip if no match found + IGNORE(CATALOG_PATH, "ignore"), + // throws CatalogException if no match found + STRICT(CATALOG_PATH, "strict"); + + String file, resolve; + CustomCatalog(String file, String resolve) { + this.file = file; + this.resolve = resolve; + } + + public String file() { + return file; + } + + public String resolve() { + return resolve; + } + } + protected void process(String filename, DocumentBuilderFactory dbf, boolean expectError, String error) throws Exception { //dbf.setAttribute(CatalogFeatures.Feature.RESOLVE.getPropertyName(), "continue"); DocumentBuilder builder = dbf.newDocumentBuilder(); - File file = new File(getPath(filename)); + File file = new File(getPath(TEST_SOURCE_DIR, filename)); try { Document document = builder.parse(file); Assert.assertTrue(!expectError); @@ -198,7 +248,7 @@ protected void process(String filename, DocumentBuilderFactory dbf, boolean expe protected void process(String filename, SAXParser parser, boolean expectError, String error) throws Exception { - File file = new File(getPath(filename)); + File file = new File(getPath(TEST_SOURCE_DIR, filename)); try { parser.parse(file, new DefaultHandler()); Assert.assertTrue(!expectError); @@ -211,7 +261,7 @@ protected void process(String filename, SAXParser parser, boolean expectError, protected void process(String filename, XMLInputFactory xif, boolean expectError, String expected) throws Exception { - String xml = getPath(filename); + String xml = getPath(TEST_SOURCE_DIR, filename); try { InputStream entityxml = new FileInputStream(xml); XMLStreamReader streamReader = xif.createXMLStreamReader(xml, entityxml); @@ -228,7 +278,7 @@ protected void process(String filename, XMLInputFactory xif, boolean expectError protected void process(String filename, SchemaFactory sf, boolean expectError, String expected) throws Exception { - String xsd = getPath(filename); + String xsd = getPath(TEST_SOURCE_DIR, filename); try { Schema schema = sf.newSchema(new StreamSource(new File(xsd))); Assert.assertTrue(!expectError); @@ -240,7 +290,7 @@ protected void process(String filename, SchemaFactory sf, boolean expectError, protected void process(String filename, TransformerFactory tf, boolean expectError, String expected) throws Exception { - String xsl = getPath(filename); + String xsl = getPath(TEST_SOURCE_DIR, filename); try { SAXSource xslSource = new SAXSource(new InputSource(xsl)); xslSource.setSystemId(xsl); @@ -254,7 +304,7 @@ protected void process(String filename, TransformerFactory tf, boolean expectErr protected void transform(String xmlFile, String xsl, TransformerFactory tf, boolean expectError, String expected) throws Exception { - String xmlSysId = getPath(xmlFile); + String xmlSysId = getPath(TEST_SOURCE_DIR, xmlFile); try { SAXSource xslSource = new SAXSource(new InputSource(new StringReader(xsl))); //SAXSource xslSource = new SAXSource(new InputSource(xslSysId)); @@ -264,14 +314,13 @@ protected void transform(String xmlFile, String xsl, TransformerFactory tf, transformer.transform(getSource(SourceType.STREAM, xmlSysId), new StreamResult(sw)); Assert.assertTrue(!expectError); } catch (Exception e) { - e.printStackTrace(); processError(expectError, expected, e); } } protected void validate(String filename, SchemaFactory sf, boolean expectError, String expected) throws Exception { - String xml = getPath(filename); + String xml = getPath(TEST_SOURCE_DIR, filename); try { Schema schema = sf.newSchema(); Validator validator = schema.newValidator(); @@ -309,6 +358,11 @@ protected void processError(boolean expectError, String error, Exception e) */ protected DocumentBuilderFactory getDBF(Properties fsp, PropertyState state, Properties config, Properties[] sysProp, Properties[] apiProp) { + return getDBF(fsp, state, config, sysProp, apiProp, null); + } + + protected DocumentBuilderFactory getDBF(Properties fsp, PropertyState state, + Properties config, Properties[] sysProp, Properties[] apiProp, CustomCatalog cc) { setSystemProperty(config, state, sysProp); DocumentBuilderFactory dbf = DocumentBuilderFactory.newDefaultNSInstance(); @@ -335,6 +389,10 @@ protected DocumentBuilderFactory getDBF(Properties fsp, PropertyState state, } } } + if (cc != null) { + dbf.setAttribute(C_FILE, cc.file()); + dbf.setAttribute(C_RESOLVE, cc.resolve()); + } clearSystemProperty(state, sysProp); @@ -355,6 +413,11 @@ protected DocumentBuilderFactory getDBF(Properties fsp, PropertyState state, */ public SAXParser getSAXParser(Properties fsp, PropertyState state, Properties config, Properties[] sysProp, Properties[] apiProp) throws Exception { + return getSAXParser(fsp, state, config, sysProp, apiProp, null); + } + + public SAXParser getSAXParser(Properties fsp, PropertyState state, Properties config, + Properties[] sysProp, Properties[] apiProp, CustomCatalog cc) throws Exception { setSystemProperty(config, state, sysProp); SAXParserFactory spf = SAXParserFactory.newDefaultNSInstance(); @@ -387,12 +450,22 @@ public SAXParser getSAXParser(Properties fsp, PropertyState state, Properties co } } + if (cc != null) { + parser.setProperty(C_FILE, cc.file()); + parser.setProperty(C_RESOLVE, cc.resolve()); + } + clearSystemProperty(state, sysProp); return parser; } protected XMLInputFactory getXMLInputFactory(PropertyState state, Properties config, Properties[] sysProp, Properties[] apiProp) { + return getXMLInputFactory(state, config, sysProp, apiProp, null); + } + + protected XMLInputFactory getXMLInputFactory(PropertyState state, + Properties config, Properties[] sysProp, Properties[] apiProp, CustomCatalog cc) { setSystemProperty(config, state, sysProp); XMLInputFactory factory = XMLInputFactory.newInstance(); @@ -402,6 +475,11 @@ protected XMLInputFactory getXMLInputFactory(PropertyState state, } } + if (cc != null) { + factory.setProperty(C_FILE, cc.file()); + factory.setProperty(C_RESOLVE, cc.resolve()); + } + clearSystemProperty(state, sysProp); return factory; @@ -410,6 +488,12 @@ protected XMLInputFactory getXMLInputFactory(PropertyState state, protected SchemaFactory getSchemaFactory(Properties fsp, PropertyState state, Properties config, Properties[] sysProp, Properties[] apiProp) throws Exception { + return getSchemaFactory(fsp, state, config, sysProp, apiProp, null); + } + + protected SchemaFactory getSchemaFactory(Properties fsp, PropertyState state, + Properties config, Properties[] sysProp, Properties[] apiProp, CustomCatalog cc) + throws Exception { setSystemProperty(config, state, sysProp); SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); @@ -427,6 +511,11 @@ protected SchemaFactory getSchemaFactory(Properties fsp, PropertyState state, } } + if (cc != null) { + factory.setProperty(C_FILE, cc.file()); + factory.setProperty(C_RESOLVE, cc.resolve()); + } + clearSystemProperty(state, sysProp); return factory; @@ -435,6 +524,12 @@ protected SchemaFactory getSchemaFactory(Properties fsp, PropertyState state, protected TransformerFactory getTransformerFactory(Properties fsp, PropertyState state, Properties config, Properties[] sysProp, Properties[] apiProp) throws Exception { + return getTransformerFactory(fsp, state, config, sysProp, apiProp, null); + } + + protected TransformerFactory getTransformerFactory(Properties fsp, PropertyState state, + Properties config, Properties[] sysProp, Properties[] apiProp, CustomCatalog cc) + throws Exception { setSystemProperty(config, state, sysProp); TransformerFactory tf = TransformerFactory.newInstance(); //tf.setAttribute(JDK_ENTITY_COUNT_INFO, "yes"); @@ -450,6 +545,10 @@ protected TransformerFactory getTransformerFactory(Properties fsp, PropertyState } } } + if (cc != null) { + tf.setAttribute(C_FILE, cc.file()); + tf.setAttribute(C_RESOLVE, cc.resolve()); + } clearSystemProperty(state, sysProp); @@ -605,8 +704,8 @@ protected void clearSystemProperty1(PropertyState m, Properties property) { } } - static String getPath(String file) { - String temp = TEST_SOURCE_DIR + file; + static String getPath(String base, String file) { + String temp = base + file; if (IS_WINDOWS) { temp = "/" + temp; } diff --git a/test/jaxp/javax/xml/jaxp/unittest/common/xmlfiles/XI_roottest.xml b/test/jaxp/javax/xml/jaxp/unittest/common/xmlfiles/XI_roottest.xml new file mode 100644 index 0000000000000..bc6c2968f5960 --- /dev/null +++ b/test/jaxp/javax/xml/jaxp/unittest/common/xmlfiles/XI_roottest.xml @@ -0,0 +1,6 @@ + + + + + diff --git a/test/jaxp/javax/xml/jaxp/unittest/common/xmlfiles/test.xml b/test/jaxp/javax/xml/jaxp/unittest/common/xmlfiles/test.xml new file mode 100644 index 0000000000000..991d823a2fe54 --- /dev/null +++ b/test/jaxp/javax/xml/jaxp/unittest/common/xmlfiles/test.xml @@ -0,0 +1,6 @@ + + + ]> +123&x1; diff --git a/test/jaxp/javax/xml/jaxp/unittest/common/xmlfiles/testExternalParameter.xml b/test/jaxp/javax/xml/jaxp/unittest/common/xmlfiles/testExternalParameter.xml new file mode 100644 index 0000000000000..192d9ed633ebd --- /dev/null +++ b/test/jaxp/javax/xml/jaxp/unittest/common/xmlfiles/testExternalParameter.xml @@ -0,0 +1,12 @@ + + +%paraEntity; +]> + + value value1 + 10016 + + + + From 1629a9059bd2e0f07559a384be4276c7dc13eff2 Mon Sep 17 00:00:00 2001 From: Thomas Schatzl Date: Wed, 22 Nov 2023 17:17:11 +0000 Subject: [PATCH 029/250] 8320331: G1 Full GC Heap verification relies on metadata not reset before verification Reviewed-by: iwalulya, ayang --- src/hotspot/share/gc/g1/g1CollectedHeap.cpp | 2 +- src/hotspot/share/gc/g1/g1FullCollector.cpp | 1 + src/hotspot/share/gc/g1/heapRegion.hpp | 17 ++++++++++++----- src/hotspot/share/gc/g1/heapRegion.inline.hpp | 9 ++++++++- .../runtime/Metaspace/FragmentMetaspace.java | 12 +++++++++++- 5 files changed, 33 insertions(+), 8 deletions(-) diff --git a/src/hotspot/share/gc/g1/g1CollectedHeap.cpp b/src/hotspot/share/gc/g1/g1CollectedHeap.cpp index ba657e650a0d1..5b0ac46405df7 100644 --- a/src/hotspot/share/gc/g1/g1CollectedHeap.cpp +++ b/src/hotspot/share/gc/g1/g1CollectedHeap.cpp @@ -2765,7 +2765,7 @@ bool G1CollectedHeap::check_young_list_empty() { // Remove the given HeapRegion from the appropriate region set. void G1CollectedHeap::prepare_region_for_full_compaction(HeapRegion* hr) { - if (hr->is_humongous()) { + if (hr->is_humongous()) { _humongous_set.remove(hr); } else if (hr->is_old()) { _old_set.remove(hr); diff --git a/src/hotspot/share/gc/g1/g1FullCollector.cpp b/src/hotspot/share/gc/g1/g1FullCollector.cpp index 039f13019ab10..62e7cdfabd4fc 100644 --- a/src/hotspot/share/gc/g1/g1FullCollector.cpp +++ b/src/hotspot/share/gc/g1/g1FullCollector.cpp @@ -171,6 +171,7 @@ class PrepareRegionsClosure : public HeapRegionClosure { PrepareRegionsClosure(G1FullCollector* collector) : _collector(collector) { } bool do_heap_region(HeapRegion* hr) { + hr->prepare_for_full_gc(); G1CollectedHeap::heap()->prepare_region_for_full_compaction(hr); _collector->before_marking_update_attribute_table(hr); return false; diff --git a/src/hotspot/share/gc/g1/heapRegion.hpp b/src/hotspot/share/gc/g1/heapRegion.hpp index 9d366e476b5fe..45d39924abaf2 100644 --- a/src/hotspot/share/gc/g1/heapRegion.hpp +++ b/src/hotspot/share/gc/g1/heapRegion.hpp @@ -174,6 +174,7 @@ class HeapRegion : public CHeapObj { void update_bot_for_block(HeapWord* start, HeapWord* end); + void prepare_for_full_gc(); // Update heap region that has been compacted to be consistent after Full GC. void reset_compacted_after_full_gc(HeapWord* new_top); // Update skip-compacting heap region to be consistent after Full GC. @@ -229,11 +230,17 @@ class HeapRegion : public CHeapObj { HeapWord* volatile _top_at_mark_start; // The area above this limit is fully parsable. This limit - // is equal to bottom except from Remark and until the region has been - // scrubbed concurrently. The scrubbing ensures that all dead objects (with - // possibly unloaded classes) have beenreplaced with filler objects that - // are parsable. Below this limit the marking bitmap must be used to - // determine size and liveness. + // is equal to bottom except + // + // * from Remark and until the region has been scrubbed concurrently. The + // scrubbing ensures that all dead objects (with possibly unloaded classes) + // have been replaced with filler objects that are parsable. + // * after the marking phase in the Full GC pause until the objects have been + // moved. Some (debug) code iterates over the heap after marking but before + // compaction. + // + // Below this limit the marking bitmap must be used to determine size and + // liveness. HeapWord* volatile _parsable_bottom; // Amount of dead data in the region. diff --git a/src/hotspot/share/gc/g1/heapRegion.inline.hpp b/src/hotspot/share/gc/g1/heapRegion.inline.hpp index 625828b632e94..e7e10ea5ffe6c 100644 --- a/src/hotspot/share/gc/g1/heapRegion.inline.hpp +++ b/src/hotspot/share/gc/g1/heapRegion.inline.hpp @@ -167,6 +167,13 @@ inline size_t HeapRegion::block_size(const HeapWord* p, HeapWord* const pb) cons return cast_to_oop(p)->size(); } +inline void HeapRegion::prepare_for_full_gc() { + // After marking and class unloading the heap temporarily contains dead objects + // with unloaded klasses. Moving parsable_bottom makes some (debug) code correctly + // skip dead objects. + _parsable_bottom = top(); +} + inline void HeapRegion::reset_compacted_after_full_gc(HeapWord* new_top) { set_top(new_top); // After a compaction the mark bitmap in a movable region is invalid. @@ -188,7 +195,7 @@ inline void HeapRegion::reset_skip_compacting_after_full_gc() { inline void HeapRegion::reset_after_full_gc_common() { // Everything above bottom() is parsable and live. - _parsable_bottom = bottom(); + reset_parsable_bottom(); // Clear unused heap memory in debug builds. if (ZapUnusedHeapArea) { diff --git a/test/hotspot/jtreg/runtime/Metaspace/FragmentMetaspace.java b/test/hotspot/jtreg/runtime/Metaspace/FragmentMetaspace.java index 61cebb528b41e..8dcc83a1122f8 100644 --- a/test/hotspot/jtreg/runtime/Metaspace/FragmentMetaspace.java +++ b/test/hotspot/jtreg/runtime/Metaspace/FragmentMetaspace.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2023, 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,6 +29,16 @@ * @run main/othervm/timeout=200 -Xmx1g FragmentMetaspace */ +/** + * @test id=8320331 + * @bug 8320331 + * @requires vm.debug + * @library /test/lib + * @modules java.base/jdk.internal.misc + * @modules java.compiler + * @run main/othervm/timeout=200 -XX:+UnlockDiagnosticVMOptions -XX:+VerifyDuringGC -Xmx1g FragmentMetaspace + */ + import java.io.IOException; import jdk.test.lib.classloader.GeneratingCompilingClassLoader; From 407cdd4cac4c78c50d5f27299d6d65e082a966ca Mon Sep 17 00:00:00 2001 From: Jonathan Gibbons Date: Wed, 22 Nov 2023 17:23:38 +0000 Subject: [PATCH 030/250] 8320207: doclet incorrectly chooses code font for a See Also link Reviewed-by: hannesw --- .../formats/html/taglets/LinkTaglet.java | 16 +- .../formats/html/taglets/SeeTaglet.java | 120 ++++++++++++++- .../TestGenericTypeLink.java | 4 +- .../testSeeLinkAnchor/TestSeeLinkAnchor.java | 16 +- .../javadoc/doclet/testSeeTag/TestSeeTag.java | 16 +- .../doclet/testSeeTag/TestSeeTagFont.java | 145 ++++++++++++++++++ 6 files changed, 290 insertions(+), 27 deletions(-) create mode 100644 test/langtools/jdk/javadoc/doclet/testSeeTag/TestSeeTagFont.java diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/taglets/LinkTaglet.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/taglets/LinkTaglet.java index 06bfd1d59e834..1b02c9ea05e07 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/taglets/LinkTaglet.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/taglets/LinkTaglet.java @@ -117,7 +117,7 @@ public Content getInlineTagOutput(Element element, DocTree tag, TagletWriter tag * @param refTree the tree node containing the information, or {@code null} if not available * @param refSignature the normalized signature of the target of the reference * @param ref the target of the reference - * @param isLinkPlain {@code true} if the link should be presented in "plain" font, + * @param isPlain {@code true} if the link should be presented in "plain" font, * or {@code false} for "code" font * @param label the label for the link, * or an empty item to use a default label derived from the signature @@ -130,17 +130,17 @@ Content linkSeeReferenceOutput(Element holder, DocTree refTree, String refSignature, Element ref, - boolean isLinkPlain, + boolean isPlain, Content label, BiConsumer reportWarning, TagletWriter tagletWriter) { var config = tagletWriter.configuration; var htmlWriter = tagletWriter.htmlWriter; - Content labelContent = plainOrCode(isLinkPlain, label); + Content labelContent = plainOrCode(isPlain, label); // The signature from the @see tag. We will output this text when a label is not specified. - Content text = plainOrCode(isLinkPlain, + Content text = plainOrCode(isPlain, Text.of(Objects.requireNonNullElse(refSignature, ""))); CommentHelper ch = utils.getCommentHelper(holder); @@ -170,7 +170,7 @@ Content linkSeeReferenceOutput(Element holder, if (refPackage != null && utils.isIncluded(refPackage)) { //@see is referencing an included package if (labelContent.isEmpty()) { - labelContent = plainOrCode(isLinkPlain, + labelContent = plainOrCode(isPlain, Text.of(refPackage.getQualifiedName())); } return htmlWriter.getPackageLink(refPackage, labelContent, refFragment); @@ -202,10 +202,10 @@ Content linkSeeReferenceOutput(Element holder, TypeMirror referencedType = ch.getReferencedType(refTree); if (utils.isGenericType(referencedType)) { // This is a generic type link, use the TypeMirror representation. - return plainOrCode(isLinkPlain, htmlWriter.getLink( + return plainOrCode(isPlain, htmlWriter.getLink( new HtmlLinkInfo(config, HtmlLinkInfo.Kind.LINK_TYPE_PARAMS_AND_BOUNDS, referencedType))); } - labelContent = plainOrCode(isLinkPlain, Text.of(utils.getSimpleName(refClass))); + labelContent = plainOrCode(isPlain, Text.of(utils.getSimpleName(refClass))); } return htmlWriter.getLink(new HtmlLinkInfo(config, HtmlLinkInfo.Kind.PLAIN, refClass) .label(labelContent)); @@ -267,7 +267,7 @@ Content linkSeeReferenceOutput(Element holder, return htmlWriter.getDocLink(HtmlLinkInfo.Kind.SHOW_PREVIEW, containing, refMem, (labelContent.isEmpty() - ? plainOrCode(isLinkPlain, Text.of(refMemName)) + ? plainOrCode(isPlain, Text.of(refMemName)) : labelContent), null, false); } } diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/taglets/SeeTaglet.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/taglets/SeeTaglet.java index 2b6ad36896ab4..8e029c5fbb525 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/taglets/SeeTaglet.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/taglets/SeeTaglet.java @@ -37,6 +37,7 @@ import com.sun.source.doctree.DocTree; import com.sun.source.doctree.SeeTree; +import com.sun.source.doctree.TextTree; import jdk.javadoc.doclet.Taglet; import jdk.javadoc.internal.doclets.formats.html.ClassWriter; @@ -174,7 +175,7 @@ private Content seeTagOutput(Element element, SeeTree seeTag) { seeTag, refSignature, ch.getReferencedElement(seeTag), - false, + isPlain(refSignature, label), htmlWriter.commentTagsToContent(element, label, tagletWriter.getContext().within(seeTag)), (key, args) -> messages.warning(ch.getDocTreePath(seeTag), key, args), tagletWriter @@ -189,7 +190,124 @@ private Content seeTagOutput(Element element, SeeTree seeTag) { default -> throw new IllegalStateException(ref0.getKind().toString()); } + } + + /** + * {@return {@code true} if the label should be rendered in plain font} + * + * The method uses a heuristic, to see if the string form of the label + * is a substring of the reference. Thus, for example: + * + *

        + *
      • {@code @see MyClass.MY_CONSTANT MY_CONSTANT} returns {@code true} + *
      • {@code @see MyClass.MY_CONSTANT a constant} returns {@code false} + *
      + * + * The result will be {@code true} (meaning, displayed in plain font) if + * any of the following are true about the label: + * + *
        + *
      • There is more than a single item in the list of nodes, + * suggesting there may be formatting nodes. + *
      • There is whitespace outside any parentheses, + * suggesting the label is a phrase + *
      • There are nested parentheses, or content after the parentheses, + * which cannot occur in a standalone signature + *
      • The simple name inferred from the reference does not match + * any simple name inferred from the label + *
      + * + * @param refSignature the signature of the target of the reference + * @param label the label + */ + private boolean isPlain(String refSignature, List label) { + if (label.isEmpty()) { + return false; + } else if (label.size() > 1) { + return true; + } + + var l0 = label.get(0); + String s; + if (l0 instanceof TextTree t) { + s = t.getBody().trim(); + } else { + return true; + } + + // look for whitespace outside any parens, nested parens, or characters after parens: + // all of which will not be found in a simple signature + var inParens = false; + var ids = new ArrayList(); + var sb = new StringBuilder(); + for (var i = 0; i < s.length(); i++) { + var ch = s.charAt(i); + if (!sb.isEmpty() && !Character.isJavaIdentifierPart(ch)) { + ids.add(sb.toString()); + sb.setLength(0); + } + switch (ch) { + case '(' -> { + if (inParens) { + return true; + } else { + inParens = true; + } + } + case ')' -> { + if (inParens && i < s.length() - 1) { + return true; + } else { + inParens = false; + } + } + default -> { + if (!inParens) { + if (Character.isJavaIdentifierStart(ch) + || (!sb.isEmpty() && Character.isJavaIdentifierPart(ch))) { + sb.append(ch); + } else if (Character.isWhitespace(ch)) { + return true; + } + } + } + } + } + + if (!sb.isEmpty()) { + ids.add(sb.toString()); + } + + if (ids.isEmpty()) { + return true; + } + + // final check: does the simple name inferred from the label + // match the simple name inferred from the reference + var labelSimpleName = ids.get(ids.size() - 1); + var refSimpleName = getSimpleName(refSignature); + return !labelSimpleName.equals((refSimpleName)); + } + + /** + * {@return the simple name from a signature} + * + * If there is a member part in the signature, the simple name is the + * identifier after the {@code #} character. + * Otherwise, the simple name is the last identifier in the signature. + * + * @param sig the signature + */ + private String getSimpleName(String sig) { + int hash = sig.indexOf('#'); + if (hash == -1 ) { + int lastDot = sig.lastIndexOf("."); + return lastDot == -1 ? sig : sig.substring(lastDot + 1); + } else { + int parens = sig.indexOf("(", hash); + return parens == -1 ? sig.substring(hash + 1) : sig.substring(hash + 1, parens); + } } } diff --git a/test/langtools/jdk/javadoc/doclet/testGenericTypeLink/TestGenericTypeLink.java b/test/langtools/jdk/javadoc/doclet/testGenericTypeLink/TestGenericTypeLink.java index c0b45b3491453..d8bf1fc2bdfcf 100644 --- a/test/langtools/jdk/javadoc/doclet/testGenericTypeLink/TestGenericTypeLink.java +++ b/test/langtools/jdk/javadoc/doclet/testGenericTypeLink/TestGenericTypeLink.java @@ -112,8 +112,8 @@ interface in java.util" class="external-link">link to generic type with labelString,A.SomeException>
    • Link to generic type with \ - label
    • + s or interface in java.util" class="external-link">Link to generic type with label<\ + /a>
    """ diff --git a/test/langtools/jdk/javadoc/doclet/testSeeLinkAnchor/TestSeeLinkAnchor.java b/test/langtools/jdk/javadoc/doclet/testSeeLinkAnchor/TestSeeLinkAnchor.java index 4fc515f9427dc..626e487040107 100644 --- a/test/langtools/jdk/javadoc/doclet/testSeeLinkAnchor/TestSeeLinkAnchor.java +++ b/test/langtools/jdk/javadoc/doclet/testSeeLinkAnchor/TestSeeLinkAnchor.java @@ -79,8 +79,8 @@ public void testPackage(Path base) throws Exception { """ Plain link to sub heading above""", """ -
  • See main heading in p2.Class2
  • -
  • See heading in p2
  • +
  • See main heading in p2.Class2
  • +
  • See heading in p2
  • """); checkOrder("p2/Class2.html", """ @@ -89,13 +89,13 @@ public void testPackage(Path base) throws Exception { Plain link to Class1."""); checkOrder("p2/package-summary.html", """ - See sub heading in p2.Class2"""); + See sub heading in p2.Class2"""); checkOrder("p2/doc-files/file.html", """ Plain link to heading in p1.ClassA.""", """ - See main heading in p2.ClassB"""); + See main heading in p2.ClassB"""); } @Test @@ -111,13 +111,13 @@ public void testModule(Path base) throws Exception { checkExit(Exit.OK); checkOrder("m1/module-summary.html", """ - See main heading in Class2"""); + See main heading in Class2"""); checkOrder("m1/com/m1/Class1.html", """ sub heading in Class2.""", """ -
  • See main heading in Class2
  • -
  • See heading in module m1
  • +
  • See main heading in Class2
  • +
  • See heading in module m1
  • """); checkOrder("m2/com/m2/Class2.html", """ @@ -128,7 +128,7 @@ public void testModule(Path base) throws Exception { """ Link to heading in Class2.""", """ -
  • Heading in module m1
  • """); +
  • Heading in module m1
  • """); } @Test diff --git a/test/langtools/jdk/javadoc/doclet/testSeeTag/TestSeeTag.java b/test/langtools/jdk/javadoc/doclet/testSeeTag/TestSeeTag.java index c0c730bf6c417..f3294f6647c4a 100644 --- a/test/langtools/jdk/javadoc/doclet/testSeeTag/TestSeeTag.java +++ b/test/langtools/jdk/javadoc/doclet/testSeeTag/TestSeeTag.java @@ -62,7 +62,7 @@ public void test() {
  • Test.InnerOne.foo()
  • Test.InnerOne.bar(Object)
  • Javadoc
  • -
  • something
  • +
  • something
  • \ Test.InnerOne.format(java.lang.String, java.lang.Object...)
  • @@ -80,7 +80,7 @@ public void test() {
    """); @@ -213,17 +213,17 @@ public void twoArgs(int a1, int a2) { } "
    ", """ """, "
    ", """ """, "
    ", diff --git a/test/langtools/jdk/javadoc/doclet/testSeeTag/TestSeeTagFont.java b/test/langtools/jdk/javadoc/doclet/testSeeTag/TestSeeTagFont.java new file mode 100644 index 0000000000000..3892ec6d999e4 --- /dev/null +++ b/test/langtools/jdk/javadoc/doclet/testSeeTag/TestSeeTagFont.java @@ -0,0 +1,145 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8320207 + * @summary doclet incorrectly chooses code font for a See Also link + * @library /tools/lib ../../lib + * @modules jdk.javadoc/jdk.javadoc.internal.tool + * @build toolbox.ToolBox javadoc.tester.* + * @run main TestSeeTagFont + */ + +import java.nio.file.Path; + +import javadoc.tester.JavadocTester; +import toolbox.ToolBox; + +public class TestSeeTagFont extends JavadocTester { + public static void main(String... args) throws Exception { + var tester = new TestSeeTagFont(); + tester.runTests(); + } + + private final ToolBox tb = new ToolBox(); + + @Test + public void testPlain(Path base) throws Exception { + Path src = base.resolve("src"); + tb.writeJavaFiles(src, + """ + package p; + import p2.Other; + /** + * Description. + * @see Other multi-word phrase + * @see Other Other + * @see Other Other() with trailing text + * @see Other simpleNameMismatch + * + * @see Other#Other() multi-word phrase + * @see Other#Other() Other#Other() with trailing text + * @see Other#Other() simpleNameMismatch + * + * @see Other#m() Other.m with formatting and trailing text + */ + public class C { } + """, + """ + package p2; + /** Lorem ipsum. */ + public class Other { + /** Lorem ipsum. */ + public void m() { } + } + """); + + javadoc("-d", base.resolve("api").toString(), + "-Xdoclint:none", + "-sourcepath", src.toString(), + "p", "p2"); + checkExit(Exit.OK); + + // none of the following should contain ... + checkOutput("p/C.html", true, + """ + + """); + } + + @Test + public void testCode(Path base) throws Exception { + Path src = base.resolve("src"); + tb.writeJavaFiles(src, + """ + package p; + import p2.Other; + /** + * Description. + * @see Other + * @see p2.Other Other + * + * @see Other#Other() Other + * @see Other#m() m + * @see Other#m() Other.m + */ + public class C { } + """, + """ + package p2; + /** Lorem ipsum. */ + public class Other { + /** Lorem ipsum. */ + public void m() { } + } + """); + + javadoc("-d", base.resolve("api").toString(), + "-Xdoclint:none", + "-sourcepath", src.toString(), + "p", "p2"); + checkExit(Exit.OK); + + // all of the following should contain ... + checkOutput("p/C.html", true, + """ + + """); + } +} From 30462f9da40d3a7ec18fcf46e2154fabb5fd4753 Mon Sep 17 00:00:00 2001 From: Aleksey Shipilev Date: Wed, 22 Nov 2023 17:55:17 +0000 Subject: [PATCH 031/250] 8318986: Improve GenericWaitBarrier performance Reviewed-by: rehn, iwalulya, pchilanomate --- .../share/utilities/waitBarrier_generic.cpp | 261 ++++++++++++++---- .../share/utilities/waitBarrier_generic.hpp | 74 ++++- 2 files changed, 274 insertions(+), 61 deletions(-) diff --git a/src/hotspot/share/utilities/waitBarrier_generic.cpp b/src/hotspot/share/utilities/waitBarrier_generic.cpp index b5d9ff67eb782..dbf4db336c2f5 100644 --- a/src/hotspot/share/utilities/waitBarrier_generic.cpp +++ b/src/hotspot/share/utilities/waitBarrier_generic.cpp @@ -1,5 +1,6 @@ /* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright Amazon.com Inc. 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,66 +30,228 @@ #include "utilities/waitBarrier_generic.hpp" #include "utilities/spinYield.hpp" +// Implements the striped semaphore wait barrier. +// +// To guarantee progress and safety, we need to make sure that new barrier tag +// starts with the completely empty set of waiters and free semaphore. This +// requires either waiting for all threads to leave wait() for current barrier +// tag on disarm(), or waiting for all threads to leave the previous tag before +// reusing the semaphore in arm(). +// +// When there are multiple threads, it is normal for some threads to take +// significant time to leave the barrier. Waiting for these threads introduces +// stalls on barrier reuse. +// +// If we wait on disarm(), this stall is nearly guaranteed to happen if some threads +// are de-scheduled by prior wait(). It would be especially bad if there are more +// waiting threads than CPUs: every thread would need to wake up and register itself +// as leaving, before we can unblock from disarm(). +// +// If we wait on arm(), we can get lucky that most threads would be able to catch up, +// exit wait(), and so we arrive to arm() with semaphore ready for reuse. However, +// that is still insufficient in practice. +// +// Therefore, this implementation goes a step further and implements the _striped_ +// semaphores. We maintain several semaphores in cells. The barrier tags are assigned +// to cells in some simple manner. Most of the current uses have sequential barrier +// tags, so simple modulo works well. We then operate on a cell like we would operate +// on a single semaphore: we wait at arm() for all threads to catch up before reusing +// the cell. For the cost of maintaining just a few cells, we have enough window for +// threads to catch up. +// +// The correctness is guaranteed by using a single atomic state variable per cell, +// with updates always done with CASes: +// +// [.......... barrier tag ..........][.......... waiters ..........] +// 63 31 0 +// +// Cell starts with zero tag and zero waiters. Arming the cell swings barrier tag from +// zero to some tag, while checking that no waiters have appeared. Disarming swings +// the barrier tag back from tag to zero. Every waiter registers itself by incrementing +// the "waiters", while checking that barrier tag is still the same. Every completing waiter +// decrements the "waiters". When all waiters complete, a cell ends up in initial state, +// ready to be armed again. This allows accurate tracking of how many signals +// to issue and does not race with disarm. +// +// The implementation uses the strongest (default) barriers for extra safety, even +// when not strictly required to do so for correctness. Extra barrier overhead is +// dominated by the actual wait/notify latency anyway. +// + void GenericWaitBarrier::arm(int barrier_tag) { - assert(_barrier_tag == 0, "Already armed"); - assert(_waiters == 0, "We left a thread hanging"); - _barrier_tag = barrier_tag; - _waiters = 0; + assert(barrier_tag != 0, "Pre arm: Should be arming with armed value"); + assert(Atomic::load(&_barrier_tag) == 0, + "Pre arm: Should not be already armed. Tag: %d", + Atomic::load(&_barrier_tag)); + Atomic::release_store(&_barrier_tag, barrier_tag); + + Cell &cell = tag_to_cell(barrier_tag); + cell.arm(barrier_tag); + + // API specifies arm() must provide a trailing fence. OrderAccess::fence(); } -int GenericWaitBarrier::wake_if_needed() { - assert(_barrier_tag == 0, "Not disarmed"); - int w = _waiters; - if (w == 0) { - // Load of _barrier_threads in caller must not pass the load of _waiters. - OrderAccess::loadload(); - return 0; - } - assert(w > 0, "Bad counting"); - // We need an exact count which never goes below zero, - // otherwise the semaphore may be signalled too many times. - if (Atomic::cmpxchg(&_waiters, w, w - 1) == w) { - _sem_barrier.signal(); - return w - 1; - } - return w; +void GenericWaitBarrier::disarm() { + int barrier_tag = Atomic::load_acquire(&_barrier_tag); + assert(barrier_tag != 0, "Pre disarm: Should be armed. Tag: %d", barrier_tag); + Atomic::release_store(&_barrier_tag, 0); + + Cell &cell = tag_to_cell(barrier_tag); + cell.disarm(barrier_tag); + + // API specifies disarm() must provide a trailing fence. + OrderAccess::fence(); } -void GenericWaitBarrier::disarm() { - assert(_barrier_tag != 0, "Not armed"); - _barrier_tag = 0; - // Loads of _barrier_threads/_waiters must not float above disarm store and - // disarm store must not sink below. +void GenericWaitBarrier::wait(int barrier_tag) { + assert(barrier_tag != 0, "Pre wait: Should be waiting on armed value"); + + Cell &cell = tag_to_cell(barrier_tag); + cell.wait(barrier_tag); + + // API specifies wait() must provide a trailing fence. OrderAccess::fence(); - int left; +} + +void GenericWaitBarrier::Cell::arm(int32_t requested_tag) { + // Before we continue to arm, we need to make sure that all threads + // have left the previous cell. + + int64_t state; + SpinYield sp; - do { - left = GenericWaitBarrier::wake_if_needed(); - if (left == 0 && _barrier_threads > 0) { - // There is no thread to wake but we still have barrier threads. + while (true) { + state = Atomic::load_acquire(&_state); + assert(decode_tag(state) == 0, + "Pre arm: Should not be armed. " + "Tag: " INT32_FORMAT "; Waiters: " INT32_FORMAT, + decode_tag(state), decode_waiters(state)); + if (decode_waiters(state) == 0) { + break; + } + sp.wait(); + } + + // Try to swing cell to armed. This should always succeed after the check above. + int64_t new_state = encode(requested_tag, 0); + int64_t prev_state = Atomic::cmpxchg(&_state, state, new_state); + if (prev_state != state) { + fatal("Cannot arm the wait barrier. " + "Tag: " INT32_FORMAT "; Waiters: " INT32_FORMAT, + decode_tag(prev_state), decode_waiters(prev_state)); + } +} + +int GenericWaitBarrier::Cell::signal_if_needed(int max) { + int signals = 0; + while (true) { + int cur = Atomic::load_acquire(&_outstanding_wakeups); + if (cur == 0) { + // All done, no more waiters. + return 0; + } + assert(cur > 0, "Sanity"); + + int prev = Atomic::cmpxchg(&_outstanding_wakeups, cur, cur - 1); + if (prev != cur) { + // Contention, return to caller for early return or backoff. + return prev; + } + + // Signal! + _sem.signal(); + + if (++signals >= max) { + // Signalled requested number of times, break out. + return prev; + } + } +} + +void GenericWaitBarrier::Cell::disarm(int32_t expected_tag) { + int32_t waiters; + + while (true) { + int64_t state = Atomic::load_acquire(&_state); + int32_t tag = decode_tag(state); + waiters = decode_waiters(state); + + assert((tag == expected_tag) && (waiters >= 0), + "Mid disarm: Should be armed with expected tag and have sane waiters. " + "Tag: " INT32_FORMAT "; Waiters: " INT32_FORMAT, + tag, waiters); + + int64_t new_state = encode(0, waiters); + if (Atomic::cmpxchg(&_state, state, new_state) == state) { + // Successfully disarmed. + break; + } + } + + // Wake up waiters, if we have at least one. + // Allow other threads to assist with wakeups, if possible. + if (waiters > 0) { + Atomic::release_store(&_outstanding_wakeups, waiters); + SpinYield sp; + while (signal_if_needed(INT_MAX) > 0) { sp.wait(); } - // We must loop here until there are no waiters or potential waiters. - } while (left > 0 || _barrier_threads > 0); - // API specifies disarm() must provide a trailing fence. - OrderAccess::fence(); + } + assert(Atomic::load(&_outstanding_wakeups) == 0, "Post disarm: Should not have outstanding wakeups"); } -void GenericWaitBarrier::wait(int barrier_tag) { - assert(barrier_tag != 0, "Trying to wait on disarmed value"); - if (barrier_tag != _barrier_tag) { - // API specifies wait() must provide a trailing fence. - OrderAccess::fence(); - return; +void GenericWaitBarrier::Cell::wait(int32_t expected_tag) { + // Try to register ourselves as pending waiter. + while (true) { + int64_t state = Atomic::load_acquire(&_state); + int32_t tag = decode_tag(state); + if (tag != expected_tag) { + // Cell tag had changed while waiting here. This means either the cell had + // been disarmed, or we are late and the cell was armed with a new tag. + // Exit without touching anything else. + return; + } + int32_t waiters = decode_waiters(state); + + assert((tag == expected_tag) && (waiters >= 0 && waiters < INT32_MAX), + "Before wait: Should be armed with expected tag and waiters are in range. " + "Tag: " INT32_FORMAT "; Waiters: " INT32_FORMAT, + tag, waiters); + + int64_t new_state = encode(tag, waiters + 1); + if (Atomic::cmpxchg(&_state, state, new_state) == state) { + // Success! Proceed to wait. + break; + } } - Atomic::add(&_barrier_threads, 1); - if (barrier_tag != 0 && barrier_tag == _barrier_tag) { - Atomic::add(&_waiters, 1); - _sem_barrier.wait(); - // We help out with posting, but we need to do so before we decrement the - // _barrier_threads otherwise we might wake threads up in next wait. - GenericWaitBarrier::wake_if_needed(); + + // Wait for notification. + _sem.wait(); + + // Unblocked! We help out with waking up two siblings. This allows to avalanche + // the wakeups for many threads, even if some threads are lagging behind. + // Note that we can only do this *before* reporting back as completed waiter, + // otherwise we might prematurely wake up threads for another barrier tag. + // Current arm() sequence protects us from this trouble by waiting until all waiters + // leave. + signal_if_needed(2); + + // Register ourselves as completed waiter before leaving. + while (true) { + int64_t state = Atomic::load_acquire(&_state); + int32_t tag = decode_tag(state); + int32_t waiters = decode_waiters(state); + + assert((tag == 0) && (waiters > 0), + "After wait: Should be not armed and have non-complete waiters. " + "Tag: " INT32_FORMAT "; Waiters: " INT32_FORMAT, + tag, waiters); + + int64_t new_state = encode(tag, waiters - 1); + if (Atomic::cmpxchg(&_state, state, new_state) == state) { + // Success! + break; + } } - Atomic::add(&_barrier_threads, -1); } diff --git a/src/hotspot/share/utilities/waitBarrier_generic.hpp b/src/hotspot/share/utilities/waitBarrier_generic.hpp index 50bfea6aebfb7..d3a45b33b82ef 100644 --- a/src/hotspot/share/utilities/waitBarrier_generic.hpp +++ b/src/hotspot/share/utilities/waitBarrier_generic.hpp @@ -26,29 +26,79 @@ #define SHARE_UTILITIES_WAITBARRIER_GENERIC_HPP #include "memory/allocation.hpp" +#include "memory/padded.hpp" #include "runtime/semaphore.hpp" #include "utilities/globalDefinitions.hpp" -// In addition to the barrier tag, it uses two counters to keep the semaphore -// count correct and not leave any late thread waiting. class GenericWaitBarrier : public CHeapObj { +private: + class Cell : public CHeapObj { + private: + // Pad out the cells to avoid interference between the cells. + // This would insulate from stalls when adjacent cells have returning + // workers and contend over the cache line for current latency-critical + // cell. + DEFINE_PAD_MINUS_SIZE(0, DEFAULT_CACHE_LINE_SIZE, 0); + + Semaphore _sem; + + // Cell state, tracks the arming + waiters status + volatile int64_t _state; + + // Wakeups to deliver for current waiters + volatile int _outstanding_wakeups; + + int signal_if_needed(int max); + + static int64_t encode(int32_t barrier_tag, int32_t waiters) { + int64_t val = (((int64_t) barrier_tag) << 32) | + (((int64_t) waiters) & 0xFFFFFFFF); + assert(decode_tag(val) == barrier_tag, "Encoding is reversible"); + assert(decode_waiters(val) == waiters, "Encoding is reversible"); + return val; + } + + static int32_t decode_tag(int64_t value) { + return (int32_t)(value >> 32); + } + + static int32_t decode_waiters(int64_t value) { + return (int32_t)(value & 0xFFFFFFFF); + } + + public: + Cell() : _sem(0), _state(encode(0, 0)), _outstanding_wakeups(0) {} + NONCOPYABLE(Cell); + + void arm(int32_t requested_tag); + void disarm(int32_t expected_tag); + void wait(int32_t expected_tag); + }; + + // Should be enough for most uses without exploding the footprint. + static constexpr int CELLS_COUNT = 16; + + Cell _cells[CELLS_COUNT]; + + // Trailing padding to protect the last cell. + DEFINE_PAD_MINUS_SIZE(0, DEFAULT_CACHE_LINE_SIZE, 0); + volatile int _barrier_tag; - // The number of threads waiting on or about to wait on the semaphore. - volatile int _waiters; - // The number of threads in the wait path, before or after the tag check. - // These threads can become waiters. - volatile int _barrier_threads; - Semaphore _sem_barrier; + + // Trailing padding to insulate the rest of the barrier from adjacent + // data structures. The leading padding is not needed, as cell padding + // handles this for us. + DEFINE_PAD_MINUS_SIZE(1, DEFAULT_CACHE_LINE_SIZE, 0); NONCOPYABLE(GenericWaitBarrier); - int wake_if_needed(); + Cell& tag_to_cell(int tag) { return _cells[tag & (CELLS_COUNT - 1)]; } - public: - GenericWaitBarrier() : _barrier_tag(0), _waiters(0), _barrier_threads(0), _sem_barrier(0) {} +public: + GenericWaitBarrier() : _cells(), _barrier_tag(0) {} ~GenericWaitBarrier() {} - const char* description() { return "semaphore"; } + const char* description() { return "striped semaphore"; } void arm(int barrier_tag); void disarm(); From 572b14ac8697497d9c0aefe92864075e712c171e Mon Sep 17 00:00:00 2001 From: Chris Plummer Date: Wed, 22 Nov 2023 17:59:42 +0000 Subject: [PATCH 032/250] 8320536: problemlist failing serviceability/attach/ConcAttachTest.java test on macosx Reviewed-by: amenkov, dholmes --- test/hotspot/jtreg/ProblemList.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/hotspot/jtreg/ProblemList.txt b/test/hotspot/jtreg/ProblemList.txt index 01a47f51898d9..e5395c0837241 100644 --- a/test/hotspot/jtreg/ProblemList.txt +++ b/test/hotspot/jtreg/ProblemList.txt @@ -134,7 +134,7 @@ serviceability/sa/ClhsdbPstack.java#core 8267433 macosx-x64 serviceability/sa/TestJmapCore.java 8267433 macosx-x64 serviceability/sa/TestJmapCoreMetaspace.java 8267433 macosx-x64 -serviceability/attach/ConcAttachTest.java 8290043 linux-all +serviceability/attach/ConcAttachTest.java 8290043,8318866 linux-all,macosx-all serviceability/jvmti/stress/StackTrace/NotSuspended/GetStackTraceNotSuspendedStressTest.java 8315980 linux-all,windows-x64 From aac43184319d852eb792c83dfb52d74a3126108d Mon Sep 17 00:00:00 2001 From: Oliver Lockwood Date: Wed, 22 Nov 2023 18:25:44 +0000 Subject: [PATCH 033/250] 8320577: Improve MessageHeader's toString() function to make HttpURLConnection's debug log readable Reviewed-by: dfuchs, jpai --- src/java.base/share/classes/sun/net/www/MessageHeader.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/java.base/share/classes/sun/net/www/MessageHeader.java b/src/java.base/share/classes/sun/net/www/MessageHeader.java index 5542193b9a990..6c6d18453ca7c 100644 --- a/src/java.base/share/classes/sun/net/www/MessageHeader.java +++ b/src/java.base/share/classes/sun/net/www/MessageHeader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2023, 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 @@ -554,7 +554,7 @@ public void mergeHeader(InputStream is) throws java.io.IOException { } public synchronized String toString() { - String result = super.toString() + nkeys + " pairs: "; + String result = super.toString() + " " + nkeys + " pairs: "; for (int i = 0; i < keys.length && i < nkeys; i++) { result += "{"+keys[i]+": "+values[i]+"}"; } From 6016536ab96e154f4eaff10ac19f590c812e5377 Mon Sep 17 00:00:00 2001 From: Erik Gahlin Date: Wed, 22 Nov 2023 20:48:42 +0000 Subject: [PATCH 034/250] 8314745: JFR: @StackFilter Reviewed-by: mgronlun --- src/hotspot/share/jfr/jni/jfrJavaSupport.cpp | 27 ++ src/hotspot/share/jfr/jni/jfrJavaSupport.hpp | 1 + src/hotspot/share/jfr/jni/jfrJniMethod.cpp | 14 +- src/hotspot/share/jfr/jni/jfrJniMethod.hpp | 6 +- .../jfr/jni/jfrJniMethodRegistration.cpp | 6 +- .../recorder/stacktrace/jfrStackFilter.cpp | 61 ++++ .../recorder/stacktrace/jfrStackFilter.hpp | 45 +++ .../stacktrace/jfrStackFilterRegistry.cpp | 95 ++++++ .../stacktrace/jfrStackFilterRegistry.hpp | 43 +++ .../jfr/recorder/stacktrace/jfrStackTrace.cpp | 15 +- .../jfr/recorder/stacktrace/jfrStackTrace.hpp | 4 +- .../stacktrace/jfrStackTraceRepository.cpp | 11 +- .../stacktrace/jfrStackTraceRepository.hpp | 4 +- .../jdk/jfr/events/ProcessStartEvent.java | 1 + .../SecurityPropertyModificationEvent.java | 1 + .../events/SecurityProviderServiceEvent.java | 1 + .../classes/jdk/jfr/events/StackFilter.java | 65 ++++ .../jdk/jfr/events/TLSHandshakeEvent.java | 1 + .../jdk/jfr/events/ThreadSleepEvent.java | 5 +- .../jdk/jfr/internal/EventControl.java | 78 +++++ .../share/classes/jdk/jfr/internal/JVM.java | 35 +- .../jdk/jfr/internal/MetadataRepository.java | 7 + .../jdk/jfr/internal/PlatformEventType.java | 13 + .../classes/jdk/jfr/internal/TypeLibrary.java | 11 +- .../jdk/jfr/internal/event/EventWriter.java | 2 +- .../metadata/annotations/TestStackFilter.java | 319 ++++++++++++++++++ .../metadata/annotations/UnloadableClass.java | 64 ++++ .../jdk/jfr/event/os/TestProcessStart.java | 3 +- .../event/runtime/TestThreadSleepEvent.java | 18 +- ...TestSecurityPropertyModificationEvent.java | 3 +- .../TestSecurityProviderServiceEvent.java | 27 +- .../event/security/TestTLSHandshakeEvent.java | 6 +- test/jdk/jdk/jfr/jvm/TestGetStackTraceId.java | 4 +- test/lib/jdk/test/lib/jfr/Events.java | 38 ++- 34 files changed, 982 insertions(+), 52 deletions(-) create mode 100644 src/hotspot/share/jfr/recorder/stacktrace/jfrStackFilter.cpp create mode 100644 src/hotspot/share/jfr/recorder/stacktrace/jfrStackFilter.hpp create mode 100644 src/hotspot/share/jfr/recorder/stacktrace/jfrStackFilterRegistry.cpp create mode 100644 src/hotspot/share/jfr/recorder/stacktrace/jfrStackFilterRegistry.hpp create mode 100644 src/jdk.jfr/share/classes/jdk/jfr/events/StackFilter.java create mode 100644 test/jdk/jdk/jfr/api/metadata/annotations/TestStackFilter.java create mode 100644 test/jdk/jdk/jfr/api/metadata/annotations/UnloadableClass.java diff --git a/src/hotspot/share/jfr/jni/jfrJavaSupport.cpp b/src/hotspot/share/jfr/jni/jfrJavaSupport.cpp index 0f147f137dc40..866f8c1df1363 100644 --- a/src/hotspot/share/jfr/jni/jfrJavaSupport.cpp +++ b/src/hotspot/share/jfr/jni/jfrJavaSupport.cpp @@ -525,6 +525,33 @@ const char* JfrJavaSupport::c_str(jstring string, Thread* thread, bool c_heap /* return string != nullptr ? c_str(resolve_non_null(string), thread, c_heap) : nullptr; } +static Symbol** allocate_symbol_array(bool c_heap, int length, Thread* thread) { + return c_heap ? + NEW_C_HEAP_ARRAY(Symbol*, length, mtTracing) : + NEW_RESOURCE_ARRAY_IN_THREAD(thread, Symbol*, length); +} + +Symbol** JfrJavaSupport::symbol_array(jobjectArray string_array, JavaThread* thread, intptr_t* result_array_size, bool c_heap /* false */) { + DEBUG_ONLY(JfrJavaSupport::check_java_thread_in_vm(thread)); + assert(string_array != nullptr, "invariant"); + assert(result_array_size != nullptr, "invariant"); + objArrayOop arrayOop = objArrayOop(resolve_non_null(string_array)); + const int length = arrayOop->length(); + *result_array_size = length; + Symbol** result_array = allocate_symbol_array(c_heap, length, thread); + assert(result_array != nullptr, "invariant"); + for (int i = 0; i < length; i++) { + oop object = arrayOop->obj_at(i); + Symbol* symbol = nullptr; + if (object != nullptr) { + const char* text = c_str(arrayOop->obj_at(i), thread, c_heap); + symbol = SymbolTable::new_symbol(text); + } + result_array[i] = symbol; + } + return result_array; +} + /* * Exceptions and errors */ diff --git a/src/hotspot/share/jfr/jni/jfrJavaSupport.hpp b/src/hotspot/share/jfr/jni/jfrJavaSupport.hpp index 05559573e4a0e..8b4ecf18dc148 100644 --- a/src/hotspot/share/jfr/jni/jfrJavaSupport.hpp +++ b/src/hotspot/share/jfr/jni/jfrJavaSupport.hpp @@ -86,6 +86,7 @@ class JfrJavaSupport : public AllStatic { static Klass* klass(const jobject handle); static const char* c_str(jstring string, Thread* thread, bool c_heap = false); static const char* c_str(oop string, Thread* thread, bool c_heap = false); + static Symbol** symbol_array(jobjectArray string_array, JavaThread* thread, intptr_t* result_size, bool c_heap = false); // exceptions static void throw_illegal_state_exception(const char* message, TRAPS); diff --git a/src/hotspot/share/jfr/jni/jfrJniMethod.cpp b/src/hotspot/share/jfr/jni/jfrJniMethod.cpp index 4951e74dfd48c..82f26d7bdd062 100644 --- a/src/hotspot/share/jfr/jni/jfrJniMethod.cpp +++ b/src/hotspot/share/jfr/jni/jfrJniMethod.cpp @@ -36,6 +36,8 @@ #include "jfr/recorder/repository/jfrEmergencyDump.hpp" #include "jfr/recorder/service/jfrEventThrottler.hpp" #include "jfr/recorder/service/jfrOptionSet.hpp" +#include "jfr/recorder/stacktrace/jfrStackFilter.hpp" +#include "jfr/recorder/stacktrace/jfrStackFilterRegistry.hpp" #include "jfr/recorder/stacktrace/jfrStackTraceRepository.hpp" #include "jfr/recorder/stringpool/jfrStringPool.hpp" #include "jfr/jni/jfrJavaSupport.hpp" @@ -239,8 +241,8 @@ JVM_ENTRY_NO_ENV(jlong, jfr_class_id(JNIEnv* env, jclass jvm, jclass jc)) return JfrTraceId::load(jc); JVM_END -JVM_ENTRY_NO_ENV(jlong, jfr_stacktrace_id(JNIEnv* env, jclass jvm, jint skip)) - return JfrStackTraceRepository::record(thread, skip); +JVM_ENTRY_NO_ENV(jlong, jfr_stacktrace_id(JNIEnv* env, jclass jvm, jint skip, jlong stack_filter_id)) + return JfrStackTraceRepository::record(thread, skip, stack_filter_id); JVM_END JVM_ENTRY_NO_ENV(void, jfr_log(JNIEnv* env, jclass jvm, jint tag_set, jint level, jstring message)) @@ -397,3 +399,11 @@ JVM_END JVM_ENTRY_NO_ENV(void, jfr_emit_data_loss(JNIEnv* env, jclass jvm, jlong bytes)) EventDataLoss::commit(bytes, min_jlong); JVM_END + +JVM_ENTRY_NO_ENV(jlong, jfr_register_stack_filter(JNIEnv* env, jclass jvm, jobjectArray classes, jobjectArray methods)) + return JfrStackFilterRegistry::add(classes, methods, thread); +JVM_END + +JVM_ENTRY_NO_ENV(void, jfr_unregister_stack_filter(JNIEnv* env, jclass jvm, jlong id)) + JfrStackFilterRegistry::remove(id); +JVM_END diff --git a/src/hotspot/share/jfr/jni/jfrJniMethod.hpp b/src/hotspot/share/jfr/jni/jfrJniMethod.hpp index 28bafc4b73f21..b37841aeac297 100644 --- a/src/hotspot/share/jfr/jni/jfrJniMethod.hpp +++ b/src/hotspot/share/jfr/jni/jfrJniMethod.hpp @@ -57,7 +57,7 @@ jlong JNICALL jfr_class_id(JNIEnv* env, jclass jvm, jclass jc); jstring JNICALL jfr_get_pid(JNIEnv* env, jclass jvm); -jlong JNICALL jfr_stacktrace_id(JNIEnv* env, jclass jvm, jint skip); +jlong JNICALL jfr_stacktrace_id(JNIEnv* env, jclass jvm, jint skip, jlong stack_filter_id); jlong JNICALL jfr_elapsed_frequency(JNIEnv* env, jclass jvm); @@ -159,6 +159,10 @@ jlong JNICALL jfr_host_total_memory(JNIEnv* env, jclass jvm); void JNICALL jfr_emit_data_loss(JNIEnv* env, jclass jvm, jlong bytes); +jlong JNICALL jfr_register_stack_filter(JNIEnv* env, jobject classes, jobject methods); + +jlong JNICALL jfr_unregister_stack_filter(JNIEnv* env, jlong start_filter_id); + #ifdef __cplusplus } #endif diff --git a/src/hotspot/share/jfr/jni/jfrJniMethodRegistration.cpp b/src/hotspot/share/jfr/jni/jfrJniMethodRegistration.cpp index 7c571abbd695f..f8475881ff8ad 100644 --- a/src/hotspot/share/jfr/jni/jfrJniMethodRegistration.cpp +++ b/src/hotspot/share/jfr/jni/jfrJniMethodRegistration.cpp @@ -46,7 +46,7 @@ JfrJniMethodRegistration::JfrJniMethodRegistration(JNIEnv* env) { (char*)"getAllEventClasses", (char*)"()Ljava/util/List;", (void*)jfr_get_all_event_classes, (char*)"getClassId", (char*)"(Ljava/lang/Class;)J", (void*)jfr_class_id, (char*)"getPid", (char*)"()Ljava/lang/String;", (void*)jfr_get_pid, - (char*)"getStackTraceId", (char*)"(I)J", (void*)jfr_stacktrace_id, + (char*)"getStackTraceId", (char*)"(IJ)J", (void*)jfr_stacktrace_id, (char*)"getThreadId", (char*)"(Ljava/lang/Thread;)J", (void*)jfr_id_for_thread, (char*)"getTicksFrequency", (char*)"()J", (void*)jfr_elapsed_frequency, (char*)"subscribeLogLevel", (char*)"(Ljdk/jfr/internal/LogTag;I)V", (void*)jfr_subscribe_log_level, @@ -97,7 +97,9 @@ JfrJniMethodRegistration::JfrJniMethodRegistration(JNIEnv* env) { (char*)"isInstrumented", (char*)"(Ljava/lang/Class;)Z", (void*) jfr_is_class_instrumented, (char*)"isContainerized", (char*)"()Z", (void*) jfr_is_containerized, (char*)"hostTotalMemory", (char*)"()J", (void*) jfr_host_total_memory, - (char*)"emitDataLoss", (char*)"(J)V", (void*)jfr_emit_data_loss + (char*)"emitDataLoss", (char*)"(J)V", (void*)jfr_emit_data_loss, + (char*)"registerStackFilter", (char*)"([Ljava/lang/String;[Ljava/lang/String;)J", (void*)jfr_register_stack_filter, + (char*)"unregisterStackFilter", (char*)"(J)V", (void*)jfr_unregister_stack_filter }; const size_t method_array_length = sizeof(method) / sizeof(JNINativeMethod); diff --git a/src/hotspot/share/jfr/recorder/stacktrace/jfrStackFilter.cpp b/src/hotspot/share/jfr/recorder/stacktrace/jfrStackFilter.cpp new file mode 100644 index 0000000000000..bf10c531c637a --- /dev/null +++ b/src/hotspot/share/jfr/recorder/stacktrace/jfrStackFilter.cpp @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2023, 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. + * + */ + +#include "precompiled.hpp" +#include "jfr/recorder/stacktrace/jfrStackFilter.hpp" +#include "oops/method.hpp" +#include "oops/symbol.hpp" + +JfrStackFilter::JfrStackFilter(Symbol** class_names, Symbol** method_names, size_t count) + : _count(count), + _class_names(class_names), + _method_names(method_names) { + assert(_class_names != nullptr, "invariant"); + assert(_method_names != nullptr, "invariant"); +} + +bool JfrStackFilter::match(const Method* method) const { + assert(method != nullptr, "Invariant"); + const Symbol* const method_name = method->name(); + const Symbol* const klass_name = method->klass_name(); + for (size_t i = 0; i < _count; i++) { + const Symbol* m = _method_names[i]; + if (m == nullptr || m == method_name) { + const Symbol* c = _class_names[i]; + if (c == nullptr || c == klass_name) { + return true; + } + } + } + return false; +} + +JfrStackFilter::~JfrStackFilter() { + for (size_t i = 0; i < _count; i++) { + Symbol::maybe_decrement_refcount(_method_names[i]); + Symbol::maybe_decrement_refcount(_class_names[i]); + } + FREE_C_HEAP_ARRAY(Symbol*, _method_names); + FREE_C_HEAP_ARRAY(Symbol*, _class_names); +} diff --git a/src/hotspot/share/jfr/recorder/stacktrace/jfrStackFilter.hpp b/src/hotspot/share/jfr/recorder/stacktrace/jfrStackFilter.hpp new file mode 100644 index 0000000000000..19c1821149ca3 --- /dev/null +++ b/src/hotspot/share/jfr/recorder/stacktrace/jfrStackFilter.hpp @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2023, 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. + * + */ + +#ifndef SHARE_JFR_RECORDER_STACKTRACE_JFRSTACKFILTER_HPP +#define SHARE_JFR_RECORDER_STACKTRACE_JFRSTACKFILTER_HPP + +#include "jfr/utilities/jfrAllocation.hpp" + +class Mathod; +class Symbol; + +class JfrStackFilter : public JfrCHeapObj { + private: + size_t _count; + Symbol** _class_names; + Symbol** _method_names; + + public: + JfrStackFilter(Symbol** class_names, Symbol** method_names, size_t count); + ~JfrStackFilter(); + bool match(const Method* method) const; +}; + +#endif // SHARE_JFR_RECORDER_STACKTRACE_JFRSTACKFILTER_HPP diff --git a/src/hotspot/share/jfr/recorder/stacktrace/jfrStackFilterRegistry.cpp b/src/hotspot/share/jfr/recorder/stacktrace/jfrStackFilterRegistry.cpp new file mode 100644 index 0000000000000..481dcbdc840c6 --- /dev/null +++ b/src/hotspot/share/jfr/recorder/stacktrace/jfrStackFilterRegistry.cpp @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2023, 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. + * + */ + + +#include "precompiled.hpp" +#include "jfr/jni/jfrJavaSupport.hpp" +#include "jfr/recorder/stacktrace/jfrStackFilter.hpp" +#include "jfr/recorder/stacktrace/jfrStackFilterRegistry.hpp" +#include "logging/log.hpp" + +static const intptr_t STACK_FILTER_ELEMENTS_SIZE = 4096; +static const intptr_t STACK_FILTER_ERROR_CODE = -1; +static const JfrStackFilter* _elements[STACK_FILTER_ELEMENTS_SIZE]; +static intptr_t _free_list[STACK_FILTER_ELEMENTS_SIZE]; +static intptr_t _index = 0; +static intptr_t _free_list_index = 0; + +int64_t JfrStackFilterRegistry::add(jobjectArray classes, jobjectArray methods, JavaThread* jt) { + intptr_t c_size = 0; + Symbol** class_names = JfrJavaSupport::symbol_array(classes, jt, &c_size, true); + assert(class_names != nullptr, "invariant"); + intptr_t m_size = 0; + Symbol** method_names = JfrJavaSupport::symbol_array(methods, jt, &m_size, true); + assert(method_names != nullptr, "invariant"); + if (c_size != m_size) { + FREE_C_HEAP_ARRAY(Symbol*, class_names); + FREE_C_HEAP_ARRAY(Symbol*, method_names); + JfrJavaSupport::throw_internal_error("Method array size doesn't match class array size", jt); + return STACK_FILTER_ERROR_CODE; + } + assert(c_size >= 0, "invariant"); + const JfrStackFilter* filter = new JfrStackFilter(class_names, method_names, static_cast(c_size)); + return JfrStackFilterRegistry::add(filter); +} + +#ifdef ASSERT +static bool range_check(int64_t idx) { + return idx < STACK_FILTER_ELEMENTS_SIZE && idx >= 0; +} +#endif + +int64_t JfrStackFilterRegistry::add(const JfrStackFilter* filter) { + if (_free_list_index > 0) { + assert(range_check(_free_list_index), "invariant"); + const intptr_t free_index = _free_list[_free_list_index - 1]; + _elements[free_index] = filter; + _free_list_index--; + return free_index; + } + if (_index >= STACK_FILTER_ELEMENTS_SIZE - 1) { + log_warning(jfr)("Maximum number of @StackFrame in use has been reached."); + return STACK_FILTER_ERROR_CODE; + } + assert(range_check(_index), "invariant"); + _elements[_index] = filter; + return _index++; +} + +const JfrStackFilter* JfrStackFilterRegistry::lookup(int64_t id) { + if (id < 0) { + return nullptr; + } + assert(range_check(id), "invariant"); + return _elements[id]; +} + +void JfrStackFilterRegistry::remove(int64_t index) { + assert(range_check(index), "invariant"); + delete _elements[index]; + if (_free_list_index < STACK_FILTER_ELEMENTS_SIZE - 1) { + assert(range_check(_free_list_index), "invariant"); + _free_list[_free_list_index++] = index; + } +} diff --git a/src/hotspot/share/jfr/recorder/stacktrace/jfrStackFilterRegistry.hpp b/src/hotspot/share/jfr/recorder/stacktrace/jfrStackFilterRegistry.hpp new file mode 100644 index 0000000000000..e35fb90938fe6 --- /dev/null +++ b/src/hotspot/share/jfr/recorder/stacktrace/jfrStackFilterRegistry.hpp @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2023, 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. + * + */ + +#ifndef SHARE_JFR_RECORDER_STACKTRACE_JFRSTCKFILTERREGISTRY_HPP +#define SHARE_JFR_RECORDER_STACKTRACE_JFRSTCKFILTERREGISTRY_HPP + +#include "jni.h" +#include "jfr/utilities/jfrAllocation.hpp" + +class JavaThread; +class JfrStackFilter; + +class JfrStackFilterRegistry : AllStatic { + private: + static int64_t add(const JfrStackFilter* frame); + public: + static int64_t add(jobjectArray classes, jobjectArray methods, JavaThread* jt); + static void remove(int64_t id); + static const JfrStackFilter* lookup(int64_t id); +}; + +#endif // SHARE_JFR_RECORDER_STACKTRACE_JFRSTCKFILTERREGISTRY_HPP diff --git a/src/hotspot/share/jfr/recorder/stacktrace/jfrStackTrace.cpp b/src/hotspot/share/jfr/recorder/stacktrace/jfrStackTrace.cpp index c70f626a2fe3a..55e1e2ac3747d 100644 --- a/src/hotspot/share/jfr/recorder/stacktrace/jfrStackTrace.cpp +++ b/src/hotspot/share/jfr/recorder/stacktrace/jfrStackTrace.cpp @@ -30,6 +30,8 @@ #include "jfr/recorder/storage/jfrBuffer.hpp" #include "jfr/support/jfrMethodLookup.hpp" #include "jfr/support/jfrThreadLocal.hpp" +#include "jfrStackFilter.hpp" +#include "jfrStackFilterRegistry.hpp" #include "memory/allocation.inline.hpp" #include "oops/instanceKlass.inline.hpp" #include "runtime/continuation.hpp" @@ -284,7 +286,7 @@ bool JfrStackTrace::record_async(JavaThread* jt, const frame& frame) { return count > 0; } -bool JfrStackTrace::record(JavaThread* jt, const frame& frame, int skip) { +bool JfrStackTrace::record(JavaThread* jt, const frame& frame, int skip, int64_t stack_filter_id) { assert(jt != nullptr, "invariant"); assert(jt == Thread::current(), "invariant"); assert(jt->thread_state() != _thread_in_native, "invariant"); @@ -302,6 +304,7 @@ bool JfrStackTrace::record(JavaThread* jt, const frame& frame, int skip) { } vfs.next_vframe(); } + const JfrStackFilter* stack_filter = JfrStackFilterRegistry::lookup(stack_filter_id); _hash = 1; while (!vfs.at_end()) { if (count >= _max_frames) { @@ -309,6 +312,12 @@ bool JfrStackTrace::record(JavaThread* jt, const frame& frame, int skip) { break; } const Method* method = vfs.method(); + if (stack_filter != nullptr) { + if (stack_filter->match(method)) { + vfs.next_vframe(); + continue; + } + } const traceid mid = JfrTraceId::load(method); u1 type = vfs.is_interpreted_frame() ? JfrStackFrame::FRAME_INTERPRETER : JfrStackFrame::FRAME_JIT; int bci = 0; @@ -335,13 +344,13 @@ bool JfrStackTrace::record(JavaThread* jt, const frame& frame, int skip) { return count > 0; } -bool JfrStackTrace::record(JavaThread* current_thread, int skip) { +bool JfrStackTrace::record(JavaThread* current_thread, int skip, int64_t stack_filter_id) { assert(current_thread != nullptr, "invariant"); assert(current_thread == Thread::current(), "invariant"); if (!current_thread->has_last_Java_frame()) { return false; } - return record(current_thread, current_thread->last_frame(), skip); + return record(current_thread, current_thread->last_frame(), skip, stack_filter_id); } void JfrStackFrame::resolve_lineno() const { diff --git a/src/hotspot/share/jfr/recorder/stacktrace/jfrStackTrace.hpp b/src/hotspot/share/jfr/recorder/stacktrace/jfrStackTrace.hpp index acd9d41fbf71c..8b2ca022443fe 100644 --- a/src/hotspot/share/jfr/recorder/stacktrace/jfrStackTrace.hpp +++ b/src/hotspot/share/jfr/recorder/stacktrace/jfrStackTrace.hpp @@ -93,8 +93,8 @@ class JfrStackTrace : public JfrCHeapObj { void set_reached_root(bool reached_root) { _reached_root = reached_root; } void resolve_linenos() const; - bool record(JavaThread* current_thread, int skip); - bool record(JavaThread* current_thread, const frame& frame, int skip); + bool record(JavaThread* current_thread, int skip, int64_t stack_frame_id); + bool record(JavaThread* current_thread, const frame& frame, int skip, int64_t stack_frame_id); bool record_async(JavaThread* other_thread, const frame& frame); bool have_lineno() const { return _lineno; } diff --git a/src/hotspot/share/jfr/recorder/stacktrace/jfrStackTraceRepository.cpp b/src/hotspot/share/jfr/recorder/stacktrace/jfrStackTraceRepository.cpp index 26056141a72ed..1c207f5bb2b47 100644 --- a/src/hotspot/share/jfr/recorder/stacktrace/jfrStackTraceRepository.cpp +++ b/src/hotspot/share/jfr/recorder/stacktrace/jfrStackTraceRepository.cpp @@ -146,7 +146,7 @@ size_t JfrStackTraceRepository::clear(JfrStackTraceRepository& repo) { return processed; } -traceid JfrStackTraceRepository::record(Thread* current_thread, int skip /* 0 */) { +traceid JfrStackTraceRepository::record(Thread* current_thread, int skip /* 0 */, int64_t stack_filter_id /* -1 */) { assert(current_thread == Thread::current(), "invariant"); JfrThreadLocal* const tl = current_thread->jfr_thread_local(); assert(tl != nullptr, "invariant"); @@ -163,13 +163,14 @@ traceid JfrStackTraceRepository::record(Thread* current_thread, int skip /* 0 */ } assert(frames != nullptr, "invariant"); assert(tl->stackframes() == frames, "invariant"); - return instance().record(JavaThread::cast(current_thread), skip, frames, tl->stackdepth()); + return instance().record(JavaThread::cast(current_thread), skip, stack_filter_id, frames, tl->stackdepth()); } -traceid JfrStackTraceRepository::record(JavaThread* current_thread, int skip, JfrStackFrame *frames, u4 max_frames) { +traceid JfrStackTraceRepository::record(JavaThread* current_thread, int skip, int64_t stack_filter_id, JfrStackFrame *frames, u4 max_frames) { JfrStackTrace stacktrace(frames, max_frames); - return stacktrace.record(current_thread, skip) ? add(instance(), stacktrace) : 0; + return stacktrace.record(current_thread, skip, stack_filter_id) ? add(instance(), stacktrace) : 0; } + traceid JfrStackTraceRepository::add(JfrStackTraceRepository& repo, const JfrStackTrace& stacktrace) { traceid tid = repo.add_trace(stacktrace); if (tid == 0) { @@ -191,7 +192,7 @@ void JfrStackTraceRepository::record_for_leak_profiler(JavaThread* current_threa assert(tl != nullptr, "invariant"); assert(!tl->has_cached_stack_trace(), "invariant"); JfrStackTrace stacktrace(tl->stackframes(), tl->stackdepth()); - stacktrace.record(current_thread, skip); + stacktrace.record(current_thread, skip, -1); const traceid hash = stacktrace.hash(); if (hash != 0) { tl->set_cached_stack_trace_id(add(leak_profiler_instance(), stacktrace), hash); diff --git a/src/hotspot/share/jfr/recorder/stacktrace/jfrStackTraceRepository.hpp b/src/hotspot/share/jfr/recorder/stacktrace/jfrStackTraceRepository.hpp index d59dd5f57e0a8..abcf88450ffea 100644 --- a/src/hotspot/share/jfr/recorder/stacktrace/jfrStackTraceRepository.hpp +++ b/src/hotspot/share/jfr/recorder/stacktrace/jfrStackTraceRepository.hpp @@ -67,10 +67,10 @@ class JfrStackTraceRepository : public JfrCHeapObj { traceid add_trace(const JfrStackTrace& stacktrace); static traceid add(JfrStackTraceRepository& repo, const JfrStackTrace& stacktrace); static traceid add(const JfrStackTrace& stacktrace); - traceid record(JavaThread* current_thread, int skip, JfrStackFrame* frames, u4 max_frames); + traceid record(JavaThread* current_thread, int skip, int64_t stack_filter_id, JfrStackFrame* frames, u4 max_frames); public: - static traceid record(Thread* current_thread, int skip = 0); + static traceid record(Thread* current_thread, int skip = 0, int64_t stack_filter_id = -1); }; #endif // SHARE_JFR_RECORDER_STACKTRACE_JFRSTACKTRACEREPOSITORY_HPP diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/ProcessStartEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/ProcessStartEvent.java index b936099aa743a..5ad2dc82fc1de 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/ProcessStartEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/ProcessStartEvent.java @@ -38,6 +38,7 @@ @Description("Operating system process started") @MirrorEvent(className = "jdk.internal.event.ProcessStartEvent") @RemoveFields("duration") +@StackFilter({"java.lang.ProcessBuilder", "java.lang.Runtime::exec"}) public final class ProcessStartEvent extends AbstractJDKEvent { @Label("Process Id") public long pid; diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/SecurityPropertyModificationEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/SecurityPropertyModificationEvent.java index df2e9c241de06..7f4e5045c9d23 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/SecurityPropertyModificationEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/SecurityPropertyModificationEvent.java @@ -35,6 +35,7 @@ @Description("Modification of Security property") @MirrorEvent(className = "jdk.internal.event.SecurityPropertyModificationEvent") @RemoveFields("duration") +@StackFilter({"java.security.Security::setProperty"}) public final class SecurityPropertyModificationEvent extends AbstractJDKEvent { @Label("Key") public String key; diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/SecurityProviderServiceEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/SecurityProviderServiceEvent.java index 193bfa54ae255..8bbbf09d87df5 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/SecurityProviderServiceEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/SecurityProviderServiceEvent.java @@ -38,6 +38,7 @@ @Description("Details of Provider.getInstance(String type, String algorithm) calls") @MirrorEvent(className = "jdk.internal.event.SecurityProviderServiceEvent") @RemoveFields("duration") +@StackFilter({"java.security.Provider::getService"}) public final class SecurityProviderServiceEvent extends AbstractJDKEvent { @Label("Type of Service") public String type; diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/StackFilter.java b/src/jdk.jfr/share/classes/jdk/jfr/events/StackFilter.java new file mode 100644 index 0000000000000..f0c6a45bf836f --- /dev/null +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/StackFilter.java @@ -0,0 +1,65 @@ +package jdk.jfr.events; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import jdk.jfr.MetadataDefinition; + +/** +* Event annotation, specifies method names or classes to exclude in a stack +* trace. +*

    +* The following example illustrates how the {@code StackFilter} annotation can +* be used to remove the {@code Logger::log} method in a stack trace: +* +* {@snippet : +* package com.example; +* +* @Name("example.LogMessage") +* @Label("Log Message") +* @StackFilter("com.example.Logger::log") +* class LogMessage extends Event { +* @Label("Message") +* String message; +* } +* +* public class Logger { +* +* public static void log(String message) { +* System.out.print(Instant.now() + " : " + message); +* LogMessage event = new LogMessage(); +* event.message = message; +* event.commit(); +* } +* } +* } +* +* @since 22 +*/ +@Target({ ElementType.TYPE }) +@Inherited +@Retention(RetentionPolicy.RUNTIME) +@MetadataDefinition +public @interface StackFilter { + /** + * The methods or classes that should not be part of an event stack trace. + *

    + * A filter is formed by using the fully qualified class name concatenated with + * the method name using {@code "::"} as separator, for example + * {@code "java.lang.String::toString"} + *

    + * If only the name of a class is specified, for example {@code + * "java.lang.String"}, all methods in that class are filtered out. + *

    + * Methods can't be qualified using method parameters or return types. + *

    + * Instance methods belonging to an interface can't be filtered out. + *

    + * Wilcards are not permitted. + * + * @return the method names, not {@code null} + */ + String[] value(); +} diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/TLSHandshakeEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/TLSHandshakeEvent.java index ce5e8c8576804..df2f4cfc2ed55 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/TLSHandshakeEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/TLSHandshakeEvent.java @@ -39,6 +39,7 @@ @Description("Parameters used in TLS Handshake") @MirrorEvent(className = "jdk.internal.event.TLSHandshakeEvent") @RemoveFields("duration") +@StackFilter("sun.security.ssl.Finished::recordEvent") public final class TLSHandshakeEvent extends AbstractJDKEvent { @Label("Peer Host") public String peerHost; diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/ThreadSleepEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/ThreadSleepEvent.java index ab606d8d6de4d..216ad370acafd 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/ThreadSleepEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/ThreadSleepEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2023, 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 @@ -35,6 +35,9 @@ @Label("Java Thread Sleep") @Name("jdk.ThreadSleep") @MirrorEvent(className = "jdk.internal.event.ThreadSleepEvent") +@StackFilter({"java.lang.Thread::afterSleep", + "java.lang.Thread::sleepNanos", + "java.lang.Thread::sleep"}) public final class ThreadSleepEvent extends AbstractJDKEvent { @Label("Sleep Time") @Timespan(Timespan.NANOSECONDS) diff --git a/src/jdk.jfr/share/classes/jdk/jfr/internal/EventControl.java b/src/jdk.jfr/share/classes/jdk/jfr/internal/EventControl.java index d2327a189b54e..a83d244f1d773 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/EventControl.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/EventControl.java @@ -34,6 +34,7 @@ import java.util.Collections; import java.util.List; +import jdk.internal.module.Checks; import jdk.internal.module.Modules; import jdk.jfr.AnnotationElement; import jdk.jfr.Enabled; @@ -44,6 +45,8 @@ import jdk.jfr.StackTrace; import jdk.jfr.Threshold; import jdk.jfr.events.ActiveSettingEvent; +import jdk.jfr.events.StackFilter; +import jdk.jfr.internal.JVM; import jdk.jfr.internal.settings.CutoffSetting; import jdk.jfr.internal.settings.EnabledSetting; import jdk.jfr.internal.settings.PeriodSetting; @@ -65,6 +68,7 @@ record NamedControl(String name, Control control) { private static final Type TYPE_PERIOD = TypeLibrary.createType(PeriodSetting.class); private static final Type TYPE_CUTOFF = TypeLibrary.createType(CutoffSetting.class); private static final Type TYPE_THROTTLE = TypeLibrary.createType(ThrottleSetting.class); + private static final long STACK_FILTER_ID = Type.getTypeId(StackFilter.class); private final ArrayList settingControls = new ArrayList<>(); private final ArrayList namedControls = new ArrayList<>(5); @@ -89,6 +93,7 @@ record NamedControl(String name, Control control) { } addControl(Enabled.NAME, defineEnabled(eventType)); + addStackFilters(eventType); List aes = new ArrayList<>(eventType.getAnnotationElements()); remove(eventType, aes, Threshold.class); remove(eventType, aes, Period.class); @@ -96,11 +101,84 @@ record NamedControl(String name, Control control) { remove(eventType, aes, StackTrace.class); remove(eventType, aes, Cutoff.class); remove(eventType, aes, Throttle.class); + remove(eventType, aes, StackFilter.class); eventType.setAnnotations(aes); this.type = eventType; this.idName = String.valueOf(eventType.getId()); } + private void addStackFilters(PlatformEventType eventType) { + String[] filter = getStackFilter(eventType); + if (filter != null) { + int size = filter.length; + List types = new ArrayList<>(size); + List methods = new ArrayList<>(size); + for (String frame : filter) { + int index = frame.indexOf("::"); + String clazz = null; + String method = null; + boolean valid = false; + if (index != -1) { + clazz = frame.substring(0, index); + method = frame.substring(index + 2); + if (clazz.isEmpty()) { + clazz = null; + valid = isValidMethod(method); + } else { + valid = isValidType(clazz) && isValidMethod(method); + } + } else { + clazz = frame; + valid = isValidType(frame); + } + if (valid) { + if (clazz == null) { + types.add(null); + } else { + types.add(clazz.replace(".", "/")); + } + // If unqualified class name equals method name, it's a constructor + String className = clazz.substring(clazz.lastIndexOf(".") + 1); + if (className.equals(method)) { + method = ""; + } + methods.add(method); + } else { + Logger.log(LogTag.JFR, LogLevel.WARN, "@StackFrameFilter element ignored, not a valid Java identifier."); + } + } + if (!types.isEmpty()) { + String[] typeArray = types.toArray(new String[0]); + String[] methodArray = methods.toArray(new String[0]); + long id = MetadataRepository.getInstance().registerStackFilter(typeArray, methodArray); + eventType.setStackFilterId(id); + } + } + } + + private String[] getStackFilter(PlatformEventType eventType) { + for (var a : eventType.getAnnotationElements()) { + if (a.getTypeId() == STACK_FILTER_ID) { + return (String[])a.getValue("value"); + } + } + return null; + } + + private boolean isValidType(String className) { + if (className.length() < 1 || className.length() > 65535) { + return false; + } + return Checks.isClassName(className); + } + + private boolean isValidMethod(String method) { + if (method.length() < 1 || method.length() > 65535) { + return false; + } + return Checks.isJavaIdentifier(method); + } + private boolean hasControl(String name) { for (NamedControl nc : namedControls) { if (name.equals(nc.name)) { diff --git a/src/jdk.jfr/share/classes/jdk/jfr/internal/JVM.java b/src/jdk.jfr/share/classes/jdk/jfr/internal/JVM.java index 986b6f2450bac..3f37924c9a72f 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/JVM.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/JVM.java @@ -149,10 +149,15 @@ private static class ChunkRotationMonitor {} * * Requires that JFR has been started with {@link #createNativeJFR()} * - * @param skipCount number of frames to skip + * @param skipCount number of frames to skip, or 0 if no frames should be + * skipped + * + * @param ID ID of the filter that should be used, or -1 if no filter should + * be used + * * @return a unique stack trace identifier */ - public static native long getStackTraceId(int skipCount); + public static native long getStackTraceId(int skipCount, long stackFilerId); /** * Return identifier for thread @@ -628,4 +633,30 @@ private static class ChunkRotationMonitor {} * @param bytes number of bytes that were lost */ public static native void emitDataLoss(long bytes); + + /** + * Registers stack filters that should be used with getStackTrace(int, long) + *

    + * Method name at an array index is for class at the same array index. + *

    + * This method should be called holding the MetadataRepository lock and before + * bytecode for the associated event class has been added. + * + * @param classes, name of classes, for example {"java/lang/String"}, not + * {@code null} + * @param methods, name of method, for example {"toString"}, not {@code null} + * + * @return an ID that can be used to unregister the start frames, or -1 if it could not be registered + */ + public static native long registerStackFilter(String[] classes, String[] methods); + + /** + * Unregisters a set of stack filters. + *

    + * This method should be called holding the MetadataRepository lock and after + * the associated event class has been unloaded. + * + * @param stackFilterId the stack filter ID to unregister + */ + public static native void unregisterStackFilter(long stackFilterId); } diff --git a/src/jdk.jfr/share/classes/jdk/jfr/internal/MetadataRepository.java b/src/jdk.jfr/share/classes/jdk/jfr/internal/MetadataRepository.java index 417238c06f8af..c83e9de7893cf 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/MetadataRepository.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/MetadataRepository.java @@ -321,6 +321,9 @@ private void unregisterUnloaded() { if (!knownIds.contains(pe.getId())) { if (!pe.isJVM()) { pe.setRegistered(false); + if (pe.hasStackFilters()) { + JVM.unregisterStackFilter(pe.getStackFilterId()); + } } } } @@ -355,4 +358,8 @@ static void unhideInternalTypes() { public synchronized List getVisibleTypes() { return TypeLibrary.getVisibleTypes(); } + + public synchronized long registerStackFilter(String[] typeArray, String[] methodArray) { + return JVM.registerStackFilter(typeArray, methodArray); + } } diff --git a/src/jdk.jfr/share/classes/jdk/jfr/internal/PlatformEventType.java b/src/jdk.jfr/share/classes/jdk/jfr/internal/PlatformEventType.java index e600a0c70fe0c..e8621c56794d9 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/PlatformEventType.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/PlatformEventType.java @@ -46,6 +46,7 @@ public final class PlatformEventType extends Type { private final List settings = new ArrayList<>(5); private final boolean dynamicSettings; private final int stackTraceOffset; + private long startFilterId = -1; // default values private boolean largeSize = false; @@ -339,4 +340,16 @@ public void setLargeSize() { public boolean isMethodSampling() { return isMethodSampling; } + + public void setStackFilterId(long id) { + startFilterId = id; + } + + public boolean hasStackFilters() { + return startFilterId >= 0; + } + + public long getStackFilterId() { + return startFilterId; + } } diff --git a/src/jdk.jfr/share/classes/jdk/jfr/internal/TypeLibrary.java b/src/jdk.jfr/share/classes/jdk/jfr/internal/TypeLibrary.java index 0a1f1c05dee57..f461212659d37 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/TypeLibrary.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/TypeLibrary.java @@ -60,6 +60,7 @@ import jdk.jfr.ValueDescriptor; import jdk.jfr.internal.util.Utils; import jdk.jfr.internal.util.ImplicitFields; +import jdk.internal.module.Modules; public final class TypeLibrary { private static boolean implicitFieldTypes; @@ -165,7 +166,6 @@ public static synchronized AnnotationElement createAnnotation(Annotation annotat for (ValueDescriptor v : type.getFields()) { values.add(invokeAnnotation(annotation, v.getName())); } - return PrivateAccess.getInstance().newAnnotation(type, values, annotation.annotationType().getClassLoader() == null); } return null; @@ -178,6 +178,15 @@ private static Object invokeAnnotation(Annotation annotation, String methodName) } catch (NoSuchMethodException e1) { throw (Error) new InternalError("Could not locate method " + methodName + " in annotation " + annotation.getClass().getName()); } + // Add export from JDK proxy module + if (annotation.getClass().getClassLoader() == null) { + if (annotation.getClass().getName().contains("Proxy")) { + Module proxyModule = annotation.getClass().getModule(); + String proxyPackage = annotation.getClass().getPackageName(); + Module jfrModule = TypeLibrary.class.getModule(); + Modules.addExports(proxyModule, proxyPackage, jfrModule); + } + } SecuritySupport.setAccessible(m); try { return m.invoke(annotation, new Object[0]); diff --git a/src/jdk.jfr/share/classes/jdk/jfr/internal/event/EventWriter.java b/src/jdk.jfr/share/classes/jdk/jfr/internal/event/EventWriter.java index 43fc613049558..833fb087e2420 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/event/EventWriter.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/event/EventWriter.java @@ -188,7 +188,7 @@ public void putClass(Class aClass) { public void putStackTrace() { if (eventType.getStackTraceEnabled()) { - putLong(JVM.getStackTraceId(eventType.getStackTraceOffset())); + putLong(JVM.getStackTraceId(eventType.getStackTraceOffset(), eventType.getStackFilterId())); } else { putLong(0L); } diff --git a/test/jdk/jdk/jfr/api/metadata/annotations/TestStackFilter.java b/test/jdk/jdk/jfr/api/metadata/annotations/TestStackFilter.java new file mode 100644 index 0000000000000..2acd369b6cd8f --- /dev/null +++ b/test/jdk/jdk/jfr/api/metadata/annotations/TestStackFilter.java @@ -0,0 +1,319 @@ +/* + * Copyright (c) 2023, 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. + */ + +package jdk.jfr.api.metadata.annotations; + +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import jdk.jfr.api.metadata.annotations.UnloadableClass; +import jdk.jfr.Event; +import jdk.jfr.AnnotationElement; +import jdk.jfr.consumer.RecordedEvent; +import jdk.jfr.consumer.RecordedFrame; +import jdk.jfr.consumer.RecordedMethod; +import jdk.jfr.consumer.RecordedStackTrace; +import jdk.jfr.consumer.RecordingStream; +import jdk.jfr.events.StackFilter; +import jdk.jfr.Recording; +import jdk.jfr.Name; +import jdk.jfr.EventType; +import jdk.jfr.EventFactory; +import jdk.jfr.FlightRecorder; +import jdk.test.lib.jfr.Events; +import jdk.test.lib.jfr.TestClassLoader; + +/** + * @test + * @key jfr + * @requires vm.hasJFR + * @modules jdk.jfr/jdk.jfr.events + * @library /test/lib /test/jdk + * @run main/othervm -Xlog:jfr=warning jdk.jfr.api.metadata.annotations.TestStackFilter + */ +public class TestStackFilter { + private static class Quux { + private static void one() throws Exception { + two(); + } + private static void two() throws Exception { + three(); + } + + private static void three() throws Exception { + TestStackFilter.qux(); + } + } + private final static String PACKAGE = "jdk.jfr.api.metadata.annotations.TestStackFilter"; + private final static String M1 = PACKAGE + "::foo"; + private final static String M2 = PACKAGE + "::baz"; + private final static String C1 = PACKAGE + "$Quux"; + + @StackFilter({ M1, M2 }) + @Name("MethodFilter") + public static class MethodFilterEvent extends Event { + } + + @StackFilter(C1) + @Name("ClassFilter") + public static class ClassFilterEvent extends Event { + } + + @StackFilter({}) + @Name("Empty") + public static class EmptyEvent extends Event { + } + + @StackFilter(PACKAGE + "::testUnload") + @Name("Unload") + public static class UnloadEvent extends Event { + } + + @StackFilter(PACKAGE + "::emitCommitter") + @Name("Reuse") + public static class ReuseEvent extends Event { + } + + @StackFilter(PACKAGE + "::emitCommitter") + @Name("Max") + public static class ExceedMaxEvent extends Event { + } + + public static void main(String[] args) throws Exception { + testMethodFilter(); + testClassFilter(); + testUnload(); + testReuse(); + testExceedMax(); + } + + // Use more stack filters than there is capacity for + private static void testExceedMax() throws Exception { + try (Recording r = new Recording()) { + r.start(); + // Maximum number of simultaneous event classes that can + // use a filter is 4096. Additional filters will be ignored. + var classes = new ArrayList<>(); + for (int i = 0; i < 4200; i++) { + Class eventClass = UnloadableClass.load(ExceedMaxEvent.class); + emitCommitter(eventClass); + classes.add(eventClass); + } + List events = Events.fromRecording(r); + if (events.size() != 4200) { + throw new Exception("Expected 4200 'Max' events"); + } + int emitCommitterCount = 0; + int textExceedMaxCount = 0; + for (RecordedEvent event : events) { + RecordedStackTrace s = event.getStackTrace(); + if (s == null) { + System.out.println(event); + throw new Exception("Expected stack trace for 'Max' event"); + } + + RecordedFrame f = s.getFrames().get(0); + if (!f.isJavaFrame()) { + throw new Exception("Expected Java frame for 'Max' event"); + } + String methodName = f.getMethod().getName(); + switch (methodName) { + case "emitCommitter": + emitCommitterCount++; + break; + case "testExceedMax": + textExceedMaxCount++; + break; + default: + System.out.println(event); + throw new Exception("Unexpected top frame " + methodName + " for 'Max' event"); + } + } + // Can't match exact because filters from previous tests may be in use + // or because filters added by JDK events filters + if (emitCommitterCount == 0) { + throw new Exception("Expected at least some events with emitCommitter() as top frame, found " + emitCommitterCount); + } + if (textExceedMaxCount < 500) { + throw new Exception("Expected at least 500 events with testExceedMax() as top frame, found " + textExceedMaxCount); + } + } + } + + // Tests that event classes with @StackFilter that are unloaded + // reuses the memory slot used to bookkeep things in native + private static void testReuse() throws Exception { + try (Recording r = new Recording()) { + r.enable("Reuse"); + r.start(); + for (int i = 0; i < 48; i++) { + Class eventClass = UnloadableClass.load(ReuseEvent.class); + emitCommitter(eventClass); + if (i % 16 == 0) { + System.gc(); + rotate(); + } + } + r.stop(); + List events = Events.fromRecording(r); + if (events.size() != 48) { + throw new Exception("Expected 48 'Reuse' events"); + } + for (RecordedEvent event : events) { + assertTopFrame(event, "testReuse"); + } + } + + } + + // This test registers a stack filter, emits an event with the filter + // and unregisters it. While this is happening, another + // filter is being used. + private static void testUnload() throws Exception { + try (Recording r = new Recording()) { + r.start(); + Class eventClass = UnloadableClass.load(UnloadEvent.class); + emitCommitter(eventClass); + EventType type = getType("Unload"); + if (type == null) { + throw new Exception("Expected event type named 'Unload'"); + } + eventClass = null; + while (true) { + System.gc(); + rotate(); + type = getType("Unload"); + if (type == null) { + return; + } + System.out.println("Unload class not unloaded. Retrying ..."); + } + } + } + + private static void testMethodFilter() throws Exception { + try (Recording r = new Recording()) { + r.enable(MethodFilterEvent.class); + r.start(); + foo(); + bar(); + empty(); + r.stop(); + List events = Events.fromRecording(r); + if (events.isEmpty()) { + throw new Exception("Excected events"); + } + + RecordedEvent e1 = events.get(0); + assertTopFrame(e1, "testMethodFilter"); + + RecordedEvent e2 = events.get(1); + assertTopFrame(e2, "bar"); + + RecordedEvent e3 = events.get(2); + assertTopFrame(e3, "empty"); + } + } + + private static void testClassFilter() throws Exception { + try (Recording r = new Recording()) { + r.enable(MethodFilterEvent.class); + r.start(); + Quux.one(); + r.stop(); + List events = Events.fromRecording(r); + if (events.isEmpty()) { + throw new Exception("Excected events"); + } + + RecordedEvent e = events.get(0); + assertTopFrame(e, "qux"); + for (RecordedFrame f : e.getStackTrace().getFrames()) { + if (f.getMethod().getType().getName().contains("Quux")) { + System.out.println(e); + throw new Exception("Didn't expect Quux class in stack trace"); + } + } + } + } + + private static void empty() { + EmptyEvent event = new EmptyEvent(); + event.commit(); + } + + static void foo() { + baz(); + } + + static void bar() { + baz(); + } + + static void baz() { + MethodFilterEvent event = new MethodFilterEvent(); + event.commit(); + } + + static void qux() { + ClassFilterEvent event = new ClassFilterEvent(); + event.commit(); + } + + private static void rotate() { + try (Recording r = new Recording()) { + r.start(); + } + } + + private static EventType getType(String name) { + for (EventType et : FlightRecorder.getFlightRecorder().getEventTypes()) { + if (et.getName().equals(name)) { + return et; + } + + } + return null; + } + + private static void emitCommitter(Class eventClass) throws Exception { + Event event = eventClass.getConstructor().newInstance(); + event.commit(); + } + + private static void assertTopFrame(RecordedEvent event, String methodName) throws Exception { + RecordedStackTrace stackTrace = event.getStackTrace(); + if (stackTrace == null) { + System.out.println(event); + throw new Exception("No stack trace found when looking for top frame '" + methodName + "'"); + } + RecordedFrame frame = stackTrace.getFrames().get(0); + RecordedMethod method = frame.getMethod(); + if (!methodName.equals(method.getName())) { + System.out.println(event); + throw new Exception("Expected top frame '" + methodName + "'"); + } + } +} diff --git a/test/jdk/jdk/jfr/api/metadata/annotations/UnloadableClass.java b/test/jdk/jdk/jfr/api/metadata/annotations/UnloadableClass.java new file mode 100644 index 0000000000000..4a4a57a0e55d9 --- /dev/null +++ b/test/jdk/jdk/jfr/api/metadata/annotations/UnloadableClass.java @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2023, 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. + */ + +package jdk.jfr.api.metadata.annotations; + +import java.io.DataInputStream; +import java.security.CodeSource; +import java.security.ProtectionDomain; +import java.security.cert.Certificate; + +/* Purpose of this class is to load a specified class in its + * own class loader, but delegate every other class. + */ +public final class UnloadableClass extends ClassLoader { + private final String className; + + @SuppressWarnings({ "unchecked", "rawtypes" }) + public static Class load(Class clazz) throws ClassNotFoundException { + UnloadableClass cl = new UnloadableClass(clazz.getName()); + return cl.loadClass(cl.className); + } + + private UnloadableClass(String className) { + super("Class loader for class " + className, ClassLoader.getSystemClassLoader()); + this.className = className; + } + + public Class loadClass(String name) throws ClassNotFoundException { + if (!className.equals(name)) { + return super.loadClass(name); + } + String resourceName = name.replace('.', '/') + ".class"; + try (var is = getResourceAsStream(resourceName); var dis = new DataInputStream(is)) { + int size = is.available(); + byte buffer[] = new byte[size]; + dis.readFully(buffer); + CodeSource cs = new CodeSource(getResource(resourceName), (Certificate[]) null); + ProtectionDomain pd = new ProtectionDomain(cs, null); + return defineClass(name, buffer, 0, buffer.length, pd); + } catch (Exception e) { + throw new InternalError(e); + } + } +} diff --git a/test/jdk/jdk/jfr/event/os/TestProcessStart.java b/test/jdk/jdk/jfr/event/os/TestProcessStart.java index 32d3be0e980f2..bcf216857bb9b 100644 --- a/test/jdk/jdk/jfr/event/os/TestProcessStart.java +++ b/test/jdk/jdk/jfr/event/os/TestProcessStart.java @@ -47,7 +47,7 @@ public class TestProcessStart { public static void main(String[] args) throws Throwable { try (Recording recording = new Recording()) { - recording.enable(EVENT_NAME); + recording.enable(EVENT_NAME).withStackTrace(); recording.start(); List commandList = new ArrayList<>(); if (Platform.isWindows()) { @@ -74,6 +74,7 @@ public static void main(String[] args) throws Throwable { Events.assertField(event, "pid").equal(p.pid()); Events.assertField(event, "directory").equal(pb.directory().toString()); Events.assertField(event, "command").equal(command.toString()); + Events.assertTopFrame(event, TestProcessStart.class, "main"); } } } diff --git a/test/jdk/jdk/jfr/event/runtime/TestThreadSleepEvent.java b/test/jdk/jdk/jfr/event/runtime/TestThreadSleepEvent.java index afd96b66540b8..c084808ce79ae 100644 --- a/test/jdk/jdk/jfr/event/runtime/TestThreadSleepEvent.java +++ b/test/jdk/jdk/jfr/event/runtime/TestThreadSleepEvent.java @@ -56,13 +56,7 @@ public static void main(String[] args) throws Throwable { recording.enable(EVENT_NAME).withoutThreshold().withStackTrace(); recording.start(); Thread.sleep(SLEEP_TIME_MS); - Thread virtualThread = Thread.ofVirtual().start(() -> { - try { - Thread.sleep(SLEEP_TIME_MS); - } catch (InterruptedException ie) { - throw new RuntimeException(ie); - } - }); + Thread virtualThread = Thread.ofVirtual().start(TestThreadSleepEvent::virtualSleep); virtualThread.join(); recording.stop(); @@ -74,14 +68,24 @@ public static void main(String[] args) throws Throwable { System.out.println(event.getStackTrace()); if (event.getThread().getJavaThreadId() == Thread.currentThread().getId()) { threadCount--; + Events.assertTopFrame(event, TestThreadSleepEvent.class, "main"); Events.assertDuration(event, "time", Duration.ofMillis(SLEEP_TIME_MS)); } if (event.getThread().getJavaThreadId() == virtualThread.getId()) { threadCount--; + Events.assertTopFrame(event, TestThreadSleepEvent.class, "virtualSleep"); Events.assertDuration(event, "time", Duration.ofMillis(SLEEP_TIME_MS)); } } Asserts.assertEquals(threadCount, 0, "Could not find all expected events"); } } + + private static void virtualSleep() { + try { + Thread.sleep(SLEEP_TIME_MS); + } catch (InterruptedException ie) { + throw new RuntimeException(ie); + } + } } diff --git a/test/jdk/jdk/jfr/event/security/TestSecurityPropertyModificationEvent.java b/test/jdk/jdk/jfr/event/security/TestSecurityPropertyModificationEvent.java index 0c1e5b32c5cb4..ff5919b25909a 100644 --- a/test/jdk/jdk/jfr/event/security/TestSecurityPropertyModificationEvent.java +++ b/test/jdk/jdk/jfr/event/security/TestSecurityPropertyModificationEvent.java @@ -58,7 +58,7 @@ public static void main(String[] args) throws Exception { } try (Recording recording = new Recording()) { - recording.enable(EventNames.SecurityProperty); + recording.enable(EventNames.SecurityProperty).withStackTrace(); recording.start(); for (String key: keys) { Security.setProperty(key, keyValue); @@ -78,6 +78,7 @@ private static void assertEvent(List events) throws Exception { if (keys.contains(e.getString("key"))) { Events.assertField(e, "value").equal(keyValue); i++; + Events.assertTopFrame(e, TestSecurityPropertyModificationEvent.class, "main"); } else { System.out.println(events); throw new Exception("Unexpected event at index:" + i); diff --git a/test/jdk/jdk/jfr/event/security/TestSecurityProviderServiceEvent.java b/test/jdk/jdk/jfr/event/security/TestSecurityProviderServiceEvent.java index a886a7e3b2047..df801c5190742 100644 --- a/test/jdk/jdk/jfr/event/security/TestSecurityProviderServiceEvent.java +++ b/test/jdk/jdk/jfr/event/security/TestSecurityProviderServiceEvent.java @@ -52,32 +52,38 @@ public class TestSecurityProviderServiceEvent { public static void main(String[] args) throws Exception { testAlg(cipherFunc, "AES", "SunJCE", - "SunEC", "Cipher", 1, Collections.emptyList()); + "SunEC", "Cipher", 1, Collections.emptyList(), + javax.crypto.Cipher.class.getName(), "getInstance"); testAlg(signatureFunc, "SHA256withRSA", "SunRsaSign", - "SunEC", "Signature", 2, List.of("MessageDigest")); + "SunEC", "Signature", 2, List.of("MessageDigest"), + "sun.security.jca.GetInstance", "getService"); testAlg(messageDigestFunc, "SHA-512", "SUN", - "SunEC", "MessageDigest", 1, Collections.emptyList()); + "SunEC", "MessageDigest", 1, Collections.emptyList(), + "sun.security.jca.GetInstance", "getService"); testAlg(keystoreFunc, "PKCS12", "SUN", - "SunEC", "KeyStore", 1, Collections.emptyList()); + "SunEC", "KeyStore", 1, Collections.emptyList(), + "sun.security.jca.GetInstance", "getService"); testAlg(certPathBuilderFunc, "PKIX", "SUN", - "SunEC", "CertPathBuilder", 2, List.of("CertificateFactory")); + "SunEC", "CertPathBuilder", 2, List.of("CertificateFactory"), + "sun.security.jca.GetInstance", "getService"); } private static void testAlg(BiFunction bif, String alg, String workingProv, String brokenProv, String algType, - int expected, List other) throws Exception { + int expected, List other, + String clazz, String method) throws Exception { // bootstrap security Provider services Provider p = bif.apply(alg, workingProv); try (Recording recording = new Recording()) { - recording.enable(EventNames.SecurityProviderService); + recording.enable(EventNames.SecurityProviderService).withStackTrace(); recording.start(); p = bif.apply(alg, workingProv); bif.apply(alg, brokenProv); recording.stop(); List events = Events.fromRecording(recording); Asserts.assertEquals(events.size(), expected, "Incorrect number of events"); - assertEvent(events, algType, alg, p.getName(), other); + assertEvent(events, algType, alg, p.getName(), other, clazz, method); } } @@ -137,7 +143,8 @@ private static void testAlg(BiFunction bif, String alg }; private static void assertEvent(List events, String type, - String alg, String workingProv, List other) { + String alg, String workingProv, List other, String clazz, + String method) { boolean secondaryEventOK = other.isEmpty() ? true : false; for (RecordedEvent e : events) { if (other.contains(e.getValue("type"))) { @@ -148,10 +155,10 @@ private static void assertEvent(List events, String type, Events.assertField(e, "provider").equal(workingProv); Events.assertField(e, "type").equal(type); Events.assertField(e, "algorithm").equal(alg); + Events.assertTopFrame(e, clazz, method); } if (!secondaryEventOK) { throw new RuntimeException("Secondary events missing"); } - } } diff --git a/test/jdk/jdk/jfr/event/security/TestTLSHandshakeEvent.java b/test/jdk/jdk/jfr/event/security/TestTLSHandshakeEvent.java index 48e1fdfdd590d..7c5240a2a72e5 100644 --- a/test/jdk/jdk/jfr/event/security/TestTLSHandshakeEvent.java +++ b/test/jdk/jdk/jfr/event/security/TestTLSHandshakeEvent.java @@ -43,7 +43,7 @@ public class TestTLSHandshakeEvent { public static void main(String[] args) throws Exception { try (Recording recording = new Recording()) { - recording.enable(EventNames.TLSHandshake); + recording.enable(EventNames.TLSHandshake).withStackTrace(); recording.start(); TestTLSHandshake handshake = new TestTLSHandshake(); handshake.run(); @@ -63,6 +63,10 @@ private static void assertEvent(List events, TestTLSHandshake han Events.assertField(e, "protocolVersion").equal(handshake.protocolVersion); Events.assertField(e, "certificateId").equal(TestTLSHandshake.CERT_ID); Events.assertField(e, "cipherSuite").equal(TestTLSHandshake.CIPHER_SUITE); + var method = e.getStackTrace().getFrames().get(0).getMethod(); + if (method.getName().equals("recordEvent")) { + throw new Exception("Didn't expected recordEvent as top frame"); + } return; } } diff --git a/test/jdk/jdk/jfr/jvm/TestGetStackTraceId.java b/test/jdk/jdk/jfr/jvm/TestGetStackTraceId.java index cdb8a9a5c43ef..8a23e55140886 100644 --- a/test/jdk/jdk/jfr/jvm/TestGetStackTraceId.java +++ b/test/jdk/jdk/jfr/jvm/TestGetStackTraceId.java @@ -52,7 +52,7 @@ public static void main(String... args) { } private static void assertMaxSkip() { - Asserts.assertEquals(JVM.getStackTraceId(Integer.MAX_VALUE), 0L, "Insane skip level " + Asserts.assertEquals(JVM.getStackTraceId(Integer.MAX_VALUE, -1), 0L, "Insane skip level " + Integer.MAX_VALUE + " should not return a valid stack trace id"); } @@ -64,6 +64,6 @@ public static long getStackIdOfDepth(int depth) { if (depth > 0) { return getStackIdOfDepth(depth - 1); } - return JVM.getStackTraceId(0); + return JVM.getStackTraceId(0, -1); } } diff --git a/test/lib/jdk/test/lib/jfr/Events.java b/test/lib/jdk/test/lib/jfr/Events.java index 620e5b0fcc3e7..e3e5979817962 100644 --- a/test/lib/jdk/test/lib/jfr/Events.java +++ b/test/lib/jdk/test/lib/jfr/Events.java @@ -365,20 +365,42 @@ private static boolean containsEvent(List events, String name) { return false; } + public static void assertTopFrame(RecordedEvent event, Class expectedClass, String expectedMethodName) { + assertTopFrame(event, expectedClass.getName(), expectedMethodName); + } + + public static void assertTopFrame(RecordedEvent event, String expectedClass, String expectedMethodName) { + RecordedStackTrace stackTrace = event.getStackTrace(); + Asserts.assertNotNull(stackTrace, "Missing stack trace"); + RecordedFrame topFrame = stackTrace.getFrames().get(0); + if (isFrame(topFrame, expectedClass, expectedMethodName)) { + return; + } + String expected = expectedClass + "::" + expectedMethodName; + Asserts.fail("Expected top frame " + expected + ". Found " + topFrame); + } + public static void assertFrame(RecordedEvent event, Class expectedClass, String expectedMethodName) { RecordedStackTrace stackTrace = event.getStackTrace(); Asserts.assertNotNull(stackTrace, "Missing stack trace"); for (RecordedFrame frame : stackTrace.getFrames()) { - if (frame.isJavaFrame()) { - RecordedMethod method = frame.getMethod(); - RecordedClass type = method.getType(); - if (expectedClass.getName().equals(type.getName())) { - if (expectedMethodName.equals(method.getName())) { - return; - } - } + if (isFrame(frame, expectedClass.getName(), expectedMethodName)) { + return; } } Asserts.fail("Expected " + expectedClass.getName() + "::"+ expectedMethodName + " in stack trace"); } + + private static boolean isFrame(RecordedFrame frame, String expectedClass, String expectedMethodName) { + if (frame.isJavaFrame()) { + RecordedMethod method = frame.getMethod(); + RecordedClass type = method.getType(); + if (expectedClass.equals(type.getName())) { + if (expectedMethodName.equals(method.getName())) { + return true; + } + } + } + return false; + } } From 2bb4b9398d65e3f37f34e45476c969ff0afb1540 Mon Sep 17 00:00:00 2001 From: Justin Lu Date: Thu, 23 Nov 2023 00:27:27 +0000 Subject: [PATCH 035/250] 8319569: Several java/util tests should be updated to accept VM flags Reviewed-by: naoto, lancea --- .../SupplementalJapaneseEraTestRun.java | 36 +++++----- test/jdk/java/util/Currency/PropertiesTest.sh | 12 ++-- .../java/util/Locale/LocaleProvidersRun.java | 31 ++++----- .../Control/MissingResourceCauseTestRun.java | 18 +++-- .../modules/ModuleTestUtil.java | 66 +++++++++---------- .../modules/layer/LayerTest.java | 19 +++--- .../modules/unnamed/UnNamedTest.java | 53 +++++++-------- .../modules/visibility/VisibilityTest.java | 17 ++--- .../util/TimeZone/CustomTzIDCheckDST.java | 6 +- .../TimeZoneDatePermissionCheckRun.java | 22 +++---- .../java/util/logging/LoggingDeadlock2.java | 21 +++--- test/jdk/java/util/zip/EntryCount64k.java | 7 +- 12 files changed, 143 insertions(+), 165 deletions(-) diff --git a/test/jdk/java/util/Calendar/SupplementalJapaneseEraTestRun.java b/test/jdk/java/util/Calendar/SupplementalJapaneseEraTestRun.java index 34363bf711d1c..5383d0d124055 100644 --- a/test/jdk/java/util/Calendar/SupplementalJapaneseEraTestRun.java +++ b/test/jdk/java/util/Calendar/SupplementalJapaneseEraTestRun.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2023, 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 @@ -34,10 +34,15 @@ import java.util.List; import java.util.Locale; import java.util.TimeZone; -import static java.util.Calendar.*; +import java.util.stream.Stream; + +import static java.util.Calendar.DAY_OF_YEAR; +import static java.util.Calendar.ERA; +import static java.util.Calendar.FEBRUARY; +import static java.util.Calendar.LONG; +import static java.util.Calendar.YEAR; import jdk.test.lib.process.ProcessTools; -import jdk.test.lib.JDKToolLauncher; import jdk.test.lib.Utils; import org.testng.annotations.DataProvider; @@ -91,19 +96,18 @@ public void InvalidPropertyValuesTest(String prop) } private static void testRun(String property, List javaParam) - throws Throwable{ - JDKToolLauncher launcher = JDKToolLauncher.createUsingTestJDK("java"); - launcher.addToolArg("-ea") - .addToolArg("-esa") - .addToolArg("-cp") - .addToolArg(Utils.TEST_CLASS_PATH) - .addToolArg("-Djdk.calendar.japanese.supplemental.era=" + property) - .addToolArg("SupplementalJapaneseEraTest"); - for (String para: javaParam) { - launcher.addToolArg(para); - } - int exitCode = ProcessTools.executeCommand(launcher.getCommand()) - .getExitValue(); + throws Throwable { + List params = List.of( + "-ea", "-esa", + "-cp", Utils.TEST_CLASS_PATH, + "-Djdk.calendar.japanese.supplemental.era=" + property, + "SupplementalJapaneseEraTest"); + // Build process (with VM flags) + ProcessBuilder pb = ProcessTools.createTestJavaProcessBuilder( + Stream.concat(params.stream(), javaParam.stream()).toList()); + // Evaluate process status + int exitCode = ProcessTools.executeCommand(pb).getExitValue(); + System.out.println(property + ":pass"); if (exitCode != 0) { System.out.println(property + ":fail"); diff --git a/test/jdk/java/util/Currency/PropertiesTest.sh b/test/jdk/java/util/Currency/PropertiesTest.sh index 6e8bbc2397029..f7825640480af 100644 --- a/test/jdk/java/util/Currency/PropertiesTest.sh +++ b/test/jdk/java/util/Currency/PropertiesTest.sh @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright (c) 2007, 2022, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2007, 2023, 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 @@ -76,7 +76,7 @@ failures=0 run() { echo '' - ${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} -cp ${TESTCLASSES} $* 2>&1 + ${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} ${TESTJAVAOPTS} -cp ${TESTCLASSES} $* 2>&1 if [ $? != 0 ]; then failures=`expr $failures + 1`; fi } @@ -110,23 +110,23 @@ echo "Properties location: ${PROPLOCATION}" # run echo '' -${WRITABLEJDK}${FS}bin${FS}java ${TESTVMOPTS} -cp ${TESTCLASSES} PropertiesTest -d dump3 +${WRITABLEJDK}${FS}bin${FS}java ${TESTVMOPTS} ${TESTJAVAOPTS} -cp ${TESTCLASSES} PropertiesTest -d dump3 if [ $? != 0 ]; then failures=`expr $failures + 1`; fi if [ ! -f dump3 ]; then echo "file dump3 not created. Test cannot execute. Failed."; exit 1; fi # run bug7102969 test echo '' -${WRITABLEJDK}${FS}bin${FS}java ${TESTVMOPTS} -cp ${TESTCLASSES} PropertiesTest bug7102969 +${WRITABLEJDK}${FS}bin${FS}java ${TESTVMOPTS} ${TESTJAVAOPTS} -cp ${TESTCLASSES} PropertiesTest bug7102969 if [ $? != 0 ]; then failures=`expr $failures + 1`; fi # run bug8157138 test echo '' -${WRITABLEJDK}${FS}bin${FS}java ${TESTVMOPTS} -cp ${TESTCLASSES} PropertiesTest bug8157138 +${WRITABLEJDK}${FS}bin${FS}java ${TESTVMOPTS} ${TESTJAVAOPTS} -cp ${TESTCLASSES} PropertiesTest bug8157138 if [ $? != 0 ]; then failures=`expr $failures + 1`; fi # run bug8190904 test echo '' -${WRITABLEJDK}${FS}bin${FS}java ${TESTVMOPTS} -cp ${TESTCLASSES} PropertiesTest bug8190904 +${WRITABLEJDK}${FS}bin${FS}java ${TESTVMOPTS} ${TESTJAVAOPTS} -cp ${TESTCLASSES} PropertiesTest bug8190904 if [ $? != 0 ]; then failures=`expr $failures + 1`; fi # Cleanup diff --git a/test/jdk/java/util/Locale/LocaleProvidersRun.java b/test/jdk/java/util/Locale/LocaleProvidersRun.java index beeb1444e935b..aae8ff03c11a0 100644 --- a/test/jdk/java/util/Locale/LocaleProvidersRun.java +++ b/test/jdk/java/util/Locale/LocaleProvidersRun.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2023, 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 @@ -39,7 +39,6 @@ import java.util.Locale; -import jdk.test.lib.JDKToolLauncher; import jdk.test.lib.process.ProcessTools; import jdk.test.lib.Utils; @@ -178,22 +177,18 @@ public static void main(String[] args) throws Throwable { } private static void testRun(String prefList, String methodName, - String param1, String param2, String param3) throws Throwable{ - JDKToolLauncher launcher = JDKToolLauncher.createUsingTestJDK("java"); - launcher.addToolArg("-ea") - .addToolArg("-esa") - .addToolArg("-cp") - .addToolArg(Utils.TEST_CLASS_PATH) - .addToolArg("-Djava.util.logging.config.class=LocaleProviders$LogConfig") - .addToolArg("-Djava.locale.providers=" + prefList) - .addToolArg("--add-exports=java.base/sun.util.locale.provider=ALL-UNNAMED") - .addToolArg("LocaleProviders") - .addToolArg(methodName) - .addToolArg(param1) - .addToolArg(param2) - .addToolArg(param3); - int exitCode = ProcessTools.executeCommand(launcher.getCommand()) - .getExitValue(); + String param1, String param2, String param3) throws Throwable { + + // Build process (with VM flags) + ProcessBuilder pb = ProcessTools.createTestJavaProcessBuilder( + "-ea", "-esa", + "-cp", Utils.TEST_CLASS_PATH, + "-Djava.util.logging.config.class=LocaleProviders$LogConfig", + "-Djava.locale.providers=" + prefList, + "--add-exports=java.base/sun.util.locale.provider=ALL-UNNAMED", + "LocaleProviders", methodName, param1, param2, param3); + // Evaluate process status + int exitCode = ProcessTools.executeCommand(pb).getExitValue(); if (exitCode != 0) { throw new RuntimeException("Unexpected exit code: " + exitCode); } diff --git a/test/jdk/java/util/ResourceBundle/Control/MissingResourceCauseTestRun.java b/test/jdk/java/util/ResourceBundle/Control/MissingResourceCauseTestRun.java index 0ed86582846bb..30cd81757df6d 100644 --- a/test/jdk/java/util/ResourceBundle/Control/MissingResourceCauseTestRun.java +++ b/test/jdk/java/util/ResourceBundle/Control/MissingResourceCauseTestRun.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2023, 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 @@ -84,15 +84,13 @@ private static void runCmd() throws Throwable { // UnreadableRB.properties is in current directory String cp = Utils.TEST_CLASSES + File.pathSeparator + Utils.TEST_SRC + File.pathSeparator + "."; - JDKToolLauncher launcher = JDKToolLauncher.createUsingTestJDK("java"); - launcher.addToolArg("-ea") - .addToolArg("-esa") - .addToolArg("-cp") - .addToolArg(cp) - .addToolArg("MissingResourceCauseTest"); - - int exitCode = ProcessTools.executeCommand(launcher.getCommand()) - .getExitValue(); + // Build process (with VM flags) + ProcessBuilder pb = ProcessTools.createTestJavaProcessBuilder( + "-ea", "-esa", + "-cp", cp, + "MissingResourceCauseTest"); + // Evaluate process status + int exitCode = ProcessTools.executeCommand(pb).getExitValue(); if (exitCode != 0) { throw new RuntimeException("Execution of the test failed. " + "Unexpected exit code: " + exitCode); diff --git a/test/jdk/java/util/ResourceBundle/modules/ModuleTestUtil.java b/test/jdk/java/util/ResourceBundle/modules/ModuleTestUtil.java index 1d8bdbb89db15..24c6e181ccc04 100644 --- a/test/jdk/java/util/ResourceBundle/modules/ModuleTestUtil.java +++ b/test/jdk/java/util/ResourceBundle/modules/ModuleTestUtil.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2023, 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,6 +29,7 @@ import java.util.stream.Stream; import jdk.test.lib.JDKToolLauncher; +import jdk.test.lib.Utils; import jdk.test.lib.compiler.CompilerUtils; import jdk.test.lib.process.ProcessTools; @@ -133,17 +134,15 @@ public static void copyResFiles(Path src, Path dest, String mn, */ public static void runModule(String mp, String mn, List localeList) throws Throwable { - JDKToolLauncher launcher = JDKToolLauncher.createUsingTestJDK("java"); - launcher.addToolArg("-ea") - .addToolArg("-esa") - .addToolArg("-p") - .addToolArg(mp) - .addToolArg("-m") - .addToolArg(mn); - localeList.forEach(launcher::addToolArg); - - int exitCode = ProcessTools.executeCommand(launcher.getCommand()) - .getExitValue(); + List args = List.of( + "-ea", "-esa", + "-p", mp, + "-m", mn); + // Build process (with VM flags) + ProcessBuilder pb = ProcessTools.createTestJavaProcessBuilder( + Stream.concat(args.stream(), localeList.stream()).toList()); + // Evaluate process status + int exitCode = ProcessTools.executeCommand(pb).getExitValue(); if (exitCode != 0) { throw new RuntimeException("Execution of the test failed. " + "Unexpected exit code: " + exitCode); @@ -161,19 +160,17 @@ public static void runModule(String mp, String mn, List localeList) */ public static void runModuleWithCp(String cp, String mp, String mn, List localeList, boolean expected) throws Throwable { - JDKToolLauncher launcher = JDKToolLauncher.createUsingTestJDK("java"); - launcher.addToolArg("-ea") - .addToolArg("-esa") - .addToolArg("-cp") - .addToolArg(cp) - .addToolArg("-p") - .addToolArg(mp) - .addToolArg("-m") - .addToolArg(mn); - localeList.forEach(launcher::addToolArg); + List args = List.of( + "-ea", "-esa", + "-cp", cp, + "-p", mp, + "-m", mn); + // Build process (with VM flags) + ProcessBuilder pb = ProcessTools.createTestJavaProcessBuilder( + Stream.concat(args.stream(), localeList.stream()).toList()); + // Evaluate process status + int exitCode = ProcessTools.executeCommand(pb).getExitValue(); - int exitCode = ProcessTools.executeCommand(launcher.getCommand()) - .getExitValue(); if (expected) { if (exitCode != 0) { throw new RuntimeException("Execution of the test loads bundles " @@ -198,18 +195,17 @@ public static void runModuleWithCp(String cp, String mp, String mn, */ public static void runModuleWithLegacyCode(String mp, String mn, List localeList) throws Throwable { - JDKToolLauncher launcher = JDKToolLauncher.createUsingTestJDK("java"); - launcher.addToolArg("-ea") - .addToolArg("-esa") - .addToolArg("-Djava.locale.useOldISOCodes=true") - .addToolArg("-p") - .addToolArg(mp) - .addToolArg("-m") - .addToolArg(mn); - localeList.forEach(launcher::addToolArg); + List args = List.of( + "-ea", "-esa", + "-Djava.locale.useOldISOCodes=true", + "-p", mp, + "-m", mn); + // Build process (with VM flags) + ProcessBuilder pb = ProcessTools.createTestJavaProcessBuilder( + Stream.concat(args.stream(), localeList.stream()).toList()); + // Evaluate process status + int exitCode = ProcessTools.executeCommand(pb).getExitValue(); - int exitCode = ProcessTools.executeCommand(launcher.getCommand()) - .getExitValue(); if (exitCode != 0) { throw new RuntimeException("Execution of the test failed. " + "Unexpected exit code: " + exitCode); diff --git a/test/jdk/java/util/ResourceBundle/modules/layer/LayerTest.java b/test/jdk/java/util/ResourceBundle/modules/layer/LayerTest.java index b1c79c0367f6f..85e8e531a31ab 100644 --- a/test/jdk/java/util/ResourceBundle/modules/layer/LayerTest.java +++ b/test/jdk/java/util/ResourceBundle/modules/layer/LayerTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 2023, 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 @@ -71,16 +71,13 @@ private static void compileCmd() throws Throwable { } private static void runCmd() throws Throwable { - JDKToolLauncher launcher = JDKToolLauncher.createUsingTestJDK("java"); - launcher.addToolArg("-ea") - .addToolArg("-esa") - .addToolArg("-cp") - .addToolArg(Utils.TEST_CLASSES) - .addToolArg("Main") - .addToolArg(Utils.TEST_CLASSES); - - int exitCode = ProcessTools.executeCommand(launcher.getCommand()) - .getExitValue(); + // Build process (with VM flags) + ProcessBuilder pb = ProcessTools.createTestJavaProcessBuilder( + "-ea", "-esa", + "-cp", Utils.TEST_CLASSES, + "Main", Utils.TEST_CLASSES); + // Evaluate process status + int exitCode = ProcessTools.executeCommand(pb).getExitValue(); if (exitCode != 0) { throw new RuntimeException("Execution of the test failed. " + "Unexpected exit code: " + exitCode); diff --git a/test/jdk/java/util/ResourceBundle/modules/unnamed/UnNamedTest.java b/test/jdk/java/util/ResourceBundle/modules/unnamed/UnNamedTest.java index 4540d5a378b1a..e9567fcdaadc9 100644 --- a/test/jdk/java/util/ResourceBundle/modules/unnamed/UnNamedTest.java +++ b/test/jdk/java/util/ResourceBundle/modules/unnamed/UnNamedTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2023, 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 @@ -39,6 +39,7 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; +import java.util.stream.Stream; import jdk.test.lib.JDKToolLauncher; import jdk.test.lib.Utils; @@ -73,42 +74,34 @@ private static void compileCmd() throws Throwable { private static void runCmd() throws Throwable { // access resource bundles that are exported private unconditionally. - JDKToolLauncher launcher = JDKToolLauncher.createUsingTestJDK("java"); - launcher.addToolArg("-ea") - .addToolArg("-esa") - .addToolArg("-cp") - .addToolArg(Utils.TEST_CLASSES) - .addToolArg("--module-path") - .addToolArg(MODS_DIR.toString()) - .addToolArg("--add-modules") - .addToolArg("bundles") - .addToolArg("Main"); - LOCALE_LIST.forEach(launcher::addToolArg); - - int exitCode = ProcessTools.executeCommand(launcher.getCommand()) - .getExitValue(); + List args = List.of( + "-ea", "-esa", + "-cp", Utils.TEST_CLASSES, + "--module-path", MODS_DIR.toString(), + "--add-modules", "bundles", + "Main"); + ProcessBuilder pb = ProcessTools.createTestJavaProcessBuilder( + Stream.concat(args.stream(), LOCALE_LIST.stream()).toList()); + // Evaluate process status + int exitCode = ProcessTools.executeCommand(pb).getExitValue(); if (exitCode != 0) { throw new RuntimeException("Execution of the test1 failed. " + "Unexpected exit code: " + exitCode); } // --add-exports can't open resources - launcher = JDKToolLauncher.createUsingTestJDK("java"); - launcher.addToolArg("-ea") - .addToolArg("-esa") - .addToolArg("-cp") - .addToolArg(Utils.TEST_CLASSES) - .addToolArg("--module-path") - .addToolArg(MODS_DIR.toString()) - .addToolArg("--add-modules") - .addToolArg("bundles") - .addToolArg("--add-opens") - .addToolArg("bundles/jdk.test.internal.resources=ALL-UNNAMED") - .addToolArg("Main"); - LOCALE_LIST.forEach(launcher::addToolArg); + List argsWithOpens = List.of( + "-ea", "-esa", + "-cp", Utils.TEST_CLASSES, + "--module-path", MODS_DIR.toString(), + "--add-modules", "bundles", + "--add-opens", "bundles/jdk.test.internal.resources=ALL-UNNAMED", + "Main"); + pb = ProcessTools.createTestJavaProcessBuilder( + Stream.concat(argsWithOpens.stream(), LOCALE_LIST.stream()).toList()); - exitCode = ProcessTools.executeCommand(launcher.getCommand()) - .getExitValue(); + // Evaluate process status + exitCode = ProcessTools.executeCommand(pb).getExitValue(); if (exitCode != 0) { throw new RuntimeException("Execution of the test2 failed. " + "Unexpected exit code: " + exitCode); diff --git a/test/jdk/java/util/ResourceBundle/modules/visibility/VisibilityTest.java b/test/jdk/java/util/ResourceBundle/modules/visibility/VisibilityTest.java index 7f9405863376d..b81c69a426938 100644 --- a/test/jdk/java/util/ResourceBundle/modules/visibility/VisibilityTest.java +++ b/test/jdk/java/util/ResourceBundle/modules/visibility/VisibilityTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2023, 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 @@ -39,10 +39,12 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; +import java.util.stream.Stream; import jdk.test.lib.JDKToolLauncher; import jdk.test.lib.Utils; import jdk.test.lib.process.ProcessTools; + import org.testng.annotations.BeforeTest; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; @@ -328,11 +330,10 @@ public void RunWithPkgRes(List argsList) throws Throwable { } private int runCmd(List argsList) throws Throwable { - JDKToolLauncher launcher = JDKToolLauncher.createUsingTestJDK("java"); - launcher.addToolArg("-ea") - .addToolArg("-esa"); - argsList.forEach(launcher::addToolArg); - - return ProcessTools.executeCommand(launcher.getCommand()).getExitValue(); + // Build process (with VM flags) + ProcessBuilder pb = ProcessTools.createTestJavaProcessBuilder( + Stream.concat(Stream.of("-ea", "-esa"), argsList.stream()).toList()); + // Evaluate process status + return ProcessTools.executeCommand(pb).getExitValue(); } -} \ No newline at end of file +} diff --git a/test/jdk/java/util/TimeZone/CustomTzIDCheckDST.java b/test/jdk/java/util/TimeZone/CustomTzIDCheckDST.java index ece90a9d7cd5e..5fd48efadcc3a 100644 --- a/test/jdk/java/util/TimeZone/CustomTzIDCheckDST.java +++ b/test/jdk/java/util/TimeZone/CustomTzIDCheckDST.java @@ -29,16 +29,18 @@ * @requires os.family != "windows" * @run main/othervm CustomTzIDCheckDST */ + import java.util.Calendar; import java.util.Date; -import java.util.List; import java.util.SimpleTimeZone; import java.util.TimeZone; import java.time.DayOfWeek; import java.time.ZonedDateTime; import java.time.temporal.TemporalAdjusters; + import jdk.test.lib.process.ProcessTools; import jdk.test.lib.process.OutputAnalyzer; + public class CustomTzIDCheckDST { // Northern Hemisphere private static String CUSTOM_TZ = "MEZ-1MESZ,M3.5.0,M10.5.0/3"; @@ -46,7 +48,7 @@ public class CustomTzIDCheckDST { private static String CUSTOM_TZ2 = "MEZ-1MESZ,M10.5.0,M3.5.0/3"; public static void main(String args[]) throws Throwable { if (args.length == 0) { - ProcessBuilder pb = ProcessTools.createLimitedTestJavaProcessBuilder(List.of("CustomTzIDCheckDST", "runTZTest")); + ProcessBuilder pb = ProcessTools.createTestJavaProcessBuilder("CustomTzIDCheckDST", "runTZTest"); pb.environment().put("TZ", CUSTOM_TZ); OutputAnalyzer output = ProcessTools.executeProcess(pb); output.shouldHaveExitValue(0); diff --git a/test/jdk/java/util/TimeZone/TimeZoneDatePermissionCheckRun.java b/test/jdk/java/util/TimeZone/TimeZoneDatePermissionCheckRun.java index c510c39cd165b..f5d80cd6069a3 100644 --- a/test/jdk/java/util/TimeZone/TimeZoneDatePermissionCheckRun.java +++ b/test/jdk/java/util/TimeZone/TimeZoneDatePermissionCheckRun.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2023, 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 @@ -66,17 +66,15 @@ public static void main(String[] args) throws Throwable { //run it with the security manager on, plus accesscontroller debugging //will go into infinite recursion trying to get enough permissions for //printing Date of failing certificate unless fix is applied. - JDKToolLauncher launcher = JDKToolLauncher.createUsingTestJDK("java"); - launcher.addToolArg("-Djava.security.manager") - .addToolArg("-Djava.security.debug=access,failure,policy") - .addToolArg("-ea") - .addToolArg("-esa") - .addToolArg("-cp") - .addToolArg(jarPath) - .addToolArg("TimeZoneDatePermissionCheck"); - - int exitCode = ProcessTools.executeCommand(launcher.getCommand()) - .getExitValue(); + // Build process (with VM flags) + ProcessBuilder pb = ProcessTools.createTestJavaProcessBuilder( + "-Djava.security.manager", + "-Djava.security.debug=access,failure,policy", + "-ea", "-esa", + "-cp", jarPath, + "TimeZoneDatePermissionCheck"); + // Evaluate process status + int exitCode = ProcessTools.executeCommand(pb).getExitValue(); if (exitCode != 0) { throw new RuntimeException("Unexpected exit code: " + exitCode); } diff --git a/test/jdk/java/util/logging/LoggingDeadlock2.java b/test/jdk/java/util/logging/LoggingDeadlock2.java index 4aa3121abc1cd..e8a0bb49d87d6 100644 --- a/test/jdk/java/util/logging/LoggingDeadlock2.java +++ b/test/jdk/java/util/logging/LoggingDeadlock2.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2023, 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,11 +25,12 @@ * @test * @bug 6467152 6716076 6829503 8132550 * @summary deadlock occurs in LogManager initialization and JVM termination + * @key randomness + * @library /test/lib * @author Serguei Spitsyn / Hitachi / Martin Buchholz * * @build LoggingDeadlock2 * @run main LoggingDeadlock2 - * @key randomness */ /* @@ -50,7 +51,6 @@ * This is a regression test for this bug. */ -import java.util.Arrays; import java.util.List; import java.util.Random; import java.util.concurrent.CyclicBarrier; @@ -63,6 +63,8 @@ import java.io.Reader; import java.util.concurrent.TimeUnit; +import jdk.test.lib.process.ProcessTools; + public class LoggingDeadlock2 { // ask child process to dumpstack after 60secs @@ -74,7 +76,9 @@ public class LoggingDeadlock2 { public static void realMain(String arg[]) throws Throwable { try { System.out.println(javaChildArgs); - ProcessBuilder pb = new ProcessBuilder(javaChildArgs); + // Build process (with VM flags) + ProcessBuilder pb = ProcessTools.createTestJavaProcessBuilder( + javaChildArgs); ProcessResults r = run(pb.start()); equal(r.exitValue(), 99); @@ -151,9 +155,6 @@ public void run() { //---------------------------------------------------------------- // The rest of this test is copied from ProcessBuilder/Basic.java //---------------------------------------------------------------- - private static final String javaExe = - System.getProperty("java.home") + - File.separator + "bin" + File.separator + "java"; private static final String jstackExe = System.getProperty("java.home") + File.separator + "bin" + File.separator + "jstack"; @@ -161,10 +162,8 @@ public void run() { private static final String classpath = System.getProperty("java.class.path"); - private static final List javaChildArgs = - Arrays.asList(new String[] - { javaExe, "-classpath", classpath, - "LoggingDeadlock2$JavaChild"}); + private static final List javaChildArgs = List.of( + "-classpath", classpath, "LoggingDeadlock2$JavaChild"); private static class ProcessResults { private final String out; diff --git a/test/jdk/java/util/zip/EntryCount64k.java b/test/jdk/java/util/zip/EntryCount64k.java index 68b86e50ece23..08d896a124a2a 100644 --- a/test/jdk/java/util/zip/EntryCount64k.java +++ b/test/jdk/java/util/zip/EntryCount64k.java @@ -37,7 +37,6 @@ import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.RandomAccessFile; -import java.nio.file.Paths; import java.util.Enumeration; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; @@ -161,11 +160,7 @@ static void checkCanRead(File zipFile, int entryCount) throws Throwable { } // Check java -jar - String javaHome = System.getProperty("java.home"); - String java = Paths.get(javaHome, "bin", "java").toString(); - String[] cmd = { java, "-jar", zipFile.getName() }; - ProcessBuilder pb = new ProcessBuilder(cmd); - OutputAnalyzer a = ProcessTools.executeProcess(pb); + OutputAnalyzer a = ProcessTools.executeTestJvm("-jar", zipFile.getName()); a.shouldHaveExitValue(0); a.stdoutShouldMatch("\\AMain\\Z"); a.stderrShouldMatch("\\A\\Z"); From 864b39a89398731bfde9af10c3d7797ff5d05760 Mon Sep 17 00:00:00 2001 From: Feilong Jiang Date: Thu, 23 Nov 2023 00:50:27 +0000 Subject: [PATCH 036/250] 8320564: RISC-V: Minimal build failed after JDK-8316592 Reviewed-by: fyang, shade --- .../cpu/riscv/macroAssembler_riscv.cpp | 35 ++++++++++--------- .../cpu/riscv/macroAssembler_riscv.hpp | 7 ++-- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp b/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp index 5201486c8c634..8f516f38e7d9a 100644 --- a/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp +++ b/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp @@ -2048,23 +2048,6 @@ void MacroAssembler::cmp_klass(Register oop, Register trial_klass, Register tmp1 beq(trial_klass, tmp1, L); } -// Multiply and multiply-accumulate unsigned 64-bit registers. -void MacroAssembler::wide_mul(Register prod_lo, Register prod_hi, Register n, Register m) { - assert_different_registers(prod_lo, prod_hi); - - mul(prod_lo, n, m); - mulhu(prod_hi, n, m); -} -void MacroAssembler::wide_madd(Register sum_lo, Register sum_hi, Register n, - Register m, Register tmp1, Register tmp2) { - assert_different_registers(sum_lo, sum_hi); - assert_different_registers(sum_hi, tmp2); - - wide_mul(tmp1, tmp2, n, m); - cad(sum_lo, sum_lo, tmp1, tmp1); // Add tmp1 to sum_lo with carry output to tmp1 - adc(sum_hi, sum_hi, tmp2, tmp1); // Add tmp2 with carry to sum_hi -} - // Move an oop into a register. void MacroAssembler::movoop(Register dst, jobject obj) { int oop_index; @@ -3576,6 +3559,24 @@ void MacroAssembler::mul_add(Register out, Register in, Register offset, bind(L_end); } +// Multiply and multiply-accumulate unsigned 64-bit registers. +void MacroAssembler::wide_mul(Register prod_lo, Register prod_hi, Register n, Register m) { + assert_different_registers(prod_lo, prod_hi); + + mul(prod_lo, n, m); + mulhu(prod_hi, n, m); +} + +void MacroAssembler::wide_madd(Register sum_lo, Register sum_hi, Register n, + Register m, Register tmp1, Register tmp2) { + assert_different_registers(sum_lo, sum_hi); + assert_different_registers(sum_hi, tmp2); + + wide_mul(tmp1, tmp2, n, m); + cad(sum_lo, sum_lo, tmp1, tmp1); // Add tmp1 to sum_lo with carry output to tmp1 + adc(sum_hi, sum_hi, tmp2, tmp1); // Add tmp2 with carry to sum_hi +} + // add two unsigned input and output carry void MacroAssembler::cad(Register dst, Register src1, Register src2, Register carry) { diff --git a/src/hotspot/cpu/riscv/macroAssembler_riscv.hpp b/src/hotspot/cpu/riscv/macroAssembler_riscv.hpp index 51bcba2f1a3fc..1a8271166a9cc 100644 --- a/src/hotspot/cpu/riscv/macroAssembler_riscv.hpp +++ b/src/hotspot/cpu/riscv/macroAssembler_riscv.hpp @@ -198,10 +198,6 @@ class MacroAssembler: public Assembler { void store_klass(Register dst, Register src, Register tmp = t0); void cmp_klass(Register oop, Register trial_klass, Register tmp1, Register tmp2, Label &L); - void wide_mul(Register prod_lo, Register prod_hi, Register n, Register m); - void wide_madd(Register sum_lo, Register sum_hi, Register n, - Register m, Register tmp1, Register tmp2); - void encode_klass_not_null(Register r, Register tmp = t0); void decode_klass_not_null(Register r, Register tmp = t0); void encode_klass_not_null(Register dst, Register src, Register tmp); @@ -1204,6 +1200,9 @@ class MacroAssembler: public Assembler { #ifdef COMPILER2 void mul_add(Register out, Register in, Register offset, Register len, Register k, Register tmp); + void wide_mul(Register prod_lo, Register prod_hi, Register n, Register m); + void wide_madd(Register sum_lo, Register sum_hi, Register n, + Register m, Register tmp1, Register tmp2); void cad(Register dst, Register src1, Register src2, Register carry); void cadc(Register dst, Register src1, Register src2, Register carry); void adc(Register dst, Register src1, Register src2, Register carry); From 14193a049ebcbd3639962729c631293b8d3a9114 Mon Sep 17 00:00:00 2001 From: Jan Lahoda Date: Thu, 23 Nov 2023 07:15:43 +0000 Subject: [PATCH 037/250] 8314614: jdk/jshell/ImportTest.java failed with "InternalError: Failed remote listen" 8312140: jdk/jshell tests failed with JDI socket timeouts Reviewed-by: asotona --- .../jdk/jshell/AnalyzeSnippetTest.java | 1 + .../jdk/jshell/CustomInputToolBuilder.java | 3 +- .../jdk/jshell/ExecutionControlTestBase.java | 20 +------ .../FailOverDirectExecutionControlTest.java | 10 +--- ...ilOverExecutionControlDyingLaunchTest.java | 4 +- ...OverExecutionControlHangingLaunchTest.java | 4 +- ...OverExecutionControlHangingListenTest.java | 4 +- .../jshell/FailOverExecutionControlTest.java | 4 +- .../langtools/jdk/jshell/IdGeneratorTest.java | 3 +- test/langtools/jdk/jshell/KullaTesting.java | 7 ++- test/langtools/jdk/jshell/Presets.java | 59 +++++++++++++++++++ .../langtools/jdk/jshell/ReplToolTesting.java | 2 +- .../langtools/jdk/jshell/StartOptionTest.java | 2 +- test/langtools/jdk/jshell/ToolReloadTest.java | 2 +- test/langtools/jdk/jshell/UITesting.java | 3 +- 15 files changed, 88 insertions(+), 40 deletions(-) create mode 100644 test/langtools/jdk/jshell/Presets.java diff --git a/test/langtools/jdk/jshell/AnalyzeSnippetTest.java b/test/langtools/jdk/jshell/AnalyzeSnippetTest.java index b566a023caff0..3e2e1a839e2bd 100644 --- a/test/langtools/jdk/jshell/AnalyzeSnippetTest.java +++ b/test/langtools/jdk/jshell/AnalyzeSnippetTest.java @@ -64,6 +64,7 @@ public void setUp() { state = JShell.builder() .out(new PrintStream(new ByteArrayOutputStream())) .err(new PrintStream(new ByteArrayOutputStream())) + .executionEngine(Presets.TEST_DEFAULT_EXECUTION) .build(); sca = state.sourceCodeAnalysis(); } diff --git a/test/langtools/jdk/jshell/CustomInputToolBuilder.java b/test/langtools/jdk/jshell/CustomInputToolBuilder.java index 3b3d5616a9468..523981b3d915c 100644 --- a/test/langtools/jdk/jshell/CustomInputToolBuilder.java +++ b/test/langtools/jdk/jshell/CustomInputToolBuilder.java @@ -90,7 +90,8 @@ private void doTest(boolean interactiveTerminal, String code, String... expected .interactiveTerminal(interactiveTerminal) .promptCapture(true) .persistence(new HashMap<>()) - .start("--no-startup"); + .start("--no-startup", + "--execution", Presets.TEST_DEFAULT_EXECUTION); String actual = new String(out.toByteArray()); List actualLines = Arrays.asList(actual.split("\\R")); diff --git a/test/langtools/jdk/jshell/ExecutionControlTestBase.java b/test/langtools/jdk/jshell/ExecutionControlTestBase.java index 9035d84d4a56f..20336c902cffc 100644 --- a/test/langtools/jdk/jshell/ExecutionControlTestBase.java +++ b/test/langtools/jdk/jshell/ExecutionControlTestBase.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2023, 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,28 +25,14 @@ import org.testng.annotations.Test; import jdk.jshell.VarSnippet; -import java.net.InetAddress; import static jdk.jshell.Snippet.Status.VALID; import static jdk.jshell.Snippet.SubKind.*; public class ExecutionControlTestBase extends KullaTesting { - String standardListenSpec() { - String loopback = InetAddress.getLoopbackAddress().getHostAddress(); - return "jdi:hostname(" + loopback + ")"; - } - - String standardLaunchSpec() { - return "jdi:launch(true)"; - } - - String standardJdiSpec() { - return "jdi"; - } - - String standardSpecs() { - return "5(" + standardListenSpec() + "), 6(" + standardLaunchSpec() + "), 7(" + standardJdiSpec() + ")"; + String alwaysPassingSpec() { + return "5(local)"; } @Test diff --git a/test/langtools/jdk/jshell/FailOverDirectExecutionControlTest.java b/test/langtools/jdk/jshell/FailOverDirectExecutionControlTest.java index da838798f8ee3..a094ed4a86f3d 100644 --- a/test/langtools/jdk/jshell/FailOverDirectExecutionControlTest.java +++ b/test/langtools/jdk/jshell/FailOverDirectExecutionControlTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2023, 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 @@ -129,9 +129,7 @@ public void setUp() { Map pm = provider.defaultParameters(); pm.put("0", "alwaysFailing"); pm.put("1", "alwaysFailing"); - pm.put("2", standardListenSpec()); - pm.put("3", standardLaunchSpec()); - pm.put("4", standardJdiSpec()); + pm.put("2", "local"); setUp(builder -> builder.executionEngine(provider, pm)); } @@ -159,9 +157,7 @@ public void variables() { assertTrue(log.contains("This operation intentionally broken"), log); log = logged.get(Level.FINEST).get(0); assertTrue( - log.contains("Success failover -- 2 = " + standardListenSpec()) - || log.contains("Success failover -- 3 = " + standardLaunchSpec()) - || log.contains("Success failover -- 4 = " + standardJdiSpec()), + log.contains("Success failover -- 2 = local"), log); } } diff --git a/test/langtools/jdk/jshell/FailOverExecutionControlDyingLaunchTest.java b/test/langtools/jdk/jshell/FailOverExecutionControlDyingLaunchTest.java index f3218fab7c76d..31011960880dd 100644 --- a/test/langtools/jdk/jshell/FailOverExecutionControlDyingLaunchTest.java +++ b/test/langtools/jdk/jshell/FailOverExecutionControlDyingLaunchTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2023, 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 @@ -43,6 +43,6 @@ public class FailOverExecutionControlDyingLaunchTest extends ExecutionControlTes public void setUp() { setUp(builder -> builder.executionEngine( "failover:0(jdi:remoteAgent(DyingRemoteAgent),launch(true)), " - + standardSpecs())); + + alwaysPassingSpec())); } } diff --git a/test/langtools/jdk/jshell/FailOverExecutionControlHangingLaunchTest.java b/test/langtools/jdk/jshell/FailOverExecutionControlHangingLaunchTest.java index 778d004915c20..9958b7a3284e6 100644 --- a/test/langtools/jdk/jshell/FailOverExecutionControlHangingLaunchTest.java +++ b/test/langtools/jdk/jshell/FailOverExecutionControlHangingLaunchTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2023, 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 @@ -42,6 +42,6 @@ public class FailOverExecutionControlHangingLaunchTest extends ExecutionControlT public void setUp() { setUp(builder -> builder.executionEngine( "failover:0(jdi:remoteAgent(HangingRemoteAgent),launch(true)), " - + standardSpecs())); + + alwaysPassingSpec())); } } diff --git a/test/langtools/jdk/jshell/FailOverExecutionControlHangingListenTest.java b/test/langtools/jdk/jshell/FailOverExecutionControlHangingListenTest.java index f22dd821f4049..4f29bfe9c7a82 100644 --- a/test/langtools/jdk/jshell/FailOverExecutionControlHangingListenTest.java +++ b/test/langtools/jdk/jshell/FailOverExecutionControlHangingListenTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2023, 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 @@ -45,6 +45,6 @@ public void setUp() { String loopback = InetAddress.getLoopbackAddress().getHostAddress(); setUp(builder -> builder.executionEngine( "failover:0(jdi:remoteAgent(HangingRemoteAgent),hostname(" + loopback + "))," - + standardSpecs())); + + alwaysPassingSpec())); } } diff --git a/test/langtools/jdk/jshell/FailOverExecutionControlTest.java b/test/langtools/jdk/jshell/FailOverExecutionControlTest.java index 0843351815f87..80dc56d72c484 100644 --- a/test/langtools/jdk/jshell/FailOverExecutionControlTest.java +++ b/test/langtools/jdk/jshell/FailOverExecutionControlTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2023, 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 @@ -41,7 +41,7 @@ public class FailOverExecutionControlTest extends ExecutionControlTestBase { @Override public void setUp() { setUp(builder -> builder.executionEngine("failover:0(expectedFailureNonExistent1), 1(expectedFailureNonExistent2), " - + standardSpecs())); + + alwaysPassingSpec())); } } diff --git a/test/langtools/jdk/jshell/IdGeneratorTest.java b/test/langtools/jdk/jshell/IdGeneratorTest.java index 23727aef643a8..e8a38dfe7f05f 100644 --- a/test/langtools/jdk/jshell/IdGeneratorTest.java +++ b/test/langtools/jdk/jshell/IdGeneratorTest.java @@ -53,7 +53,8 @@ public JShell.Builder getBuilder() { return JShell.builder() .in(inStream) .out(new PrintStream(outStream)) - .err(new PrintStream(errStream)); + .err(new PrintStream(errStream)) + .executionEngine(Presets.TEST_DEFAULT_EXECUTION); } public void testTempNameGenerator() { diff --git a/test/langtools/jdk/jshell/KullaTesting.java b/test/langtools/jdk/jshell/KullaTesting.java index 369b2ed1f44a2..d74f3484f4bd8 100644 --- a/test/langtools/jdk/jshell/KullaTesting.java +++ b/test/langtools/jdk/jshell/KullaTesting.java @@ -100,7 +100,9 @@ public class KullaTesting { private Set allSnippets = new LinkedHashSet<>(); static { - JShell js = JShell.create(); + JShell js = JShell.builder() + .executionEngine(Presets.TEST_DEFAULT_EXECUTION) + .build(); MAIN_SNIPPET = js.eval("MAIN_SNIPPET").get(0).snippet(); js.close(); assertTrue(MAIN_SNIPPET != null, "Bad MAIN_SNIPPET set-up -- must not be null"); @@ -192,7 +194,8 @@ public int read(byte[] b, int off, int len) throws IOException { JShell.Builder builder = JShell.builder() .in(in) .out(new PrintStream(outStream)) - .err(new PrintStream(errStream)); + .err(new PrintStream(errStream)) + .executionEngine(Presets.TEST_DEFAULT_EXECUTION); bc.accept(builder); state = builder.build(); allSnippets = new LinkedHashSet<>(); diff --git a/test/langtools/jdk/jshell/Presets.java b/test/langtools/jdk/jshell/Presets.java new file mode 100644 index 0000000000000..b9a93c967dc71 --- /dev/null +++ b/test/langtools/jdk/jshell/Presets.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2023, 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. + */ + +import java.net.InetAddress; +import java.util.*; + +public class Presets { + public static final String TEST_DEFAULT_EXECUTION; + public static final String TEST_STANDARD_EXECUTION; + + static { + String loopback = InetAddress.getLoopbackAddress().getHostAddress(); + + TEST_DEFAULT_EXECUTION = "failover:0(jdi:hostname(" + loopback + "))," + + "1(jdi:launch(true)), 2(jdi), 3(local)"; + TEST_STANDARD_EXECUTION = "failover:0(jdi:hostname(" + loopback + "))," + + "1(jdi:launch(true)), 2(jdi)"; + } + + public static String[] addExecutionIfMissing(String[] args) { + if (Arrays.stream(args).noneMatch(Presets::remoteRelatedOption)) { + List augmentedArgs = new ArrayList<>(); + + augmentedArgs.add("--execution"); + augmentedArgs.add(Presets.TEST_DEFAULT_EXECUTION); + augmentedArgs.addAll(List.of(args)); + + return augmentedArgs.toArray(s -> new String[s]); + } + + return args; + } + + private static boolean remoteRelatedOption(String option) { + return "--execution".equals(option) || + "--add-modules".equals(option) || + option.startsWith("-R"); + } +} diff --git a/test/langtools/jdk/jshell/ReplToolTesting.java b/test/langtools/jdk/jshell/ReplToolTesting.java index 09ee4117c1817..52eb2d5798c6f 100644 --- a/test/langtools/jdk/jshell/ReplToolTesting.java +++ b/test/langtools/jdk/jshell/ReplToolTesting.java @@ -304,7 +304,7 @@ protected JavaShellToolBuilder builder(Locale locale) { private void testRaw(Locale locale, String[] args, String expectedErrorOutput, ReplTest... tests) { testRawInit(tests); - testRawRun(locale, args); + testRawRun(locale, Presets.addExecutionIfMissing(args)); testRawCheck(locale, expectedErrorOutput); } diff --git a/test/langtools/jdk/jshell/StartOptionTest.java b/test/langtools/jdk/jshell/StartOptionTest.java index df445d49750a8..aa8d9be03a9ef 100644 --- a/test/langtools/jdk/jshell/StartOptionTest.java +++ b/test/langtools/jdk/jshell/StartOptionTest.java @@ -81,7 +81,7 @@ private JavaShellToolBuilder builder() { protected int runShell(String... args) { try { return builder() - .start(args); + .start(Presets.addExecutionIfMissing(args)); } catch (Exception ex) { fail("Repl tool died with exception", ex); } diff --git a/test/langtools/jdk/jshell/ToolReloadTest.java b/test/langtools/jdk/jshell/ToolReloadTest.java index 13d583e51f5c1..4709584cd1268 100644 --- a/test/langtools/jdk/jshell/ToolReloadTest.java +++ b/test/langtools/jdk/jshell/ToolReloadTest.java @@ -201,7 +201,7 @@ public void testReloadCrashRestore() { } public void testEnvBadModule() { - test( + test(new String[] {"--execution", Presets.TEST_STANDARD_EXECUTION}, (a) -> assertVariable(a, "int", "x", "5", "5"), (a) -> assertMethod(a, "int m(int z) { return z * z; }", "(int)int", "m"), diff --git a/test/langtools/jdk/jshell/UITesting.java b/test/langtools/jdk/jshell/UITesting.java index 484bfde266212..473ba36c5aedb 100644 --- a/test/langtools/jdk/jshell/UITesting.java +++ b/test/langtools/jdk/jshell/UITesting.java @@ -93,7 +93,8 @@ protected void doRunTest(Test test) throws Exception { .promptCapture(true) .persistence(new HashMap<>()) .locale(Locale.US) - .run("--no-startup"); + .run("--no-startup", + "--execution", Presets.TEST_DEFAULT_EXECUTION); } catch (Exception ex) { throw new IllegalStateException(ex); } From 06d957fd7c1ff59f314315969a545a8f4a5137be Mon Sep 17 00:00:00 2001 From: Aleksey Shipilev Date: Thu, 23 Nov 2023 08:20:38 +0000 Subject: [PATCH 038/250] 8320582: Zero: Misplaced CX8 enablement flag Reviewed-by: dholmes --- src/hotspot/cpu/zero/vm_version_zero.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/hotspot/cpu/zero/vm_version_zero.cpp b/src/hotspot/cpu/zero/vm_version_zero.cpp index 07f99d647ac60..a99885a533df8 100644 --- a/src/hotspot/cpu/zero/vm_version_zero.cpp +++ b/src/hotspot/cpu/zero/vm_version_zero.cpp @@ -137,6 +137,12 @@ void VM_Version::initialize() { #ifdef ASSERT UNSUPPORTED_OPTION(CountCompiledCalls); #endif + + // Supports 8-byte cmpxchg with compiler built-ins. + // These built-ins are supposed to be implemented on + // all platforms (even if not natively), so we claim + // the support unconditionally. + _supports_cx8 = true; } void VM_Version::initialize_cpu_information(void) { @@ -145,12 +151,6 @@ void VM_Version::initialize_cpu_information(void) { return; } - // Supports 8-byte cmpxchg with compiler built-ins. - // These built-ins are supposed to be implemented on - // all platforms (even if not natively), so we claim - // the support unconditionally. - _supports_cx8 = true; - _no_of_cores = os::processor_count(); _no_of_threads = _no_of_cores; _no_of_sockets = _no_of_cores; From c49fb4fca278a35795023116df1023c9018f0844 Mon Sep 17 00:00:00 2001 From: Christian Hagedorn Date: Thu, 23 Nov 2023 08:36:34 +0000 Subject: [PATCH 039/250] 8320403: C2: PrintIdeal is no longer dumped to tty when xtty is set Reviewed-by: kvn, thartmann --- src/hotspot/share/opto/compile.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/hotspot/share/opto/compile.cpp b/src/hotspot/share/opto/compile.cpp index 9d899933c2e8f..cda46c11841db 100644 --- a/src/hotspot/share/opto/compile.cpp +++ b/src/hotspot/share/opto/compile.cpp @@ -590,10 +590,12 @@ void Compile::print_ideal_ir(const char* phase_name) { compile_id(), is_osr_compilation() ? " compile_kind='osr'" : "", phase_name); - xtty->print("%s", ss.as_string()); // print to tty would use xml escape encoding + } + + tty->print("%s", ss.as_string()); + + if (xtty != nullptr) { xtty->tail("ideal"); - } else { - tty->print("%s", ss.as_string()); } } #endif From 8db7bad992a0f31de9c7e00c2657c18670539102 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Lund=C3=A9n?= Date: Thu, 23 Nov 2023 08:42:09 +0000 Subject: [PATCH 040/250] 8319813: Remove upper limit on number of compiler phases in phasetype.hpp Reviewed-by: chagedorn, rcastanedalo, epeter --- .../share/compiler/compilerDirectives.cpp | 20 ++++++++-------- .../share/compiler/compilerDirectives.hpp | 12 +++++++--- src/hotspot/share/compiler/compilerOracle.cpp | 3 +-- .../share/compiler/directivesParser.cpp | 5 ++-- src/hotspot/share/opto/compile.cpp | 2 +- src/hotspot/share/opto/phasetype.hpp | 23 +++++++++++++------ 6 files changed, 40 insertions(+), 25 deletions(-) diff --git a/src/hotspot/share/compiler/compilerDirectives.cpp b/src/hotspot/share/compiler/compilerDirectives.cpp index c76ef6de01d46..d7d4c5b60ed7f 100644 --- a/src/hotspot/share/compiler/compilerDirectives.cpp +++ b/src/hotspot/share/compiler/compilerDirectives.cpp @@ -297,8 +297,11 @@ void DirectiveSet::init_control_intrinsic() { } } -DirectiveSet::DirectiveSet(CompilerDirectives* d) :_inlinematchers(nullptr), _directive(d) { - _ideal_phase_name_mask = 0; +DirectiveSet::DirectiveSet(CompilerDirectives* d) : + _inlinematchers(nullptr), + _directive(d), + _ideal_phase_name_set(PHASE_NUM_TYPES, mtCompiler) +{ #define init_defaults_definition(name, type, dvalue, compiler) this->name##Option = dvalue; compilerdirectives_common_flags(init_defaults_definition) compilerdirectives_c2_flags(init_defaults_definition) @@ -427,18 +430,17 @@ DirectiveSet* DirectiveSet::compilecommand_compatibility_init(const methodHandle compilerdirectives_c1_flags(init_default_cc) #undef init_default_cc - // Parse PrintIdealPhaseName and create an efficient lookup mask + // Parse PrintIdealPhaseName and create a lookup set #ifndef PRODUCT #ifdef COMPILER2 if (!_modified[PrintIdealPhaseIndex]) { - // Parse ccstr and create mask + // Parse ccstr and create set ccstrlist option; if (CompilerOracle::has_option_value(method, CompileCommand::PrintIdealPhase, option)) { - uint64_t mask = 0; - PhaseNameValidator validator(option, mask); + PhaseNameValidator validator(option); if (validator.is_valid()) { - assert(mask != 0, "Must be set"); - set.cloned()->_ideal_phase_name_mask = mask; + assert(!validator.phase_name_set().is_empty(), "Phase name set must be non-empty"); + set.cloned()->set_ideal_phase_name_set(validator.phase_name_set()); } } } @@ -621,7 +623,7 @@ DirectiveSet* DirectiveSet::clone(DirectiveSet const* src) { #undef copy_string_members_definition set->_intrinsic_control_words = src->_intrinsic_control_words; - set->_ideal_phase_name_mask = src->_ideal_phase_name_mask; + set->set_ideal_phase_name_set(src->_ideal_phase_name_set); return set; } diff --git a/src/hotspot/share/compiler/compilerDirectives.hpp b/src/hotspot/share/compiler/compilerDirectives.hpp index a252ad02889c3..4c9b51724f9a3 100644 --- a/src/hotspot/share/compiler/compilerDirectives.hpp +++ b/src/hotspot/share/compiler/compilerDirectives.hpp @@ -31,6 +31,8 @@ #include "compiler/compiler_globals.hpp" #include "compiler/methodMatcher.hpp" #include "compiler/compilerOracle.hpp" +#include "opto/phasetype.hpp" +#include "utilities/bitMap.hpp" #include "utilities/exceptions.hpp" #include "utilities/tribool.hpp" @@ -128,7 +130,7 @@ class DirectiveSet : public CHeapObj { InlineMatcher* _inlinematchers; CompilerDirectives* _directive; TriBoolArray<(size_t)vmIntrinsics::number_of_intrinsics(), int> _intrinsic_control_words; - uint64_t _ideal_phase_name_mask; + CHeapBitMap _ideal_phase_name_set; public: DirectiveSet(CompilerDirectives* directive); @@ -197,8 +199,12 @@ void set_##name(void* value) { \ compilerdirectives_c1_string_flags(set_string_function_definition) #undef set_string_function_definition - void set_ideal_phase_mask(uint64_t mask) { _ideal_phase_name_mask = mask; }; - uint64_t ideal_phase_mask() { return _ideal_phase_name_mask; }; + void set_ideal_phase_name_set(const BitMap& set) { + _ideal_phase_name_set.set_from(set); + }; + bool should_print_phase(const CompilerPhaseType cpt) const { + return _ideal_phase_name_set.at(cpt); + }; void print_intx(outputStream* st, ccstr n, intx v, bool mod) { if (mod) { st->print("%s:" INTX_FORMAT " ", n, v); } } void print_uintx(outputStream* st, ccstr n, intx v, bool mod) { if (mod) { st->print("%s:" UINTX_FORMAT " ", n, v); } } diff --git a/src/hotspot/share/compiler/compilerOracle.cpp b/src/hotspot/share/compiler/compilerOracle.cpp index 695d5eee0cc29..66eea29fcc136 100644 --- a/src/hotspot/share/compiler/compilerOracle.cpp +++ b/src/hotspot/share/compiler/compilerOracle.cpp @@ -777,8 +777,7 @@ static void scan_value(enum OptionType type, char* line, int& total_bytes_read, } #ifndef PRODUCT else if (option == CompileCommand::PrintIdealPhase) { - uint64_t mask = 0; - PhaseNameValidator validator(value, mask); + PhaseNameValidator validator(value); if (!validator.is_valid()) { jio_snprintf(errorbuf, buf_size, "Unrecognized phase name in %s: %s", option2name(option), validator.what()); diff --git a/src/hotspot/share/compiler/directivesParser.cpp b/src/hotspot/share/compiler/directivesParser.cpp index 0f6978bade86b..60955615133e2 100644 --- a/src/hotspot/share/compiler/directivesParser.cpp +++ b/src/hotspot/share/compiler/directivesParser.cpp @@ -336,12 +336,11 @@ bool DirectivesParser::set_option_flag(JSON_TYPE t, JSON_VAL* v, const key* opti error(VALUE_ERROR, "Unrecognized intrinsic detected in DisableIntrinsic: %s", validator.what()); } } else if (strncmp(option_key->name, "PrintIdealPhase", 15) == 0) { - uint64_t mask = 0; - PhaseNameValidator validator(s, mask); + PhaseNameValidator validator(s); valid = validator.is_valid(); if (valid) { - set->set_ideal_phase_mask(mask); + set->set_ideal_phase_name_set(validator.phase_name_set()); } else { error(VALUE_ERROR, "Unrecognized phase name detected in PrintIdealPhase: %s", validator.what()); } diff --git a/src/hotspot/share/opto/compile.cpp b/src/hotspot/share/opto/compile.cpp index cda46c11841db..8a5e98eda9218 100644 --- a/src/hotspot/share/opto/compile.cpp +++ b/src/hotspot/share/opto/compile.cpp @@ -5143,7 +5143,7 @@ void Compile::end_method() { bool Compile::should_print_phase(CompilerPhaseType cpt) { #ifndef PRODUCT - if ((_directive->ideal_phase_mask() & CompilerPhaseTypeHelper::to_bitmask(cpt)) != 0) { + if (_directive->should_print_phase(cpt)) { return true; } #endif diff --git a/src/hotspot/share/opto/phasetype.hpp b/src/hotspot/share/opto/phasetype.hpp index ce27cd2a7f172..c21f2b50418c8 100644 --- a/src/hotspot/share/opto/phasetype.hpp +++ b/src/hotspot/share/opto/phasetype.hpp @@ -25,6 +25,8 @@ #ifndef SHARE_OPTO_PHASETYPE_HPP #define SHARE_OPTO_PHASETYPE_HPP +#include "utilities/bitMap.inline.hpp" + #define COMPILER_PHASES(flags) \ flags(BEFORE_STRINGOPTS, "Before StringOpts") \ flags(AFTER_STRINGOPTS, "After StringOpts") \ @@ -100,9 +102,6 @@ class CompilerPhaseTypeHelper { static const char* to_description(CompilerPhaseType cpt) { return phase_descriptions[cpt]; } - static uint64_t to_bitmask(CompilerPhaseType cpt) { - return (UINT64_C(1) << cpt); - } }; static CompilerPhaseType find_phase(const char* str) { @@ -157,11 +156,16 @@ class PhaseNameIter { class PhaseNameValidator { private: + CHeapBitMap _phase_name_set; bool _valid; char* _bad; public: - PhaseNameValidator(ccstrlist option, uint64_t& mask) : _valid(true), _bad(nullptr) { + PhaseNameValidator(ccstrlist option) : + _phase_name_set(PHASE_NUM_TYPES, mtCompiler), + _valid(true), + _bad(nullptr) + { for (PhaseNameIter iter(option); *iter != nullptr && _valid; ++iter) { CompilerPhaseType cpt = find_phase(*iter); @@ -172,10 +176,10 @@ class PhaseNameValidator { strncpy(_bad, *iter, len); _valid = false; } else if (PHASE_ALL == cpt) { - mask = ~(UINT64_C(0)); + _phase_name_set.set_range(0, PHASE_NUM_TYPES); } else { - assert(cpt < 64, "out of bounds"); - mask |= CompilerPhaseTypeHelper::to_bitmask(cpt); + assert(cpt < PHASE_NUM_TYPES, "out of bounds"); + _phase_name_set.set_bit(cpt); } } } @@ -186,6 +190,11 @@ class PhaseNameValidator { } } + const BitMap& phase_name_set() const { + assert(is_valid(), "Use of invalid phase name set"); + return _phase_name_set; + } + bool is_valid() const { return _valid; } From 99b9cb0a2eae1196f2127cd48e4085f19a90c4b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivan=20=C5=A0ipka?= Date: Thu, 23 Nov 2023 10:31:23 +0000 Subject: [PATCH 041/250] 8320586: update manual test/jdk/TEST.groups Reviewed-by: msheppar --- test/jdk/TEST.groups | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/test/jdk/TEST.groups b/test/jdk/TEST.groups index 2f39f3fdceffb..ce127ca579b57 100644 --- a/test/jdk/TEST.groups +++ b/test/jdk/TEST.groups @@ -579,7 +579,9 @@ jdk_nio_networkchannel = \ jdk_core_manual = \ :jdk_core_manual_no_input \ - :jdk_core_manual_no_input_security + :jdk_security_manual_no_input \ + :jdk_core_manual_interactive \ + :jdk_security_manual_interactive jdk_core_manual_no_input = \ java/net/HugeDataTransferTest.java \ @@ -598,7 +600,7 @@ jdk_core_manual_no_input = \ com/sun/net/httpserver/simpleserver/jwebserver/CommandLinePortNotSpecifiedTest.java \ javax/xml/jaxp/datatype/8033980/GregorianCalAndDurSerDataUtil.java -jdk_core_manual_no_input_security = \ +jdk_security_manual_no_input = \ com/sun/crypto/provider/Cipher/DES/PerformanceTest.java \ com/sun/crypto/provider/Cipher/AEAD/GCMIncrementByte4.java \ com/sun/crypto/provider/Cipher/AEAD/GCMIncrementDirect4.java \ @@ -625,14 +627,15 @@ jdk_core_manual_no_input_security = \ jdk_core_manual_interactive = \ com/sun/jndi/dns/Test6991580.java \ java/util/TimeZone/DefaultTimeZoneTest.java \ - sun/security/tools/keytool/i18n.java \ java/nio/MappedByteBuffer/PmemTest.java \ java/rmi/registry/nonLocalRegistry/NonLocalRegistryTest.java \ - java/rmi/registry/nonLocalRegistry/NonLocalSkeletonTest.java \ + java/rmi/registry/nonLocalRegistry/NonLocalSkeletonTest.java + +jdk_security_manual_interactive = \ + sun/security/tools/keytool/i18n.java \ java/security/Policy/Root/Root.java \ sun/security/krb5/config/native/TestDynamicStore.java - # Test sets for running inside container environment jdk_containers_extended = \ :jdk_io \ From 3787ff8d1d8dbcaaebb9616c5bc543e2fe21a90c Mon Sep 17 00:00:00 2001 From: Axel Boldt-Christmas Date: Thu, 23 Nov 2023 12:41:51 +0000 Subject: [PATCH 042/250] 8319700: [AArch64] C2 compilation fails with "Field too big for insn" Reviewed-by: aph, thartmann --- .../cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.cpp | 9 +++++++++ .../cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.hpp | 2 ++ src/hotspot/cpu/aarch64/gc/z/z_aarch64.ad | 2 +- src/hotspot/share/gc/z/c2/zBarrierSetC2.cpp | 3 +++ src/hotspot/share/gc/z/c2/zBarrierSetC2.hpp | 2 +- 5 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.cpp b/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.cpp index 3a9e5db2ef7ae..ebaf18299728d 100644 --- a/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.cpp @@ -1290,6 +1290,9 @@ static bool aarch64_test_and_branch_reachable(int branch_offset, int target_offs return test_and_branch_to_trampoline_delta < test_and_branch_delta_limit; } +ZLoadBarrierStubC2Aarch64::ZLoadBarrierStubC2Aarch64(const MachNode* node, Address ref_addr, Register ref) + : ZLoadBarrierStubC2(node, ref_addr, ref), _test_and_branch_reachable_entry(), _offset(), _deferred_emit(false), _test_and_branch_reachable(false) {} + ZLoadBarrierStubC2Aarch64::ZLoadBarrierStubC2Aarch64(const MachNode* node, Address ref_addr, Register ref, int offset) : ZLoadBarrierStubC2(node, ref_addr, ref), _test_and_branch_reachable_entry(), _offset(offset), _deferred_emit(false), _test_and_branch_reachable(false) { PhaseOutput* const output = Compile::current()->output(); @@ -1319,6 +1322,12 @@ int ZLoadBarrierStubC2Aarch64::get_stub_size() { return cb.insts_size(); } +ZLoadBarrierStubC2Aarch64* ZLoadBarrierStubC2Aarch64::create(const MachNode* node, Address ref_addr, Register ref) { + ZLoadBarrierStubC2Aarch64* const stub = new (Compile::current()->comp_arena()) ZLoadBarrierStubC2Aarch64(node, ref_addr, ref); + register_stub(stub); + return stub; +} + ZLoadBarrierStubC2Aarch64* ZLoadBarrierStubC2Aarch64::create(const MachNode* node, Address ref_addr, Register ref, int offset) { ZLoadBarrierStubC2Aarch64* const stub = new (Compile::current()->comp_arena()) ZLoadBarrierStubC2Aarch64(node, ref_addr, ref, offset); register_stub(stub); diff --git a/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.hpp b/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.hpp index 00714e5c0c04b..82334b34adeca 100644 --- a/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.hpp +++ b/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.hpp @@ -265,10 +265,12 @@ class ZLoadBarrierStubC2Aarch64 : public ZLoadBarrierStubC2 { bool _deferred_emit; bool _test_and_branch_reachable; + ZLoadBarrierStubC2Aarch64(const MachNode* node, Address ref_addr, Register ref); ZLoadBarrierStubC2Aarch64(const MachNode* node, Address ref_addr, Register ref, int offset); int get_stub_size(); public: + static ZLoadBarrierStubC2Aarch64* create(const MachNode* node, Address ref_addr, Register ref); static ZLoadBarrierStubC2Aarch64* create(const MachNode* node, Address ref_addr, Register ref, int offset); virtual void emit_code(MacroAssembler& masm); diff --git a/src/hotspot/cpu/aarch64/gc/z/z_aarch64.ad b/src/hotspot/cpu/aarch64/gc/z/z_aarch64.ad index 8c698635ad0f5..23564a3f23c38 100644 --- a/src/hotspot/cpu/aarch64/gc/z/z_aarch64.ad +++ b/src/hotspot/cpu/aarch64/gc/z/z_aarch64.ad @@ -48,7 +48,7 @@ static void z_keep_alive_load_barrier(MacroAssembler& _masm, const MachNode* nod __ relocate(barrier_Relocation::spec(), ZBarrierRelocationFormatMarkBadBeforeMov); __ movzw(tmp, barrier_Relocation::unpatched); __ tst(ref, tmp); - ZLoadBarrierStubC2* const stub = ZLoadBarrierStubC2::create(node, ref_addr, ref); + ZLoadBarrierStubC2Aarch64* const stub = ZLoadBarrierStubC2Aarch64::create(node, ref_addr, ref); __ br(Assembler::NE, *stub->entry()); z_uncolor(_masm, node, ref); __ bind(*stub->continuation()); diff --git a/src/hotspot/share/gc/z/c2/zBarrierSetC2.cpp b/src/hotspot/share/gc/z/c2/zBarrierSetC2.cpp index e5fb50a26e4fb..70b9bd6eaa7de 100644 --- a/src/hotspot/share/gc/z/c2/zBarrierSetC2.cpp +++ b/src/hotspot/share/gc/z/c2/zBarrierSetC2.cpp @@ -42,6 +42,7 @@ #include "opto/rootnode.hpp" #include "opto/runtime.hpp" #include "opto/type.hpp" +#include "utilities/debug.hpp" #include "utilities/growableArray.hpp" #include "utilities/macros.hpp" @@ -226,6 +227,7 @@ Label* ZBarrierStubC2::continuation() { } ZLoadBarrierStubC2* ZLoadBarrierStubC2::create(const MachNode* node, Address ref_addr, Register ref) { + AARCH64_ONLY(fatal("Should use ZLoadBarrierStubC2Aarch64::create")); ZLoadBarrierStubC2* const stub = new (Compile::current()->comp_arena()) ZLoadBarrierStubC2(node, ref_addr, ref); register_stub(stub); @@ -275,6 +277,7 @@ void ZLoadBarrierStubC2::emit_code(MacroAssembler& masm) { } ZStoreBarrierStubC2* ZStoreBarrierStubC2::create(const MachNode* node, Address ref_addr, Register new_zaddress, Register new_zpointer, bool is_native, bool is_atomic) { + AARCH64_ONLY(fatal("Should use ZStoreBarrierStubC2Aarch64::create")); ZStoreBarrierStubC2* const stub = new (Compile::current()->comp_arena()) ZStoreBarrierStubC2(node, ref_addr, new_zaddress, new_zpointer, is_native, is_atomic); register_stub(stub); diff --git a/src/hotspot/share/gc/z/c2/zBarrierSetC2.hpp b/src/hotspot/share/gc/z/c2/zBarrierSetC2.hpp index a0f29fbc51076..7af70c6409678 100644 --- a/src/hotspot/share/gc/z/c2/zBarrierSetC2.hpp +++ b/src/hotspot/share/gc/z/c2/zBarrierSetC2.hpp @@ -52,9 +52,9 @@ static void inc_trampoline_stubs_count(); static int trampoline_stubs_count(); static int stubs_start_offset(); -public: ZBarrierStubC2(const MachNode* node); +public: RegMask& live() const; Label* entry(); Label* continuation(); From beaa79c28b4b61229613d0323b1519606d413a4a Mon Sep 17 00:00:00 2001 From: Magnus Ihse Bursie Date: Thu, 23 Nov 2023 15:15:12 +0000 Subject: [PATCH 043/250] 8320663: Fix C syntax in LIB_SETUP_HSDIS_BINUTILS MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Galder Zamarreño Reviewed-by: rehn --- make/autoconf/lib-hsdis.m4 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/make/autoconf/lib-hsdis.m4 b/make/autoconf/lib-hsdis.m4 index 4414e54886cf9..c020bf4505424 100644 --- a/make/autoconf/lib-hsdis.m4 +++ b/make/autoconf/lib-hsdis.m4 @@ -278,7 +278,7 @@ AC_DEFUN([LIB_SETUP_HSDIS_BINUTILS], fi AC_MSG_CHECKING([Checking binutils API]) - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include $disasm_header],[[void foo() {init_disassemble_info(0, 0, 0, 0);}]])], + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include $disasm_header],[[init_disassemble_info(0, 0, 0, 0);]])], [ AC_MSG_RESULT([New API]) HSDIS_CFLAGS="$HSDIS_CFLAGS -DBINUTILS_NEW_API" From 06f040ba3ad4dab5588b79e9d0b013a4edd8ef73 Mon Sep 17 00:00:00 2001 From: Pavel Rappo Date: Thu, 23 Nov 2023 15:52:04 +0000 Subject: [PATCH 044/250] 8320645: DocLint should use javax.lang.model to detect default constructors Reviewed-by: jlahoda, jjg --- .../classes/jdk/javadoc/internal/doclint/Checker.java | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclint/Checker.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclint/Checker.java index b097866a2d85a..871acd26ec3ab 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclint/Checker.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclint/Checker.java @@ -1248,14 +1248,8 @@ private boolean isAnonymous() { } private boolean isDefaultConstructor() { - if (env.currElement.getKind() == ElementKind.CONSTRUCTOR) { - // A synthetic default constructor has the same pos as the - // enclosing class - TreePath p = env.currPath; - return env.getPos(p) == env.getPos(p.getParentPath()); - } else { - return false; - } + return env.currElement.getKind() == ElementKind.CONSTRUCTOR + && env.elements.getOrigin(env.currElement) == Elements.Origin.MANDATED; } private boolean isDeclaredType() { From 6d79e0aa3c32f687d5120811de955d5ae19e0fb2 Mon Sep 17 00:00:00 2001 From: Yuri Gaevsky Date: Thu, 23 Nov 2023 16:06:05 +0000 Subject: [PATCH 045/250] 8318159: RISC-V: Improve itable_stub Reviewed-by: fyang, rehn --- .../cpu/riscv/macroAssembler_riscv.cpp | 103 ++++++++++++++++++ .../cpu/riscv/macroAssembler_riscv.hpp | 9 ++ src/hotspot/cpu/riscv/vtableStubs_riscv.cpp | 23 +--- 3 files changed, 116 insertions(+), 19 deletions(-) diff --git a/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp b/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp index 8f516f38e7d9a..82a4df29326cb 100644 --- a/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp +++ b/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp @@ -2519,6 +2519,109 @@ void MacroAssembler::lookup_interface_method(Register recv_klass, } } +// Look up the method for a megamorphic invokeinterface call in a single pass over itable: +// - check recv_klass (actual object class) is a subtype of resolved_klass from CompiledICHolder +// - find a holder_klass (class that implements the method) vtable offset and get the method from vtable by index +// The target method is determined by . +// The receiver klass is in recv_klass. +// On success, the result will be in method_result, and execution falls through. +// On failure, execution transfers to the given label. +void MacroAssembler::lookup_interface_method_stub(Register recv_klass, + Register holder_klass, + Register resolved_klass, + Register method_result, + Register temp_itbl_klass, + Register scan_temp, + int itable_index, + Label& L_no_such_interface) { + // 'method_result' is only used as output register at the very end of this method. + // Until then we can reuse it as 'holder_offset'. + Register holder_offset = method_result; + assert_different_registers(resolved_klass, recv_klass, holder_klass, temp_itbl_klass, scan_temp, holder_offset); + + int vtable_start_offset_bytes = in_bytes(Klass::vtable_start_offset()); + int scan_step = itableOffsetEntry::size() * wordSize; + int ioffset_bytes = in_bytes(itableOffsetEntry::interface_offset()); + int ooffset_bytes = in_bytes(itableOffsetEntry::offset_offset()); + int itmentry_off_bytes = in_bytes(itableMethodEntry::method_offset()); + const int vte_scale = exact_log2(vtableEntry::size_in_bytes()); + + Label L_loop_search_resolved_entry, L_resolved_found, L_holder_found; + + lwu(scan_temp, Address(recv_klass, Klass::vtable_length_offset())); + add(recv_klass, recv_klass, vtable_start_offset_bytes + ioffset_bytes); + // itableOffsetEntry[] itable = recv_klass + Klass::vtable_start_offset() + // + sizeof(vtableEntry) * (recv_klass->_vtable_len); + // scan_temp = &(itable[0]._interface) + // temp_itbl_klass = itable[0]._interface; + shadd(scan_temp, scan_temp, recv_klass, scan_temp, vte_scale); + ld(temp_itbl_klass, Address(scan_temp)); + mv(holder_offset, zr); + + // Initial checks: + // - if (holder_klass != resolved_klass), go to "scan for resolved" + // - if (itable[0] == holder_klass), shortcut to "holder found" + // - if (itable[0] == 0), no such interface + bne(resolved_klass, holder_klass, L_loop_search_resolved_entry); + beq(holder_klass, temp_itbl_klass, L_holder_found); + beqz(temp_itbl_klass, L_no_such_interface); + + // Loop: Look for holder_klass record in itable + // do { + // temp_itbl_klass = *(scan_temp += scan_step); + // if (temp_itbl_klass == holder_klass) { + // goto L_holder_found; // Found! + // } + // } while (temp_itbl_klass != 0); + // goto L_no_such_interface // Not found. + Label L_search_holder; + bind(L_search_holder); + add(scan_temp, scan_temp, scan_step); + ld(temp_itbl_klass, Address(scan_temp)); + beq(holder_klass, temp_itbl_klass, L_holder_found); + bnez(temp_itbl_klass, L_search_holder); + + j(L_no_such_interface); + + // Loop: Look for resolved_class record in itable + // while (true) { + // temp_itbl_klass = *(scan_temp += scan_step); + // if (temp_itbl_klass == 0) { + // goto L_no_such_interface; + // } + // if (temp_itbl_klass == resolved_klass) { + // goto L_resolved_found; // Found! + // } + // if (temp_itbl_klass == holder_klass) { + // holder_offset = scan_temp; + // } + // } + // + Label L_loop_search_resolved; + bind(L_loop_search_resolved); + add(scan_temp, scan_temp, scan_step); + ld(temp_itbl_klass, Address(scan_temp)); + bind(L_loop_search_resolved_entry); + beqz(temp_itbl_klass, L_no_such_interface); + beq(resolved_klass, temp_itbl_klass, L_resolved_found); + bne(holder_klass, temp_itbl_klass, L_loop_search_resolved); + mv(holder_offset, scan_temp); + j(L_loop_search_resolved); + + // See if we already have a holder klass. If not, go and scan for it. + bind(L_resolved_found); + beqz(holder_offset, L_search_holder); + mv(scan_temp, holder_offset); + + // Finally, scan_temp contains holder_klass vtable offset + bind(L_holder_found); + lwu(method_result, Address(scan_temp, ooffset_bytes - ioffset_bytes)); + add(recv_klass, recv_klass, itable_index * wordSize + itmentry_off_bytes + - vtable_start_offset_bytes - ioffset_bytes); // substract offsets to restore the original value of recv_klass + add(method_result, recv_klass, method_result); + ld(method_result, Address(method_result)); +} + // virtual method calling void MacroAssembler::lookup_virtual_method(Register recv_klass, RegisterOrConstant vtable_index, diff --git a/src/hotspot/cpu/riscv/macroAssembler_riscv.hpp b/src/hotspot/cpu/riscv/macroAssembler_riscv.hpp index 1a8271166a9cc..8308ea255c7e8 100644 --- a/src/hotspot/cpu/riscv/macroAssembler_riscv.hpp +++ b/src/hotspot/cpu/riscv/macroAssembler_riscv.hpp @@ -254,6 +254,15 @@ class MacroAssembler: public Assembler { Label& no_such_interface, bool return_method = true); + void lookup_interface_method_stub(Register recv_klass, + Register holder_klass, + Register resolved_klass, + Register method_result, + Register temp_reg, + Register temp_reg2, + int itable_index, + Label& L_no_such_interface); + // virtual method calling // n.n. x86 allows RegisterOrConstant for vtable_index void lookup_virtual_method(Register recv_klass, diff --git a/src/hotspot/cpu/riscv/vtableStubs_riscv.cpp b/src/hotspot/cpu/riscv/vtableStubs_riscv.cpp index 6ab3a26232345..9d08796681f3f 100644 --- a/src/hotspot/cpu/riscv/vtableStubs_riscv.cpp +++ b/src/hotspot/cpu/riscv/vtableStubs_riscv.cpp @@ -178,7 +178,7 @@ VtableStub* VtableStubs::create_itable_stub(int itable_index) { // so all registers except arguments are free at this point. const Register recv_klass_reg = x18; const Register holder_klass_reg = x19; // declaring interface klass (DECC) - const Register resolved_klass_reg = xmethod; // resolved interface klass (REFC) + const Register resolved_klass_reg = x30; // resolved interface klass (REFC) const Register temp_reg = x28; const Register temp_reg2 = x29; const Register icholder_reg = t1; @@ -195,28 +195,13 @@ VtableStub* VtableStubs::create_itable_stub(int itable_index) { __ load_klass(recv_klass_reg, j_rarg0); // Receiver subtype check against REFC. - __ lookup_interface_method(// inputs: rec. class, interface - recv_klass_reg, resolved_klass_reg, noreg, - // outputs: scan temp. reg1, scan temp. reg2 - temp_reg2, temp_reg, - L_no_such_interface, - /*return_method=*/false); - - const ptrdiff_t typecheckSize = __ pc() - start_pc; - start_pc = __ pc(); - // Get selected method from declaring class and itable index - __ lookup_interface_method(// inputs: rec. class, interface, itable index - recv_klass_reg, holder_klass_reg, itable_index, - // outputs: method, scan temp. reg - xmethod, temp_reg, - L_no_such_interface); - - const ptrdiff_t lookupSize = __ pc() - start_pc; + __ lookup_interface_method_stub(recv_klass_reg, holder_klass_reg, resolved_klass_reg, xmethod, + temp_reg, temp_reg2, itable_index, L_no_such_interface); // Reduce "estimate" such that "padding" does not drop below 8. const ptrdiff_t estimate = 256; - const ptrdiff_t codesize = typecheckSize + lookupSize; + const ptrdiff_t codesize = __ pc() - start_pc; slop_delta = (int)(estimate - codesize); slop_bytes += slop_delta; assert(slop_delta >= 0, "itable #%d: Code size estimate (%d) for lookup_interface_method too small, required: %d", itable_index, (int)estimate, (int)codesize); From cb95e393b638d49a2ac07d3173f1ad7581176e7b Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Thu, 23 Nov 2023 16:18:46 +0000 Subject: [PATCH 046/250] 8224261: JProgressBar always with border painted around it Reviewed-by: aivanov, dnguyen --- .../swing/plaf/synth/SynthProgressBarUI.java | 9 +- .../JProgressBar/TestProgressBarBorder.java | 108 ++++++++++++++++++ 2 files changed, 114 insertions(+), 3 deletions(-) create mode 100644 test/jdk/javax/swing/JProgressBar/TestProgressBarBorder.java diff --git a/src/java.desktop/share/classes/javax/swing/plaf/synth/SynthProgressBarUI.java b/src/java.desktop/share/classes/javax/swing/plaf/synth/SynthProgressBarUI.java index 0adf45df1ff0a..ee50976bbf4f9 100644 --- a/src/java.desktop/share/classes/javax/swing/plaf/synth/SynthProgressBarUI.java +++ b/src/java.desktop/share/classes/javax/swing/plaf/synth/SynthProgressBarUI.java @@ -215,9 +215,12 @@ public void update(Graphics g, JComponent c) { SynthContext context = getContext(c); SynthLookAndFeel.update(context, g); - context.getPainter().paintProgressBarBackground(context, - g, 0, 0, c.getWidth(), c.getHeight(), - progressBar.getOrientation()); + + if (((JProgressBar) c).isBorderPainted()) { + context.getPainter().paintProgressBarBackground(context, + g, 0, 0, c.getWidth(), c.getHeight(), + progressBar.getOrientation()); + } paint(context, g); } diff --git a/test/jdk/javax/swing/JProgressBar/TestProgressBarBorder.java b/test/jdk/javax/swing/JProgressBar/TestProgressBarBorder.java new file mode 100644 index 0000000000000..06ccfc3b9bfbc --- /dev/null +++ b/test/jdk/javax/swing/JProgressBar/TestProgressBarBorder.java @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2023, 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. + */ + +import java.io.File; +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.awt.Graphics; +import java.awt.image.BufferedImage; +import javax.imageio.ImageIO; +import javax.swing.JComponent; +import javax.swing.JProgressBar; +import javax.swing.SwingUtilities; +import javax.swing.UIManager; +import javax.swing.UnsupportedLookAndFeelException; + +import static java.awt.image.BufferedImage.TYPE_INT_RGB; + +/* + * @test + * @bug 8224261 + * @key headful + * @library ../regtesthelpers + * @build Util + * @summary Verifies JProgressBar border is not painted when border + * painting is set to false + * @run main TestProgressBarBorder + */ + +public class TestProgressBarBorder { + public static void main(String[] args) throws Exception { + for (UIManager.LookAndFeelInfo laf : + UIManager.getInstalledLookAndFeels()) { + if (!laf.getName().contains("Nimbus") && !laf.getName().contains("GTK")) { + continue; + } + System.out.println("Testing LAF: " + laf.getName()); + SwingUtilities.invokeAndWait(() -> test(laf)); + } + } + + private static void test(UIManager.LookAndFeelInfo laf) { + setLookAndFeel(laf); + JProgressBar progressBar = createProgressBar(); + progressBar.setBorderPainted(true); + BufferedImage withBorder = paintToImage(progressBar); + progressBar.setBorderPainted(false); + BufferedImage withoutBorder = paintToImage(progressBar); + + boolean equal = Util.compareBufferedImages(withBorder, withoutBorder); + if (equal) { + try { + ImageIO.write(withBorder, "png", new File("withBorder.png")); + ImageIO.write(withoutBorder, "png", new File("withoutBorder.png")); + } catch (IOException ignored) {} + + throw new RuntimeException("JProgressBar border is painted when border " + + "painting is set to false"); + } + } + + private static void setLookAndFeel(UIManager.LookAndFeelInfo laf) { + try { + UIManager.setLookAndFeel(laf.getClassName()); + } catch (UnsupportedLookAndFeelException ignored) { + System.out.println("Unsupported LAF: " + laf.getClassName()); + } catch (ClassNotFoundException | InstantiationException + | IllegalAccessException e) { + throw new RuntimeException(e); + } + } + + private static JProgressBar createProgressBar() { + JProgressBar progressBar = new JProgressBar(); + progressBar.setSize(100, 50); + progressBar.setValue(0); + progressBar.setStringPainted(true); + return progressBar; + } + + private static BufferedImage paintToImage(JComponent content) { + BufferedImage im = new BufferedImage(content.getWidth(), content.getHeight(), + TYPE_INT_RGB); + Graphics g = im.getGraphics(); + content.paint(g); + g.dispose(); + return im; + } +} From 6f263111a1812873291e91870e341ccce804d049 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gerg=C3=B6=20Barany?= Date: Thu, 23 Nov 2023 18:33:19 +0000 Subject: [PATCH 047/250] 8318490: Increase timeout for JDK tests that are close to the limit when run with libgraal Reviewed-by: dnsimon, never, thartmann --- .../intrinsics/string/TestStringIntrinsicRangeChecks.java | 2 +- .../jtreg/compiler/vectorapi/reshape/TestVectorCastAVX1.java | 2 +- .../jtreg/compiler/vectorapi/reshape/TestVectorCastAVX2.java | 2 +- .../jtreg/compiler/vectorapi/reshape/TestVectorCastAVX512.java | 2 +- .../compiler/vectorapi/reshape/TestVectorCastAVX512BW.java | 2 +- .../compiler/vectorapi/reshape/TestVectorCastAVX512DQ.java | 2 +- .../jtreg/compiler/vectorapi/reshape/TestVectorCastNeon.java | 2 +- .../jtreg/compiler/vectorapi/reshape/TestVectorCastSVE.java | 2 +- test/hotspot/jtreg/vmTestbase/nsk/stress/thread/thread007.java | 2 +- test/hotspot/jtreg/vmTestbase/nsk/stress/thread/thread008.java | 2 +- test/jdk/jdk/incubator/vector/Byte128VectorTests.java | 2 +- test/jdk/jdk/incubator/vector/Byte256VectorTests.java | 2 +- test/jdk/jdk/incubator/vector/Byte512VectorTests.java | 2 +- test/jdk/jdk/incubator/vector/Byte64VectorTests.java | 2 +- test/jdk/jdk/incubator/vector/ByteMaxVectorTests.java | 2 +- test/jdk/jdk/incubator/vector/Double128VectorTests.java | 2 +- test/jdk/jdk/incubator/vector/Double256VectorTests.java | 2 +- test/jdk/jdk/incubator/vector/Double512VectorTests.java | 2 +- test/jdk/jdk/incubator/vector/Double64VectorTests.java | 2 +- test/jdk/jdk/incubator/vector/DoubleMaxVectorTests.java | 2 +- test/jdk/jdk/incubator/vector/Float128VectorTests.java | 2 +- test/jdk/jdk/incubator/vector/Float256VectorTests.java | 2 +- test/jdk/jdk/incubator/vector/Float512VectorTests.java | 2 +- test/jdk/jdk/incubator/vector/Float64VectorTests.java | 2 +- test/jdk/jdk/incubator/vector/FloatMaxVectorTests.java | 2 +- test/jdk/jdk/incubator/vector/Int128VectorTests.java | 2 +- test/jdk/jdk/incubator/vector/Int256VectorTests.java | 2 +- test/jdk/jdk/incubator/vector/Int512VectorTests.java | 2 +- test/jdk/jdk/incubator/vector/Int64VectorTests.java | 2 +- test/jdk/jdk/incubator/vector/IntMaxVectorTests.java | 2 +- test/jdk/jdk/incubator/vector/Long128VectorTests.java | 2 +- test/jdk/jdk/incubator/vector/Long256VectorTests.java | 2 +- test/jdk/jdk/incubator/vector/Long512VectorTests.java | 2 +- test/jdk/jdk/incubator/vector/Long64VectorTests.java | 2 +- test/jdk/jdk/incubator/vector/LongMaxVectorTests.java | 2 +- test/jdk/jdk/incubator/vector/Short128VectorTests.java | 2 +- test/jdk/jdk/incubator/vector/Short256VectorTests.java | 2 +- test/jdk/jdk/incubator/vector/Short512VectorTests.java | 2 +- test/jdk/jdk/incubator/vector/Short64VectorTests.java | 2 +- test/jdk/jdk/incubator/vector/ShortMaxVectorTests.java | 2 +- test/jdk/jdk/incubator/vector/templates/Unit-header.template | 2 +- 41 files changed, 41 insertions(+), 41 deletions(-) diff --git a/test/hotspot/jtreg/compiler/intrinsics/string/TestStringIntrinsicRangeChecks.java b/test/hotspot/jtreg/compiler/intrinsics/string/TestStringIntrinsicRangeChecks.java index 76bfda0f51fa7..a7d2cfe7fa7ff 100644 --- a/test/hotspot/jtreg/compiler/intrinsics/string/TestStringIntrinsicRangeChecks.java +++ b/test/hotspot/jtreg/compiler/intrinsics/string/TestStringIntrinsicRangeChecks.java @@ -27,7 +27,7 @@ * @summary Verifies that string intrinsics throw array out of bounds exceptions. * @library /compiler/patches /test/lib * @build java.base/java.lang.Helper - * @run main/othervm -Xbatch -XX:CompileThreshold=100 compiler.intrinsics.string.TestStringIntrinsicRangeChecks + * @run main/othervm/timeout=300 -Xbatch -XX:CompileThreshold=100 compiler.intrinsics.string.TestStringIntrinsicRangeChecks */ package compiler.intrinsics.string; diff --git a/test/hotspot/jtreg/compiler/vectorapi/reshape/TestVectorCastAVX1.java b/test/hotspot/jtreg/compiler/vectorapi/reshape/TestVectorCastAVX1.java index 050777505e21f..944a48750ba15 100644 --- a/test/hotspot/jtreg/compiler/vectorapi/reshape/TestVectorCastAVX1.java +++ b/test/hotspot/jtreg/compiler/vectorapi/reshape/TestVectorCastAVX1.java @@ -36,7 +36,7 @@ * @summary Test that vector cast intrinsics work as intended on avx1. * @requires vm.cpu.features ~= ".*avx.*" * @library /test/lib / - * @run main compiler.vectorapi.reshape.TestVectorCastAVX1 + * @run main/timeout=300 compiler.vectorapi.reshape.TestVectorCastAVX1 */ public class TestVectorCastAVX1 { public static void main(String[] args) { diff --git a/test/hotspot/jtreg/compiler/vectorapi/reshape/TestVectorCastAVX2.java b/test/hotspot/jtreg/compiler/vectorapi/reshape/TestVectorCastAVX2.java index 2c5cfe7de99c2..d748b82cb84a8 100644 --- a/test/hotspot/jtreg/compiler/vectorapi/reshape/TestVectorCastAVX2.java +++ b/test/hotspot/jtreg/compiler/vectorapi/reshape/TestVectorCastAVX2.java @@ -36,7 +36,7 @@ * @summary Test that vector cast intrinsics work as intended on avx2. * @requires vm.cpu.features ~= ".*avx2.*" * @library /test/lib / - * @run main compiler.vectorapi.reshape.TestVectorCastAVX2 + * @run main/timeout=300 compiler.vectorapi.reshape.TestVectorCastAVX2 */ public class TestVectorCastAVX2 { public static void main(String[] args) { diff --git a/test/hotspot/jtreg/compiler/vectorapi/reshape/TestVectorCastAVX512.java b/test/hotspot/jtreg/compiler/vectorapi/reshape/TestVectorCastAVX512.java index 903958943e3a0..fa11d1a5df756 100644 --- a/test/hotspot/jtreg/compiler/vectorapi/reshape/TestVectorCastAVX512.java +++ b/test/hotspot/jtreg/compiler/vectorapi/reshape/TestVectorCastAVX512.java @@ -36,7 +36,7 @@ * @summary Test that vector cast intrinsics work as intended on avx512. * @requires vm.cpu.features ~= ".*avx512.*" * @library /test/lib / - * @run main compiler.vectorapi.reshape.TestVectorCastAVX512 + * @run main/timeout=300 compiler.vectorapi.reshape.TestVectorCastAVX512 */ public class TestVectorCastAVX512 { public static void main(String[] args) { diff --git a/test/hotspot/jtreg/compiler/vectorapi/reshape/TestVectorCastAVX512BW.java b/test/hotspot/jtreg/compiler/vectorapi/reshape/TestVectorCastAVX512BW.java index d98379ae8009a..16e577b48a688 100644 --- a/test/hotspot/jtreg/compiler/vectorapi/reshape/TestVectorCastAVX512BW.java +++ b/test/hotspot/jtreg/compiler/vectorapi/reshape/TestVectorCastAVX512BW.java @@ -36,7 +36,7 @@ * @summary Test that vector cast intrinsics work as intended on avx512bw. * @requires vm.cpu.features ~= ".*avx512bw.*" * @library /test/lib / - * @run main compiler.vectorapi.reshape.TestVectorCastAVX512BW + * @run main/timeout=300 compiler.vectorapi.reshape.TestVectorCastAVX512BW */ public class TestVectorCastAVX512BW { public static void main(String[] args) { diff --git a/test/hotspot/jtreg/compiler/vectorapi/reshape/TestVectorCastAVX512DQ.java b/test/hotspot/jtreg/compiler/vectorapi/reshape/TestVectorCastAVX512DQ.java index 952794236514c..3aa1b62650f18 100644 --- a/test/hotspot/jtreg/compiler/vectorapi/reshape/TestVectorCastAVX512DQ.java +++ b/test/hotspot/jtreg/compiler/vectorapi/reshape/TestVectorCastAVX512DQ.java @@ -36,7 +36,7 @@ * @summary Test that vector cast intrinsics work as intended on avx512dq. * @requires vm.cpu.features ~= ".*avx512dq.*" * @library /test/lib / - * @run main compiler.vectorapi.reshape.TestVectorCastAVX512DQ + * @run main/timeout=300 compiler.vectorapi.reshape.TestVectorCastAVX512DQ */ public class TestVectorCastAVX512DQ { public static void main(String[] args) { diff --git a/test/hotspot/jtreg/compiler/vectorapi/reshape/TestVectorCastNeon.java b/test/hotspot/jtreg/compiler/vectorapi/reshape/TestVectorCastNeon.java index 75a8fada91ee0..b70517104dc38 100644 --- a/test/hotspot/jtreg/compiler/vectorapi/reshape/TestVectorCastNeon.java +++ b/test/hotspot/jtreg/compiler/vectorapi/reshape/TestVectorCastNeon.java @@ -36,7 +36,7 @@ * @summary Test that vector cast intrinsics work as intended on neon. * @requires vm.cpu.features ~= ".*asimd.*" * @library /test/lib / - * @run main compiler.vectorapi.reshape.TestVectorCastNeon + * @run main/timeout=300 compiler.vectorapi.reshape.TestVectorCastNeon */ public class TestVectorCastNeon { public static void main(String[] args) { diff --git a/test/hotspot/jtreg/compiler/vectorapi/reshape/TestVectorCastSVE.java b/test/hotspot/jtreg/compiler/vectorapi/reshape/TestVectorCastSVE.java index e1cd1f0fdac4b..72624692352a8 100644 --- a/test/hotspot/jtreg/compiler/vectorapi/reshape/TestVectorCastSVE.java +++ b/test/hotspot/jtreg/compiler/vectorapi/reshape/TestVectorCastSVE.java @@ -36,7 +36,7 @@ * @summary Test that vector cast intrinsics work as intended on sve. * @requires vm.cpu.features ~= ".*sve.*" * @library /test/lib / - * @run main compiler.vectorapi.reshape.TestVectorCastSVE + * @run main/timeout=300 compiler.vectorapi.reshape.TestVectorCastSVE */ public class TestVectorCastSVE { public static void main(String[] args) { diff --git a/test/hotspot/jtreg/vmTestbase/nsk/stress/thread/thread007.java b/test/hotspot/jtreg/vmTestbase/nsk/stress/thread/thread007.java index 07031a783bfd2..26388c28d0a6b 100644 --- a/test/hotspot/jtreg/vmTestbase/nsk/stress/thread/thread007.java +++ b/test/hotspot/jtreg/vmTestbase/nsk/stress/thread/thread007.java @@ -32,7 +32,7 @@ * Try to start the given number of threads starting simultaneously * when notifyall() is signaled at the stopLine object. * - * @run main/othervm nsk.stress.thread.thread007 500 2m 5s + * @run main/othervm/timeout=300 nsk.stress.thread.thread007 500 2m 5s */ package nsk.stress.thread; diff --git a/test/hotspot/jtreg/vmTestbase/nsk/stress/thread/thread008.java b/test/hotspot/jtreg/vmTestbase/nsk/stress/thread/thread008.java index 40a76e00d11f8..2cbc198a69348 100644 --- a/test/hotspot/jtreg/vmTestbase/nsk/stress/thread/thread008.java +++ b/test/hotspot/jtreg/vmTestbase/nsk/stress/thread/thread008.java @@ -33,7 +33,7 @@ * starting simultaneously when notifyall() is signaled at the * stopLine object. * - * @run main/othervm nsk.stress.thread.thread008 500 2m 5s + * @run main/othervm/timeout=300 nsk.stress.thread.thread008 500 2m 5s */ package nsk.stress.thread; diff --git a/test/jdk/jdk/incubator/vector/Byte128VectorTests.java b/test/jdk/jdk/incubator/vector/Byte128VectorTests.java index 9d656f0e33854..65a0acf6dac5c 100644 --- a/test/jdk/jdk/incubator/vector/Byte128VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Byte128VectorTests.java @@ -24,7 +24,7 @@ /* * @test * @modules jdk.incubator.vector - * @run testng/othervm -ea -esa -Xbatch -XX:-TieredCompilation Byte128VectorTests + * @run testng/othervm/timeout=300 -ea -esa -Xbatch -XX:-TieredCompilation Byte128VectorTests */ // -- This file was mechanically generated: Do not edit! -- // diff --git a/test/jdk/jdk/incubator/vector/Byte256VectorTests.java b/test/jdk/jdk/incubator/vector/Byte256VectorTests.java index 31ecc509c3917..87c5f3a39c2b3 100644 --- a/test/jdk/jdk/incubator/vector/Byte256VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Byte256VectorTests.java @@ -24,7 +24,7 @@ /* * @test * @modules jdk.incubator.vector - * @run testng/othervm -ea -esa -Xbatch -XX:-TieredCompilation Byte256VectorTests + * @run testng/othervm/timeout=300 -ea -esa -Xbatch -XX:-TieredCompilation Byte256VectorTests */ // -- This file was mechanically generated: Do not edit! -- // diff --git a/test/jdk/jdk/incubator/vector/Byte512VectorTests.java b/test/jdk/jdk/incubator/vector/Byte512VectorTests.java index b677d6fde5959..97e70d2f85d5f 100644 --- a/test/jdk/jdk/incubator/vector/Byte512VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Byte512VectorTests.java @@ -24,7 +24,7 @@ /* * @test * @modules jdk.incubator.vector - * @run testng/othervm -ea -esa -Xbatch -XX:-TieredCompilation Byte512VectorTests + * @run testng/othervm/timeout=300 -ea -esa -Xbatch -XX:-TieredCompilation Byte512VectorTests */ // -- This file was mechanically generated: Do not edit! -- // diff --git a/test/jdk/jdk/incubator/vector/Byte64VectorTests.java b/test/jdk/jdk/incubator/vector/Byte64VectorTests.java index 3c33d91854c05..92019e6957a6b 100644 --- a/test/jdk/jdk/incubator/vector/Byte64VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Byte64VectorTests.java @@ -24,7 +24,7 @@ /* * @test * @modules jdk.incubator.vector - * @run testng/othervm -ea -esa -Xbatch -XX:-TieredCompilation Byte64VectorTests + * @run testng/othervm/timeout=300 -ea -esa -Xbatch -XX:-TieredCompilation Byte64VectorTests */ // -- This file was mechanically generated: Do not edit! -- // diff --git a/test/jdk/jdk/incubator/vector/ByteMaxVectorTests.java b/test/jdk/jdk/incubator/vector/ByteMaxVectorTests.java index 3d19d2ab6d0b6..921b2be725ceb 100644 --- a/test/jdk/jdk/incubator/vector/ByteMaxVectorTests.java +++ b/test/jdk/jdk/incubator/vector/ByteMaxVectorTests.java @@ -24,7 +24,7 @@ /* * @test * @modules jdk.incubator.vector - * @run testng/othervm -ea -esa -Xbatch -XX:-TieredCompilation ByteMaxVectorTests + * @run testng/othervm/timeout=300 -ea -esa -Xbatch -XX:-TieredCompilation ByteMaxVectorTests */ // -- This file was mechanically generated: Do not edit! -- // diff --git a/test/jdk/jdk/incubator/vector/Double128VectorTests.java b/test/jdk/jdk/incubator/vector/Double128VectorTests.java index 5e81cb946bcaf..f7c955a08ce13 100644 --- a/test/jdk/jdk/incubator/vector/Double128VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Double128VectorTests.java @@ -24,7 +24,7 @@ /* * @test * @modules jdk.incubator.vector - * @run testng/othervm -ea -esa -Xbatch -XX:-TieredCompilation Double128VectorTests + * @run testng/othervm/timeout=300 -ea -esa -Xbatch -XX:-TieredCompilation Double128VectorTests */ // -- This file was mechanically generated: Do not edit! -- // diff --git a/test/jdk/jdk/incubator/vector/Double256VectorTests.java b/test/jdk/jdk/incubator/vector/Double256VectorTests.java index ef4f3f0f97511..27f9c0df19425 100644 --- a/test/jdk/jdk/incubator/vector/Double256VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Double256VectorTests.java @@ -24,7 +24,7 @@ /* * @test * @modules jdk.incubator.vector - * @run testng/othervm -ea -esa -Xbatch -XX:-TieredCompilation Double256VectorTests + * @run testng/othervm/timeout=300 -ea -esa -Xbatch -XX:-TieredCompilation Double256VectorTests */ // -- This file was mechanically generated: Do not edit! -- // diff --git a/test/jdk/jdk/incubator/vector/Double512VectorTests.java b/test/jdk/jdk/incubator/vector/Double512VectorTests.java index 21209c23ea10e..440a553dc335d 100644 --- a/test/jdk/jdk/incubator/vector/Double512VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Double512VectorTests.java @@ -24,7 +24,7 @@ /* * @test * @modules jdk.incubator.vector - * @run testng/othervm -ea -esa -Xbatch -XX:-TieredCompilation Double512VectorTests + * @run testng/othervm/timeout=300 -ea -esa -Xbatch -XX:-TieredCompilation Double512VectorTests */ // -- This file was mechanically generated: Do not edit! -- // diff --git a/test/jdk/jdk/incubator/vector/Double64VectorTests.java b/test/jdk/jdk/incubator/vector/Double64VectorTests.java index 360445a6b7f2e..73ac9b00c05f9 100644 --- a/test/jdk/jdk/incubator/vector/Double64VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Double64VectorTests.java @@ -24,7 +24,7 @@ /* * @test * @modules jdk.incubator.vector - * @run testng/othervm -ea -esa -Xbatch -XX:-TieredCompilation Double64VectorTests + * @run testng/othervm/timeout=300 -ea -esa -Xbatch -XX:-TieredCompilation Double64VectorTests */ // -- This file was mechanically generated: Do not edit! -- // diff --git a/test/jdk/jdk/incubator/vector/DoubleMaxVectorTests.java b/test/jdk/jdk/incubator/vector/DoubleMaxVectorTests.java index 01d72b64d2d92..296e23a70231e 100644 --- a/test/jdk/jdk/incubator/vector/DoubleMaxVectorTests.java +++ b/test/jdk/jdk/incubator/vector/DoubleMaxVectorTests.java @@ -24,7 +24,7 @@ /* * @test * @modules jdk.incubator.vector - * @run testng/othervm -ea -esa -Xbatch -XX:-TieredCompilation DoubleMaxVectorTests + * @run testng/othervm/timeout=300 -ea -esa -Xbatch -XX:-TieredCompilation DoubleMaxVectorTests */ // -- This file was mechanically generated: Do not edit! -- // diff --git a/test/jdk/jdk/incubator/vector/Float128VectorTests.java b/test/jdk/jdk/incubator/vector/Float128VectorTests.java index 9f1b28a80c6a5..bf61881e3d8d5 100644 --- a/test/jdk/jdk/incubator/vector/Float128VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Float128VectorTests.java @@ -24,7 +24,7 @@ /* * @test * @modules jdk.incubator.vector - * @run testng/othervm -ea -esa -Xbatch -XX:-TieredCompilation Float128VectorTests + * @run testng/othervm/timeout=300 -ea -esa -Xbatch -XX:-TieredCompilation Float128VectorTests */ // -- This file was mechanically generated: Do not edit! -- // diff --git a/test/jdk/jdk/incubator/vector/Float256VectorTests.java b/test/jdk/jdk/incubator/vector/Float256VectorTests.java index 649b06a007d6c..7292f55aa6d5a 100644 --- a/test/jdk/jdk/incubator/vector/Float256VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Float256VectorTests.java @@ -24,7 +24,7 @@ /* * @test * @modules jdk.incubator.vector - * @run testng/othervm -ea -esa -Xbatch -XX:-TieredCompilation Float256VectorTests + * @run testng/othervm/timeout=300 -ea -esa -Xbatch -XX:-TieredCompilation Float256VectorTests */ // -- This file was mechanically generated: Do not edit! -- // diff --git a/test/jdk/jdk/incubator/vector/Float512VectorTests.java b/test/jdk/jdk/incubator/vector/Float512VectorTests.java index 5bd3932cef158..01d1e27209b50 100644 --- a/test/jdk/jdk/incubator/vector/Float512VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Float512VectorTests.java @@ -24,7 +24,7 @@ /* * @test * @modules jdk.incubator.vector - * @run testng/othervm -ea -esa -Xbatch -XX:-TieredCompilation Float512VectorTests + * @run testng/othervm/timeout=300 -ea -esa -Xbatch -XX:-TieredCompilation Float512VectorTests */ // -- This file was mechanically generated: Do not edit! -- // diff --git a/test/jdk/jdk/incubator/vector/Float64VectorTests.java b/test/jdk/jdk/incubator/vector/Float64VectorTests.java index 1922be94f403f..b7fd8ab276787 100644 --- a/test/jdk/jdk/incubator/vector/Float64VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Float64VectorTests.java @@ -24,7 +24,7 @@ /* * @test * @modules jdk.incubator.vector - * @run testng/othervm -ea -esa -Xbatch -XX:-TieredCompilation Float64VectorTests + * @run testng/othervm/timeout=300 -ea -esa -Xbatch -XX:-TieredCompilation Float64VectorTests */ // -- This file was mechanically generated: Do not edit! -- // diff --git a/test/jdk/jdk/incubator/vector/FloatMaxVectorTests.java b/test/jdk/jdk/incubator/vector/FloatMaxVectorTests.java index 3e72f9077f624..5592f5985b043 100644 --- a/test/jdk/jdk/incubator/vector/FloatMaxVectorTests.java +++ b/test/jdk/jdk/incubator/vector/FloatMaxVectorTests.java @@ -24,7 +24,7 @@ /* * @test * @modules jdk.incubator.vector - * @run testng/othervm -ea -esa -Xbatch -XX:-TieredCompilation FloatMaxVectorTests + * @run testng/othervm/timeout=300 -ea -esa -Xbatch -XX:-TieredCompilation FloatMaxVectorTests */ // -- This file was mechanically generated: Do not edit! -- // diff --git a/test/jdk/jdk/incubator/vector/Int128VectorTests.java b/test/jdk/jdk/incubator/vector/Int128VectorTests.java index f69423c12e2b5..fcfe286034d2c 100644 --- a/test/jdk/jdk/incubator/vector/Int128VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Int128VectorTests.java @@ -24,7 +24,7 @@ /* * @test * @modules jdk.incubator.vector - * @run testng/othervm -ea -esa -Xbatch -XX:-TieredCompilation Int128VectorTests + * @run testng/othervm/timeout=300 -ea -esa -Xbatch -XX:-TieredCompilation Int128VectorTests */ // -- This file was mechanically generated: Do not edit! -- // diff --git a/test/jdk/jdk/incubator/vector/Int256VectorTests.java b/test/jdk/jdk/incubator/vector/Int256VectorTests.java index f580c39c0910d..64cad182a24bd 100644 --- a/test/jdk/jdk/incubator/vector/Int256VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Int256VectorTests.java @@ -24,7 +24,7 @@ /* * @test * @modules jdk.incubator.vector - * @run testng/othervm -ea -esa -Xbatch -XX:-TieredCompilation Int256VectorTests + * @run testng/othervm/timeout=300 -ea -esa -Xbatch -XX:-TieredCompilation Int256VectorTests */ // -- This file was mechanically generated: Do not edit! -- // diff --git a/test/jdk/jdk/incubator/vector/Int512VectorTests.java b/test/jdk/jdk/incubator/vector/Int512VectorTests.java index 89cd557ec9b89..468a2c3a8f13f 100644 --- a/test/jdk/jdk/incubator/vector/Int512VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Int512VectorTests.java @@ -24,7 +24,7 @@ /* * @test * @modules jdk.incubator.vector - * @run testng/othervm -ea -esa -Xbatch -XX:-TieredCompilation Int512VectorTests + * @run testng/othervm/timeout=300 -ea -esa -Xbatch -XX:-TieredCompilation Int512VectorTests */ // -- This file was mechanically generated: Do not edit! -- // diff --git a/test/jdk/jdk/incubator/vector/Int64VectorTests.java b/test/jdk/jdk/incubator/vector/Int64VectorTests.java index 0affccd742b53..14b853c1e7222 100644 --- a/test/jdk/jdk/incubator/vector/Int64VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Int64VectorTests.java @@ -24,7 +24,7 @@ /* * @test * @modules jdk.incubator.vector - * @run testng/othervm -ea -esa -Xbatch -XX:-TieredCompilation Int64VectorTests + * @run testng/othervm/timeout=300 -ea -esa -Xbatch -XX:-TieredCompilation Int64VectorTests */ // -- This file was mechanically generated: Do not edit! -- // diff --git a/test/jdk/jdk/incubator/vector/IntMaxVectorTests.java b/test/jdk/jdk/incubator/vector/IntMaxVectorTests.java index c0fdcbf58a317..b608b548ceeb2 100644 --- a/test/jdk/jdk/incubator/vector/IntMaxVectorTests.java +++ b/test/jdk/jdk/incubator/vector/IntMaxVectorTests.java @@ -24,7 +24,7 @@ /* * @test * @modules jdk.incubator.vector - * @run testng/othervm -ea -esa -Xbatch -XX:-TieredCompilation IntMaxVectorTests + * @run testng/othervm/timeout=300 -ea -esa -Xbatch -XX:-TieredCompilation IntMaxVectorTests */ // -- This file was mechanically generated: Do not edit! -- // diff --git a/test/jdk/jdk/incubator/vector/Long128VectorTests.java b/test/jdk/jdk/incubator/vector/Long128VectorTests.java index a706b884f8bc5..e80497c358441 100644 --- a/test/jdk/jdk/incubator/vector/Long128VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Long128VectorTests.java @@ -24,7 +24,7 @@ /* * @test * @modules jdk.incubator.vector - * @run testng/othervm -ea -esa -Xbatch -XX:-TieredCompilation Long128VectorTests + * @run testng/othervm/timeout=300 -ea -esa -Xbatch -XX:-TieredCompilation Long128VectorTests */ // -- This file was mechanically generated: Do not edit! -- // diff --git a/test/jdk/jdk/incubator/vector/Long256VectorTests.java b/test/jdk/jdk/incubator/vector/Long256VectorTests.java index 3056c8cbcaa65..b3762b4c15a17 100644 --- a/test/jdk/jdk/incubator/vector/Long256VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Long256VectorTests.java @@ -24,7 +24,7 @@ /* * @test * @modules jdk.incubator.vector - * @run testng/othervm -ea -esa -Xbatch -XX:-TieredCompilation Long256VectorTests + * @run testng/othervm/timeout=300 -ea -esa -Xbatch -XX:-TieredCompilation Long256VectorTests */ // -- This file was mechanically generated: Do not edit! -- // diff --git a/test/jdk/jdk/incubator/vector/Long512VectorTests.java b/test/jdk/jdk/incubator/vector/Long512VectorTests.java index 5a0a5d106bf33..57ba7738d13aa 100644 --- a/test/jdk/jdk/incubator/vector/Long512VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Long512VectorTests.java @@ -24,7 +24,7 @@ /* * @test * @modules jdk.incubator.vector - * @run testng/othervm -ea -esa -Xbatch -XX:-TieredCompilation Long512VectorTests + * @run testng/othervm/timeout=300 -ea -esa -Xbatch -XX:-TieredCompilation Long512VectorTests */ // -- This file was mechanically generated: Do not edit! -- // diff --git a/test/jdk/jdk/incubator/vector/Long64VectorTests.java b/test/jdk/jdk/incubator/vector/Long64VectorTests.java index 1a3ecebd57c7d..8917281196f42 100644 --- a/test/jdk/jdk/incubator/vector/Long64VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Long64VectorTests.java @@ -24,7 +24,7 @@ /* * @test * @modules jdk.incubator.vector - * @run testng/othervm -ea -esa -Xbatch -XX:-TieredCompilation Long64VectorTests + * @run testng/othervm/timeout=300 -ea -esa -Xbatch -XX:-TieredCompilation Long64VectorTests */ // -- This file was mechanically generated: Do not edit! -- // diff --git a/test/jdk/jdk/incubator/vector/LongMaxVectorTests.java b/test/jdk/jdk/incubator/vector/LongMaxVectorTests.java index d467107e9f2a1..913f7d6f52779 100644 --- a/test/jdk/jdk/incubator/vector/LongMaxVectorTests.java +++ b/test/jdk/jdk/incubator/vector/LongMaxVectorTests.java @@ -24,7 +24,7 @@ /* * @test * @modules jdk.incubator.vector - * @run testng/othervm -ea -esa -Xbatch -XX:-TieredCompilation LongMaxVectorTests + * @run testng/othervm/timeout=300 -ea -esa -Xbatch -XX:-TieredCompilation LongMaxVectorTests */ // -- This file was mechanically generated: Do not edit! -- // diff --git a/test/jdk/jdk/incubator/vector/Short128VectorTests.java b/test/jdk/jdk/incubator/vector/Short128VectorTests.java index 81568661570f0..e40a40686c980 100644 --- a/test/jdk/jdk/incubator/vector/Short128VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Short128VectorTests.java @@ -24,7 +24,7 @@ /* * @test * @modules jdk.incubator.vector - * @run testng/othervm -ea -esa -Xbatch -XX:-TieredCompilation Short128VectorTests + * @run testng/othervm/timeout=300 -ea -esa -Xbatch -XX:-TieredCompilation Short128VectorTests */ // -- This file was mechanically generated: Do not edit! -- // diff --git a/test/jdk/jdk/incubator/vector/Short256VectorTests.java b/test/jdk/jdk/incubator/vector/Short256VectorTests.java index 14a54fcc1df77..02138e3e8aa2f 100644 --- a/test/jdk/jdk/incubator/vector/Short256VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Short256VectorTests.java @@ -24,7 +24,7 @@ /* * @test * @modules jdk.incubator.vector - * @run testng/othervm -ea -esa -Xbatch -XX:-TieredCompilation Short256VectorTests + * @run testng/othervm/timeout=300 -ea -esa -Xbatch -XX:-TieredCompilation Short256VectorTests */ // -- This file was mechanically generated: Do not edit! -- // diff --git a/test/jdk/jdk/incubator/vector/Short512VectorTests.java b/test/jdk/jdk/incubator/vector/Short512VectorTests.java index 8d869e5a66f24..9577f22f58cdf 100644 --- a/test/jdk/jdk/incubator/vector/Short512VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Short512VectorTests.java @@ -24,7 +24,7 @@ /* * @test * @modules jdk.incubator.vector - * @run testng/othervm -ea -esa -Xbatch -XX:-TieredCompilation Short512VectorTests + * @run testng/othervm/timeout=300 -ea -esa -Xbatch -XX:-TieredCompilation Short512VectorTests */ // -- This file was mechanically generated: Do not edit! -- // diff --git a/test/jdk/jdk/incubator/vector/Short64VectorTests.java b/test/jdk/jdk/incubator/vector/Short64VectorTests.java index 47f37beecb616..71b3c6046b45c 100644 --- a/test/jdk/jdk/incubator/vector/Short64VectorTests.java +++ b/test/jdk/jdk/incubator/vector/Short64VectorTests.java @@ -24,7 +24,7 @@ /* * @test * @modules jdk.incubator.vector - * @run testng/othervm -ea -esa -Xbatch -XX:-TieredCompilation Short64VectorTests + * @run testng/othervm/timeout=300 -ea -esa -Xbatch -XX:-TieredCompilation Short64VectorTests */ // -- This file was mechanically generated: Do not edit! -- // diff --git a/test/jdk/jdk/incubator/vector/ShortMaxVectorTests.java b/test/jdk/jdk/incubator/vector/ShortMaxVectorTests.java index 7e657a3f39832..4a6adbf2c8ea0 100644 --- a/test/jdk/jdk/incubator/vector/ShortMaxVectorTests.java +++ b/test/jdk/jdk/incubator/vector/ShortMaxVectorTests.java @@ -24,7 +24,7 @@ /* * @test * @modules jdk.incubator.vector - * @run testng/othervm -ea -esa -Xbatch -XX:-TieredCompilation ShortMaxVectorTests + * @run testng/othervm/timeout=300 -ea -esa -Xbatch -XX:-TieredCompilation ShortMaxVectorTests */ // -- This file was mechanically generated: Do not edit! -- // diff --git a/test/jdk/jdk/incubator/vector/templates/Unit-header.template b/test/jdk/jdk/incubator/vector/templates/Unit-header.template index 87364836f7cbf..4d3795ea3d170 100644 --- a/test/jdk/jdk/incubator/vector/templates/Unit-header.template +++ b/test/jdk/jdk/incubator/vector/templates/Unit-header.template @@ -24,7 +24,7 @@ /* * @test * @modules jdk.incubator.vector - * @run testng/othervm -ea -esa -Xbatch -XX:-TieredCompilation $vectorteststype$ + * @run testng/othervm/timeout=300 -ea -esa -Xbatch -XX:-TieredCompilation $vectorteststype$ */ #warn This file is preprocessed before being compiled From 28026434f74726d72857e781b8f1c3d12aba9125 Mon Sep 17 00:00:00 2001 From: Jiangli Zhou Date: Thu, 23 Nov 2023 19:25:29 +0000 Subject: [PATCH 048/250] 8314243: Make VM_Exit::wait_for_threads_in_native_to_block wait for user threads time configurable Reviewed-by: dholmes --- src/hotspot/share/runtime/globals.hpp | 7 +++++++ src/hotspot/share/runtime/vmOperations.cpp | 14 +++++++------- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/hotspot/share/runtime/globals.hpp b/src/hotspot/share/runtime/globals.hpp index 76621ac014d32..c02b0afed3c3b 100644 --- a/src/hotspot/share/runtime/globals.hpp +++ b/src/hotspot/share/runtime/globals.hpp @@ -835,6 +835,13 @@ const int ObjectAlignmentInBytes = 8; "JVM aborts, producing an error log and core/mini dump, on the " \ "first occurrence of an out-of-memory error thrown from JVM") \ \ + product(intx, UserThreadWaitAttemptsAtExit, 30, \ + "The number of times to wait for user threads to stop executing " \ + "native code during JVM exit. Each wait lasts 10 milliseconds. " \ + "The maximum number of waits is 1000, to wait at most 10 " \ + "seconds.") \ + range(0, 1000) \ + \ /* tracing */ \ \ develop(bool, StressRewriter, false, \ diff --git a/src/hotspot/share/runtime/vmOperations.cpp b/src/hotspot/share/runtime/vmOperations.cpp index 7438814255c66..cad9dd2ad54c5 100644 --- a/src/hotspot/share/runtime/vmOperations.cpp +++ b/src/hotspot/share/runtime/vmOperations.cpp @@ -494,10 +494,9 @@ int VM_Exit::wait_for_threads_in_native_to_block() { // don't have to wait for user threads to be quiescent, but it's always // better to terminate VM when current thread is the only active thread, so // wait for user threads too. Numbers are in 10 milliseconds. - int max_wait_user_thread = 30; // at least 300 milliseconds - int max_wait_compiler_thread = 1000; // at least 10 seconds - - int max_wait = max_wait_compiler_thread; + int wait_time_per_attempt = 10; // in milliseconds + int max_wait_attempts_user_thread = UserThreadWaitAttemptsAtExit; + int max_wait_attempts_compiler_thread = 1000; // at least 10 seconds int attempts = 0; JavaThreadIteratorWithHandle jtiwh; @@ -530,16 +529,17 @@ int VM_Exit::wait_for_threads_in_native_to_block() { if (num_active == 0) { return 0; - } else if (attempts > max_wait) { + } else if (attempts >= max_wait_attempts_compiler_thread) { return num_active; - } else if (num_active_compiler_thread == 0 && attempts > max_wait_user_thread) { + } else if (num_active_compiler_thread == 0 && + attempts >= max_wait_attempts_user_thread) { return num_active; } attempts++; MonitorLocker ml(&timer, Mutex::_no_safepoint_check_flag); - ml.wait(10); + ml.wait(wait_time_per_attempt); } } From 14557e72ef55c6161a3fa0c1960f7be618a34bf1 Mon Sep 17 00:00:00 2001 From: Afshin Zafari Date: Thu, 23 Nov 2023 22:16:57 +0000 Subject: [PATCH 049/250] 8314502: Change the comparator taking version of GrowableArray::find to be a template method Reviewed-by: jsjolen, sspitsyn, stefank --- .../share/gc/parallel/mutableNUMASpace.cpp | 13 ++-- .../share/gc/parallel/mutableNUMASpace.hpp | 6 +- src/hotspot/share/prims/jvmtiImpl.cpp | 14 +---- src/hotspot/share/prims/jvmtiImpl.hpp | 14 ++--- src/hotspot/share/runtime/perfData.cpp | 14 ++--- src/hotspot/share/runtime/perfData.hpp | 5 +- src/hotspot/share/runtime/unhandledOops.cpp | 13 ++-- src/hotspot/share/runtime/unhandledOops.hpp | 7 ++- .../share/services/diagnosticFramework.cpp | 5 +- .../share/services/diagnosticFramework.hpp | 3 +- src/hotspot/share/services/management.cpp | 4 +- src/hotspot/share/utilities/growableArray.hpp | 20 ++++-- .../gtest/utilities/test_growableArray.cpp | 62 +++++++++++++++++++ 13 files changed, 123 insertions(+), 57 deletions(-) diff --git a/src/hotspot/share/gc/parallel/mutableNUMASpace.cpp b/src/hotspot/share/gc/parallel/mutableNUMASpace.cpp index 93fa7c5519076..2a39ce7b4700d 100644 --- a/src/hotspot/share/gc/parallel/mutableNUMASpace.cpp +++ b/src/hotspot/share/gc/parallel/mutableNUMASpace.cpp @@ -142,6 +142,11 @@ size_t MutableNUMASpace::free_in_words() const { return s; } +int MutableNUMASpace::lgrp_space_index(int lgrp_id) const { + return lgrp_spaces()->find_if([&](LGRPSpace* space) { + return space->lgrp_id() == checked_cast(lgrp_id); + }); +} size_t MutableNUMASpace::tlab_capacity(Thread *thr) const { guarantee(thr != nullptr, "No thread"); @@ -160,7 +165,7 @@ size_t MutableNUMASpace::tlab_capacity(Thread *thr) const { } } // That's the normal case, where we know the locality group of the thread. - int i = lgrp_spaces()->find(&lgrp_id, LGRPSpace::equals); + int i = lgrp_space_index(lgrp_id); if (i == -1) { return 0; } @@ -179,7 +184,7 @@ size_t MutableNUMASpace::tlab_used(Thread *thr) const { return 0; } } - int i = lgrp_spaces()->find(&lgrp_id, LGRPSpace::equals); + int i = lgrp_space_index(lgrp_id); if (i == -1) { return 0; } @@ -199,7 +204,7 @@ size_t MutableNUMASpace::unsafe_max_tlab_alloc(Thread *thr) const { return 0; } } - int i = lgrp_spaces()->find(&lgrp_id, LGRPSpace::equals); + int i = lgrp_space_index(lgrp_id); if (i == -1) { return 0; } @@ -569,7 +574,7 @@ HeapWord* MutableNUMASpace::cas_allocate(size_t size) { thr->set_lgrp_id(lgrp_id); } - int i = lgrp_spaces()->find(&lgrp_id, LGRPSpace::equals); + int i = lgrp_space_index(lgrp_id); // It is possible that a new CPU has been hotplugged and // we haven't reshaped the space accordingly. if (i == -1) { diff --git a/src/hotspot/share/gc/parallel/mutableNUMASpace.hpp b/src/hotspot/share/gc/parallel/mutableNUMASpace.hpp index 8ed25006ccf24..77ecb4da46671 100644 --- a/src/hotspot/share/gc/parallel/mutableNUMASpace.hpp +++ b/src/hotspot/share/gc/parallel/mutableNUMASpace.hpp @@ -93,10 +93,6 @@ class MutableNUMASpace : public MutableSpace { delete _alloc_rate; } - static bool equals(void* lgrp_id_value, LGRPSpace* p) { - return *(uint*)lgrp_id_value == p->lgrp_id(); - } - // Report a failed allocation. void set_allocation_failed() { _allocation_failed = true; } @@ -158,6 +154,8 @@ class MutableNUMASpace : public MutableSpace { void select_tails(MemRegion new_region, MemRegion intersection, MemRegion* bottom_region, MemRegion *top_region); + int lgrp_space_index(int lgrp_id) const; + public: GrowableArray* lgrp_spaces() const { return _lgrp_spaces; } MutableNUMASpace(size_t alignment); diff --git a/src/hotspot/share/prims/jvmtiImpl.cpp b/src/hotspot/share/prims/jvmtiImpl.cpp index c9c3974b591a5..21122539af847 100644 --- a/src/hotspot/share/prims/jvmtiImpl.cpp +++ b/src/hotspot/share/prims/jvmtiImpl.cpp @@ -119,14 +119,6 @@ void GrowableCache::recache() { _listener_fun(_this_obj,_cache); } -bool GrowableCache::equals(void* v, GrowableElement *e2) { - GrowableElement *e1 = (GrowableElement *) v; - assert(e1 != nullptr, "e1 != nullptr"); - assert(e2 != nullptr, "e2 != nullptr"); - - return e1->equals(e2); -} - // // class GrowableCache - public methods // @@ -163,8 +155,8 @@ GrowableElement* GrowableCache::at(int index) { return e; } -int GrowableCache::find(GrowableElement* e) { - return _elements->find(e, GrowableCache::equals); +int GrowableCache::find(const GrowableElement* e) const { + return _elements->find_if([&](const GrowableElement* other_e) { return e->equals(other_e); }); } // append a copy of the element to the end of the collection @@ -216,7 +208,7 @@ void JvmtiBreakpoint::copy(JvmtiBreakpoint& bp) { _class_holder = OopHandle(JvmtiExport::jvmti_oop_storage(), bp._class_holder.resolve()); } -bool JvmtiBreakpoint::equals(JvmtiBreakpoint& bp) { +bool JvmtiBreakpoint::equals(const JvmtiBreakpoint& bp) const { return _method == bp._method && _bci == bp._bci; } diff --git a/src/hotspot/share/prims/jvmtiImpl.hpp b/src/hotspot/share/prims/jvmtiImpl.hpp index 851dec72ee7db..c93abe5eedf88 100644 --- a/src/hotspot/share/prims/jvmtiImpl.hpp +++ b/src/hotspot/share/prims/jvmtiImpl.hpp @@ -66,9 +66,9 @@ class JvmtiBreakpoints; class GrowableElement : public CHeapObj { public: virtual ~GrowableElement() {} - virtual address getCacheValue() =0; - virtual bool equals(GrowableElement* e) =0; - virtual GrowableElement *clone() =0; + virtual address getCacheValue() =0; + virtual bool equals(const GrowableElement* e) const =0; + virtual GrowableElement* clone() =0; }; class GrowableCache { @@ -88,8 +88,6 @@ class GrowableCache { // (but NOT when cached elements are recomputed). void (*_listener_fun)(void *, address*); - static bool equals(void *, GrowableElement *); - // recache all elements after size change, notify listener void recache(); @@ -104,7 +102,7 @@ class GrowableCache { // get the value of the index element in the collection GrowableElement* at(int index); // find the index of the element, -1 if it doesn't exist - int find(GrowableElement* e); + int find(const GrowableElement* e) const; // append a copy of the element to the end of the collection, notify listener void append(GrowableElement* e); // remove the element at index, notify listener @@ -165,7 +163,7 @@ class JvmtiBreakpoint : public GrowableElement { JvmtiBreakpoint() : _method(nullptr), _bci(0) {} JvmtiBreakpoint(Method* m_method, jlocation location); virtual ~JvmtiBreakpoint(); - bool equals(JvmtiBreakpoint& bp); + bool equals(const JvmtiBreakpoint& bp) const; void copy(JvmtiBreakpoint& bp); address getBcp() const; void each_method_version_do(method_action meth_act); @@ -177,7 +175,7 @@ class JvmtiBreakpoint : public GrowableElement { // GrowableElement implementation address getCacheValue() { return getBcp(); } - bool equals(GrowableElement* e) { return equals((JvmtiBreakpoint&) *e); } + bool equals(const GrowableElement* e) const { return equals((const JvmtiBreakpoint&) *e); } GrowableElement *clone() { JvmtiBreakpoint *bp = new JvmtiBreakpoint(); diff --git a/src/hotspot/share/runtime/perfData.cpp b/src/hotspot/share/runtime/perfData.cpp index d1caa2edeabcb..e2549a11f10ea 100644 --- a/src/hotspot/share/runtime/perfData.cpp +++ b/src/hotspot/share/runtime/perfData.cpp @@ -185,6 +185,10 @@ void PerfData::create_entry(BasicType dtype, size_t dsize, size_t vlen) { PerfMemory::mark_updated(); } +bool PerfData::name_equals(const char* name) const { + return strcmp(name, this->name()) == 0; +} + PerfLong::PerfLong(CounterNS ns, const char* namep, Units u, Variability v) : PerfData(ns, namep, u, v) { @@ -501,17 +505,9 @@ PerfDataList::~PerfDataList() { } -bool PerfDataList::by_name(void* name, PerfData* pd) { - - if (pd == nullptr) - return false; - - return strcmp((const char*)name, pd->name()) == 0; -} - PerfData* PerfDataList::find_by_name(const char* name) { - int i = _set->find((void*)name, PerfDataList::by_name); + int i = _set->find_if([&](PerfData* pd) { return pd->name_equals(name); }); if (i >= 0 && i <= _set->length()) return _set->at(i); diff --git a/src/hotspot/share/runtime/perfData.hpp b/src/hotspot/share/runtime/perfData.hpp index 5c7b3d104e972..968e0813bdbc3 100644 --- a/src/hotspot/share/runtime/perfData.hpp +++ b/src/hotspot/share/runtime/perfData.hpp @@ -319,7 +319,8 @@ class PerfData : public CHeapObj { // PerfData memory region. This redundancy is maintained for // security reasons as the PerfMemory region may be in shared // memory. - const char* name() { return _name; } + const char* name() const { return _name; } + bool name_equals(const char* name) const; // returns the variability classification associated with this item Variability variability() { return _v; } @@ -576,7 +577,7 @@ class PerfDataList : public CHeapObj { PerfDataArray* _set; // method to search for a instrumentation object by name - static bool by_name(void* name, PerfData* pd); + static bool by_name(const char* name, PerfData* pd); protected: // we expose the implementation here to facilitate the clone diff --git a/src/hotspot/share/runtime/unhandledOops.cpp b/src/hotspot/share/runtime/unhandledOops.cpp index 11c8160fe03fc..cd1bde76c775f 100644 --- a/src/hotspot/share/runtime/unhandledOops.cpp +++ b/src/hotspot/share/runtime/unhandledOops.cpp @@ -71,11 +71,6 @@ void UnhandledOops::register_unhandled_oop(oop* op) { _oop_list->push(entry); } - -bool match_oop_entry(void *op, UnhandledOopEntry e) { - return (e.oop_ptr() == op); -} - // Mark unhandled oop as okay for GC - the containing struct has an oops_do and // for some reason the oop has to be on the stack. // May not be called for the current thread, as in the case of @@ -83,7 +78,9 @@ bool match_oop_entry(void *op, UnhandledOopEntry e) { void UnhandledOops::allow_unhandled_oop(oop* op) { assert (CheckUnhandledOops, "should only be called with checking option"); - int i = _oop_list->find_from_end(op, match_oop_entry); + int i = _oop_list->find_from_end_if([&](const UnhandledOopEntry& e) { + return e.match_oop_entry(op); + }); assert(i!=-1, "safe for gc oop not in unhandled_oop_list"); UnhandledOopEntry entry = _oop_list->at(i); @@ -105,7 +102,9 @@ void UnhandledOops::unregister_unhandled_oop(oop* op) { } _level--; - int i = _oop_list->find_from_end(op, match_oop_entry); + int i = _oop_list->find_from_end_if([&](const UnhandledOopEntry& e) { + return e.match_oop_entry(op); + }); assert(i!=-1, "oop not in unhandled_oop_list"); _oop_list->remove_at(i); } diff --git a/src/hotspot/share/runtime/unhandledOops.hpp b/src/hotspot/share/runtime/unhandledOops.hpp index 400e6dd554382..09ebbe68be357 100644 --- a/src/hotspot/share/runtime/unhandledOops.hpp +++ b/src/hotspot/share/runtime/unhandledOops.hpp @@ -53,14 +53,17 @@ class UnhandledOopEntry : public CHeapObj { private: oop* _oop_ptr; bool _ok_for_gc; + + bool match_oop_entry(oop* op) const { + return _oop_ptr == op; + } + public: - oop* oop_ptr() { return _oop_ptr; } UnhandledOopEntry() : _oop_ptr(nullptr), _ok_for_gc(false) {} UnhandledOopEntry(oop* op) : _oop_ptr(op), _ok_for_gc(false) {} }; - class UnhandledOops : public CHeapObj { friend class Thread; private: diff --git a/src/hotspot/share/services/diagnosticFramework.cpp b/src/hotspot/share/services/diagnosticFramework.cpp index d17e426ee8a86..006c08cb63ff8 100644 --- a/src/hotspot/share/services/diagnosticFramework.cpp +++ b/src/hotspot/share/services/diagnosticFramework.cpp @@ -144,9 +144,8 @@ bool DCmdArgIter::next(TRAPS) { return _key_len != 0; } -bool DCmdInfo::by_name(void* cmd_name, DCmdInfo* info) { - if (info == nullptr) return false; - return strcmp((const char*)cmd_name, info->name()) == 0; +bool DCmdInfo::name_equals(const char* name) const { + return strcmp(name, this->name()) == 0; } void DCmdParser::add_dcmd_option(GenDCmdArgument* arg) { diff --git a/src/hotspot/share/services/diagnosticFramework.hpp b/src/hotspot/share/services/diagnosticFramework.hpp index 8313954aaecbe..898f29274eaa1 100644 --- a/src/hotspot/share/services/diagnosticFramework.hpp +++ b/src/hotspot/share/services/diagnosticFramework.hpp @@ -140,13 +140,12 @@ class DCmdInfo : public ResourceObj { : _name(name), _description(description), _impact(impact), _permission(permission), _num_arguments(num_arguments), _is_enabled(enabled) {} const char* name() const { return _name; } + bool name_equals(const char* cmd_name) const; const char* description() const { return _description; } const char* impact() const { return _impact; } const JavaPermission& permission() const { return _permission; } int num_arguments() const { return _num_arguments; } bool is_enabled() const { return _is_enabled; } - - static bool by_name(void* name, DCmdInfo* info); }; // A DCmdArgumentInfo instance provides a description of a diagnostic command diff --git a/src/hotspot/share/services/management.cpp b/src/hotspot/share/services/management.cpp index a9c50a8bf06df..8e9249f5a61bc 100644 --- a/src/hotspot/share/services/management.cpp +++ b/src/hotspot/share/services/management.cpp @@ -2004,7 +2004,9 @@ JVM_ENTRY(void, jmm_GetDiagnosticCommandInfo(JNIEnv *env, jobjectArray cmds, THROW_MSG(vmSymbols::java_lang_NullPointerException(), "Command name cannot be null."); } - int pos = info_list->find((void*)cmd_name,DCmdInfo::by_name); + int pos = info_list->find_if([&](DCmdInfo* info) { + return info->name_equals(cmd_name); + }); if (pos == -1) { THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(), "Unknown diagnostic command"); diff --git a/src/hotspot/share/utilities/growableArray.hpp b/src/hotspot/share/utilities/growableArray.hpp index d9c47e8360fdb..e9abd9fae9a3a 100644 --- a/src/hotspot/share/utilities/growableArray.hpp +++ b/src/hotspot/share/utilities/growableArray.hpp @@ -209,17 +209,29 @@ class GrowableArrayView : public GrowableArrayBase { return -1; } - int find(void* token, bool f(void*, E)) const { + // Find first element that matches the given predicate. + // + // Predicate: bool predicate(const E& elem) + // + // Returns the index of the element or -1 if no element matches the predicate + template + int find_if(Predicate predicate) const { for (int i = 0; i < _len; i++) { - if (f(token, _data[i])) return i; + if (predicate(_data[i])) return i; } return -1; } - int find_from_end(void* token, bool f(void*, E)) const { + // Find last element that matches the given predicate. + // + // Predicate: bool predicate(const E& elem) + // + // Returns the index of the element or -1 if no element matches the predicate + template + int find_from_end_if(Predicate predicate) const { // start at the end of the array for (int i = _len-1; i >= 0; i--) { - if (f(token, _data[i])) return i; + if (predicate(_data[i])) return i; } return -1; } diff --git a/test/hotspot/gtest/utilities/test_growableArray.cpp b/test/hotspot/gtest/utilities/test_growableArray.cpp index cb70dfb57b393..cd269e092121e 100644 --- a/test/hotspot/gtest/utilities/test_growableArray.cpp +++ b/test/hotspot/gtest/utilities/test_growableArray.cpp @@ -601,3 +601,65 @@ TEST(GrowableArrayCHeap, sanity) { delete a; } } + +TEST(GrowableArrayCHeap, find_if) { + struct Element { + int value; + }; + GrowableArrayCHeap array; + array.push({1}); + array.push({2}); + array.push({3}); + + { + int index = array.find_if([&](const Element& elem) { + return elem.value == 1; + }); + ASSERT_EQ(index, 0); + } + + { + int index = array.find_if([&](const Element& elem) { + return elem.value > 1; + }); + ASSERT_EQ(index, 1); + } + + { + int index = array.find_if([&](const Element& elem) { + return elem.value == 4; + }); + ASSERT_EQ(index, -1); + } +} + +TEST(GrowableArrayCHeap, find_from_end_if) { + struct Element { + int value; + }; + GrowableArrayCHeap array; + array.push({1}); + array.push({2}); + array.push({3}); + + { + int index = array.find_from_end_if([&](const Element& elem) { + return elem.value == 1; + }); + ASSERT_EQ(index, 0); + } + + { + int index = array.find_from_end_if([&](const Element& elem) { + return elem.value > 1; + }); + ASSERT_EQ(index, 2); + } + + { + int index = array.find_from_end_if([&](const Element& elem) { + return elem.value == 4; + }); + ASSERT_EQ(index, -1); + } +} From c75c38871ee7b5c9f7f0c195d649c16967f786bb Mon Sep 17 00:00:00 2001 From: David Holmes Date: Thu, 23 Nov 2023 22:23:42 +0000 Subject: [PATCH 050/250] 8318776: Require supports_cx8 to always be true Reviewed-by: eosterlund, shade, dcubed --- make/data/hotspot-symbols/symbols-unix | 1 - .../cpu/aarch64/c1_LIRAssembler_aarch64.cpp | 1 - .../cpu/aarch64/vm_version_aarch64.cpp | 1 - src/hotspot/cpu/arm/c1_LIRAssembler_arm.cpp | 1 - src/hotspot/cpu/arm/vm_version_arm_32.cpp | 8 +- src/hotspot/cpu/ppc/vm_version_ppc.cpp | 4 - .../cpu/riscv/c1_LIRAssembler_riscv.cpp | 1 - src/hotspot/cpu/riscv/vm_version_riscv.cpp | 1 - src/hotspot/cpu/s390/c1_LIRAssembler_s390.cpp | 1 - src/hotspot/cpu/s390/vm_version_s390.cpp | 5 - src/hotspot/cpu/x86/c1_LIRAssembler_x86.cpp | 2 +- .../x86/gc/shenandoah/shenandoah_x86_64.ad | 2 - src/hotspot/cpu/x86/vm_version_x86.cpp | 2 - src/hotspot/cpu/x86/vm_version_x86.hpp | 1 - src/hotspot/cpu/x86/x86.ad | 5 - src/hotspot/cpu/x86/x86_32.ad | 2 - src/hotspot/cpu/x86/x86_64.ad | 6 +- src/hotspot/cpu/zero/vm_version_zero.cpp | 4 +- .../os_cpu/linux_arm/atomic_linux_arm.hpp | 1 - src/hotspot/share/c1/c1_Compiler.cpp | 1 - src/hotspot/share/include/jvm.h | 6 - .../checkpoint/types/traceid/jfrTraceId.cpp | 3 - .../share/jfr/utilities/jfrAllocation.cpp | 2 - .../share/jfr/utilities/jfrSpinlockHelper.hpp | 2 - src/hotspot/share/oops/accessBackend.cpp | 49 ------- src/hotspot/share/oops/accessBackend.hpp | 48 +------ .../share/oops/accessBackend.inline.hpp | 38 ------ src/hotspot/share/prims/jvm.cpp | 6 - .../share/runtime/abstract_vm_version.cpp | 2 + .../share/runtime/abstract_vm_version.hpp | 4 + src/hotspot/share/runtime/atomic.hpp | 12 +- src/hotspot/share/runtime/mutexLocker.cpp | 7 - src/hotspot/share/runtime/mutexLocker.hpp | 4 - src/hotspot/share/runtime/vm_version.cpp | 4 +- .../util/concurrent/atomic/AtomicLong.java | 14 -- .../atomic/AtomicLongFieldUpdater.java | 125 +----------------- .../share/native/libjava/AtomicLong.c | 34 ----- test/hotspot/gtest/runtime/test_atomic.cpp | 12 -- .../util/concurrent/atomic/VMSupportsCS8.java | 53 -------- 39 files changed, 31 insertions(+), 444 deletions(-) delete mode 100644 src/java.base/share/native/libjava/AtomicLong.c delete mode 100644 test/jdk/java/util/concurrent/atomic/VMSupportsCS8.java diff --git a/make/data/hotspot-symbols/symbols-unix b/make/data/hotspot-symbols/symbols-unix index d2be2cca7e829..9ca040794f36e 100644 --- a/make/data/hotspot-symbols/symbols-unix +++ b/make/data/hotspot-symbols/symbols-unix @@ -203,7 +203,6 @@ JVM_SetStackWalkContinuation JVM_SetThreadPriority JVM_SleepNanos JVM_StartThread -JVM_SupportsCX8 JVM_TotalMemory JVM_UnloadLibrary JVM_WaitForReferencePendingList diff --git a/src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.cpp b/src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.cpp index b8a58849c01e5..92df369593877 100644 --- a/src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.cpp @@ -1511,7 +1511,6 @@ void LIR_Assembler::casl(Register addr, Register newval, Register cmpval) { void LIR_Assembler::emit_compare_and_swap(LIR_OpCompareAndSwap* op) { - assert(VM_Version::supports_cx8(), "wrong machine"); Register addr; if (op->addr()->is_register()) { addr = as_reg(op->addr()); diff --git a/src/hotspot/cpu/aarch64/vm_version_aarch64.cpp b/src/hotspot/cpu/aarch64/vm_version_aarch64.cpp index 081e94341bde6..df28ca284c5cf 100644 --- a/src/hotspot/cpu/aarch64/vm_version_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/vm_version_aarch64.cpp @@ -68,7 +68,6 @@ static SpinWait get_spin_wait_desc() { } void VM_Version::initialize() { - _supports_cx8 = true; _supports_atomic_getset4 = true; _supports_atomic_getadd4 = true; _supports_atomic_getset8 = true; diff --git a/src/hotspot/cpu/arm/c1_LIRAssembler_arm.cpp b/src/hotspot/cpu/arm/c1_LIRAssembler_arm.cpp index 45786898458bc..72993b3211f9d 100644 --- a/src/hotspot/cpu/arm/c1_LIRAssembler_arm.cpp +++ b/src/hotspot/cpu/arm/c1_LIRAssembler_arm.cpp @@ -1385,7 +1385,6 @@ void LIR_Assembler::emit_compare_and_swap(LIR_OpCompareAndSwap* op) { __ mov(dest, 1, eq); __ mov(dest, 0, ne); } else if (op->code() == lir_cas_long) { - assert(VM_Version::supports_cx8(), "wrong machine"); Register cmp_value_lo = op->cmp_value()->as_register_lo(); Register cmp_value_hi = op->cmp_value()->as_register_hi(); Register new_value_lo = op->new_value()->as_register_lo(); diff --git a/src/hotspot/cpu/arm/vm_version_arm_32.cpp b/src/hotspot/cpu/arm/vm_version_arm_32.cpp index 44f2179db986d..d3ba352f78b15 100644 --- a/src/hotspot/cpu/arm/vm_version_arm_32.cpp +++ b/src/hotspot/cpu/arm/vm_version_arm_32.cpp @@ -128,10 +128,16 @@ void VM_Version::early_initialize() { // use proper dmb instruction get_os_cpu_info(); + // Future cleanup: if SUPPORTS_NATIVE_CX8 is defined then we should not need + // any alternative solutions. At present this allows for the theoretical + // possibility of building for ARMv7 and then running on ARMv5 or 6. If that + // is impossible then the ARM port folk should clean this up. _kuser_helper_version = *(int*)KUSER_HELPER_VERSION_ADDR; +#ifndef SUPPORTS_NATIVE_CX8 // armv7 has the ldrexd instruction that can be used to implement cx8 // armv5 with linux >= 3.1 can use kernel helper routine _supports_cx8 = (supports_ldrexd() || supports_kuser_cmpxchg64()); +#endif } void VM_Version::initialize() { @@ -278,7 +284,7 @@ void VM_Version::initialize() { _supports_atomic_getadd8 = supports_ldrexd(); #ifdef COMPILER2 - assert(_supports_cx8 && _supports_atomic_getset4 && _supports_atomic_getadd4 + assert(supports_cx8() && _supports_atomic_getset4 && _supports_atomic_getadd4 && _supports_atomic_getset8 && _supports_atomic_getadd8, "C2: atomic operations must be supported"); #endif char buf[512]; diff --git a/src/hotspot/cpu/ppc/vm_version_ppc.cpp b/src/hotspot/cpu/ppc/vm_version_ppc.cpp index 0b6824943b9ba..5a9d035be6034 100644 --- a/src/hotspot/cpu/ppc/vm_version_ppc.cpp +++ b/src/hotspot/cpu/ppc/vm_version_ppc.cpp @@ -200,10 +200,6 @@ void VM_Version::initialize() { print_features(); } - // PPC64 supports 8-byte compare-exchange operations (see Atomic::cmpxchg) - // and 'atomic long memory ops' (see Unsafe_GetLongVolatile). - _supports_cx8 = true; - // Used by C1. _supports_atomic_getset4 = true; _supports_atomic_getadd4 = true; diff --git a/src/hotspot/cpu/riscv/c1_LIRAssembler_riscv.cpp b/src/hotspot/cpu/riscv/c1_LIRAssembler_riscv.cpp index 953478d05ae7e..99dc81438a700 100644 --- a/src/hotspot/cpu/riscv/c1_LIRAssembler_riscv.cpp +++ b/src/hotspot/cpu/riscv/c1_LIRAssembler_riscv.cpp @@ -1251,7 +1251,6 @@ void LIR_Assembler::emit_opTypeCheck(LIR_OpTypeCheck* op) { } void LIR_Assembler::emit_compare_and_swap(LIR_OpCompareAndSwap* op) { - assert(VM_Version::supports_cx8(), "wrong machine"); Register addr; if (op->addr()->is_register()) { addr = as_reg(op->addr()); diff --git a/src/hotspot/cpu/riscv/vm_version_riscv.cpp b/src/hotspot/cpu/riscv/vm_version_riscv.cpp index 2f1fb5055f609..fc83e62985837 100644 --- a/src/hotspot/cpu/riscv/vm_version_riscv.cpp +++ b/src/hotspot/cpu/riscv/vm_version_riscv.cpp @@ -46,7 +46,6 @@ RV_FEATURE_FLAGS(ADD_RV_FEATURE_IN_LIST) nullptr}; void VM_Version::initialize() { - _supports_cx8 = true; _supports_atomic_getset4 = true; _supports_atomic_getadd4 = true; _supports_atomic_getset8 = true; diff --git a/src/hotspot/cpu/s390/c1_LIRAssembler_s390.cpp b/src/hotspot/cpu/s390/c1_LIRAssembler_s390.cpp index f79d647b48c9b..542ade8ed0ec3 100644 --- a/src/hotspot/cpu/s390/c1_LIRAssembler_s390.cpp +++ b/src/hotspot/cpu/s390/c1_LIRAssembler_s390.cpp @@ -2670,7 +2670,6 @@ void LIR_Assembler::emit_compare_and_swap(LIR_OpCompareAndSwap* op) { Register addr = op->addr()->as_pointer_register(); Register t1_cmp = Z_R1_scratch; if (op->code() == lir_cas_long) { - assert(VM_Version::supports_cx8(), "wrong machine"); Register cmp_value_lo = op->cmp_value()->as_register_lo(); Register new_value_lo = op->new_value()->as_register_lo(); __ z_lgr(t1_cmp, cmp_value_lo); diff --git a/src/hotspot/cpu/s390/vm_version_s390.cpp b/src/hotspot/cpu/s390/vm_version_s390.cpp index 23e9e975531bb..af0903884fb4f 100644 --- a/src/hotspot/cpu/s390/vm_version_s390.cpp +++ b/src/hotspot/cpu/s390/vm_version_s390.cpp @@ -287,11 +287,6 @@ void VM_Version::initialize() { FLAG_SET_DEFAULT(UsePopCountInstruction, true); } - // z/Architecture supports 8-byte compare-exchange operations - // (see Atomic::cmpxchg) - // and 'atomic long memory ops' (see Unsafe_GetLongVolatile). - _supports_cx8 = true; - _supports_atomic_getadd4 = VM_Version::has_LoadAndALUAtomicV1(); _supports_atomic_getadd8 = VM_Version::has_LoadAndALUAtomicV1(); diff --git a/src/hotspot/cpu/x86/c1_LIRAssembler_x86.cpp b/src/hotspot/cpu/x86/c1_LIRAssembler_x86.cpp index c6f469d433916..46c6c7e92641e 100644 --- a/src/hotspot/cpu/x86/c1_LIRAssembler_x86.cpp +++ b/src/hotspot/cpu/x86/c1_LIRAssembler_x86.cpp @@ -1929,7 +1929,7 @@ void LIR_Assembler::emit_opTypeCheck(LIR_OpTypeCheck* op) { void LIR_Assembler::emit_compare_and_swap(LIR_OpCompareAndSwap* op) { - if (LP64_ONLY(false &&) op->code() == lir_cas_long && VM_Version::supports_cx8()) { + if (LP64_ONLY(false &&) op->code() == lir_cas_long) { assert(op->cmp_value()->as_register_lo() == rax, "wrong register"); assert(op->cmp_value()->as_register_hi() == rdx, "wrong register"); assert(op->new_value()->as_register_lo() == rbx, "wrong register"); diff --git a/src/hotspot/cpu/x86/gc/shenandoah/shenandoah_x86_64.ad b/src/hotspot/cpu/x86/gc/shenandoah/shenandoah_x86_64.ad index 3df65d037ae51..cb595f161686f 100644 --- a/src/hotspot/cpu/x86/gc/shenandoah/shenandoah_x86_64.ad +++ b/src/hotspot/cpu/x86/gc/shenandoah/shenandoah_x86_64.ad @@ -33,7 +33,6 @@ instruct compareAndSwapP_shenandoah(rRegI res, rax_RegP oldval, rRegP newval, rFlagsReg cr) %{ - predicate(VM_Version::supports_cx8()); match(Set res (ShenandoahCompareAndSwapP mem_ptr (Binary oldval newval))); match(Set res (ShenandoahWeakCompareAndSwapP mem_ptr (Binary oldval newval))); effect(TEMP tmp1, TEMP tmp2, KILL cr, KILL oldval); @@ -95,7 +94,6 @@ instruct compareAndExchangeP_shenandoah(memory mem_ptr, rRegP tmp1, rRegP tmp2, rFlagsReg cr) %{ - predicate(VM_Version::supports_cx8()); match(Set oldval (ShenandoahCompareAndExchangeP mem_ptr (Binary oldval newval))); effect(KILL cr, TEMP tmp1, TEMP tmp2); ins_cost(1000); diff --git a/src/hotspot/cpu/x86/vm_version_x86.cpp b/src/hotspot/cpu/x86/vm_version_x86.cpp index 0ead388415efe..1517e456e8230 100644 --- a/src/hotspot/cpu/x86/vm_version_x86.cpp +++ b/src/hotspot/cpu/x86/vm_version_x86.cpp @@ -816,7 +816,6 @@ void VM_Version::get_processor_features() { _L1_data_cache_line_size = L1_line_size(); } - _supports_cx8 = supports_cmpxchg8(); // xchg and xadd instructions _supports_atomic_getset4 = true; _supports_atomic_getadd4 = true; @@ -3236,4 +3235,3 @@ bool VM_Version::is_intrinsic_supported(vmIntrinsicID id) { } return true; } - diff --git a/src/hotspot/cpu/x86/vm_version_x86.hpp b/src/hotspot/cpu/x86/vm_version_x86.hpp index 078f14221dd9b..454a8f312553a 100644 --- a/src/hotspot/cpu/x86/vm_version_x86.hpp +++ b/src/hotspot/cpu/x86/vm_version_x86.hpp @@ -643,7 +643,6 @@ class VM_Version : public Abstract_VM_Version { // Feature identification // static bool supports_cpuid() { return _features != 0; } - static bool supports_cmpxchg8() { return (_features & CPU_CX8) != 0; } static bool supports_cmov() { return (_features & CPU_CMOV) != 0; } static bool supports_fxsr() { return (_features & CPU_FXSR) != 0; } static bool supports_ht() { return (_features & CPU_HT) != 0; } diff --git a/src/hotspot/cpu/x86/x86.ad b/src/hotspot/cpu/x86/x86.ad index 2567246b2060b..681abd7199fee 100644 --- a/src/hotspot/cpu/x86/x86.ad +++ b/src/hotspot/cpu/x86/x86.ad @@ -1510,9 +1510,6 @@ bool Matcher::match_rule_supported(int opcode) { #ifdef _LP64 case Op_CompareAndSwapP: #endif - if (!VM_Version::supports_cx8()) { - return false; - } break; case Op_StrIndexOf: if (!UseSSE42Intrinsics) { @@ -10119,5 +10116,3 @@ instruct DoubleClassCheck_reg_reg_vfpclass(rRegI dst, regD src, kReg ktmp, rFlag %} ins_pipe(pipe_slow); %} - - diff --git a/src/hotspot/cpu/x86/x86_32.ad b/src/hotspot/cpu/x86/x86_32.ad index d2d3c6b6fa199..07b3cb35a388d 100644 --- a/src/hotspot/cpu/x86/x86_32.ad +++ b/src/hotspot/cpu/x86/x86_32.ad @@ -7281,7 +7281,6 @@ instruct castDD_PR( regDPR dst ) %{ // No flag versions for CompareAndSwap{P,I,L} because matcher can't match them instruct compareAndSwapL( rRegI res, eSIRegP mem_ptr, eADXRegL oldval, eBCXRegL newval, eFlagsReg cr ) %{ - predicate(VM_Version::supports_cx8()); match(Set res (CompareAndSwapL mem_ptr (Binary oldval newval))); match(Set res (WeakCompareAndSwapL mem_ptr (Binary oldval newval))); effect(KILL cr, KILL oldval); @@ -7350,7 +7349,6 @@ instruct compareAndSwapI( rRegI res, pRegP mem_ptr, eAXRegI oldval, eCXRegI newv %} instruct compareAndExchangeL( eSIRegP mem_ptr, eADXRegL oldval, eBCXRegL newval, eFlagsReg cr ) %{ - predicate(VM_Version::supports_cx8()); match(Set oldval (CompareAndExchangeL mem_ptr (Binary oldval newval))); effect(KILL cr); format %{ "CMPXCHG8 [$mem_ptr],$newval\t# If EDX:EAX==[$mem_ptr] Then store $newval into [$mem_ptr]\n\t" %} diff --git a/src/hotspot/cpu/x86/x86_64.ad b/src/hotspot/cpu/x86/x86_64.ad index e41cadb4d4f96..94844cd4e7f9d 100644 --- a/src/hotspot/cpu/x86/x86_64.ad +++ b/src/hotspot/cpu/x86/x86_64.ad @@ -7174,7 +7174,7 @@ instruct compareAndSwapP(rRegI res, rax_RegP oldval, rRegP newval, rFlagsReg cr) %{ - predicate(VM_Version::supports_cx8() && n->as_LoadStore()->barrier_data() == 0); + predicate(n->as_LoadStore()->barrier_data() == 0); match(Set res (CompareAndSwapP mem_ptr (Binary oldval newval))); match(Set res (WeakCompareAndSwapP mem_ptr (Binary oldval newval))); effect(KILL cr, KILL oldval); @@ -7197,7 +7197,6 @@ instruct compareAndSwapL(rRegI res, rax_RegL oldval, rRegL newval, rFlagsReg cr) %{ - predicate(VM_Version::supports_cx8()); match(Set res (CompareAndSwapL mem_ptr (Binary oldval newval))); match(Set res (WeakCompareAndSwapL mem_ptr (Binary oldval newval))); effect(KILL cr, KILL oldval); @@ -7358,7 +7357,6 @@ instruct compareAndExchangeL( rax_RegL oldval, rRegL newval, rFlagsReg cr) %{ - predicate(VM_Version::supports_cx8()); match(Set oldval (CompareAndExchangeL mem_ptr (Binary oldval newval))); effect(KILL cr); @@ -7392,7 +7390,7 @@ instruct compareAndExchangeP( rax_RegP oldval, rRegP newval, rFlagsReg cr) %{ - predicate(VM_Version::supports_cx8() && n->as_LoadStore()->barrier_data() == 0); + predicate(n->as_LoadStore()->barrier_data() == 0); match(Set oldval (CompareAndExchangeP mem_ptr (Binary oldval newval))); effect(KILL cr); diff --git a/src/hotspot/cpu/zero/vm_version_zero.cpp b/src/hotspot/cpu/zero/vm_version_zero.cpp index a99885a533df8..1fcf4b1086253 100644 --- a/src/hotspot/cpu/zero/vm_version_zero.cpp +++ b/src/hotspot/cpu/zero/vm_version_zero.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2023, Oracle and/or its affiliates. All rights reserved. * Copyright 2009 Red Hat, Inc. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -138,11 +138,13 @@ void VM_Version::initialize() { UNSUPPORTED_OPTION(CountCompiledCalls); #endif +#ifndef SUPPORTS_NATIVE_CX8 // Supports 8-byte cmpxchg with compiler built-ins. // These built-ins are supposed to be implemented on // all platforms (even if not natively), so we claim // the support unconditionally. _supports_cx8 = true; +#endif } void VM_Version::initialize_cpu_information(void) { diff --git a/src/hotspot/os_cpu/linux_arm/atomic_linux_arm.hpp b/src/hotspot/os_cpu/linux_arm/atomic_linux_arm.hpp index 513217649e633..4346920cd3765 100644 --- a/src/hotspot/os_cpu/linux_arm/atomic_linux_arm.hpp +++ b/src/hotspot/os_cpu/linux_arm/atomic_linux_arm.hpp @@ -153,7 +153,6 @@ inline int32_t reorder_cmpxchg_func(int32_t exchange_value, inline int64_t reorder_cmpxchg_long_func(int64_t exchange_value, int64_t volatile* dest, int64_t compare_value) { - assert(VM_Version::supports_cx8(), "Atomic compare and exchange int64_t not supported on this architecture!"); // Warning: Arguments are swapped to avoid moving them for kernel call return (*ARMAtomicFuncs::_cmpxchg_long_func)(compare_value, exchange_value, dest); } diff --git a/src/hotspot/share/c1/c1_Compiler.cpp b/src/hotspot/share/c1/c1_Compiler.cpp index def4b63fdf6b1..bdbeb39f89a4a 100644 --- a/src/hotspot/share/c1/c1_Compiler.cpp +++ b/src/hotspot/share/c1/c1_Compiler.cpp @@ -110,7 +110,6 @@ bool Compiler::is_intrinsic_supported(const methodHandle& method) { bool Compiler::is_intrinsic_supported(vmIntrinsics::ID id) { switch (id) { case vmIntrinsics::_compareAndSetLong: - if (!VM_Version::supports_cx8()) return false; break; case vmIntrinsics::_getAndAddInt: if (!VM_Version::supports_atomic_getadd4()) return false; diff --git a/src/hotspot/share/include/jvm.h b/src/hotspot/share/include/jvm.h index 049c454c241a6..cc1b3d94cbd32 100644 --- a/src/hotspot/share/include/jvm.h +++ b/src/hotspot/share/include/jvm.h @@ -781,12 +781,6 @@ JVM_DesiredAssertionStatus(JNIEnv *env, jclass unused, jclass cls); JNIEXPORT jobject JNICALL JVM_AssertionStatusDirectives(JNIEnv *env, jclass unused); -/* - * java.util.concurrent.atomic.AtomicLong - */ -JNIEXPORT jboolean JNICALL -JVM_SupportsCX8(void); - /* * java.lang.ref.Finalizer */ diff --git a/src/hotspot/share/jfr/recorder/checkpoint/types/traceid/jfrTraceId.cpp b/src/hotspot/share/jfr/recorder/checkpoint/types/traceid/jfrTraceId.cpp index fd50628602334..f07078eaf06de 100644 --- a/src/hotspot/share/jfr/recorder/checkpoint/types/traceid/jfrTraceId.cpp +++ b/src/hotspot/share/jfr/recorder/checkpoint/types/traceid/jfrTraceId.cpp @@ -35,12 +35,10 @@ #include "runtime/atomic.hpp" #include "runtime/javaThread.hpp" #include "runtime/jniHandles.inline.hpp" -#include "runtime/vm_version.hpp" #include "utilities/growableArray.hpp" // returns updated value static traceid atomic_inc(traceid volatile* const dest, traceid stride = 1) { - assert(VM_Version::supports_cx8(), "invariant"); traceid compare_value; traceid exchange_value; do { @@ -294,4 +292,3 @@ void JfrTraceId::untag_jdk_jfr_event_sub(const Klass* k) { } assert(IS_NOT_AN_EVENT_SUB_KLASS(k), "invariant"); } - diff --git a/src/hotspot/share/jfr/utilities/jfrAllocation.cpp b/src/hotspot/share/jfr/utilities/jfrAllocation.cpp index e9e41ac7cd875..c94765bbc8fe7 100644 --- a/src/hotspot/share/jfr/utilities/jfrAllocation.cpp +++ b/src/hotspot/share/jfr/utilities/jfrAllocation.cpp @@ -29,14 +29,12 @@ #include "memory/allocation.inline.hpp" #include "nmt/memTracker.hpp" #include "runtime/atomic.hpp" -#include "runtime/vm_version.hpp" #include "utilities/debug.hpp" #include "utilities/macros.hpp" #include "utilities/nativeCallStack.hpp" #ifdef ASSERT static jlong atomic_add_jlong(jlong value, jlong volatile* const dest) { - assert(VM_Version::supports_cx8(), "unsupported"); jlong compare_value; jlong exchange_value; do { diff --git a/src/hotspot/share/jfr/utilities/jfrSpinlockHelper.hpp b/src/hotspot/share/jfr/utilities/jfrSpinlockHelper.hpp index a155b2690a054..8d381a646ee07 100644 --- a/src/hotspot/share/jfr/utilities/jfrSpinlockHelper.hpp +++ b/src/hotspot/share/jfr/utilities/jfrSpinlockHelper.hpp @@ -27,8 +27,6 @@ #include "runtime/javaThread.hpp" -// this utility could be useful for non cx8 platforms - class JfrSpinlockHelper { private: volatile int* const _lock; diff --git a/src/hotspot/share/oops/accessBackend.cpp b/src/hotspot/share/oops/accessBackend.cpp index 61f58f1d33526..853f42f6f7e4c 100644 --- a/src/hotspot/share/oops/accessBackend.cpp +++ b/src/hotspot/share/oops/accessBackend.cpp @@ -28,60 +28,11 @@ #include "oops/oop.inline.hpp" #include "runtime/javaThread.inline.hpp" #include "runtime/mutexLocker.hpp" -#include "runtime/vm_version.hpp" #include "utilities/copy.hpp" #include "utilities/debug.hpp" #include "utilities/vmError.hpp" namespace AccessInternal { - // VM_Version::supports_cx8() is a surrogate for 'supports atomic long memory ops'. - // - // On platforms which do not support atomic compare-and-swap of jlong (8 byte) - // values we have to use a lock-based scheme to enforce atomicity. This has to be - // applied to all Unsafe operations that set the value of a jlong field. Even so - // the compareAndSwapLong operation will not be atomic with respect to direct stores - // to the field from Java code. It is important therefore that any Java code that - // utilizes these Unsafe jlong operations does not perform direct stores. To permit - // direct loads of the field from Java code we must also use Atomic::store within the - // locked regions. And for good measure, in case there are direct stores, we also - // employ Atomic::load within those regions. Note that the field in question must be - // volatile and so must have atomic load/store accesses applied at the Java level. - // - // The locking scheme could utilize a range of strategies for controlling the locking - // granularity: from a lock per-field through to a single global lock. The latter is - // the simplest and is used for the current implementation. Note that the Java object - // that contains the field, can not, in general, be used for locking. To do so can lead - // to deadlocks as we may introduce locking into what appears to the Java code to be a - // lock-free path. - // - // As all the locked-regions are very short and themselves non-blocking we can treat - // them as leaf routines and elide safepoint checks (ie we don't perform any thread - // state transitions even when blocking for the lock). Note that if we do choose to - // add safepoint checks and thread state transitions, we must ensure that we calculate - // the address of the field _after_ we have acquired the lock, else the object may have - // been moved by the GC - -#ifndef SUPPORTS_NATIVE_CX8 - - // This is intentionally in the cpp file rather than the .inline.hpp file. It seems - // desirable to trade faster JDK build times (not propagating vm_version.hpp) - // for slightly worse runtime atomic jlong performance on 32 bit machines with - // support for 64 bit atomics. - bool wide_atomic_needs_locking() { - return !VM_Version::supports_cx8(); - } - - AccessLocker::AccessLocker() { - assert(!VM_Version::supports_cx8(), "why else?"); - UnsafeJlong_lock->lock_without_safepoint_check(); - } - - AccessLocker::~AccessLocker() { - UnsafeJlong_lock->unlock(); - } - -#endif - // These forward copying calls to Copy without exposing the Copy type in headers unnecessarily void arraycopy_arrayof_conjoint_oops(void* src, void* dst, size_t length) { diff --git a/src/hotspot/share/oops/accessBackend.hpp b/src/hotspot/share/oops/accessBackend.hpp index c711a241ef947..5299b57ca4637 100644 --- a/src/hotspot/share/oops/accessBackend.hpp +++ b/src/hotspot/share/oops/accessBackend.hpp @@ -81,15 +81,6 @@ namespace AccessInternal { reinterpret_cast((void*)base) + byte_offset); } - // This metafunction returns whether it is possible for a type T to require - // locking to support wide atomics or not. - template -#ifdef SUPPORTS_NATIVE_CX8 - struct PossiblyLockedAccess: public std::false_type {}; -#else - struct PossiblyLockedAccess: public std::integral_constant 4)> {}; -#endif - template struct AccessFunctionTypes { typedef T (*load_at_func_t)(oop base, ptrdiff_t offset); @@ -140,13 +131,6 @@ namespace AccessInternal { template typename AccessFunction::type resolve_oop_barrier(); - class AccessLocker { - public: - AccessLocker(); - ~AccessLocker(); - }; - bool wide_atomic_needs_locking(); - void* field_addr(oop base, ptrdiff_t offset); // Forward calls to Copy:: in the cpp file to reduce dependencies and allow @@ -281,34 +265,6 @@ class RawAccessBarrier: public AllStatic { HasDecorator::value, T>::type atomic_xchg_internal(void* addr, T new_value); - // The following *_locked mechanisms serve the purpose of handling atomic operations - // that are larger than a machine can handle, and then possibly opt for using - // a slower path using a mutex to perform the operation. - - template - static inline typename EnableIf< - !AccessInternal::PossiblyLockedAccess::value, T>::type - atomic_cmpxchg_maybe_locked(void* addr, T compare_value, T new_value) { - return atomic_cmpxchg_internal(addr, compare_value, new_value); - } - - template - static typename EnableIf< - AccessInternal::PossiblyLockedAccess::value, T>::type - atomic_cmpxchg_maybe_locked(void* addr, T compare_value, T new_value); - - template - static inline typename EnableIf< - !AccessInternal::PossiblyLockedAccess::value, T>::type - atomic_xchg_maybe_locked(void* addr, T new_value) { - return atomic_xchg_internal(addr, new_value); - } - - template - static typename EnableIf< - AccessInternal::PossiblyLockedAccess::value, T>::type - atomic_xchg_maybe_locked(void* addr, T new_value); - public: template static inline void store(void* addr, T value) { @@ -322,12 +278,12 @@ class RawAccessBarrier: public AllStatic { template static inline T atomic_cmpxchg(void* addr, T compare_value, T new_value) { - return atomic_cmpxchg_maybe_locked(addr, compare_value, new_value); + return atomic_cmpxchg_internal(addr, compare_value, new_value); } template static inline T atomic_xchg(void* addr, T new_value) { - return atomic_xchg_maybe_locked(addr, new_value); + return atomic_xchg_internal(addr, new_value); } template diff --git a/src/hotspot/share/oops/accessBackend.inline.hpp b/src/hotspot/share/oops/accessBackend.inline.hpp index 677af8115c3d2..e0d4f5aca92a4 100644 --- a/src/hotspot/share/oops/accessBackend.inline.hpp +++ b/src/hotspot/share/oops/accessBackend.inline.hpp @@ -214,44 +214,6 @@ RawAccessBarrier::atomic_xchg_internal(void* addr, T new_value) { new_value); } -// For platforms that do not have native support for wide atomics, -// we can emulate the atomicity using a lock. So here we check -// whether that is necessary or not. - -template -template -inline typename EnableIf< - AccessInternal::PossiblyLockedAccess::value, T>::type -RawAccessBarrier::atomic_xchg_maybe_locked(void* addr, T new_value) { - if (!AccessInternal::wide_atomic_needs_locking()) { - return atomic_xchg_internal(addr, new_value); - } else { - AccessInternal::AccessLocker access_lock; - volatile T* p = reinterpret_cast(addr); - T old_val = RawAccess<>::load(p); - RawAccess<>::store(p, new_value); - return old_val; - } -} - -template -template -inline typename EnableIf< - AccessInternal::PossiblyLockedAccess::value, T>::type -RawAccessBarrier::atomic_cmpxchg_maybe_locked(void* addr, T compare_value, T new_value) { - if (!AccessInternal::wide_atomic_needs_locking()) { - return atomic_cmpxchg_internal(addr, compare_value, new_value); - } else { - AccessInternal::AccessLocker access_lock; - volatile T* p = reinterpret_cast(addr); - T old_val = RawAccess<>::load(p); - if (old_val == compare_value) { - RawAccess<>::store(p, new_value); - } - return old_val; - } -} - class RawAccessBarrierArrayCopy: public AllStatic { template struct IsHeapWordSized: public std::integral_constant { }; public: diff --git a/src/hotspot/share/prims/jvm.cpp b/src/hotspot/share/prims/jvm.cpp index 539122746b2f5..f0a30ee0311ad 100644 --- a/src/hotspot/share/prims/jvm.cpp +++ b/src/hotspot/share/prims/jvm.cpp @@ -3586,12 +3586,6 @@ JVM_ENTRY(jobject, JVM_NewInstanceFromConstructor(JNIEnv *env, jobject c, jobjec return res; JVM_END -// Atomic /////////////////////////////////////////////////////////////////////////////////////////// - -JVM_LEAF(jboolean, JVM_SupportsCX8()) - return VM_Version::supports_cx8(); -JVM_END - JVM_ENTRY(void, JVM_InitializeFromArchive(JNIEnv* env, jclass cls)) Klass* k = java_lang_Class::as_Klass(JNIHandles::resolve(cls)); assert(k->is_klass(), "just checking"); diff --git a/src/hotspot/share/runtime/abstract_vm_version.cpp b/src/hotspot/share/runtime/abstract_vm_version.cpp index 2fdb820982a93..ac62523aed0eb 100644 --- a/src/hotspot/share/runtime/abstract_vm_version.cpp +++ b/src/hotspot/share/runtime/abstract_vm_version.cpp @@ -35,7 +35,9 @@ const char* Abstract_VM_Version::_s_internal_vm_info_string = Abstract_VM_Versio uint64_t Abstract_VM_Version::_features = 0; const char* Abstract_VM_Version::_features_string = ""; +#ifndef SUPPORTS_NATIVE_CX8 bool Abstract_VM_Version::_supports_cx8 = false; +#endif bool Abstract_VM_Version::_supports_atomic_getset4 = false; bool Abstract_VM_Version::_supports_atomic_getset8 = false; bool Abstract_VM_Version::_supports_atomic_getadd4 = false; diff --git a/src/hotspot/share/runtime/abstract_vm_version.hpp b/src/hotspot/share/runtime/abstract_vm_version.hpp index d9ed84f47510a..d8ffca8de81fb 100644 --- a/src/hotspot/share/runtime/abstract_vm_version.hpp +++ b/src/hotspot/share/runtime/abstract_vm_version.hpp @@ -59,7 +59,9 @@ class Abstract_VM_Version: AllStatic { static const char* _features_string; // These are set by machine-dependent initializations +#ifndef SUPPORTS_NATIVE_CX8 static bool _supports_cx8; +#endif static bool _supports_atomic_getset4; static bool _supports_atomic_getset8; static bool _supports_atomic_getadd4; @@ -133,6 +135,8 @@ class Abstract_VM_Version: AllStatic { static void print_platform_virtualization_info(outputStream*) { } // does HW support an 8-byte compare-exchange operation? + // Required to be true but still dynamically checked at runtime + // for platforms that don't set SUPPORTS_NATIVE_CX8 static bool supports_cx8() { #ifdef SUPPORTS_NATIVE_CX8 return true; diff --git a/src/hotspot/share/runtime/atomic.hpp b/src/hotspot/share/runtime/atomic.hpp index ac0ce49d26e56..399a78fd3fce1 100644 --- a/src/hotspot/share/runtime/atomic.hpp +++ b/src/hotspot/share/runtime/atomic.hpp @@ -55,11 +55,13 @@ enum ScopedFenceType { class Atomic : AllStatic { public: - // Atomic operations on int64 types are not available on all 32-bit - // platforms. If atomic ops on int64 are defined here they must only - // be used from code that verifies they are available at runtime and - // can provide an alternative action if not - see supports_cx8() for - // a means to test availability. + // Atomic operations on int64 types are required to be available on + // all platforms. At a minimum a 64-bit cmpxchg must be available + // from which other atomic operations can be constructed if needed. + // The legacy `Abstract_VMVersion::supports_cx8()` function used to + // indicate if this support existed, allowing for alternative lock- + // based mechanism to be used. But today this function is required + // to return true and in the future will be removed entirely. // The memory operations that are mentioned with each of the atomic // function families come from src/share/vm/runtime/orderAccess.hpp, diff --git a/src/hotspot/share/runtime/mutexLocker.cpp b/src/hotspot/share/runtime/mutexLocker.cpp index 62a685736c2c2..efd8490cd80e5 100644 --- a/src/hotspot/share/runtime/mutexLocker.cpp +++ b/src/hotspot/share/runtime/mutexLocker.cpp @@ -123,9 +123,6 @@ Mutex* JfrBuffer_lock = nullptr; Monitor* JfrThreadSampler_lock = nullptr; #endif -#ifndef SUPPORTS_NATIVE_CX8 -Mutex* UnsafeJlong_lock = nullptr; -#endif Mutex* CodeHeapStateAnalytics_lock = nullptr; Monitor* ContinuationRelativize_lock = nullptr; @@ -298,10 +295,6 @@ void mutex_init() { MUTEX_DEFN(JfrThreadSampler_lock , PaddedMonitor, nosafepoint); #endif -#ifndef SUPPORTS_NATIVE_CX8 - MUTEX_DEFN(UnsafeJlong_lock , PaddedMutex , nosafepoint); -#endif - MUTEX_DEFN(ContinuationRelativize_lock , PaddedMonitor, nosafepoint-3); MUTEX_DEFN(CodeHeapStateAnalytics_lock , PaddedMutex , safepoint); MUTEX_DEFN(ThreadsSMRDelete_lock , PaddedMonitor, service-2); // Holds ConcurrentHashTableResize_lock diff --git a/src/hotspot/share/runtime/mutexLocker.hpp b/src/hotspot/share/runtime/mutexLocker.hpp index 9a0f9b9ab1ebe..840d01e62fa05 100644 --- a/src/hotspot/share/runtime/mutexLocker.hpp +++ b/src/hotspot/share/runtime/mutexLocker.hpp @@ -136,10 +136,6 @@ extern Mutex* JfrBuffer_lock; // protects JFR buffer operatio extern Monitor* JfrThreadSampler_lock; // used to suspend/resume JFR thread sampler #endif -#ifndef SUPPORTS_NATIVE_CX8 -extern Mutex* UnsafeJlong_lock; // provides Unsafe atomic updates to jlongs on platforms that don't support cx8 -#endif - extern Mutex* Metaspace_lock; // protects Metaspace virtualspace and chunk expansions extern Monitor* MetaspaceCritical_lock; // synchronizes failed metaspace allocations that risk throwing metaspace OOM extern Mutex* ClassLoaderDataGraph_lock; // protects CLDG list, needed for concurrent unloading diff --git a/src/hotspot/share/runtime/vm_version.cpp b/src/hotspot/share/runtime/vm_version.cpp index 33a5c792c87d5..e2a7aa565d6b8 100644 --- a/src/hotspot/share/runtime/vm_version.cpp +++ b/src/hotspot/share/runtime/vm_version.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2020, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,7 +30,7 @@ void VM_Version_init() { VM_Version::initialize(); - + guarantee(VM_Version::supports_cx8(), "Support for 64-bit atomic operations is required"); if (log_is_enabled(Info, os, cpu)) { char buf[1024]; ResourceMark rm; diff --git a/src/java.base/share/classes/java/util/concurrent/atomic/AtomicLong.java b/src/java.base/share/classes/java/util/concurrent/atomic/AtomicLong.java index 926b773827ca8..e446df8fd3e0c 100644 --- a/src/java.base/share/classes/java/util/concurrent/atomic/AtomicLong.java +++ b/src/java.base/share/classes/java/util/concurrent/atomic/AtomicLong.java @@ -55,20 +55,6 @@ public class AtomicLong extends Number implements java.io.Serializable { private static final long serialVersionUID = 1927816293512124184L; - /** - * Records whether the underlying JVM supports lockless - * compareAndSet for longs. While the intrinsic compareAndSetLong - * method works in either case, some constructions should be - * handled at Java level to avoid locking user-visible locks. - */ - static final boolean VM_SUPPORTS_LONG_CAS = VMSupportsCS8(); - - /** - * Returns whether underlying JVM supports lockless CompareAndSet - * for longs. Called only once and cached in VM_SUPPORTS_LONG_CAS. - */ - private static native boolean VMSupportsCS8(); - /* * This class intended to be implemented using VarHandles, but there * are unresolved cyclic startup dependencies. diff --git a/src/java.base/share/classes/java/util/concurrent/atomic/AtomicLongFieldUpdater.java b/src/java.base/share/classes/java/util/concurrent/atomic/AtomicLongFieldUpdater.java index ae5440ef5f2a0..0e496dbd6a55d 100644 --- a/src/java.base/share/classes/java/util/concurrent/atomic/AtomicLongFieldUpdater.java +++ b/src/java.base/share/classes/java/util/concurrent/atomic/AtomicLongFieldUpdater.java @@ -90,10 +90,7 @@ public abstract class AtomicLongFieldUpdater { public static AtomicLongFieldUpdater newUpdater(Class tclass, String fieldName) { Class caller = Reflection.getCallerClass(); - if (AtomicLong.VM_SUPPORTS_LONG_CAS) - return new CASUpdater(tclass, fieldName, caller); - else - return new LockedUpdater(tclass, fieldName, caller); + return new CASUpdater(tclass, fieldName, caller); } /** @@ -515,126 +512,6 @@ public final long addAndGet(T obj, long delta) { } } - private static final class LockedUpdater extends AtomicLongFieldUpdater { - private static final Unsafe U = Unsafe.getUnsafe(); - private final long offset; - /** - * if field is protected, the subclass constructing updater, else - * the same as tclass - */ - private final Class cclass; - /** class holding the field */ - private final Class tclass; - - @SuppressWarnings("removal") - LockedUpdater(final Class tclass, final String fieldName, - final Class caller) { - final Field field; - final int modifiers; - try { - field = AccessController.doPrivileged( - new PrivilegedExceptionAction() { - public Field run() throws NoSuchFieldException { - return tclass.getDeclaredField(fieldName); - } - }); - modifiers = field.getModifiers(); - sun.reflect.misc.ReflectUtil.ensureMemberAccess( - caller, tclass, null, modifiers); - ClassLoader cl = tclass.getClassLoader(); - ClassLoader ccl = caller.getClassLoader(); - if ((ccl != null) && (ccl != cl) && - ((cl == null) || !isAncestor(cl, ccl))) { - sun.reflect.misc.ReflectUtil.checkPackageAccess(tclass); - } - } catch (PrivilegedActionException pae) { - throw new RuntimeException(pae.getException()); - } catch (Exception ex) { - throw new RuntimeException(ex); - } - - if (field.getType() != long.class) - throw new IllegalArgumentException("Must be long type"); - - if (!Modifier.isVolatile(modifiers)) - throw new IllegalArgumentException("Must be volatile type"); - - // Access to protected field members is restricted to receivers only - // of the accessing class, or one of its subclasses, and the - // accessing class must in turn be a subclass (or package sibling) - // of the protected member's defining class. - // If the updater refers to a protected field of a declaring class - // outside the current package, the receiver argument will be - // narrowed to the type of the accessing class. - this.cclass = (Modifier.isProtected(modifiers) && - tclass.isAssignableFrom(caller) && - !isSamePackage(tclass, caller)) - ? caller : tclass; - this.tclass = tclass; - this.offset = U.objectFieldOffset(field); - } - - /** - * Checks that target argument is instance of cclass. On - * failure, throws cause. - */ - private final void accessCheck(T obj) { - if (!cclass.isInstance(obj)) - throw accessCheckException(obj); - } - - /** - * Returns access exception if accessCheck failed due to - * protected access, else ClassCastException. - */ - private final RuntimeException accessCheckException(T obj) { - if (cclass == tclass) - return new ClassCastException(); - else - return new RuntimeException( - new IllegalAccessException( - "Class " + - cclass.getName() + - " can not access a protected member of class " + - tclass.getName() + - " using an instance of " + - obj.getClass().getName())); - } - - public final boolean compareAndSet(T obj, long expect, long update) { - accessCheck(obj); - synchronized (this) { - long v = U.getLong(obj, offset); - if (v != expect) - return false; - U.putLong(obj, offset, update); - return true; - } - } - - public final boolean weakCompareAndSet(T obj, long expect, long update) { - return compareAndSet(obj, expect, update); - } - - public final void set(T obj, long newValue) { - accessCheck(obj); - synchronized (this) { - U.putLong(obj, offset, newValue); - } - } - - public final void lazySet(T obj, long newValue) { - set(obj, newValue); - } - - public final long get(T obj) { - accessCheck(obj); - synchronized (this) { - return U.getLong(obj, offset); - } - } - } - /** * Returns true if the second classloader can be found in the first * classloader's delegation chain. diff --git a/src/java.base/share/native/libjava/AtomicLong.c b/src/java.base/share/native/libjava/AtomicLong.c deleted file mode 100644 index bc4fd5db9708a..0000000000000 --- a/src/java.base/share/native/libjava/AtomicLong.c +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2004, 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 -#include -#include "java_util_concurrent_atomic_AtomicLong.h" - -JNIEXPORT jboolean JNICALL -Java_java_util_concurrent_atomic_AtomicLong_VMSupportsCS8(JNIEnv *env, jclass cls) -{ - return JVM_SupportsCX8(); -} diff --git a/test/hotspot/gtest/runtime/test_atomic.cpp b/test/hotspot/gtest/runtime/test_atomic.cpp index 744714c6f7fa5..b99ec0f984dde 100644 --- a/test/hotspot/gtest/runtime/test_atomic.cpp +++ b/test/hotspot/gtest/runtime/test_atomic.cpp @@ -60,9 +60,6 @@ TEST_VM(AtomicAddTest, int32) { } TEST_VM(AtomicAddTest, int64) { - // Check if 64-bit atomics are available on the machine. - if (!VM_Version::supports_cx8()) return; - using Support = AtomicAddTestSupport; Support().test_add(); Support().test_fetch_add(); @@ -109,9 +106,6 @@ TEST_VM(AtomicXchgTest, int32) { } TEST_VM(AtomicXchgTest, int64) { - // Check if 64-bit atomics are available on the machine. - if (!VM_Version::supports_cx8()) return; - using Support = AtomicXchgTestSupport; Support().test(); } @@ -349,15 +343,9 @@ TEST_VM(AtomicBitopsTest, uint32) { } TEST_VM(AtomicBitopsTest, int64) { - // Check if 64-bit atomics are available on the machine. - if (!VM_Version::supports_cx8()) return; - AtomicBitopsTestSupport()(); } TEST_VM(AtomicBitopsTest, uint64) { - // Check if 64-bit atomics are available on the machine. - if (!VM_Version::supports_cx8()) return; - AtomicBitopsTestSupport()(); } diff --git a/test/jdk/java/util/concurrent/atomic/VMSupportsCS8.java b/test/jdk/java/util/concurrent/atomic/VMSupportsCS8.java deleted file mode 100644 index a485a490bb659..0000000000000 --- a/test/jdk/java/util/concurrent/atomic/VMSupportsCS8.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (c) 2004, 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. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @test - * @bug 4992443 4994819 - * @modules java.base/java.util.concurrent.atomic:open - * @run main VMSupportsCS8 - * @summary Checks that the value of VMSupportsCS8 matches system properties. - */ - -import java.lang.reflect.Field; - -public class VMSupportsCS8 { - public static void main(String[] args) throws Exception { - String isalist = System.getProperty("sun.cpu.isalist"); - if (isalist != null && isalist.matches - (".*\\b(pentium_pro|ia64|amd64).*") - || - System.getProperty("os.arch").matches - (".*\\b(ia64|amd64).*")) { - - System.out.println("This system is known to have hardware CS8"); - - Class klass = Class.forName("java.util.concurrent.atomic.AtomicLong"); - Field field = klass.getDeclaredField("VM_SUPPORTS_LONG_CAS"); - field.setAccessible(true); - boolean VMSupportsCS8 = field.getBoolean(null); - if (! VMSupportsCS8) - throw new Exception("Unexpected value for VMSupportsCS8"); - } - } -} From df1b896e01f4e7feeff90c1836aa395201fc4e4e Mon Sep 17 00:00:00 2001 From: Doug Simon Date: Thu, 23 Nov 2023 23:36:08 +0000 Subject: [PATCH 051/250] 8320679: [JVMCI] invalid code in PushLocalFrame event message Reviewed-by: never --- src/hotspot/share/jvmci/jvmciEnv.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hotspot/share/jvmci/jvmciEnv.cpp b/src/hotspot/share/jvmci/jvmciEnv.cpp index 47db09d6922c7..b060bd8479fe4 100644 --- a/src/hotspot/share/jvmci/jvmciEnv.cpp +++ b/src/hotspot/share/jvmci/jvmciEnv.cpp @@ -189,7 +189,7 @@ void JVMCIEnv::init_env_mode_runtime(JavaThread* thread, JNIEnv* parent_env) { JNIAccessMark jni(this, thread); jint result = _env->PushLocalFrame(32); if (result != JNI_OK) { - JVMCI_event_1("[%s:%d] Error pushing local JNI frame (err: %d)", _file, _line, _init_error); + JVMCI_event_1("[%s:%d] Error pushing local JNI frame (err: %d)", _file, _line, result); return; } _pop_frame_on_close = true; From fc314740e947b2338ab9e4d4fce0c4f52de56c4b Mon Sep 17 00:00:00 2001 From: Jan Lahoda Date: Fri, 24 Nov 2023 06:30:08 +0000 Subject: [PATCH 052/250] 8318913: The module-infos for --release data do not contain pre-set versions Co-authored-by: Erik Joelsson Reviewed-by: vromero, ihse --- make/Main.gmk | 21 +- make/autoconf/boot-jdk.m4 | 4 +- make/autoconf/spec.gmk.in | 3 +- .../tools/symbolgenerator/CreateSymbols.java | 337 +++++++++++++++--- .../TransitiveDependencies.java | 123 ------- make/modules/jdk.compiler/Gendata.gmk | 53 ++- .../javac/platform/JDKPlatformProvider.java | 37 -- .../platform/CanHandleClassFilesTest.java | 7 +- .../javac/platform/ModuleVersionTest.java | 114 ++++++ .../platform/NonExportedPermittedTypes.java | 52 +++ .../platform/NonExportedPermittedTypes.out | 2 + .../javac/platform/NonExportedSuperTypes.java | 3 +- .../platform/ReleaseAndEnablePreview.java | 38 ++ .../createsymbols/CreateSymbolsTestImpl.java | 12 +- 14 files changed, 546 insertions(+), 260 deletions(-) delete mode 100644 make/langtools/src/classes/build/tools/symbolgenerator/TransitiveDependencies.java create mode 100644 test/langtools/tools/javac/platform/ModuleVersionTest.java create mode 100644 test/langtools/tools/javac/platform/NonExportedPermittedTypes.java create mode 100644 test/langtools/tools/javac/platform/NonExportedPermittedTypes.out create mode 100644 test/langtools/tools/javac/platform/ReleaseAndEnablePreview.java diff --git a/make/Main.gmk b/make/Main.gmk index 8fdaf788c4dfe..1817416867738 100644 --- a/make/Main.gmk +++ b/make/Main.gmk @@ -608,11 +608,11 @@ endif ifeq ($(CREATING_BUILDJDK), true) # This target is only called by the recursive call below. create-buildjdk-interim-image-helper: interim-image jdk.jlink-launchers \ - java.base-copy jdk.jdeps-launchers + java.base-copy jdk.jdeps-launchers jdk.compiler-launchers endif -BUILDJDK_MODULES := $(sort $(foreach m, jdk.jlink $(INTERIM_IMAGE_MODULES), \ - $(call FindTransitiveDepsForModule, $m) $m)) +BUILDJDK_MODULES := $(sort $(foreach m, jdk.jlink jdk.compiler \ + $(INTERIM_IMAGE_MODULES), $(call FindTransitiveDepsForModule, $m) $m)) $(eval $(call SetupTarget, create-buildjdk-interim-image, \ MAKEFILE := Main, \ @@ -971,7 +971,20 @@ else jdk.jdeps-gendata: java # The ct.sym generation uses all the moduleinfos as input - jdk.compiler-gendata: $(GENSRC_MODULEINFO_TARGETS) + jdk.compiler-gendata: $(GENSRC_MODULEINFO_TARGETS) $(JAVA_TARGETS) + # jdk.compiler-gendata needs the BUILD_JDK. If the BUILD_JDK was supplied + # externally, no extra prerequisites are needed. + ifeq ($(CREATE_BUILDJDK), true) + ifneq ($(CREATING_BUILDJDK), true) + # When cross compiling and an external BUILD_JDK wasn't supplied, it's + # produced by the create-buildjdk target. + jdk.compiler-gendata: create-buildjdk + endif + else ifeq ($(EXTERNAL_BUILDJDK), false) + # When not cross compiling, the BUILD_JDK is the interim jdk image, and + # the javac launcher is needed. + jdk.compiler-gendata: jdk.compiler-launchers + endif # Declare dependencies between jmod targets. # java.base jmod needs jrt-fs.jar and access to the jmods for all non diff --git a/make/autoconf/boot-jdk.m4 b/make/autoconf/boot-jdk.m4 index 960a8ffce3a88..8d272c28ad54f 100644 --- a/make/autoconf/boot-jdk.m4 +++ b/make/autoconf/boot-jdk.m4 @@ -520,8 +520,8 @@ AC_DEFUN_ONCE([BOOTJDK_SETUP_BOOT_JDK_ARGUMENTS], # Don't presuppose SerialGC is present in the buildjdk. Also, we cannot test # the buildjdk, but on the other hand we know what it will support. - BUILDJDK_JAVA_FLAGS_SMALL="-Xms32M -Xmx512M -XX:TieredStopAtLevel=1" - AC_SUBST(BUILDJDK_JAVA_FLAGS_SMALL) + BUILD_JAVA_FLAGS_SMALL="-Xms32M -Xmx512M -XX:TieredStopAtLevel=1" + AC_SUBST(BUILD_JAVA_FLAGS_SMALL) JAVA_TOOL_FLAGS_SMALL="" for f in $JAVA_FLAGS_SMALL; do diff --git a/make/autoconf/spec.gmk.in b/make/autoconf/spec.gmk.in index 2b7a7b8d1afde..3ac1ea7427197 100644 --- a/make/autoconf/spec.gmk.in +++ b/make/autoconf/spec.gmk.in @@ -663,7 +663,7 @@ STRIPFLAGS:=@STRIPFLAGS@ JAVA_FLAGS:=@JAVA_FLAGS@ JAVA_FLAGS_BIG:=@JAVA_FLAGS_BIG@ JAVA_FLAGS_SMALL:=@JAVA_FLAGS_SMALL@ -BUILDJDK_JAVA_FLAGS_SMALL:=@BUILDJDK_JAVA_FLAGS_SMALL@ +BUILD_JAVA_FLAGS_SMALL:=@BUILD_JAVA_FLAGS_SMALL@ JAVA_TOOL_FLAGS_SMALL:=@JAVA_TOOL_FLAGS_SMALL@ # The *_CMD variables are defined separately to be easily overridden in bootcycle-spec.gmk @@ -690,6 +690,7 @@ JTREG_JAVA = @FIXPATH@ $(JTREG_JDK)/bin/java $(JAVA_FLAGS_BIG) $(JAVA_FLAGS) BUILD_JAVA_FLAGS := @BOOTCYCLE_JVM_ARGS_BIG@ BUILD_JAVA=@FIXPATH@ $(BUILD_JDK)/bin/java $(BUILD_JAVA_FLAGS) +BUILD_JAVA_SMALL=@FIXPATH@ $(BUILD_JDK)/bin/java $(BUILD_JAVA_FLAGS_SMALL) BUILD_JAVAC=@FIXPATH@ $(BUILD_JDK)/bin/javac BUILD_JAR=@FIXPATH@ $(BUILD_JDK)/bin/jar diff --git a/make/langtools/src/classes/build/tools/symbolgenerator/CreateSymbols.java b/make/langtools/src/classes/build/tools/symbolgenerator/CreateSymbols.java index 76dcdb6273a2b..860a96f2b677d 100644 --- a/make/langtools/src/classes/build/tools/symbolgenerator/CreateSymbols.java +++ b/make/langtools/src/classes/build/tools/symbolgenerator/CreateSymbols.java @@ -150,7 +150,9 @@ import com.sun.tools.javac.util.Assert; import com.sun.tools.javac.util.Context; import com.sun.tools.javac.util.Pair; +import java.nio.file.DirectoryStream; import java.util.Optional; +import java.util.function.Consumer; /** * A tool for processing the .sym.txt files. @@ -228,11 +230,25 @@ public class CreateSymbols { */ @SuppressWarnings("unchecked") public void createSymbols(String ctDescriptionFileExtra, String ctDescriptionFile, String ctSymLocation, - long timestamp, String currentVersion, String systemModules) throws IOException { + long timestamp, String currentVersion, String preReleaseTag, String moduleClasses) throws IOException { LoadDescriptions data = load(ctDescriptionFileExtra != null ? Paths.get(ctDescriptionFileExtra) : null, Paths.get(ctDescriptionFile)); + int currentVersionParsed = Integer.parseInt(currentVersion); + + currentVersion = Integer.toString(currentVersionParsed, Character.MAX_RADIX); + currentVersion = currentVersion.toUpperCase(Locale.ROOT); + + String previousVersion = Integer.toString(currentVersionParsed - 1, Character.MAX_RADIX); + + previousVersion = previousVersion.toUpperCase(Locale.ROOT); + + //load current version classes: + Path moduleClassPath = Paths.get(moduleClasses); + + loadVersionClassesFromDirectory(data.classes, data.modules, moduleClassPath, currentVersion, previousVersion); + stripNonExistentAnnotations(data); splitHeaders(data.classes); @@ -241,12 +257,19 @@ public void createSymbols(String ctDescriptionFileExtra, String ctDescriptionFil for (ModuleDescription md : data.modules.values()) { for (ModuleHeaderDescription mhd : md.header) { - List versionsList = - Collections.singletonList(mhd.versions); writeModulesForVersions(directory2FileData, md, mhd, - versionsList); + mhd.versions, + version -> { + String versionString = Character.toString(version); + int versionNumber = Integer.parseInt(versionString, Character.MAX_RADIX); + versionString = Integer.toString(versionNumber); + if (versionNumber == currentVersionParsed && !preReleaseTag.isEmpty()) { + versionString = versionString + "-" + preReleaseTag; + } + return versionString; + }); List packages = new ArrayList<>(); mhd.exports.stream() .map(ExportsDescription::packageName) @@ -293,13 +316,6 @@ public void createSymbols(String ctDescriptionFileExtra, String ctDescriptionFil } } - currentVersion = Integer.toString(Integer.parseInt(currentVersion), Character.MAX_RADIX); - currentVersion = currentVersion.toUpperCase(Locale.ROOT); - - openDirectory(directory2FileData, currentVersion + "/") - .add(new FileData(currentVersion + "/system-modules", - Files.readAllBytes(Paths.get(systemModules)))); - try (OutputStream fos = new FileOutputStream(ctSymLocation); OutputStream bos = new BufferedOutputStream(fos); ZipOutputStream jos = new ZipOutputStream(bos)) { @@ -788,10 +804,14 @@ void writeClassesForVersions(Map> directory2FileData, void writeModulesForVersions(Map> directory2FileData, ModuleDescription moduleDescription, ModuleHeaderDescription header, - Iterable versions) + String versions, + Function version2ModuleVersion) throws IOException { - for (String ver : versions) { - writeModule(directory2FileData, moduleDescription, header, ver); + //ensure every module-info.class is written separatelly, + //so that the correct version is used for it: + for (char ver : versions.toCharArray()) { + writeModule(directory2FileData, moduleDescription, header, ver, + version2ModuleVersion); } } @@ -799,7 +819,8 @@ void writeModulesForVersions(Map> directory2FileData, void writeModule(Map> directory2FileData, ModuleDescription moduleDescription, ModuleHeaderDescription header, - String version) throws IOException { + char version, + Function version2ModuleVersion) throws IOException { List constantPool = new ArrayList<>(); constantPool.add(null); int currentClass = addClass(constantPool, "module-info"); @@ -807,7 +828,9 @@ void writeModule(Map> directory2FileData, int[] interfaces = new int[0]; AccessFlags flags = new AccessFlags(header.flags); Map attributesMap = new HashMap<>(); - addAttributes(moduleDescription, header, constantPool, attributesMap); + String versionString = Character.toString(version); + addAttributes(moduleDescription, header, constantPool, attributesMap, + version2ModuleVersion.apply(version)); Attributes attributes = new Attributes(attributesMap); CPInfo[] cpData = constantPool.toArray(new CPInfo[constantPool.size()]); ConstantPool cp = new ConstantPool(cpData); @@ -823,7 +846,7 @@ void writeModule(Map> directory2FileData, new Method[0], attributes); - doWrite(directory2FileData, version, moduleDescription.name, "module-info" + EXTENSION, classFile); + doWrite(directory2FileData, versionString, moduleDescription.name, "module-info" + EXTENSION, classFile); } void writeClass(Map> directory2FileData, @@ -924,7 +947,8 @@ public FileData(String fileName, byte[] fileData) { private void addAttributes(ModuleDescription md, ModuleHeaderDescription header, List cp, - Map attributes) { + Map attributes, + String moduleVersion) { addGenericAttributes(header, cp, attributes); if (header.moduleResolution != null) { int attrIdx = addString(cp, Attribute.ModuleResolution); @@ -945,12 +969,13 @@ private void addAttributes(ModuleDescription md, attributes.put(Attribute.ModuleMainClass, new ModuleMainClass_attribute(attrIdx, targetIdx)); } + int versionIdx = addString(cp, moduleVersion); int attrIdx = addString(cp, Attribute.Module); attributes.put(Attribute.Module, new Module_attribute(attrIdx, addModuleName(cp, md.name), 0, - 0, + versionIdx, header.requires .stream() .map(r -> createRequiresEntry(cp, r)) @@ -1123,8 +1148,9 @@ private void addAttributes(MethodDescription desc, List constantPool, Ma MethodParameters_attribute.Entry[] entries = desc.methodParameters .stream() - .map(p -> new MethodParameters_attribute.Entry(addString(constantPool, p.name), - p.flags)) + .map(p -> new MethodParameters_attribute.Entry(p.name == null || p.name.isEmpty() ? 0 + : addString(constantPool, p.name), + p.flags)) .toArray(s -> new MethodParameters_attribute.Entry[s]); attributes.put(Attribute.MethodParameters, new MethodParameters_attribute(attributeString, entries)); @@ -1492,7 +1518,7 @@ private void loadVersionClasses(ClassList classes, } } - ExcludeIncludeList currentEIList = excludesIncludes; + ExcludeIncludeList currentEIList; if (!currentVersionModules.isEmpty()) { Set privateIncludes = @@ -1509,19 +1535,182 @@ private void loadVersionClasses(ClassList classes, currentEIList = new ExcludeIncludeList(includes, privateIncludes, Collections.emptySet()); + } else { + currentEIList = excludesIncludes; } ClassList currentVersionClasses = new ClassList(); + Map extraModulesPackagesToDerive = new HashMap<>(); for (byte[] classFileData : classData) { try (InputStream in = new ByteArrayInputStream(classFileData)) { inspectClassFile(in, currentVersionClasses, - currentEIList, version); + currentEIList, version, + cf -> { + PermittedSubclasses_attribute permitted = (PermittedSubclasses_attribute) cf.getAttribute(Attribute.PermittedSubclasses); + if (permitted != null) { + try { + String currentPack = cf.getName().substring(0, cf.getName().lastIndexOf('/')); + + for (int i = 0; i < permitted.subtypes.length; i++) { + String permittedClassName = cf.constant_pool.getClassInfo(permitted.subtypes[i]).getName(); + if (!currentEIList.accepts(permittedClassName, false)) { + String permittedPack = permittedClassName.substring(0, permittedClassName.lastIndexOf('/')); + + extraModulesPackagesToDerive.put(permittedPack, currentPack); + } + } + } catch (ConstantPoolException ex) { + throw new IllegalStateException(ex); + } + } + }); } catch (IOException | ConstantPoolException ex) { throw new IllegalStateException(ex); } } + //derive extra module packages for permitted types based on on their supertypes: + boolean modified; + + do { + modified = false; + + for (Iterator> it = extraModulesPackagesToDerive.entrySet().iterator(); it.hasNext();) { + Entry e = it.next(); + Optional module = currentVersionModules.values().stream().map(md -> md.header.get(0)).filter(d -> containsPackage(d, e.getValue())).findAny(); + if (module.isPresent()) { + if (!module.get().extraModulePackages.contains(e.getKey())) { + module.get().extraModulePackages.add(e.getKey()); + } + it.remove(); + modified = true; + } + } + } while (modified); + + if (!extraModulesPackagesToDerive.isEmpty()) { + throw new AssertionError("Cannot derive some owning modules: " + extraModulesPackagesToDerive); + } + + finishClassLoading(classes, modules, currentVersionModules, currentVersionClasses, currentEIList, version, baseline); + } + + private boolean containsPackage(ModuleHeaderDescription module, String pack) { + return module.exports.stream().filter(ed -> ed.packageName().equals(pack)).findAny().isPresent() || + module.extraModulePackages.contains(pack); + } + + private void loadVersionClassesFromDirectory(ClassList classes, + Map modules, + Path modulesDirectory, + String version, + String baseline) { + Map currentVersionModules = + new HashMap<>(); + ClassList currentVersionClasses = new ClassList(); + Set privateIncludes = new HashSet<>(); + Set includes = new HashSet<>(); + ExcludeIncludeList currentEIList = new ExcludeIncludeList(includes, + privateIncludes, + Collections.emptySet()); + + try { + Map modulePath2Header = new HashMap<>(); + List pendingExportedDirectories = new ArrayList<>(); + + try (DirectoryStream ds = Files.newDirectoryStream(modulesDirectory)) { + for (Path p : ds) { + Path moduleInfo = p.resolve("module-info.class"); + + if (Files.isReadable(moduleInfo)) { + ModuleDescription md; + + try (InputStream in = Files.newInputStream(moduleInfo)) { + md = inspectModuleInfoClassFile(in, + currentVersionModules, version); + } + if (md == null) { + continue; + } + + modulePath2Header.put(p, md.header.get(0)); + + Set currentModuleExports = + md.header.get(0).exports.stream() + .filter(e -> !e.isQualified()) + .map(e -> e.packageName + '/') + .collect(Collectors.toSet()); + + for (String dir : currentModuleExports) { + includes.add(dir); + pendingExportedDirectories.add(p.resolve(dir)); + } + } + } + } + + List pendingExtraClasses = new ArrayList<>(); + + for (Path exported : pendingExportedDirectories) { + try (DirectoryStream ds = Files.newDirectoryStream(exported)) { + for (Path p2 : ds) { + if (!Files.isRegularFile(p2) || !p2.getFileName().toString().endsWith(".class")) { + continue; + } + + loadFromDirectoryHandleClassFile(p2, currentVersionClasses, + currentEIList, version, + pendingExtraClasses); + } + } + } + + while (!pendingExtraClasses.isEmpty()) { + String current = pendingExtraClasses.remove(pendingExtraClasses.size() - 1); + + if (currentVersionClasses.find(current, true) != null) { + continue; + } + + for (Entry e : modulePath2Header.entrySet()) { + Path currentPath = e.getKey().resolve(current + ".class"); + + if (Files.isReadable(currentPath)) { + String pack = current.substring(0, current.lastIndexOf('/')); + + e.getValue().extraModulePackages.add(pack); + + loadFromDirectoryHandleClassFile(currentPath, currentVersionClasses, + currentEIList, version, + pendingExtraClasses); + } + } + } + } catch (IOException | ConstantPoolException ex) { + throw new IllegalStateException(ex); + } + + finishClassLoading(classes, modules, currentVersionModules, currentVersionClasses, currentEIList, version, baseline); + } + + private void loadFromDirectoryHandleClassFile(Path path, ClassList currentVersionClasses, + ExcludeIncludeList currentEIList, String version, + List todo) throws IOException, ConstantPoolException { + try (InputStream in = Files.newInputStream(path)) { + inspectClassFile(in, currentVersionClasses, + currentEIList, version, + cf -> { + Set superTypes = otherRelevantTypesWithOwners(cf); + + currentEIList.privateIncludeList.addAll(superTypes); + todo.addAll(superTypes); + }); + } + } + + private void finishClassLoading(ClassList classes, Map modules, Map currentVersionModules, ClassList currentVersionClasses, ExcludeIncludeList currentEIList, String version, + String baseline) { ModuleDescription unsupported = currentVersionModules.get("jdk.unsupported"); @@ -1563,6 +1752,11 @@ private void loadVersionClasses(ClassList classes, for (String i : header.implementsAttr) { modified |= include(includedClasses, currentVersionClasses, i); } + if (header.permittedSubclasses != null) { + for (String i : header.permittedSubclasses) { + modified |= include(includedClasses, currentVersionClasses, i); + } + } modified |= includeOutputType(Collections.singleton(header), h -> "", @@ -1962,6 +2156,11 @@ private List dumpCurrentClasses() throws IOException { public static boolean ALLOW_NON_EXISTING_CLASSES = false; private void inspectClassFile(InputStream in, ClassList classes, ExcludeIncludeList excludesIncludes, String version) throws IOException, ConstantPoolException { + inspectClassFile(in, classes, excludesIncludes, version, cf -> {}); + } + + private void inspectClassFile(InputStream in, ClassList classes, ExcludeIncludeList excludesIncludes, String version, + Consumer extraTask) throws IOException, ConstantPoolException { ClassFile cf = ClassFile.read(in); if (cf.access_flags.is(AccessFlags.ACC_MODULE)) { @@ -1972,6 +2171,8 @@ private void inspectClassFile(InputStream in, ClassList classes, ExcludeIncludeL return ; } + extraTask.accept(cf); + ClassHeaderDescription headerDesc = new ClassHeaderDescription(); headerDesc.flags = cf.access_flags.flags; @@ -2032,13 +2233,13 @@ private void inspectClassFile(InputStream in, ClassList classes, ExcludeIncludeL } } - private void inspectModuleInfoClassFile(InputStream in, + private ModuleDescription inspectModuleInfoClassFile(InputStream in, Map modules, String version) throws IOException, ConstantPoolException { ClassFile cf = ClassFile.read(in); if (!cf.access_flags.is(AccessFlags.ACC_MODULE)) { - return ; + return null; } ModuleHeaderDescription headerDesc = new ModuleHeaderDescription(); @@ -2048,7 +2249,7 @@ private void inspectModuleInfoClassFile(InputStream in, for (Attribute attr : cf.attributes) { if (!readAttribute(cf, headerDesc, attr)) - return ; + return null; } String name = headerDesc.name; @@ -2062,6 +2263,8 @@ private void inspectModuleInfoClassFile(InputStream in, } addModuleHeader(moduleDesc, headerDesc, version); + + return moduleDesc; } private Set enhancedIncludesListBasedOnClassHeaders(ClassList classes, @@ -2072,35 +2275,53 @@ private Set enhancedIncludesListBasedOnClassHeaders(ClassList classes, try (InputStream in = new ByteArrayInputStream(classFileData)) { ClassFile cf = ClassFile.read(in); - if (cf.access_flags.is(AccessFlags.ACC_MODULE)) { - continue; - } + additionalIncludes.addAll(otherRelevantTypesWithOwners(cf)); + } catch (IOException | ConstantPoolException ex) { + throw new IllegalStateException(ex); + } + } - Set additionalClasses = new HashSet<>(); + return additionalIncludes; + } - if (cf.super_class != 0) { - additionalClasses.add(cf.getSuperclassName()); - } - for (int i = 0; i < cf.interfaces.length; i++) { - additionalClasses.add(cf.getInterfaceName(i)); + private Set otherRelevantTypesWithOwners(ClassFile cf) { + Set supertypes = new HashSet<>(); + + try { + if (cf.access_flags.is(AccessFlags.ACC_MODULE)) { + return supertypes; + } + + Set additionalClasses = new HashSet<>(); + + if (cf.super_class != 0) { + additionalClasses.add(cf.getSuperclassName()); + } + for (int i = 0; i < cf.interfaces.length; i++) { + additionalClasses.add(cf.getInterfaceName(i)); + } + PermittedSubclasses_attribute permitted = (PermittedSubclasses_attribute) cf.getAttribute(Attribute.PermittedSubclasses); + if (permitted != null) { + for (int i = 0; i < permitted.subtypes.length; i++) { + additionalClasses.add(cf.constant_pool.getClassInfo(permitted.subtypes[i]).getName()); } + } - for (String additional : additionalClasses) { - int dollar; + for (String additional : additionalClasses) { + int dollar; - additionalIncludes.add(additional); + supertypes.add(additional); - while ((dollar = additional.lastIndexOf('$')) != (-1)) { - additional = additional.substring(0, dollar); - additionalIncludes.add(additional); - } + while ((dollar = additional.lastIndexOf('$')) != (-1)) { + additional = additional.substring(0, dollar); + supertypes.add(additional); } - } catch (IOException | ConstantPoolException ex) { - throw new IllegalStateException(ex); } - } - return additionalIncludes; + return supertypes; + } catch (ConstantPoolException ex) { + throw new IllegalStateException(ex); + } } private void addModuleHeader(ModuleDescription moduleDesc, @@ -2115,7 +2336,9 @@ private void addModuleHeader(ModuleDescription moduleDesc, } } - headerDesc.versions += version; + if (!headerDesc.versions.contains(version)) { + headerDesc.versions += version; + } if (!existed) { moduleDesc.header.add(headerDesc); @@ -2159,7 +2382,9 @@ private void addClassHeader(ClassDescription clazzDesc, ClassHeaderDescription h } } - headerDesc.versions += version; + if (!headerDesc.versions.contains(version)) { + headerDesc.versions += version; + } if (!existed) { clazzDesc.header.add(headerDesc); @@ -4415,22 +4640,25 @@ public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOExce String ctSymLocation; String timestampSpec; String currentVersion; - String systemModules; + String preReleaseTag; + String moduleClasses; - if (args.length == 6) { + if (args.length == 7) { ctDescriptionFileExtra = null; ctDescriptionFile = args[1]; ctSymLocation = args[2]; timestampSpec = args[3]; currentVersion = args[4]; - systemModules = args[5]; - } else if (args.length == 7) { + preReleaseTag = args[5]; + moduleClasses = args[6]; + } else if (args.length == 8) { ctDescriptionFileExtra = args[1]; ctDescriptionFile = args[2]; ctSymLocation = args[3]; timestampSpec = args[4]; currentVersion = args[5]; - systemModules = args[6]; + preReleaseTag = args[6]; + moduleClasses = args[7]; } else { help(); return ; @@ -4446,7 +4674,8 @@ public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOExce ctSymLocation, timestamp, currentVersion, - systemModules); + preReleaseTag, + moduleClasses); break; } case "build-javadoc-data": { diff --git a/make/langtools/src/classes/build/tools/symbolgenerator/TransitiveDependencies.java b/make/langtools/src/classes/build/tools/symbolgenerator/TransitiveDependencies.java deleted file mode 100644 index a26f74b9e236e..0000000000000 --- a/make/langtools/src/classes/build/tools/symbolgenerator/TransitiveDependencies.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright (c) 2017, 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. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package build.tools.symbolgenerator; - -import java.io.IOException; -import java.io.PrintWriter; -import java.io.Writer; -import java.nio.charset.Charset; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.ArrayDeque; -import java.util.Arrays; -import java.util.Deque; -import java.util.HashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.Locale; -import java.util.Set; -import java.util.stream.Collectors; - -import javax.lang.model.element.ModuleElement.RequiresDirective; -import javax.lang.model.util.Elements; -import javax.tools.JavaCompiler; - -import com.sun.tools.javac.api.JavacTaskImpl; -import com.sun.tools.javac.api.JavacTool; -import com.sun.tools.javac.code.Source; -import com.sun.tools.javac.code.Symbol.ModuleSymbol; -import com.sun.tools.javac.jvm.Target; - -/** - * Write reflexive transitive closure of the given modules along their requires transitive edges into - * file /system-modules in the specified directory. - */ -public class TransitiveDependencies { - - private static void help() { - System.err.println("java TransitiveDependencies "); - } - - public static void main(String... args) throws IOException { - if (args.length < 2) { - help(); - return ; - } - - JavaCompiler compiler = JavacTool.create(); - List options = List.of("-source", Source.DEFAULT.name, - "-target", Target.DEFAULT.name, - "-proc:only", - "--system", "none", - "--module-source-path", args[1], - "--add-modules", Arrays.stream(args) - .skip(2) - .collect(Collectors.joining(","))); - List jlObjectList = List.of("java.lang.Object"); - JavacTaskImpl task = (JavacTaskImpl) compiler.getTask(null, null, null, options, jlObjectList, null); - task.enter(); - Elements elements = task.getElements(); - Deque todo = new ArrayDeque<>(); - Arrays.stream(args).skip(2).forEach(todo::add); - Set allModules = new HashSet<>(); - - while (!todo.isEmpty()) { - String current = todo.removeFirst(); - - if (!allModules.add(current)) - continue; - - ModuleSymbol mod = (ModuleSymbol) elements.getModuleElement(current); - - if (mod == null) { - throw new IllegalStateException("Missing: " + current); - } - - //use the internal structure to avoid unnecessarily completing the symbol using the UsesProvidesVisitor: - for (RequiresDirective rd : mod.requires) { - if (rd.isTransitive()) { - todo.offerLast(rd.getDependency().getQualifiedName().toString()); - } - } - } - - allModules.add("java.base"); - allModules.add("jdk.unsupported"); - - Path targetFile = Paths.get(args[0]); - - Files.createDirectories(targetFile.getParent()); - - try (Writer w = Files.newBufferedWriter(targetFile); - PrintWriter out = new PrintWriter(w)) { - allModules.stream() - .sorted() - .forEach(out::println); - } - } - -} diff --git a/make/modules/jdk.compiler/Gendata.gmk b/make/modules/jdk.compiler/Gendata.gmk index e005e703f2c5e..df0ced743e7d6 100644 --- a/make/modules/jdk.compiler/Gendata.gmk +++ b/make/modules/jdk.compiler/Gendata.gmk @@ -35,59 +35,54 @@ $(eval $(call IncludeCustomExtension, modules/jdk.compiler/Gendata.gmk)) # This is needed to properly setup DOCS_MODULES. $(eval $(call ReadImportMetaData)) -# Modules that should be visible for 9 - the documented modules: -CT_MODULES := $(DOCS_MODULES) +# Modules that should be visible - the documented modules: +CT_MODULES := $(filter-out $(MODULES_FILTER), $(DOCS_MODULES)) +CT_TRANSITIVE_MODULES := $(call FindTransitiveIndirectDepsForModules, $(CT_MODULES)) +CT_MODULES_API_TARGETS := \ + $(foreach m, $(CT_MODULES) $(CT_TRANSITIVE_MODULES), \ + $(call SetupJavaCompilationApiTarget, $m, $(JDK_OUTPUTDIR)/modules/$m)) -# Get the complete module source path: -CT_MODULESOURCEPATH := $(call GetModuleSrcPath) +SYMBOL_FILES := $(wildcard $(MODULE_SRC)/share/data/symbols/*) CT_DATA_DESCRIPTION += $(MODULE_SRC)/share/data/symbols/symbols COMPILECREATESYMBOLS_ADD_EXPORTS := \ - --add-exports java.base/jdk.internal.javac=java.compiler.interim,jdk.compiler.interim \ - --add-exports jdk.internal.opt/jdk.internal.opt=jdk.compiler.interim,jdk.javadoc.interim \ - --add-exports jdk.compiler.interim/com.sun.tools.javac.api=ALL-UNNAMED \ - --add-exports jdk.compiler.interim/com.sun.tools.javac.code=ALL-UNNAMED \ - --add-exports jdk.compiler.interim/com.sun.tools.javac.util=ALL-UNNAMED \ - --add-exports jdk.compiler.interim/com.sun.tools.javac.jvm=ALL-UNNAMED \ + --add-modules jdk.compiler,jdk.jdeps \ + --add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED \ + --add-exports jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED \ + --add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED \ + --add-exports jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED \ + --add-exports jdk.jdeps/com.sun.tools.classfile=ALL-UNNAMED \ # +# TODO: Unify with jdk.javadoc-gendata. Should only compile this once and share. $(eval $(call SetupJavaCompilation, COMPILE_CREATE_SYMBOLS, \ - TARGET_RELEASE := $(TARGET_RELEASE_BOOTJDK), \ - SRC := $(TOPDIR)/make/langtools/src/classes \ - $(TOPDIR)/src/jdk.jdeps/share/classes, \ + TARGET_RELEASE := $(TARGET_RELEASE_NEWJDK), \ + COMPILER := buildjdk, \ + SRC := $(TOPDIR)/make/langtools/src/classes, \ INCLUDES := build/tools/symbolgenerator com/sun/tools/classfile, \ - BIN := $(BUILDTOOLS_OUTPUTDIR)/create_symbols, \ + BIN := $(BUILDTOOLS_OUTPUTDIR)/create_symbols_javac, \ DISABLED_WARNINGS := options this-escape, \ JAVAC_FLAGS := \ - $(INTERIM_LANGTOOLS_ARGS) \ $(COMPILECREATESYMBOLS_ADD_EXPORTS), \ )) -$(SUPPORT_OUTPUTDIR)/symbols/ct.sym: \ - $(COMPILE_CREATE_SYMBOLS) \ - $(wildcard $(MODULE_SRC)/share/data/symbols/*) \ - $(MODULE_INFOS) +$(SUPPORT_OUTPUTDIR)/symbols/ct.sym: $(COMPILE_CREATE_SYMBOLS) $(SYMBOL_FILES) \ + $(MODULE_INFOS) $(CT_MODULES_API_TARGETS) $(RM) -r $(@D) $(MKDIR) -p $(@D) $(ECHO) Creating ct.sym classes - $(JAVA_SMALL) $(INTERIM_LANGTOOLS_ARGS) \ + $(BUILD_JAVA_SMALL) \ $(COMPILECREATESYMBOLS_ADD_EXPORTS) \ - -classpath $(BUILDTOOLS_OUTPUTDIR)/create_symbols \ - build.tools.symbolgenerator.TransitiveDependencies \ - $(@D)/system-modules \ - $(CT_MODULESOURCEPATH) \ - $(CT_MODULES) - $(JAVA_SMALL) $(INTERIM_LANGTOOLS_ARGS) \ - $(COMPILECREATESYMBOLS_ADD_EXPORTS) \ - -classpath $(BUILDTOOLS_OUTPUTDIR)/create_symbols \ + -classpath $(BUILDTOOLS_OUTPUTDIR)/create_symbols_javac \ build.tools.symbolgenerator.CreateSymbols \ build-ctsym \ $(CT_DATA_DESCRIPTION) \ $(@D)/ct.sym \ $(SOURCE_DATE_EPOCH) \ $(JDK_SOURCE_TARGET_VERSION) \ - $(@D)/system-modules + "$(VERSION_PRE)" \ + $(JDK_OUTPUTDIR)/modules/ $(TOUCH) $@ # Copy ct.sym to the modules libs dir diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/platform/JDKPlatformProvider.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/platform/JDKPlatformProvider.java index 63d2a1a96bded..487fe969f9774 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/platform/JDKPlatformProvider.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/platform/JDKPlatformProvider.java @@ -27,7 +27,6 @@ import java.io.IOException; import java.io.PrintWriter; -import java.net.URI; import java.nio.file.DirectoryStream; import java.nio.file.FileSystem; import java.nio.file.FileSystems; @@ -48,8 +47,6 @@ import java.util.NoSuchElementException; import java.util.Set; import java.util.TreeSet; -import java.util.stream.Collectors; -import java.util.stream.Stream; import javax.annotation.processing.Processor; import javax.tools.ForwardingJavaFileObject; @@ -71,8 +68,6 @@ import com.sun.tools.javac.util.Log; import com.sun.tools.javac.util.StringUtils; -import static java.nio.charset.StandardCharsets.UTF_8; - /** PlatformProvider for JDK N. * *

    This is NOT part of any supported API. @@ -173,17 +168,8 @@ public JavaFileObject getJavaFileForInput(Location location, String className, "", fileName + ".sig"); - if (result == null) { - //in jrt://, the classfile may have the .class extension: - result = (JavaFileObject) getFileForInput(location, - "", - fileName + ".class"); - } - if (result != null) { return new SigJavaFileObject(result); - } else { - return null; } } @@ -262,7 +248,6 @@ public String inferBinaryName(Location location, JavaFileObject file) { Path root = fs.getRootDirectories().iterator().next(); boolean hasModules = Feature.MODULES.allowedInSource(Source.lookup(sourceVersion)); - Path systemModules = root.resolve(ctSymVersion).resolve("system-modules"); if (!hasModules) { List paths = new ArrayList<>(); @@ -281,18 +266,6 @@ public String inferBinaryName(Location location, JavaFileObject file) { } fm.setLocationFromPaths(StandardLocation.PLATFORM_CLASS_PATH, paths); - } else if (Files.isRegularFile(systemModules)) { - fm.handleOption("--system", Arrays.asList("none").iterator()); - - Path jrtModules = - FileSystems.getFileSystem(URI.create("jrt:/")) - .getPath("modules"); - try (Stream lines = - Files.lines(systemModules, UTF_8)) { - lines.map(line -> jrtModules.resolve(line)) - .filter(mod -> Files.exists(mod)) - .forEach(mod -> setModule(fm, mod)); - } } else { Map> module2Paths = new HashMap<>(); @@ -327,16 +300,6 @@ public String inferBinaryName(Location location, JavaFileObject file) { } } - private static void setModule(StandardJavaFileManager fm, Path mod) { - try { - fm.setLocationForModule(StandardLocation.SYSTEM_MODULES, - mod.getFileName().toString(), - Collections.singleton(mod)); - } catch (IOException ex) { - throw new IllegalStateException(ex); - } - } - private static class SigJavaFileObject extends ForwardingJavaFileObject { public SigJavaFileObject(JavaFileObject fileObject) { diff --git a/test/langtools/tools/javac/platform/CanHandleClassFilesTest.java b/test/langtools/tools/javac/platform/CanHandleClassFilesTest.java index ae4f525e4ee12..0a87f67bbe52f 100644 --- a/test/langtools/tools/javac/platform/CanHandleClassFilesTest.java +++ b/test/langtools/tools/javac/platform/CanHandleClassFilesTest.java @@ -109,10 +109,10 @@ protected Class findClass(String name) throws ClassNotFoundException { var createSymbolsClass = Class.forName("build.tools.symbolgenerator.CreateSymbols", false, cl); var main = createSymbolsClass.getMethod("main", String[].class); var symbols = targetDir.resolve("symbols"); - var systemModules = targetDir.resolve("system-modules"); + var modules = targetDir.resolve("modules"); try (Writer w = Files.newBufferedWriter(symbols)) {} - try (Writer w = Files.newBufferedWriter(systemModules)) {} + Files.createDirectories(modules); main.invoke(null, (Object) new String[] {"build-description-incremental", @@ -126,7 +126,8 @@ protected Class findClass(String name) throws ClassNotFoundException { targetDir.resolve("ct.sym").toAbsolutePath().toString(), Long.toString(System.currentTimeMillis() / 1000), "" + SourceVersion.latest().ordinal(), - systemModules.toAbsolutePath().toString()}); + "", + modules.toAbsolutePath().toString()}); } } diff --git a/test/langtools/tools/javac/platform/ModuleVersionTest.java b/test/langtools/tools/javac/platform/ModuleVersionTest.java new file mode 100644 index 0000000000000..693daef58f900 --- /dev/null +++ b/test/langtools/tools/javac/platform/ModuleVersionTest.java @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8318913 + * @summary Verify correct module versions are recorded when --release is used. + * @library /tools/lib + * @modules + * java.base/jdk.internal.classfile + * java.base/jdk.internal.classfile.attribute + * java.base/jdk.internal.classfile.constantpool + * jdk.compiler/com.sun.tools.javac.api + * jdk.compiler/com.sun.tools.javac.main + * jdk.compiler/com.sun.tools.javac.platform + * jdk.compiler/com.sun.tools.javac.util:+open + * @run junit ModuleVersionTest + */ + + +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import jdk.internal.classfile.Attributes; +import jdk.internal.classfile.ClassModel; +import jdk.internal.classfile.Classfile; +import jdk.internal.classfile.attribute.ModuleAttribute; +import jdk.internal.classfile.attribute.ModuleRequireInfo; + +import org.junit.Test; + +import toolbox.JavacTask; +import toolbox.ToolBox; + +import static org.junit.Assert.*; +public class ModuleVersionTest { + + private static final Pattern VERSION_PATTERN = + Pattern.compile("^([0-9]+)(.[0-9]+)*(-.*)?"); + + @Test + public void testVersionInDependency() throws Exception { + doTestVersionInDependency("11", "11"); + + String expectedVersion = System.getProperty("java.version"); + Matcher m = VERSION_PATTERN.matcher(expectedVersion); + + if (m.find()) { + String preRelease = m.group(3); + + expectedVersion = m.group(1); + + if (preRelease != null) { + expectedVersion += preRelease; + } + } + + doTestVersionInDependency(System.getProperty("java.specification.version"), expectedVersion); + } + + private void doTestVersionInDependency(String specificationVersion, + String expectedVersion) throws Exception { + Path root = Paths.get("."); + Path classes = root.resolve("classes"); + Files.createDirectories(classes); + ToolBox tb = new ToolBox(); + + new JavacTask(tb) + .outdir(classes) + .options("--release", specificationVersion) + .sources(""" + module test {} + """, + """ + package test; + public class Test { + } + """) + .run() + .writeAll(); + + Path moduleInfo = classes.resolve("module-info.class"); + ClassModel clazz = Classfile.of().parse(moduleInfo); + + assertTrue(clazz.isModuleInfo()); + ModuleAttribute module = clazz.findAttribute(Attributes.MODULE).get(); + ModuleRequireInfo req = module.requires().get(0); + assertEquals("java.base", req.requires().name().stringValue()); + assertEquals(expectedVersion, req.requiresVersion().get().stringValue()); + } + +} diff --git a/test/langtools/tools/javac/platform/NonExportedPermittedTypes.java b/test/langtools/tools/javac/platform/NonExportedPermittedTypes.java new file mode 100644 index 0000000000000..bdafef7e39adb --- /dev/null +++ b/test/langtools/tools/javac/platform/NonExportedPermittedTypes.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8318913 + * @summary Verify no error is when compiling a class whose permitted types are not exported + * @modules jdk.compiler + * @compile/fail/ref=NonExportedPermittedTypes.out -XDrawDiagnostics NonExportedPermittedTypes.java + * @compile/fail/ref=NonExportedPermittedTypes.out --release 21 -XDrawDiagnostics NonExportedPermittedTypes.java + * @compile/fail/ref=NonExportedPermittedTypes.out --release ${jdk.version} -XDrawDiagnostics NonExportedPermittedTypes.java + */ + + +import java.lang.constant.ConstantDesc; + +public class NonExportedPermittedTypes { + + public void test1(ConstantDesc cd) { + switch (cd) { + case String s -> {} + } + } + + public void test2(ConstantDesc cd) { + switch (cd) { + case String s -> {} + default -> {} + } + } + +} diff --git a/test/langtools/tools/javac/platform/NonExportedPermittedTypes.out b/test/langtools/tools/javac/platform/NonExportedPermittedTypes.out new file mode 100644 index 0000000000000..e17d397328f4b --- /dev/null +++ b/test/langtools/tools/javac/platform/NonExportedPermittedTypes.out @@ -0,0 +1,2 @@ +NonExportedPermittedTypes.java:40:9: compiler.err.not.exhaustive.statement +1 error diff --git a/test/langtools/tools/javac/platform/NonExportedSuperTypes.java b/test/langtools/tools/javac/platform/NonExportedSuperTypes.java index b3f17fd6e3c45..8506c3c591362 100644 --- a/test/langtools/tools/javac/platform/NonExportedSuperTypes.java +++ b/test/langtools/tools/javac/platform/NonExportedSuperTypes.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2023, 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 @@ -28,6 +28,7 @@ * @modules jdk.compiler * jdk.jfr * @compile --release 17 NonExportedSuperTypes.java + * @compile --release ${jdk.version} NonExportedSuperTypes.java */ import jdk.jfr.Event; diff --git a/test/langtools/tools/javac/platform/ReleaseAndEnablePreview.java b/test/langtools/tools/javac/platform/ReleaseAndEnablePreview.java new file mode 100644 index 0000000000000..0c70d75d7f8da --- /dev/null +++ b/test/langtools/tools/javac/platform/ReleaseAndEnablePreview.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8318913 + * @summary Ensure release and enable-preview work well together. + * @modules jdk.compiler + * @compile --release ${jdk.version} --enable-preview ReleaseAndEnablePreview.java + */ + +public class ReleaseAndEnablePreview { + + public String evt(String str) { + return str.length() + "" + str.charAt(0); + } + +} diff --git a/test/langtools/tools/javac/platform/createsymbols/CreateSymbolsTestImpl.java b/test/langtools/tools/javac/platform/createsymbols/CreateSymbolsTestImpl.java index 307c53135a774..17e9e1703abe7 100644 --- a/test/langtools/tools/javac/platform/createsymbols/CreateSymbolsTestImpl.java +++ b/test/langtools/tools/javac/platform/createsymbols/CreateSymbolsTestImpl.java @@ -751,14 +751,14 @@ void doTestComplex(String printClass, }; new CreateSymbols().createBaseLine(versions, acceptAll, ctSym, new String[0]); Path symbolsDesc = ctSym.resolve("symbols"); - Path systemModules = ctSym.resolve("systemModules"); + Path modules = ctSym.resolve("modules"); - Files.newBufferedWriter(systemModules).close(); + Files.createDirectories(modules); Path classesZip = output.resolve("classes.zip"); Path classesDir = output.resolve("classes"); - new CreateSymbols().createSymbols(null, symbolsDesc.toAbsolutePath().toString(), classesZip.toAbsolutePath().toString(), 0, "9", systemModules.toString()); + new CreateSymbols().createSymbols(null, symbolsDesc.toAbsolutePath().toString(), classesZip.toAbsolutePath().toString(), 0, "9", "", modules.toString()); try (JarFile jf = new JarFile(classesZip.toFile())) { Enumeration en = jf.entries(); @@ -1037,12 +1037,12 @@ protected boolean includeEffectiveAccess(ClassList classes, ClassDescription cla } }.createBaseLine(versions, acceptAll, descDest, new String[0]); Path symbolsDesc = descDest.resolve("symbols"); - Path systemModules = descDest.resolve("systemModules"); + Path modules = descDest.resolve("modules"); - Files.newBufferedWriter(systemModules).close(); + Files.createDirectories(modules); try { - new CreateSymbols().createSymbols(null, symbolsDesc.toAbsolutePath().toString(), classDest, 0, "8", systemModules.toString()); + new CreateSymbols().createSymbols(null, symbolsDesc.toAbsolutePath().toString(), classDest, 0, "8", "", modules.toString()); } catch (Throwable t) { t.printStackTrace(); throw t; From 26c3390421f4888eb59017cadb2bf21a15e25b5e Mon Sep 17 00:00:00 2001 From: Matthias Baesken Date: Fri, 24 Nov 2023 07:56:40 +0000 Subject: [PATCH 053/250] 8320383: refresh libraries cache on AIX in VMError::report Reviewed-by: stuefe, mdoerr --- src/hotspot/os/aix/os_aix.cpp | 4 ++++ src/hotspot/os/bsd/os_bsd.cpp | 3 +++ src/hotspot/os/linux/os_linux.cpp | 3 +++ src/hotspot/os/windows/os_windows.cpp | 3 +++ src/hotspot/share/runtime/os.hpp | 2 ++ src/hotspot/share/utilities/vmError.cpp | 11 ++++++----- 6 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/hotspot/os/aix/os_aix.cpp b/src/hotspot/os/aix/os_aix.cpp index bfff8fc86b513..54c538cf367ed 100644 --- a/src/hotspot/os/aix/os_aix.cpp +++ b/src/hotspot/os/aix/os_aix.cpp @@ -1017,6 +1017,10 @@ int os::current_process_id() { // directory not the java application's temp directory, ala java.io.tmpdir. const char* os::get_temp_directory() { return "/tmp"; } +void os::prepare_native_symbols() { + LoadedLibraries::reload(); +} + // Check if addr is inside libjvm.so. bool os::address_is_in_vm(address addr) { diff --git a/src/hotspot/os/bsd/os_bsd.cpp b/src/hotspot/os/bsd/os_bsd.cpp index c1cfb9a171746..fc8e0da1a69de 100644 --- a/src/hotspot/os/bsd/os_bsd.cpp +++ b/src/hotspot/os/bsd/os_bsd.cpp @@ -895,6 +895,9 @@ bool os::address_is_in_vm(address addr) { return false; } +void os::prepare_native_symbols() { +} + bool os::dll_address_to_function_name(address addr, char *buf, int buflen, int *offset, bool demangle) { diff --git a/src/hotspot/os/linux/os_linux.cpp b/src/hotspot/os/linux/os_linux.cpp index 0608831a7dc27..7bde97de9077f 100644 --- a/src/hotspot/os/linux/os_linux.cpp +++ b/src/hotspot/os/linux/os_linux.cpp @@ -1470,6 +1470,9 @@ bool os::address_is_in_vm(address addr) { return false; } +void os::prepare_native_symbols() { +} + bool os::dll_address_to_function_name(address addr, char *buf, int buflen, int *offset, bool demangle) { diff --git a/src/hotspot/os/windows/os_windows.cpp b/src/hotspot/os/windows/os_windows.cpp index 646fe7206a19a..56301fe2e8792 100644 --- a/src/hotspot/os/windows/os_windows.cpp +++ b/src/hotspot/os/windows/os_windows.cpp @@ -1398,6 +1398,9 @@ const char* os::get_current_directory(char *buf, size_t buflen) { return _getcwd(buf, n); } +void os::prepare_native_symbols() { +} + //----------------------------------------------------------- // Helper functions for fatal error handler #ifdef _WIN64 diff --git a/src/hotspot/share/runtime/os.hpp b/src/hotspot/share/runtime/os.hpp index 2f0b589c4e8c9..094fd2509a05b 100644 --- a/src/hotspot/share/runtime/os.hpp +++ b/src/hotspot/share/runtime/os.hpp @@ -671,6 +671,8 @@ class os: AllStatic { static const char* get_temp_directory(); static const char* get_current_directory(char *buf, size_t buflen); + static void prepare_native_symbols(); + // Builds the platform-specific name of a library. // Returns false if the buffer is too small. static bool dll_build_name(char* buffer, size_t size, diff --git a/src/hotspot/share/utilities/vmError.cpp b/src/hotspot/share/utilities/vmError.cpp index 34372701f6e6f..d586c6f4eeacf 100644 --- a/src/hotspot/share/utilities/vmError.cpp +++ b/src/hotspot/share/utilities/vmError.cpp @@ -74,10 +74,6 @@ #include "jvmci/jvmci.hpp" #endif -#ifdef AIX -#include "loadlib_aix.hpp" -#endif - #ifndef PRODUCT #include #endif // PRODUCT @@ -725,6 +721,11 @@ void VMError::report(outputStream* st, bool _verbose) { "Runtime Environment to continue."); } + // avoid the cache update for malloc/mmap errors + if (should_report_bug(_id)) { + os::prepare_native_symbols(); + } + #ifdef ASSERT // Error handler self tests // Meaning of codes passed through in the tests. @@ -1347,7 +1348,7 @@ void VMError::report(outputStream* st, bool _verbose) { void VMError::print_vm_info(outputStream* st) { char buf[O_BUFLEN]; - AIX_ONLY(LoadedLibraries::reload()); + os::prepare_native_symbols(); report_vm_version(st, buf, sizeof(buf)); From 0c9a61c18545c7bd48e54e6b4e523b9ad8d0507d Mon Sep 17 00:00:00 2001 From: Jan Lahoda Date: Fri, 24 Nov 2023 09:05:39 +0000 Subject: [PATCH 054/250] 8319220: Pattern matching switch with a lot of cases is unduly slow Reviewed-by: asotona, vromero --- .../java/lang/runtime/SwitchBootstraps.java | 345 ++++++++++++------ .../lang/runtime/SwitchBootstrapsTest.java | 42 ++- 2 files changed, 267 insertions(+), 120 deletions(-) diff --git a/src/java.base/share/classes/java/lang/runtime/SwitchBootstraps.java b/src/java.base/share/classes/java/lang/runtime/SwitchBootstraps.java index 6810fa6222d1a..79dc47e68169c 100644 --- a/src/java.base/share/classes/java/lang/runtime/SwitchBootstraps.java +++ b/src/java.base/share/classes/java/lang/runtime/SwitchBootstraps.java @@ -26,17 +26,29 @@ package java.lang.runtime; import java.lang.Enum.EnumDesc; +import java.lang.constant.ClassDesc; +import java.lang.constant.ConstantDescs; +import java.lang.constant.MethodTypeDesc; import java.lang.invoke.CallSite; import java.lang.invoke.ConstantCallSite; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import java.lang.invoke.MethodType; +import java.lang.reflect.AccessFlag; +import java.util.ArrayList; import java.util.List; import java.util.Objects; +import java.util.Optional; +import java.util.function.BiPredicate; import java.util.stream.Stream; import jdk.internal.access.SharedSecrets; +import jdk.internal.classfile.Classfile; +import jdk.internal.classfile.Label; +import jdk.internal.classfile.instruction.SwitchCase; import jdk.internal.vm.annotation.Stable; +import static java.lang.invoke.MethodHandles.Lookup.ClassOption.NESTMATE; +import static java.lang.invoke.MethodHandles.Lookup.ClassOption.STRONG; import static java.util.Objects.requireNonNull; /** @@ -54,26 +66,16 @@ private SwitchBootstraps() {} private static final Object SENTINEL = new Object(); private static final MethodHandles.Lookup LOOKUP = MethodHandles.lookup(); - private static final MethodHandle INSTANCEOF_CHECK; - private static final MethodHandle INTEGER_EQ_CHECK; - private static final MethodHandle OBJECT_EQ_CHECK; - private static final MethodHandle ENUM_EQ_CHECK; private static final MethodHandle NULL_CHECK; private static final MethodHandle IS_ZERO; private static final MethodHandle CHECK_INDEX; private static final MethodHandle MAPPED_ENUM_LOOKUP; + private static final MethodTypeDesc TYPES_SWITCH_DESCRIPTOR = + MethodTypeDesc.ofDescriptor("(Ljava/lang/Object;ILjava/util/function/BiPredicate;Ljava/util/List;)I"); + static { try { - INSTANCEOF_CHECK = MethodHandles.permuteArguments(LOOKUP.findVirtual(Class.class, "isInstance", - MethodType.methodType(boolean.class, Object.class)), - MethodType.methodType(boolean.class, Object.class, Class.class), 1, 0); - INTEGER_EQ_CHECK = LOOKUP.findStatic(SwitchBootstraps.class, "integerEqCheck", - MethodType.methodType(boolean.class, Object.class, Integer.class)); - OBJECT_EQ_CHECK = LOOKUP.findStatic(Objects.class, "equals", - MethodType.methodType(boolean.class, Object.class, Object.class)); - ENUM_EQ_CHECK = LOOKUP.findStatic(SwitchBootstraps.class, "enumEqCheck", - MethodType.methodType(boolean.class, Object.class, EnumDesc.class, MethodHandles.Lookup.class, ResolvedEnumLabel.class)); NULL_CHECK = LOOKUP.findStatic(Objects.class, "isNull", MethodType.methodType(boolean.class, Object.class)); IS_ZERO = LOOKUP.findStatic(SwitchBootstraps.class, "isZero", @@ -155,7 +157,9 @@ public static CallSite typeSwitch(MethodHandles.Lookup lookup, labels = labels.clone(); Stream.of(labels).forEach(SwitchBootstraps::verifyLabel); - MethodHandle target = createMethodHandleSwitch(lookup, labels); + MethodHandle target = generateInnerClass(lookup, labels); + + target = withIndexCheck(target, labels.length); return new ConstantCallSite(target); } @@ -173,79 +177,6 @@ private static void verifyLabel(Object label) { } } - /* - * Construct test chains for labels inside switch, to handle switch repeats: - * switch (idx) { - * case 0 -> if (selector matches label[0]) return 0; else if (selector matches label[1]) return 1; else ... - * case 1 -> if (selector matches label[1]) return 1; else ... - * ... - * } - */ - private static MethodHandle createRepeatIndexSwitch(MethodHandles.Lookup lookup, Object[] labels) { - MethodHandle def = MethodHandles.dropArguments(MethodHandles.constant(int.class, labels.length), 0, Object.class); - MethodHandle[] testChains = new MethodHandle[labels.length]; - List labelsList = List.of(labels).reversed(); - - for (int i = 0; i < labels.length; i++) { - MethodHandle test = def; - int idx = labels.length - 1; - List currentLabels = labelsList.subList(0, labels.length - i); - - for (int j = 0; j < currentLabels.size(); j++, idx--) { - Object currentLabel = currentLabels.get(j); - if (j + 1 < currentLabels.size() && currentLabels.get(j + 1) == currentLabel) continue; - MethodHandle currentTest; - if (currentLabel instanceof Class) { - currentTest = INSTANCEOF_CHECK; - } else if (currentLabel instanceof Integer) { - currentTest = INTEGER_EQ_CHECK; - } else if (currentLabel instanceof EnumDesc) { - currentTest = MethodHandles.insertArguments(ENUM_EQ_CHECK, 2, lookup, new ResolvedEnumLabel()); - } else { - currentTest = OBJECT_EQ_CHECK; - } - test = MethodHandles.guardWithTest(MethodHandles.insertArguments(currentTest, 1, currentLabel), - MethodHandles.dropArguments(MethodHandles.constant(int.class, idx), 0, Object.class), - test); - } - testChains[i] = MethodHandles.dropArguments(test, 0, int.class); - } - - return MethodHandles.tableSwitch(MethodHandles.dropArguments(def, 0, int.class), testChains); - } - - /* - * Construct code that maps the given selector and repeat index to a case label number: - * if (selector == null) return -1; - * else return "createRepeatIndexSwitch(labels)" - */ - private static MethodHandle createMethodHandleSwitch(MethodHandles.Lookup lookup, Object[] labels) { - MethodHandle mainTest; - MethodHandle def = MethodHandles.dropArguments(MethodHandles.constant(int.class, labels.length), 0, Object.class); - if (labels.length > 0) { - mainTest = createRepeatIndexSwitch(lookup, labels); - } else { - mainTest = MethodHandles.dropArguments(def, 0, int.class); - } - MethodHandle body = - MethodHandles.guardWithTest(MethodHandles.dropArguments(NULL_CHECK, 0, int.class), - MethodHandles.dropArguments(MethodHandles.constant(int.class, -1), 0, int.class, Object.class), - mainTest); - MethodHandle switchImpl = - MethodHandles.permuteArguments(body, MethodType.methodType(int.class, Object.class, int.class), 1, 0); - return withIndexCheck(switchImpl, labels.length); - } - - private static boolean integerEqCheck(Object value, Integer constant) { - if (value instanceof Number input && constant.intValue() == input.intValue()) { - return true; - } else if (value instanceof Character input && constant.intValue() == input.charValue()) { - return true; - } - - return false; - } - private static boolean isZero(int value) { return value == 0; } @@ -330,16 +261,16 @@ public static CallSite enumSwitch(MethodHandles.Lookup lookup, //If all labels are enum constants, construct an optimized handle for repeat index 0: //if (selector == null) return -1 //else if (idx == 0) return mappingArray[selector.ordinal()]; //mapping array created lazily - //else return "createRepeatIndexSwitch(labels)" + //else return "typeSwitch(labels)" MethodHandle body = MethodHandles.guardWithTest(MethodHandles.dropArguments(NULL_CHECK, 0, int.class), MethodHandles.dropArguments(MethodHandles.constant(int.class, -1), 0, int.class, Object.class), MethodHandles.guardWithTest(MethodHandles.dropArguments(IS_ZERO, 1, Object.class), - createRepeatIndexSwitch(lookup, labels), + generateInnerClass(lookup, labels), MethodHandles.insertArguments(MAPPED_ENUM_LOOKUP, 1, lookup, enumClass, labels, new EnumMap()))); target = MethodHandles.permuteArguments(body, MethodType.methodType(int.class, Object.class, int.class), 1, 0); } else { - target = createMethodHandleSwitch(lookup, labels); + target = generateInnerClass(lookup, labels); } target = target.asType(invocationType); @@ -360,7 +291,7 @@ private static > Object convertEnumConstants(MethodHandles.Loo } return label; } else if (labelClass == String.class) { - return EnumDesc.of(enumClassTemplate.describeConstable().get(), (String) label); + return EnumDesc.of(enumClassTemplate.describeConstable().orElseThrow(), (String) label); } else { throw new IllegalArgumentException("label with illegal type found: " + labelClass + ", expected label of type either String or Class"); @@ -389,45 +320,225 @@ private static > int mappedEnumLookup(T value, MethodHandles.L return enumMap.map[value.ordinal()]; } - private static boolean enumEqCheck(Object value, EnumDesc label, MethodHandles.Lookup lookup, ResolvedEnumLabel resolvedEnum) { - if (resolvedEnum.resolvedEnum == null) { - Object resolved; - - try { - if (!(value instanceof Enum enumValue)) { - return false; - } + private static MethodHandle withIndexCheck(MethodHandle target, int labelsCount) { + MethodHandle checkIndex = MethodHandles.insertArguments(CHECK_INDEX, 1, labelsCount + 1); - Class clazz = label.constantType().resolveConstantDesc(lookup); + return MethodHandles.filterArguments(target, 1, checkIndex); + } - if (enumValue.getDeclaringClass() != clazz) { - return false; - } + private static final class ResolvedEnumLabels implements BiPredicate { - resolved = label.resolveConstantDesc(lookup); - } catch (IllegalArgumentException | ReflectiveOperationException ex) { - resolved = SENTINEL; - } + private final MethodHandles.Lookup lookup; + private final EnumDesc[] enumDescs; + @Stable + private Object[] resolvedEnum; - resolvedEnum.resolvedEnum = resolved; + public ResolvedEnumLabels(MethodHandles.Lookup lookup, EnumDesc[] enumDescs) { + this.lookup = lookup; + this.enumDescs = enumDescs; + this.resolvedEnum = new Object[enumDescs.length]; } - return value == resolvedEnum.resolvedEnum; - } + @Override + public boolean test(Integer labelIndex, Object value) { + Object result = resolvedEnum[labelIndex]; - private static MethodHandle withIndexCheck(MethodHandle target, int labelsCount) { - MethodHandle checkIndex = MethodHandles.insertArguments(CHECK_INDEX, 1, labelsCount + 1); + if (result == null) { + try { + if (!(value instanceof Enum enumValue)) { + return false; + } - return MethodHandles.filterArguments(target, 1, checkIndex); - } + EnumDesc label = enumDescs[labelIndex]; + Class clazz = label.constantType().resolveConstantDesc(lookup); - private static final class ResolvedEnumLabel { - @Stable - public Object resolvedEnum; + if (enumValue.getDeclaringClass() != clazz) { + return false; + } + + result = label.resolveConstantDesc(lookup); + } catch (IllegalArgumentException | ReflectiveOperationException ex) { + result = SENTINEL; + } + + resolvedEnum[labelIndex] = result; + } + + return result == value; + } } private static final class EnumMap { @Stable public int[] map; } + + /* + * Construct test chains for labels inside switch, to handle switch repeats: + * switch (idx) { + * case 0 -> if (selector matches label[0]) return 0; + * case 1 -> if (selector matches label[1]) return 1; + * ... + * } + */ + @SuppressWarnings("removal") + private static MethodHandle generateInnerClass(MethodHandles.Lookup caller, Object[] labels) { + List> enumDescs = new ArrayList<>(); + List> extraClassLabels = new ArrayList<>(); + + byte[] classBytes = Classfile.of().build(ClassDesc.of(typeSwitchClassName(caller.lookupClass())), clb -> { + clb.withFlags(AccessFlag.FINAL, AccessFlag.SUPER, AccessFlag.SYNTHETIC) + .withMethodBody("typeSwitch", + TYPES_SWITCH_DESCRIPTOR, + Classfile.ACC_FINAL | Classfile.ACC_PUBLIC | Classfile.ACC_STATIC, + cb -> { + cb.aload(0); + Label nonNullLabel = cb.newLabel(); + cb.if_nonnull(nonNullLabel); + cb.iconst_m1(); + cb.ireturn(); + cb.labelBinding(nonNullLabel); + if (labels.length == 0) { + cb.constantInstruction(0) + .ireturn(); + return ; + } + cb.iload(1); + Label dflt = cb.newLabel(); + record Element(Label target, Label next, Object caseLabel) {} + List cases = new ArrayList<>(); + List switchCases = new ArrayList<>(); + Object lastLabel = null; + for (int idx = labels.length - 1; idx >= 0; idx--) { + Object currentLabel = labels[idx]; + Label target = cb.newLabel(); + Label next; + if (lastLabel == null) { + next = dflt; + } else if (lastLabel.equals(currentLabel)) { + next = cases.getLast().next(); + } else { + next = cases.getLast().target(); + } + lastLabel = currentLabel; + cases.add(new Element(target, next, currentLabel)); + switchCases.add(SwitchCase.of(idx, target)); + } + cases = cases.reversed(); + switchCases = switchCases.reversed(); + cb.tableswitch(0, labels.length - 1, dflt, switchCases); + for (int idx = 0; idx < cases.size(); idx++) { + Element element = cases.get(idx); + Label next = element.next(); + cb.labelBinding(element.target()); + if (element.caseLabel() instanceof Class classLabel) { + Optional classLabelConstableOpt = classLabel.describeConstable(); + if (classLabelConstableOpt.isPresent()) { + cb.aload(0); + cb.instanceof_(classLabelConstableOpt.orElseThrow()); + cb.ifeq(next); + } else { + cb.aload(3); + cb.constantInstruction(extraClassLabels.size()); + cb.invokeinterface(ConstantDescs.CD_List, + "get", + MethodTypeDesc.of(ConstantDescs.CD_Object, + ConstantDescs.CD_int)); + cb.checkcast(ConstantDescs.CD_Class); + cb.aload(0); + cb.invokevirtual(ConstantDescs.CD_Class, + "isInstance", + MethodTypeDesc.of(ConstantDescs.CD_boolean, + ConstantDescs.CD_Object)); + cb.ifeq(next); + extraClassLabels.add(classLabel); + } + } else if (element.caseLabel() instanceof EnumDesc enumLabel) { + int enumIdx = enumDescs.size(); + enumDescs.add(enumLabel); + cb.aload(2); + cb.constantInstruction(enumIdx); + cb.invokestatic(ConstantDescs.CD_Integer, + "valueOf", + MethodTypeDesc.of(ConstantDescs.CD_Integer, + ConstantDescs.CD_int)); + cb.aload(0); + cb.invokeinterface(BiPredicate.class.describeConstable().orElseThrow(), + "test", + MethodTypeDesc.of(ConstantDescs.CD_boolean, + ConstantDescs.CD_Object, + ConstantDescs.CD_Object)); + cb.ifeq(next); + } else if (element.caseLabel() instanceof String stringLabel) { + cb.ldc(stringLabel); + cb.aload(0); + cb.invokevirtual(ConstantDescs.CD_Object, + "equals", + MethodTypeDesc.of(ConstantDescs.CD_boolean, + ConstantDescs.CD_Object)); + cb.ifeq(next); + } else if (element.caseLabel() instanceof Integer integerLabel) { + Label compare = cb.newLabel(); + Label notNumber = cb.newLabel(); + cb.aload(0); + cb.instanceof_(ConstantDescs.CD_Number); + cb.ifeq(notNumber); + cb.aload(0); + cb.checkcast(ConstantDescs.CD_Number); + cb.invokevirtual(ConstantDescs.CD_Number, + "intValue", + MethodTypeDesc.of(ConstantDescs.CD_int)); + cb.goto_(compare); + cb.labelBinding(notNumber); + cb.aload(0); + cb.instanceof_(ConstantDescs.CD_Character); + cb.ifeq(next); + cb.aload(0); + cb.checkcast(ConstantDescs.CD_Character); + cb.invokevirtual(ConstantDescs.CD_Character, + "charValue", + MethodTypeDesc.of(ConstantDescs.CD_char)); + cb.labelBinding(compare); + cb.ldc(integerLabel); + cb.if_icmpne(next); + } else { + throw new InternalError("Unsupported label type: " + + element.caseLabel().getClass()); + } + cb.constantInstruction(idx); + cb.ireturn(); + } + cb.labelBinding(dflt); + cb.constantInstruction(cases.size()); + cb.ireturn(); + }); + }); + + try { + // this class is linked at the indy callsite; so define a hidden nestmate + MethodHandles.Lookup lookup; + lookup = caller.defineHiddenClass(classBytes, true, NESTMATE, STRONG); + MethodHandle typeSwitch = lookup.findStatic(lookup.lookupClass(), + "typeSwitch", + MethodType.methodType(int.class, + Object.class, + int.class, + BiPredicate.class, + List.class)); + return MethodHandles.insertArguments(typeSwitch, 2, new ResolvedEnumLabels(caller, enumDescs.toArray(EnumDesc[]::new)), + List.copyOf(extraClassLabels)); + } catch (Throwable t) { + throw new IllegalArgumentException(t); + } + } + + //based on src/java.base/share/classes/java/lang/invoke/InnerClassLambdaMetafactory.java: + private static String typeSwitchClassName(Class targetClass) { + String name = targetClass.getName(); + if (targetClass.isHidden()) { + // use the original class name + name = name.replace('/', '_'); + } + return name + "$$TypeSwitch"; + } } diff --git a/test/jdk/java/lang/runtime/SwitchBootstrapsTest.java b/test/jdk/java/lang/runtime/SwitchBootstrapsTest.java index 1489a6d55b78d..8e31f35bef55e 100644 --- a/test/jdk/java/lang/runtime/SwitchBootstrapsTest.java +++ b/test/jdk/java/lang/runtime/SwitchBootstrapsTest.java @@ -24,12 +24,16 @@ import java.io.Serializable; import java.lang.Enum.EnumDesc; import java.lang.constant.ClassDesc; +import java.lang.constant.ConstantDescs; +import java.lang.constant.MethodTypeDesc; import java.lang.invoke.CallSite; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import java.lang.invoke.MethodType; +import java.lang.reflect.AccessFlag; import java.lang.runtime.SwitchBootstraps; import java.util.concurrent.atomic.AtomicBoolean; +import jdk.internal.classfile.Classfile; import org.testng.annotations.Test; @@ -42,6 +46,7 @@ * @test * @bug 8318144 * @enablePreview + * @modules java.base/jdk.internal.classfile * @compile SwitchBootstrapsTest.java * @run testng/othervm SwitchBootstrapsTest */ @@ -113,9 +118,12 @@ public void testTypes() throws Throwable { } catch (IllegalArgumentException ex) { //OK } - testType("", 0, 0, String.class, String.class, String.class); - testType("", 1, 1, String.class, String.class, String.class); - testType("", 2, 2, String.class, String.class, String.class); + testType("", 0, 0, String.class, String.class, String.class, String.class, String.class); + testType("", 1, 1, String.class, String.class, String.class, String.class, String.class); + testType("", 2, 2, String.class, String.class, String.class, String.class, String.class); + testType("", 3, 3, String.class, String.class, String.class, String.class, String.class); + testType("", 3, 3, String.class, String.class, String.class, String.class, String.class); + testType("", 4, 4, String.class, String.class, String.class, String.class, String.class); testType("", 0, 0); } @@ -346,4 +354,32 @@ public void testIncorrectTypeStartIndex() throws Throwable { } } + public void testHiddenClassAsCaseLabel() throws Throwable { + MethodHandles.Lookup lookup = MethodHandles.lookup(); + byte[] classBytes = createClass(); + Class classA = lookup.defineHiddenClass(classBytes, false).lookupClass(); + Class classB = lookup.defineHiddenClass(classBytes, false).lookupClass(); + Object[] labels = new Object[] { + classA, + classB, + }; + testType(classA.getConstructor().newInstance(), 0, 0, labels); + testType(classB.getConstructor().newInstance(), 0, 1, labels); + } + + private static byte[] createClass() { + return Classfile.of().build(ClassDesc.of("C"), clb -> { + clb.withFlags(AccessFlag.SYNTHETIC) + .withMethodBody("", + MethodTypeDesc.of(ConstantDescs.CD_void), + Classfile.ACC_PUBLIC, + cb -> { + cb.aload(0); + cb.invokespecial(ConstantDescs.CD_Object, + "", + MethodTypeDesc.of(ConstantDescs.CD_void)); + cb.return_(); + }); + }); + } } From 4d50df63b6ea76fd6a6c387593c3d6bc9429007b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Jeli=C5=84ski?= Date: Fri, 24 Nov 2023 14:55:57 +0000 Subject: [PATCH 055/250] 8320691: Timeout handler on Windows takes 2 hours to complete Reviewed-by: stuefe, jpai, ihse, alanb --- test/failure_handler/src/share/conf/windows.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/failure_handler/src/share/conf/windows.properties b/test/failure_handler/src/share/conf/windows.properties index a51e40bcd0df7..e22c1a523d8a3 100644 --- a/test/failure_handler/src/share/conf/windows.properties +++ b/test/failure_handler/src/share/conf/windows.properties @@ -57,8 +57,8 @@ native.stack.args=-c "~*kP n;qd" -p %p native.stack.params.repeat=6 native.core.app=cdb -native.core.args=-c ".dump /f core.%p;qd" -p %p -native.core.params.timeout=3600000 +native.core.args=-c ".dump /mA core.%p;qd" -p %p +native.core.params.timeout=600000 ################################################################################ # environment info to gather ################################################################################ From 6aa197667ad05bd93adf3afc7b06adbfb2b18a22 Mon Sep 17 00:00:00 2001 From: Martin Doerr Date: Fri, 24 Nov 2023 22:44:25 +0000 Subject: [PATCH 056/250] 8320363: ppc64 TypeEntries::type_unknown logic looks wrong, missed optimization opportunity Reviewed-by: lucy, rrich --- src/hotspot/cpu/ppc/c1_LIRAssembler_ppc.cpp | 2 +- src/hotspot/cpu/ppc/interp_masm_ppc_64.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hotspot/cpu/ppc/c1_LIRAssembler_ppc.cpp b/src/hotspot/cpu/ppc/c1_LIRAssembler_ppc.cpp index 4973ec510d578..738511c6f5099 100644 --- a/src/hotspot/cpu/ppc/c1_LIRAssembler_ppc.cpp +++ b/src/hotspot/cpu/ppc/c1_LIRAssembler_ppc.cpp @@ -3106,7 +3106,7 @@ void LIR_Assembler::emit_profile_type(LIR_OpProfileType* op) { // Klass seen before, nothing to do (regardless of unknown bit). //beq(CCR1, do_nothing); - __ andi_(R0, klass, TypeEntries::type_unknown); + __ andi_(R0, tmp, TypeEntries::type_unknown); // Already unknown. Nothing to do anymore. //bne(CCR0, do_nothing); __ crorc(CCR0, Assembler::equal, CCR1, Assembler::equal); // cr0 eq = cr1 eq or cr0 ne diff --git a/src/hotspot/cpu/ppc/interp_masm_ppc_64.cpp b/src/hotspot/cpu/ppc/interp_masm_ppc_64.cpp index 8265d06a5e357..54a31a16c8aa1 100644 --- a/src/hotspot/cpu/ppc/interp_masm_ppc_64.cpp +++ b/src/hotspot/cpu/ppc/interp_masm_ppc_64.cpp @@ -1774,7 +1774,7 @@ void InterpreterMacroAssembler::profile_obj_type(Register obj, Register mdo_addr // Klass seen before, nothing to do (regardless of unknown bit). //beq(CCR1, do_nothing); - andi_(R0, klass, TypeEntries::type_unknown); + andi_(R0, tmp, TypeEntries::type_unknown); // Already unknown. Nothing to do anymore. //bne(CCR0, do_nothing); crorc(CCR0, Assembler::equal, CCR1, Assembler::equal); // cr0 eq = cr1 eq or cr0 ne From 91279fcf058a6bb16a7749c328179ab94227bb8d Mon Sep 17 00:00:00 2001 From: Axel Boldt-Christmas Date: Mon, 27 Nov 2023 07:22:32 +0000 Subject: [PATCH 057/250] 8319778: Remove unreachable code in ObjectSynchronizer::exit Reviewed-by: rkennke, dholmes, pchilanomate, dcubed --- src/hotspot/share/runtime/lockStack.hpp | 3 --- src/hotspot/share/runtime/lockStack.inline.hpp | 13 ------------- src/hotspot/share/runtime/synchronizer.cpp | 8 +------- 3 files changed, 1 insertion(+), 23 deletions(-) diff --git a/src/hotspot/share/runtime/lockStack.hpp b/src/hotspot/share/runtime/lockStack.hpp index b8e2e4136e3d3..d5216793aea10 100644 --- a/src/hotspot/share/runtime/lockStack.hpp +++ b/src/hotspot/share/runtime/lockStack.hpp @@ -81,9 +81,6 @@ class LockStack { // Pushes an oop on this lock-stack. inline void push(oop o); - // Pops an oop from this lock-stack. - inline oop pop(); - // Removes an oop from an arbitrary location of this lock-stack. inline void remove(oop o); diff --git a/src/hotspot/share/runtime/lockStack.inline.hpp b/src/hotspot/share/runtime/lockStack.inline.hpp index b36be2f72de0e..be63c51d8e5e1 100644 --- a/src/hotspot/share/runtime/lockStack.inline.hpp +++ b/src/hotspot/share/runtime/lockStack.inline.hpp @@ -68,19 +68,6 @@ inline void LockStack::push(oop o) { verify("post-push"); } -inline oop LockStack::pop() { - verify("pre-pop"); - assert(to_index(_top) > 0, "underflow, probably unbalanced push/pop"); - _top -= oopSize; - oop o = _base[to_index(_top)]; -#ifdef ASSERT - _base[to_index(_top)] = nullptr; -#endif - assert(!contains(o), "entries must be unique: " PTR_FORMAT, p2i(o)); - verify("post-pop"); - return o; -} - inline void LockStack::remove(oop o) { verify("pre-remove"); assert(contains(o), "entry must be present: " PTR_FORMAT, p2i(o)); diff --git a/src/hotspot/share/runtime/synchronizer.cpp b/src/hotspot/share/runtime/synchronizer.cpp index 42edb6fe9aec4..28bfbb6d71c71 100644 --- a/src/hotspot/share/runtime/synchronizer.cpp +++ b/src/hotspot/share/runtime/synchronizer.cpp @@ -599,13 +599,7 @@ void ObjectSynchronizer::exit(oop object, BasicLock* lock, JavaThread* current) // The ObjectMonitor* can't be async deflated until ownership is // dropped inside exit() and the ObjectMonitor* must be !is_busy(). ObjectMonitor* monitor = inflate(current, object, inflate_cause_vm_internal); - if (LockingMode == LM_LIGHTWEIGHT && monitor->is_owner_anonymous()) { - // It must be owned by us. Pop lock object from lock stack. - LockStack& lock_stack = current->lock_stack(); - oop popped = lock_stack.pop(); - assert(popped == object, "must be owned by this thread"); - monitor->set_owner_from_anonymous(current); - } + assert(!monitor->is_owner_anonymous(), "must not be"); monitor->exit(current); } From bddcd086b7c76d915aaa76427c2ae4088ad4239f Mon Sep 17 00:00:00 2001 From: Conor Cleary Date: Mon, 27 Nov 2023 08:09:10 +0000 Subject: [PATCH 058/250] 8304701: Request with timeout aborts later in-flight request on HTTP/1.1 cxn Reviewed-by: dfuchs, michaelm --- .../jdk/internal/net/http/MultiExchange.java | 4 +- .../net/httpclient/RedirectTimeoutTest.java | 176 ++++++++++++++++++ 2 files changed, 179 insertions(+), 1 deletion(-) create mode 100644 test/jdk/java/net/httpclient/RedirectTimeoutTest.java diff --git a/src/java.net.http/share/classes/jdk/internal/net/http/MultiExchange.java b/src/java.net.http/share/classes/jdk/internal/net/http/MultiExchange.java index 91526938bff0a..d6d03a9aa8af9 100644 --- a/src/java.net.http/share/classes/jdk/internal/net/http/MultiExchange.java +++ b/src/java.net.http/share/classes/jdk/internal/net/http/MultiExchange.java @@ -101,7 +101,7 @@ class MultiExchange implements Cancelable { ); private final List filters; - ResponseTimerEvent responseTimerEvent; + volatile ResponseTimerEvent responseTimerEvent; volatile boolean cancelled; AtomicReference interrupted = new AtomicReference<>(); final PushGroup pushGroup; @@ -231,6 +231,7 @@ public Optional remainingConnectTimeout() { private void cancelTimer() { if (responseTimerEvent != null) { client.cancelTimer(responseTimerEvent); + responseTimerEvent = null; } } @@ -457,6 +458,7 @@ private CompletableFuture responseAsyncImpl() { } return completedFuture(response); } else { + cancelTimer(); this.response = new HttpResponseImpl<>(currentreq, response, this.response, null, exch); Exchange oldExch = exch; diff --git a/test/jdk/java/net/httpclient/RedirectTimeoutTest.java b/test/jdk/java/net/httpclient/RedirectTimeoutTest.java new file mode 100644 index 0000000000000..e907bcd8228a0 --- /dev/null +++ b/test/jdk/java/net/httpclient/RedirectTimeoutTest.java @@ -0,0 +1,176 @@ +/* + * Copyright (c) 2023, 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. + */ + +/* + * @test + * @bug 8304701 + * @summary Verifies that for a redirected request, the given HttpClient + * will clear and start a new response timer instead of throwing + * an HttpTimeoutException during the redirected request. + * @library /test/lib /test/jdk/java/net/httpclient/lib + * @build jdk.test.lib.net.SimpleSSLContext + * @run testng/othervm -Djdk.httpclient.HttpClient.log=errors,trace -Djdk.internal.httpclient.debug=false RedirectTimeoutTest + */ + +import jdk.httpclient.test.lib.common.HttpServerAdapters.HttpTestExchange; +import jdk.httpclient.test.lib.common.HttpServerAdapters.HttpTestHandler; +import jdk.httpclient.test.lib.common.HttpServerAdapters.HttpTestResponseHeaders; +import jdk.httpclient.test.lib.common.HttpServerAdapters.HttpTestServer; +import org.testng.TestException; +import org.testng.annotations.AfterTest; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; + +import java.io.IOException; +import java.io.OutputStream; +import java.io.PrintStream; +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpClient.Version; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.net.http.HttpTimeoutException; +import java.nio.charset.StandardCharsets; +import java.time.Duration; +import java.time.Instant; + +import static java.net.http.HttpClient.Redirect.ALWAYS; +import static java.net.http.HttpClient.Version.HTTP_1_1; +import static java.net.http.HttpClient.Version.HTTP_2; +import static jdk.test.lib.Utils.adjustTimeout; + +public class RedirectTimeoutTest { + + static HttpTestServer h1TestServer, h2TestServer; + static URI h1Uri, h1RedirectUri, h2Uri, h2RedirectUri, h2WarmupUri, testRedirectURI; + private static final long TIMEOUT_MILLIS = 3000L; // 3s + private static final long SLEEP_TIME = 1500L; // 1.5s + public static final int ITERATIONS = 4; + private static final PrintStream out = System.out; + + @BeforeTest + public void setup() throws IOException { + h1TestServer = HttpTestServer.create(HTTP_1_1); + h2TestServer = HttpTestServer.create(HTTP_2); + h1Uri = URI.create("http://" + h1TestServer.serverAuthority() + "/h1_test"); + h1RedirectUri = URI.create("http://" + h1TestServer.serverAuthority() + "/h1_redirect"); + h2Uri = URI.create("http://" + h2TestServer.serverAuthority() + "/h2_test"); + h2RedirectUri = URI.create("http://" + h2TestServer.serverAuthority() + "/h2_redirect"); + h2WarmupUri = URI.create("http://" + h2TestServer.serverAuthority() + "/h2_warmup"); + h1TestServer.addHandler(new GetHandler(), "/h1_test"); + h1TestServer.addHandler(new RedirectHandler(), "/h1_redirect"); + h2TestServer.addHandler(new GetHandler(), "/h2_test"); + h2TestServer.addHandler(new RedirectHandler(), "/h2_redirect"); + h2TestServer.addHandler(new Http2Warmup(), "/h2_warmup"); + h1TestServer.start(); + h2TestServer.start(); + } + + @AfterTest + public void teardown() { + h1TestServer.stop(); + h2TestServer.stop(); + } + + @DataProvider(name = "testData") + public Object[][] testData() { + return new Object[][] { + { HTTP_1_1, h1Uri, h1RedirectUri }, + { HTTP_2, h2Uri, h2RedirectUri } + }; + } + + @Test(dataProvider = "testData") + public void test(Version version, URI uri, URI redirectURI) throws InterruptedException { + out.println("Testing for " + version); + testRedirectURI = redirectURI; + HttpClient.Builder clientBuilder = HttpClient.newBuilder().followRedirects(ALWAYS); + HttpRequest request = HttpRequest.newBuilder().uri(uri) + .GET() + .version(version) + .timeout(Duration.ofMillis(adjustTimeout(TIMEOUT_MILLIS))) + .build(); + + try (HttpClient client = clientBuilder.build()) { + if (version.equals(HTTP_2)) + client.send(HttpRequest.newBuilder(h2WarmupUri).HEAD().build(), HttpResponse.BodyHandlers.discarding()); + /* + With TIMEOUT_MILLIS set to 1500ms and the server's RedirectHandler sleeping for 750ms before responding + to each request, 4 iterations will take a guaranteed minimum time of 3000ms which will ensure that any + uncancelled/uncleared timers will fire within the test window. + */ + for (int i = 0; i < ITERATIONS; i++) { + out.println(Instant.now() + ": Client: Sending request #" + (i + 1)); + client.send(request, HttpResponse.BodyHandlers.ofString()); + out.println("Request complete"); + } + } catch (IOException e) { + if (e.getClass() == HttpTimeoutException.class) { + e.printStackTrace(System.out); + throw new TestException("Timeout from original HttpRequest expired on redirect when it should have been cancelled."); + } else { + throw new RuntimeException(e); + } + } + } + + public static class Http2Warmup implements HttpTestHandler { + + @Override + public void handle(HttpTestExchange t) throws IOException { + t.sendResponseHeaders(200, 0); + } + } + + public static class GetHandler implements HttpTestHandler { + + @Override + public void handle(HttpTestExchange exchange) throws IOException { + out.println(Instant.now() + ": Server: Get Handler Called"); + HttpTestResponseHeaders responseHeaders = exchange.getResponseHeaders(); + responseHeaders.addHeader("Location", testRedirectURI.toString()); + exchange.sendResponseHeaders(302, 0); + } + } + + public static class RedirectHandler implements HttpTestHandler { + + @Override + public void handle(HttpTestExchange exchange) throws IOException { + out.println(Instant.now() + ": Server: Redirect Handler Called"); + byte[] data = "Test".getBytes(StandardCharsets.UTF_8); + try { + Thread.sleep(adjustTimeout(SLEEP_TIME)); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + exchange.sendResponseHeaders(200, data.length); + try (OutputStream os = exchange.getResponseBody()) { + os.write(data); + } + } + } +} \ No newline at end of file From f6e5559ae9d1c8b84b31af5d36e93b43e7731ba5 Mon Sep 17 00:00:00 2001 From: Christoph Langer Date: Mon, 27 Nov 2023 08:21:59 +0000 Subject: [PATCH 059/250] 8320601: ProblemList java/lang/invoke/lambda/LambdaFileEncodingSerialization.java on linux-all Reviewed-by: mbaesken --- test/jdk/ProblemList.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/jdk/ProblemList.txt b/test/jdk/ProblemList.txt index da3bbccd6d668..598b00724e33b 100644 --- a/test/jdk/ProblemList.txt +++ b/test/jdk/ProblemList.txt @@ -487,7 +487,7 @@ java/beans/XMLEncoder/Test6570354.java 8015593 macosx-all java/lang/ProcessHandle/InfoTest.java 8211847 aix-ppc64 java/lang/invoke/LFCaching/LFMultiThreadCachingTest.java 8151492 generic-all java/lang/invoke/LFCaching/LFGarbageCollectedTest.java 8078602 generic-all -java/lang/invoke/lambda/LambdaFileEncodingSerialization.java 8249079 linux-x64 +java/lang/invoke/lambda/LambdaFileEncodingSerialization.java 8249079 linux-all java/lang/invoke/RicochetTest.java 8251969 generic-all ############################################################################ From 28d3762bd30a31623f2ed97a1870313d3a2b9acb Mon Sep 17 00:00:00 2001 From: Adam Sotona Date: Mon, 27 Nov 2023 08:25:31 +0000 Subject: [PATCH 060/250] 8320618: NPE: Cannot invoke "java.lang.constant.ClassDesc.isArray()" because "this.sym" is null Reviewed-by: alanb --- .../classfile/impl/StackMapGenerator.java | 2 +- test/jdk/jdk/classfile/StackMapsTest.java | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/java.base/share/classes/jdk/internal/classfile/impl/StackMapGenerator.java b/src/java.base/share/classes/jdk/internal/classfile/impl/StackMapGenerator.java index 27e68b9ecf9b4..3ae4b25923255 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/impl/StackMapGenerator.java +++ b/src/java.base/share/classes/jdk/internal/classfile/impl/StackMapGenerator.java @@ -1394,7 +1394,7 @@ Type toArray() { } Type getComponent() { - if (sym.isArray()) { + if (isArray()) { var comp = sym.componentType(); if (comp.isPrimitive()) { return switch (comp.descriptorString().charAt(0)) { diff --git a/test/jdk/jdk/classfile/StackMapsTest.java b/test/jdk/jdk/classfile/StackMapsTest.java index 50b85db5323c5..3950540500144 100644 --- a/test/jdk/jdk/classfile/StackMapsTest.java +++ b/test/jdk/jdk/classfile/StackMapsTest.java @@ -24,7 +24,7 @@ /* * @test * @summary Testing Classfile stack maps generator. - * @bug 8305990 8320222 + * @bug 8305990 8320222 8320618 * @build testdata.* * @run junit StackMapsTest */ @@ -43,7 +43,6 @@ import java.lang.constant.ClassDesc; import java.lang.constant.ConstantDescs; import java.lang.constant.MethodTypeDesc; -import java.util.List; import java.lang.reflect.AccessFlag; /** @@ -237,6 +236,18 @@ void testClassVersions() throws Exception { .verify(null)); } + @Test + void testInvalidAALOADStack() { + Classfile.of().build(ClassDesc.of("Test"), clb + -> clb.withMethodBody("test", ConstantDescs.MTD_void, 0, cob + -> cob.bipush(10) + .anewarray(ConstantDescs.CD_Object) + .lconst_1() //long on stack caused NPE, see 8320618 + .aaload() + .astore(2) + .return_())); + } + private static final FileSystem JRT = FileSystems.getFileSystem(URI.create("jrt:/")); private static void testTransformedStackMaps(String classPath, Classfile.Option... options) throws Exception { From 12723688ca49d379d43fd0fd0e55a28afe299687 Mon Sep 17 00:00:00 2001 From: Prasanta Sadhukhan Date: Mon, 27 Nov 2023 09:01:22 +0000 Subject: [PATCH 061/250] 8318113: CSS.BackgroundImage doesn't implement equals Reviewed-by: aivanov, tr, prr --- .../share/classes/javax/swing/text/html/CSS.java | 11 +++++++++++ .../swing/text/html/CSS/CSSAttributeEqualityBug.java | 7 ++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/java.desktop/share/classes/javax/swing/text/html/CSS.java b/src/java.desktop/share/classes/javax/swing/text/html/CSS.java index bb60b38265465..15247608e1b4b 100644 --- a/src/java.desktop/share/classes/javax/swing/text/html/CSS.java +++ b/src/java.desktop/share/classes/javax/swing/text/html/CSS.java @@ -2965,6 +2965,17 @@ ImageIcon getImage(URL base) { } return image; } + + @Override + public int hashCode() { + return Objects.hashCode(svalue); + } + + @Override + public boolean equals(Object val) { + return val instanceof CSS.BackgroundImage img + && Objects.equals(svalue, img.svalue); + } } /** diff --git a/test/jdk/javax/swing/text/html/CSS/CSSAttributeEqualityBug.java b/test/jdk/javax/swing/text/html/CSS/CSSAttributeEqualityBug.java index 304f1e83542a7..aa7a294c57b06 100644 --- a/test/jdk/javax/swing/text/html/CSS/CSSAttributeEqualityBug.java +++ b/test/jdk/javax/swing/text/html/CSS/CSSAttributeEqualityBug.java @@ -31,7 +31,7 @@ /* * @test - * @bug 7083187 + * @bug 7083187 8318113 * @summary Verifies if CSS.CSSValue attribute is same * @run main CSSAttributeEqualityBug */ @@ -72,6 +72,9 @@ public class CSSAttributeEqualityBug { "background-position: 1em 2em", "border-width: medium", + + "background-image: none", + "background-image: url(image.png)", }; /** @@ -86,6 +89,8 @@ public class CSSAttributeEqualityBug { {"margin-top: 42px", "margin-top: 22px"}, {"margin-top: 42px", "margin-top: 42pt"}, {"margin-top: 100%", "margin-top: 50%"}, + + {"background-image: none", "background-image: url(image.png)"}, }; private static final String[][] EQUALS_WITH_SPACE = { From a40d8d97e84d88d1a65aba81bfc09339be95e427 Mon Sep 17 00:00:00 2001 From: Ekaterina Vergizova Date: Mon, 27 Nov 2023 13:38:44 +0000 Subject: [PATCH 062/250] 8314220: Configurable InlineCacheBuffer size Reviewed-by: dlong, kvn --- src/hotspot/share/code/icBuffer.cpp | 2 +- src/hotspot/share/code/stubs.cpp | 2 -- src/hotspot/share/compiler/compilerDefinitions.cpp | 5 +++++ src/hotspot/share/runtime/globals.hpp | 3 +++ 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/hotspot/share/code/icBuffer.cpp b/src/hotspot/share/code/icBuffer.cpp index ba44df15c2e60..dbceefb7c8efc 100644 --- a/src/hotspot/share/code/icBuffer.cpp +++ b/src/hotspot/share/code/icBuffer.cpp @@ -141,7 +141,7 @@ void ICStub::print() { void InlineCacheBuffer::initialize() { if (_buffer != nullptr) return; // already initialized - _buffer = new StubQueue(new ICStubInterface, 10*K, InlineCacheBuffer_lock, "InlineCacheBuffer"); + _buffer = new StubQueue(new ICStubInterface, checked_cast(InlineCacheBufferSize), InlineCacheBuffer_lock, "InlineCacheBuffer"); assert (_buffer != nullptr, "cannot allocate InlineCacheBuffer"); } diff --git a/src/hotspot/share/code/stubs.cpp b/src/hotspot/share/code/stubs.cpp index b5f659a5c5a78..a24b3e6ce019a 100644 --- a/src/hotspot/share/code/stubs.cpp +++ b/src/hotspot/share/code/stubs.cpp @@ -218,8 +218,6 @@ void StubQueue::verify() { guarantee(0 <= _queue_begin && _queue_begin < _buffer_limit, "_queue_begin out of bounds"); guarantee(0 <= _queue_end && _queue_end <= _buffer_limit, "_queue_end out of bounds"); // verify alignment - guarantee(_buffer_size % stub_alignment() == 0, "_buffer_size not aligned"); - guarantee(_buffer_limit % stub_alignment() == 0, "_buffer_limit not aligned"); guarantee(_queue_begin % stub_alignment() == 0, "_queue_begin not aligned"); guarantee(_queue_end % stub_alignment() == 0, "_queue_end not aligned"); // verify buffer limit/size relationship diff --git a/src/hotspot/share/compiler/compilerDefinitions.cpp b/src/hotspot/share/compiler/compilerDefinitions.cpp index 10b0f1f04a35c..0a04afad9aaee 100644 --- a/src/hotspot/share/compiler/compilerDefinitions.cpp +++ b/src/hotspot/share/compiler/compilerDefinitions.cpp @@ -498,6 +498,11 @@ bool CompilerConfig::check_args_consistency(bool status) { "Invalid NonNMethodCodeHeapSize=%dK. Must be at least %uK.\n", NonNMethodCodeHeapSize/K, min_code_cache_size/K); status = false; + } else if (InlineCacheBufferSize > NonNMethodCodeHeapSize / 2) { + jio_fprintf(defaultStream::error_stream(), + "Invalid InlineCacheBufferSize=" SIZE_FORMAT "K. Must be less than or equal to " SIZE_FORMAT "K.\n", + InlineCacheBufferSize/K, NonNMethodCodeHeapSize/2/K); + status = false; } #ifdef _LP64 diff --git a/src/hotspot/share/runtime/globals.hpp b/src/hotspot/share/runtime/globals.hpp index c02b0afed3c3b..e28017a0d4bf9 100644 --- a/src/hotspot/share/runtime/globals.hpp +++ b/src/hotspot/share/runtime/globals.hpp @@ -295,6 +295,9 @@ const int ObjectAlignmentInBytes = 8; product(bool, UseInlineCaches, true, \ "Use Inline Caches for virtual calls ") \ \ + product(size_t, InlineCacheBufferSize, 10*K, EXPERIMENTAL, \ + "InlineCacheBuffer size") \ + \ product(bool, InlineArrayCopy, true, DIAGNOSTIC, \ "Inline arraycopy native that is known to be part of " \ "base library DLL") \ From 4977922a3f48613d18da021c619093ce210749f8 Mon Sep 17 00:00:00 2001 From: Jasmine Karthikeyan Date: Mon, 27 Nov 2023 14:44:08 +0000 Subject: [PATCH 063/250] 8320330: Improve implementation of RShift Value Reviewed-by: thartmann, chagedorn --- src/hotspot/share/opto/mulnode.cpp | 41 ++++++--- .../irTests/RShiftINodeIdealizationTests.java | 92 +++++++++++++++++++ .../irTests/RShiftLNodeIdealizationTests.java | 92 +++++++++++++++++++ 3 files changed, 214 insertions(+), 11 deletions(-) create mode 100644 test/hotspot/jtreg/compiler/c2/irTests/RShiftINodeIdealizationTests.java create mode 100644 test/hotspot/jtreg/compiler/c2/irTests/RShiftLNodeIdealizationTests.java diff --git a/src/hotspot/share/opto/mulnode.cpp b/src/hotspot/share/opto/mulnode.cpp index 6709f8314478f..3b493b5efa277 100644 --- a/src/hotspot/share/opto/mulnode.cpp +++ b/src/hotspot/share/opto/mulnode.cpp @@ -1297,15 +1297,12 @@ const Type* RShiftINode::Value(PhaseGVN* phase) const { if (t1 == Type::BOTTOM || t2 == Type::BOTTOM) return TypeInt::INT; - if (t2 == TypeInt::INT) - return TypeInt::INT; - const TypeInt *r1 = t1->is_int(); // Handy access const TypeInt *r2 = t2->is_int(); // Handy access // If the shift is a constant, just shift the bounds of the type. // For example, if the shift is 31, we just propagate sign bits. - if (r2->is_con()) { + if (!r1->is_con() && r2->is_con()) { uint shift = r2->get_con(); shift &= BitsPerJavaInteger-1; // semantics of Java shifts // Shift by a multiple of 32 does nothing: @@ -1327,11 +1324,22 @@ const Type* RShiftINode::Value(PhaseGVN* phase) const { return ti; } - if( !r1->is_con() || !r2->is_con() ) + if (!r1->is_con() || !r2->is_con()) { + // If the left input is non-negative the result must also be non-negative, regardless of what the right input is. + if (r1->_lo >= 0) { + return TypeInt::make(0, r1->_hi, MAX2(r1->_widen, r2->_widen)); + } + + // Conversely, if the left input is negative then the result must be negative. + if (r1->_hi <= -1) { + return TypeInt::make(r1->_lo, -1, MAX2(r1->_widen, r2->_widen)); + } + return TypeInt::INT; + } // Signed shift right - return TypeInt::make( r1->get_con() >> (r2->get_con()&31) ); + return TypeInt::make(r1->get_con() >> (r2->get_con() & 31)); } //============================================================================= @@ -1359,15 +1367,12 @@ const Type* RShiftLNode::Value(PhaseGVN* phase) const { if (t1 == Type::BOTTOM || t2 == Type::BOTTOM) return TypeLong::LONG; - if (t2 == TypeInt::INT) - return TypeLong::LONG; - const TypeLong *r1 = t1->is_long(); // Handy access const TypeInt *r2 = t2->is_int (); // Handy access // If the shift is a constant, just shift the bounds of the type. // For example, if the shift is 63, we just propagate sign bits. - if (r2->is_con()) { + if (!r1->is_con() && r2->is_con()) { uint shift = r2->get_con(); shift &= (2*BitsPerJavaInteger)-1; // semantics of Java shifts // Shift by a multiple of 64 does nothing: @@ -1389,7 +1394,21 @@ const Type* RShiftLNode::Value(PhaseGVN* phase) const { return tl; } - return TypeLong::LONG; // Give up + if (!r1->is_con() || !r2->is_con()) { + // If the left input is non-negative the result must also be non-negative, regardless of what the right input is. + if (r1->_lo >= 0) { + return TypeLong::make(0, r1->_hi, MAX2(r1->_widen, r2->_widen)); + } + + // Conversely, if the left input is negative then the result must be negative. + if (r1->_hi <= -1) { + return TypeLong::make(r1->_lo, -1, MAX2(r1->_widen, r2->_widen)); + } + + return TypeLong::LONG; + } + + return TypeLong::make(r1->get_con() >> (r2->get_con() & 63)); } //============================================================================= diff --git a/test/hotspot/jtreg/compiler/c2/irTests/RShiftINodeIdealizationTests.java b/test/hotspot/jtreg/compiler/c2/irTests/RShiftINodeIdealizationTests.java new file mode 100644 index 0000000000000..e6501d3728a64 --- /dev/null +++ b/test/hotspot/jtreg/compiler/c2/irTests/RShiftINodeIdealizationTests.java @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2023, 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. + */ +package compiler.c2.irTests; + +import jdk.test.lib.Asserts; +import compiler.lib.ir_framework.*; + +/* + * @test + * @bug 8320330 + * @summary Test that RShiftINode optimizations are being performed as expected. + * @library /test/lib / + * @run driver compiler.c2.irTests.RShiftINodeIdealizationTests + */ +public class RShiftINodeIdealizationTests { + public static void main(String[] args) { + TestFramework.run(); + } + + @Run(test = { "test1", "test2", "test3", "test4" }) + public void runMethod() { + int a = RunInfo.getRandom().nextInt(); + int b = RunInfo.getRandom().nextInt(); + int c = RunInfo.getRandom().nextInt(); + int d = RunInfo.getRandom().nextInt(); + + int min = Integer.MIN_VALUE; + int max = Integer.MAX_VALUE; + + assertResult(a, 0); + assertResult(a, b); + assertResult(b, a); + assertResult(c, d); + assertResult(d, c); + assertResult(min, max); + assertResult(max, min); + assertResult(min, min); + assertResult(max, max); + } + + @DontCompile + public void assertResult(int x, int y) { + Asserts.assertEQ((x >> y) >= 0 ? 0 : 1, test1(x, y)); + Asserts.assertEQ(((x & 127) >> y) >= 0 ? 0 : 1, test2(x, y)); + Asserts.assertEQ(((-(x & 127) - 1) >> y) >= 0 ? 0 : 1, test3(x, y)); + Asserts.assertEQ((x >> 30) > 4 ? 0 : 1, test4(x, y)); + } + + @Test + @IR(counts = { IRNode.RSHIFT, "1" }) + public int test1(int x, int y) { + return (x >> y) >= 0 ? 0 : 1; + } + + @Test + @IR(failOn = { IRNode.RSHIFT }) + public int test2(int x, int y) { + return ((x & 127) >> y) >= 0 ? 0 : 1; + } + + @Test + @IR(failOn = { IRNode.RSHIFT }) + public int test3(int x, int y) { + return ((-(x & 127) - 1) >> y) >= 0 ? 0 : 1; + } + + @Test + @IR(failOn = { IRNode.RSHIFT }) + public int test4(int x, int y) { + return (x >> 30) > 4 ? 0 : 1; + } +} diff --git a/test/hotspot/jtreg/compiler/c2/irTests/RShiftLNodeIdealizationTests.java b/test/hotspot/jtreg/compiler/c2/irTests/RShiftLNodeIdealizationTests.java new file mode 100644 index 0000000000000..0a8d2bde0b185 --- /dev/null +++ b/test/hotspot/jtreg/compiler/c2/irTests/RShiftLNodeIdealizationTests.java @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2023, 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. + */ +package compiler.c2.irTests; + +import jdk.test.lib.Asserts; +import compiler.lib.ir_framework.*; + +/* + * @test + * @bug 8320330 + * @summary Test that RShiftLNode optimizations are being performed as expected. + * @library /test/lib / + * @run driver compiler.c2.irTests.RShiftLNodeIdealizationTests + */ +public class RShiftLNodeIdealizationTests { + public static void main(String[] args) { + TestFramework.run(); + } + + @Run(test = { "test1", "test2", "test3", "test4" }) + public void runMethod() { + long a = RunInfo.getRandom().nextLong(); + long b = RunInfo.getRandom().nextLong(); + long c = RunInfo.getRandom().nextLong(); + long d = RunInfo.getRandom().nextLong(); + + long min = Long.MIN_VALUE; + long max = Long.MAX_VALUE; + + assertResult(a, 0); + assertResult(a, b); + assertResult(b, a); + assertResult(c, d); + assertResult(d, c); + assertResult(min, max); + assertResult(max, min); + assertResult(min, min); + assertResult(max, max); + } + + @DontCompile + public void assertResult(long x, long y) { + Asserts.assertEQ((x >> y) >= 0 ? 0L : 1L, test1(x, y)); + Asserts.assertEQ(((x & 127) >> y) >= 0 ? 0L : 1L, test2(x, y)); + Asserts.assertEQ(((-(x & 127) - 1) >> y) >= 0 ? 0L : 1L, test3(x, y)); + Asserts.assertEQ((x >> 62) > 4 ? 0L : 1L, test4(x, y)); + } + + @Test + @IR(counts = { IRNode.RSHIFT, "1" }) + public long test1(long x, long y) { + return (x >> y) >= 0 ? 0 : 1; + } + + @Test + @IR(failOn = { IRNode.RSHIFT }) + public long test2(long x, long y) { + return ((x & 127) >> y) >= 0 ? 0L : 1L; + } + + @Test + @IR(failOn = { IRNode.RSHIFT }) + public long test3(long x, long y) { + return ((-(x & 127) - 1) >> y) >= 0 ? 0L : 1L; + } + + @Test + @IR(failOn = { IRNode.RSHIFT }) + public long test4(long x, long y) { + return (x >> 62) > 4 ? 0L : 1L; + } +} From a006d7eae02772e9c25dd69a5ac5c7fc612a2f54 Mon Sep 17 00:00:00 2001 From: Magnus Ihse Bursie Date: Mon, 27 Nov 2023 14:52:42 +0000 Subject: [PATCH 064/250] 8294549: configure script should detect unsupported path Co-authored-by: Mike Duigou Reviewed-by: erikj --- configure | 12 ++++++++---- make/autoconf/configure | 8 +++++++- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/configure b/configure index f3b1c536875da..78d30564267df 100644 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2012, 2023, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -26,10 +26,14 @@ # make sure that is called using bash. # Get an absolute path to this script, since that determines the top-level directory. -this_script_dir=`dirname $0` -this_script_dir=`cd $this_script_dir > /dev/null && pwd` +source_path="$(dirname ${0})" +this_script_dir="$(cd -- "${source_path}" > /dev/null && pwd)" +if test -z "${this_script_dir}"; then + echo "Error: Could not determine location of configure script" + exit 1 +fi # Delegate to wrapper, forcing wrapper to believe $0 is this script by using -c. # This trick is needed to get autoconf to co-operate properly. # The ${-:+-$-} construction passes on bash options. -bash ${-:+-$-} -c ". $this_script_dir/make/autoconf/configure" $this_script_dir/configure CHECKME $this_script_dir "$@" +bash ${-:+-$-} -c ". \"${this_script_dir}/make/autoconf/configure\"" "${this_script_dir}/configure" CHECKME "${this_script_dir}" "$@" diff --git a/make/autoconf/configure b/make/autoconf/configure index 4b26e3d706147..6fa0aacfbc907 100644 --- a/make/autoconf/configure +++ b/make/autoconf/configure @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright (c) 2012, 2020, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2012, 2023, 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 @@ -39,6 +39,12 @@ if test "x$BASH" = x; then echo "Error: This script must be run using bash." 1>&2 exit 1 fi + +if [[ "$TOPDIR" =~ .*[[:space:]]+.* ]]; then + echo "Error: Build path containing space character is not supported" 1>&2 + exit 1 +fi + # Force autoconf to use bash. This also means we must disable autoconf re-exec. export CONFIG_SHELL=$BASH export _as_can_reexec=no From f9e9131e126802af95f27abdd667e310033fd1de Mon Sep 17 00:00:00 2001 From: Albert Mingkun Yang Date: Mon, 27 Nov 2023 16:09:20 +0000 Subject: [PATCH 065/250] 8319703: Serial: Remove generationSpec Reviewed-by: cjplummer, tschatzl --- src/hotspot/share/gc/g1/g1CollectedHeap.cpp | 1 - .../share/gc/serial/defNewGeneration.cpp | 3 +- src/hotspot/share/gc/serial/generation.cpp | 9 --- src/hotspot/share/gc/serial/generation.hpp | 3 - .../share/gc/serial/tenuredGeneration.cpp | 7 +- .../share/gc/shared/genCollectedHeap.cpp | 30 ++------ .../share/gc/shared/genCollectedHeap.hpp | 7 -- .../share/gc/shared/generationSpec.cpp | 49 ------------- .../share/gc/shared/generationSpec.hpp | 61 ---------------- src/hotspot/share/gc/shared/vmStructs_gc.hpp | 9 --- .../hotspot/gc/shared/GenCollectedHeap.java | 25 ------- .../jvm/hotspot/gc/shared/GenerationSpec.java | 71 ------------------- 12 files changed, 11 insertions(+), 264 deletions(-) delete mode 100644 src/hotspot/share/gc/shared/generationSpec.cpp delete mode 100644 src/hotspot/share/gc/shared/generationSpec.hpp delete mode 100644 src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shared/GenerationSpec.java diff --git a/src/hotspot/share/gc/g1/g1CollectedHeap.cpp b/src/hotspot/share/gc/g1/g1CollectedHeap.cpp index 5b0ac46405df7..6b2adcc8ff888 100644 --- a/src/hotspot/share/gc/g1/g1CollectedHeap.cpp +++ b/src/hotspot/share/gc/g1/g1CollectedHeap.cpp @@ -81,7 +81,6 @@ #include "gc/shared/gcLocker.inline.hpp" #include "gc/shared/gcTimer.hpp" #include "gc/shared/gcTraceTime.inline.hpp" -#include "gc/shared/generationSpec.hpp" #include "gc/shared/isGCActiveMark.hpp" #include "gc/shared/locationPrinter.inline.hpp" #include "gc/shared/oopStorageParState.hpp" diff --git a/src/hotspot/share/gc/serial/defNewGeneration.cpp b/src/hotspot/share/gc/serial/defNewGeneration.cpp index 3a012b639fde0..b569fbac48f0f 100644 --- a/src/hotspot/share/gc/serial/defNewGeneration.cpp +++ b/src/hotspot/share/gc/serial/defNewGeneration.cpp @@ -40,7 +40,6 @@ #include "gc/shared/gcTimer.hpp" #include "gc/shared/gcTrace.hpp" #include "gc/shared/gcTraceTime.inline.hpp" -#include "gc/shared/generationSpec.hpp" #include "gc/shared/preservedMarks.inline.hpp" #include "gc/shared/referencePolicy.hpp" #include "gc/shared/referenceProcessorPhaseTimes.hpp" @@ -560,7 +559,7 @@ void DefNewGeneration::compute_new_size() { size_t old_size = gch->old_gen()->capacity(); size_t new_size_before = _virtual_space.committed_size(); - size_t min_new_size = initial_size(); + size_t min_new_size = NewSize; size_t max_new_size = reserved().byte_size(); assert(min_new_size <= new_size_before && new_size_before <= max_new_size, diff --git a/src/hotspot/share/gc/serial/generation.cpp b/src/hotspot/share/gc/serial/generation.cpp index daad60f406d4e..aa3c804ba3c20 100644 --- a/src/hotspot/share/gc/serial/generation.cpp +++ b/src/hotspot/share/gc/serial/generation.cpp @@ -31,7 +31,6 @@ #include "gc/shared/gcLocker.hpp" #include "gc/shared/gcTimer.hpp" #include "gc/shared/gcTrace.hpp" -#include "gc/shared/generationSpec.hpp" #include "gc/shared/space.inline.hpp" #include "gc/shared/spaceDecorator.inline.hpp" #include "logging/log.hpp" @@ -57,14 +56,6 @@ Generation::Generation(ReservedSpace rs, size_t initial_size) : (HeapWord*)_virtual_space.high_boundary()); } -size_t Generation::initial_size() { - SerialHeap* serial_heap = SerialHeap::heap(); - if (serial_heap->is_young_gen(this)) { - return serial_heap->young_gen_spec()->init_size(); - } - return serial_heap->old_gen_spec()->init_size(); -} - size_t Generation::max_capacity() const { return reserved().byte_size(); } diff --git a/src/hotspot/share/gc/serial/generation.hpp b/src/hotspot/share/gc/serial/generation.hpp index 54e9d188a5bb2..63eefae720bbb 100644 --- a/src/hotspot/share/gc/serial/generation.hpp +++ b/src/hotspot/share/gc/serial/generation.hpp @@ -50,7 +50,6 @@ class DefNewGeneration; class GCMemoryManager; -class GenerationSpec; class ContiguousSpace; class CompactPoint; class OopClosure; @@ -113,8 +112,6 @@ class Generation: public CHeapObj { virtual Generation::Name kind() { return Generation::Other; } - // Space inquiries (results in bytes) - size_t initial_size(); virtual size_t capacity() const = 0; // The maximum number of object bytes the // generation can currently hold. virtual size_t used() const = 0; // The number of used bytes in the gen. diff --git a/src/hotspot/share/gc/serial/tenuredGeneration.cpp b/src/hotspot/share/gc/serial/tenuredGeneration.cpp index f42973691f342..7ab95e1229d5e 100644 --- a/src/hotspot/share/gc/serial/tenuredGeneration.cpp +++ b/src/hotspot/share/gc/serial/tenuredGeneration.cpp @@ -32,7 +32,6 @@ #include "gc/shared/gcLocker.hpp" #include "gc/shared/gcTimer.hpp" #include "gc/shared/gcTrace.hpp" -#include "gc/shared/generationSpec.hpp" #include "gc/shared/space.hpp" #include "logging/log.hpp" #include "memory/allocation.inline.hpp" @@ -165,7 +164,7 @@ void TenuredGeneration::compute_new_size_inner() { const double min_tmp = used_after_gc / maximum_used_percentage; size_t minimum_desired_capacity = (size_t)MIN2(min_tmp, double(max_uintx)); // Don't shrink less than the initial generation size - minimum_desired_capacity = MAX2(minimum_desired_capacity, initial_size()); + minimum_desired_capacity = MAX2(minimum_desired_capacity, OldSize); assert(used_after_gc <= minimum_desired_capacity, "sanity check"); const size_t free_after_gc = free(); @@ -204,7 +203,7 @@ void TenuredGeneration::compute_new_size_inner() { const double minimum_used_percentage = 1.0 - maximum_free_percentage; const double max_tmp = used_after_gc / minimum_used_percentage; size_t maximum_desired_capacity = (size_t)MIN2(max_tmp, double(max_uintx)); - maximum_desired_capacity = MAX2(maximum_desired_capacity, initial_size()); + maximum_desired_capacity = MAX2(maximum_desired_capacity, OldSize); log_trace(gc, heap)(" maximum_free_percentage: %6.2f minimum_used_percentage: %6.2f", maximum_free_percentage, minimum_used_percentage); log_trace(gc, heap)(" _capacity_at_prologue: %6.1fK minimum_desired_capacity: %6.1fK maximum_desired_capacity: %6.1fK", @@ -234,7 +233,7 @@ void TenuredGeneration::compute_new_size_inner() { } assert(shrink_bytes <= max_shrink_bytes, "invalid shrink size"); log_trace(gc, heap)(" shrinking: initSize: %.1fK maximum_desired_capacity: %.1fK", - initial_size() / (double) K, maximum_desired_capacity / (double) K); + OldSize / (double) K, maximum_desired_capacity / (double) K); log_trace(gc, heap)(" shrink_bytes: %.1fK current_shrink_factor: " SIZE_FORMAT " new shrink factor: " SIZE_FORMAT " _min_heap_delta_bytes: %.1fK", shrink_bytes / (double) K, current_shrink_factor, diff --git a/src/hotspot/share/gc/shared/genCollectedHeap.cpp b/src/hotspot/share/gc/shared/genCollectedHeap.cpp index 610c259f5299a..54946d75bc9de 100644 --- a/src/hotspot/share/gc/shared/genCollectedHeap.cpp +++ b/src/hotspot/share/gc/shared/genCollectedHeap.cpp @@ -34,6 +34,7 @@ #include "gc/serial/defNewGeneration.hpp" #include "gc/serial/genMarkSweep.hpp" #include "gc/serial/markSweep.hpp" +#include "gc/serial/tenuredGeneration.hpp" #include "gc/shared/cardTableBarrierSet.hpp" #include "gc/shared/collectedHeap.inline.hpp" #include "gc/shared/collectorCounters.hpp" @@ -47,7 +48,6 @@ #include "gc/shared/gcVMOperations.hpp" #include "gc/shared/genArguments.hpp" #include "gc/shared/genCollectedHeap.hpp" -#include "gc/shared/generationSpec.hpp" #include "gc/shared/locationPrinter.inline.hpp" #include "gc/shared/oopStorage.inline.hpp" #include "gc/shared/oopStorageParState.inline.hpp" @@ -85,14 +85,6 @@ GenCollectedHeap::GenCollectedHeap(Generation::Name young, CollectedHeap(), _young_gen(nullptr), _old_gen(nullptr), - _young_gen_spec(new GenerationSpec(young, - NewSize, - MaxNewSize, - GenAlignment)), - _old_gen_spec(new GenerationSpec(old, - OldSize, - MaxOldSize, - GenAlignment)), _rem_set(nullptr), _soft_ref_policy(), _gc_policy_counters(new GCPolicyCounters(policy_counters_name, 2, 2)), @@ -115,8 +107,8 @@ jint GenCollectedHeap::initialize() { initialize_reserved_region(heap_rs); - ReservedSpace young_rs = heap_rs.first_part(_young_gen_spec->max_size()); - ReservedSpace old_rs = heap_rs.last_part(_young_gen_spec->max_size()); + ReservedSpace young_rs = heap_rs.first_part(MaxNewSize); + ReservedSpace old_rs = heap_rs.last_part(MaxNewSize); _rem_set = create_rem_set(heap_rs.region()); _rem_set->initialize(young_rs.base(), old_rs.base()); @@ -125,8 +117,8 @@ jint GenCollectedHeap::initialize() { bs->initialize(); BarrierSet::set_barrier_set(bs); - _young_gen = _young_gen_spec->init(young_rs, rem_set()); - _old_gen = _old_gen_spec->init(old_rs, rem_set()); + _young_gen = new DefNewGeneration(young_rs, NewSize, MinNewSize, MaxNewSize); + _old_gen = new TenuredGeneration(old_rs, OldSize, MinOldSize, MaxOldSize, rem_set()); GCInitLogger::print(); @@ -143,8 +135,8 @@ ReservedHeapSpace GenCollectedHeap::allocate(size_t alignment) { assert(alignment % pageSize == 0, "Must be"); // Check for overflow. - size_t total_reserved = _young_gen_spec->max_size() + _old_gen_spec->max_size(); - if (total_reserved < _young_gen_spec->max_size()) { + size_t total_reserved = MaxNewSize + MaxOldSize; + if (total_reserved < MaxNewSize) { vm_exit_during_initialization("The size of the object heap + VM data exceeds " "the maximum representable size"); } @@ -199,14 +191,6 @@ PreGenGCValues GenCollectedHeap::get_pre_gc_values() const { old_gen()->capacity()); } -GenerationSpec* GenCollectedHeap::young_gen_spec() const { - return _young_gen_spec; -} - -GenerationSpec* GenCollectedHeap::old_gen_spec() const { - return _old_gen_spec; -} - size_t GenCollectedHeap::capacity() const { return _young_gen->capacity() + _old_gen->capacity(); } diff --git a/src/hotspot/share/gc/shared/genCollectedHeap.hpp b/src/hotspot/share/gc/shared/genCollectedHeap.hpp index bdeeede64b820..0f4f95f90f7c8 100644 --- a/src/hotspot/share/gc/shared/genCollectedHeap.hpp +++ b/src/hotspot/share/gc/shared/genCollectedHeap.hpp @@ -33,7 +33,6 @@ class CardTableRS; class GCPolicyCounters; -class GenerationSpec; // A "GenCollectedHeap" is a CollectedHeap that uses generational // collection. It has two generations, young and old. @@ -62,9 +61,6 @@ class GenCollectedHeap : public CollectedHeap { Generation* _old_gen; private: - GenerationSpec* _young_gen_spec; - GenerationSpec* _old_gen_spec; - // The singleton CardTable Remembered Set. CardTableRS* _rem_set; @@ -144,9 +140,6 @@ class GenCollectedHeap : public CollectedHeap { MemRegion reserved_region() const { return _reserved; } bool is_in_reserved(const void* addr) const { return _reserved.contains(addr); } - GenerationSpec* young_gen_spec() const; - GenerationSpec* old_gen_spec() const; - SoftRefPolicy* soft_ref_policy() override { return &_soft_ref_policy; } // Performance Counter support diff --git a/src/hotspot/share/gc/shared/generationSpec.cpp b/src/hotspot/share/gc/shared/generationSpec.cpp deleted file mode 100644 index 422bea62ae37f..0000000000000 --- a/src/hotspot/share/gc/shared/generationSpec.cpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2001, 2023, 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. - * - */ - -#include "precompiled.hpp" -#include "gc/serial/cardTableRS.hpp" -#include "gc/shared/generationSpec.hpp" -#include "runtime/java.hpp" -#include "utilities/macros.hpp" -#if INCLUDE_SERIALGC -#include "gc/serial/defNewGeneration.hpp" -#include "gc/serial/tenuredGeneration.hpp" -#endif - -Generation* GenerationSpec::init(ReservedSpace rs, CardTableRS* remset) { - switch (name()) { -#if INCLUDE_SERIALGC - case Generation::DefNew: - return new DefNewGeneration(rs, _init_size, _min_size, _max_size); - - case Generation::MarkSweepCompact: - return new TenuredGeneration(rs, _init_size, _min_size, _max_size, remset); -#endif - - default: - guarantee(false, "unrecognized GenerationName"); - return nullptr; - } -} diff --git a/src/hotspot/share/gc/shared/generationSpec.hpp b/src/hotspot/share/gc/shared/generationSpec.hpp deleted file mode 100644 index 662e24d4e0413..0000000000000 --- a/src/hotspot/share/gc/shared/generationSpec.hpp +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2001, 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 - * 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. - * - */ - -#ifndef SHARE_GC_SHARED_GENERATIONSPEC_HPP -#define SHARE_GC_SHARED_GENERATIONSPEC_HPP - -#include "gc/serial/generation.hpp" -#include "utilities/align.hpp" - -// The specification of a generation. This class also encapsulates -// some generation-specific behavior. This is done here rather than as a -// virtual function of Generation because these methods are needed in -// initialization of the Generations. -class GenerationSpec : public CHeapObj { - friend class VMStructs; -private: - Generation::Name _name; - size_t _init_size; - size_t _min_size; - size_t _max_size; - -public: - GenerationSpec(Generation::Name name, size_t init_size, size_t max_size, size_t alignment) : - _name(name), - _init_size(align_up(init_size, alignment)), - _min_size(_init_size), - _max_size(align_up(max_size, alignment)) - { } - - Generation* init(ReservedSpace rs, CardTableRS* remset); - - Generation::Name name() const { return _name; } - size_t init_size() const { return _init_size; } - size_t min_size() const { return _min_size; } - size_t max_size() const { return _max_size; } -}; - -typedef GenerationSpec* GenerationSpecPtr; - -#endif // SHARE_GC_SHARED_GENERATIONSPEC_HPP diff --git a/src/hotspot/share/gc/shared/vmStructs_gc.hpp b/src/hotspot/share/gc/shared/vmStructs_gc.hpp index 13f23d5d4394f..696cdc00dc520 100644 --- a/src/hotspot/share/gc/shared/vmStructs_gc.hpp +++ b/src/hotspot/share/gc/shared/vmStructs_gc.hpp @@ -29,7 +29,6 @@ #include "gc/shared/cardTable.hpp" #include "gc/shared/collectedHeap.hpp" #include "gc/shared/genCollectedHeap.hpp" -#include "gc/shared/generationSpec.hpp" #include "gc/shared/oopStorage.hpp" #include "gc/shared/space.hpp" #if INCLUDE_EPSILONGC @@ -114,14 +113,8 @@ nonstatic_field(Generation::StatRecord, invocations, int) \ nonstatic_field(Generation::StatRecord, accumulated_time, elapsedTimer) \ \ - nonstatic_field(GenerationSpec, _name, Generation::Name) \ - nonstatic_field(GenerationSpec, _init_size, size_t) \ - nonstatic_field(GenerationSpec, _max_size, size_t) \ - \ nonstatic_field(GenCollectedHeap, _young_gen, Generation*) \ nonstatic_field(GenCollectedHeap, _old_gen, Generation*) \ - nonstatic_field(GenCollectedHeap, _young_gen_spec, GenerationSpec*) \ - nonstatic_field(GenCollectedHeap, _old_gen_spec, GenerationSpec*) \ \ nonstatic_field(MemRegion, _start, HeapWord*) \ nonstatic_field(MemRegion, _word_size, size_t) \ @@ -172,7 +165,6 @@ declare_toplevel_type(AgeTable) \ declare_toplevel_type(CardTable::CardValue) \ declare_toplevel_type(Generation::StatRecord) \ - declare_toplevel_type(GenerationSpec) \ declare_toplevel_type(HeapWord) \ declare_toplevel_type(MemRegion) \ declare_toplevel_type(ThreadLocalAllocBuffer) \ @@ -190,7 +182,6 @@ declare_toplevel_type(DefNewGeneration*) \ declare_toplevel_type(GenCollectedHeap*) \ declare_toplevel_type(Generation*) \ - declare_toplevel_type(GenerationSpec**) \ declare_toplevel_type(HeapWord*) \ declare_toplevel_type(HeapWord* volatile) \ declare_toplevel_type(MemRegion*) \ diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shared/GenCollectedHeap.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shared/GenCollectedHeap.java index 9241d847c73d8..3442a0629e2f3 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shared/GenCollectedHeap.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shared/GenCollectedHeap.java @@ -39,9 +39,6 @@ public abstract class GenCollectedHeap extends CollectedHeap { private static AddressField youngGenField; private static AddressField oldGenField; - private static AddressField youngGenSpecField; - private static AddressField oldGenSpecField; - private static GenerationFactory genFactory; static { @@ -57,8 +54,6 @@ private static synchronized void initialize(TypeDataBase db) { youngGenField = type.getAddressField("_young_gen"); oldGenField = type.getAddressField("_old_gen"); - youngGenSpecField = type.getAddressField("_young_gen_spec"); - oldGenSpecField = type.getAddressField("_old_gen_spec"); genFactory = new GenerationFactory(); } @@ -115,26 +110,6 @@ public long used() { return used; } - /** Package-private access to GenerationSpecs */ - GenerationSpec spec(int level) { - if (Assert.ASSERTS_ENABLED) { - Assert.that((level == 0) || (level == 1), "Index " + level + - " out of range (should be 0 or 1)"); - } - - if ((level != 0) && (level != 1)) { - return null; - } - - if (level == 0) { - return VMObjectFactory.newObject(GenerationSpec.class, - youngGenSpecField.getAddress()); - } else { - return VMObjectFactory.newObject(GenerationSpec.class, - oldGenSpecField.getAddress()); - } - } - public void liveRegionsIterate(LiveRegionsClosure closure) { // Run through all generations, obtaining bottom-top pairs. for (int i = 0; i < nGens(); i++) { diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shared/GenerationSpec.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shared/GenerationSpec.java deleted file mode 100644 index 02e85b192c62e..0000000000000 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shared/GenerationSpec.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) 2000, 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. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.jvm.hotspot.gc.shared; - -import java.util.*; - -import sun.jvm.hotspot.debugger.*; -import sun.jvm.hotspot.runtime.*; -import sun.jvm.hotspot.types.*; -import sun.jvm.hotspot.utilities.Observable; -import sun.jvm.hotspot.utilities.Observer; - -public class GenerationSpec extends VMObject { - private static CIntegerField nameField; - private static CIntegerField initSizeField; - private static CIntegerField maxSizeField; - - static { - VM.registerVMInitializedObserver(new Observer() { - public void update(Observable o, Object data) { - initialize(VM.getVM().getTypeDataBase()); - } - }); - } - - private static synchronized void initialize(TypeDataBase db) { - Type type = db.lookupType("GenerationSpec"); - - nameField = type.getCIntegerField("_name"); - initSizeField = type.getCIntegerField("_init_size"); - maxSizeField = type.getCIntegerField("_max_size"); - } - - public GenerationSpec(Address addr) { - super(addr); - } - - public Generation.Name name() { - return Generation.nameForEnum((int)nameField.getValue(addr)); - } - - public long initSize() { - return initSizeField.getValue(addr); - } - - public long maxSize() { - return maxSizeField.getValue(addr); - } -} From 5e24aaf4f7f11862ec8ac9d5c3e65d614104fb2c Mon Sep 17 00:00:00 2001 From: Vicente Romero Date: Mon, 27 Nov 2023 16:23:02 +0000 Subject: [PATCH 066/250] 8320001: javac crashes while adding type annotations to the return type of a constructor Reviewed-by: cushon, jlahoda --- .../com/sun/tools/javac/jvm/ClassReader.java | 7 +- .../TypeAnnosOnConstructorsTest.java | 137 ++++++++++++++++++ 2 files changed, 143 insertions(+), 1 deletion(-) create mode 100644 test/langtools/tools/javac/annotations/typeAnnotations/TypeAnnosOnConstructorsTest.java diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java index 232beb83b255d..51486b997d3c3 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java @@ -2332,7 +2332,12 @@ public Void visitMethodSymbol(Symbol.MethodSymbol s, Void unused) { thrown.add(addTypeAnnotations(thrownType, thrownType(i++))); } mt.thrown = thrown.toList(); - mt.restype = addTypeAnnotations(mt.restype, TargetType.METHOD_RETURN); + /* possible information loss if the type of the method is void then we can't add type + * annotations to it + */ + if (!mt.restype.hasTag(TypeTag.VOID)) { + mt.restype = addTypeAnnotations(mt.restype, TargetType.METHOD_RETURN); + } Type recvtype = mt.recvtype != null ? mt.recvtype : s.implicitReceiverType(); if (recvtype != null) { diff --git a/test/langtools/tools/javac/annotations/typeAnnotations/TypeAnnosOnConstructorsTest.java b/test/langtools/tools/javac/annotations/typeAnnotations/TypeAnnosOnConstructorsTest.java new file mode 100644 index 0000000000000..996d12b35a4f8 --- /dev/null +++ b/test/langtools/tools/javac/annotations/typeAnnotations/TypeAnnosOnConstructorsTest.java @@ -0,0 +1,137 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8320001 + * @summary javac crashes while adding type annotations to the return type of a constructor + * @library /tools/lib /tools/javac/lib + * @modules + * jdk.compiler/com.sun.tools.javac.api + * jdk.compiler/com.sun.tools.javac.main + * @build toolbox.ToolBox toolbox.JavacTask + * @run main TypeAnnosOnConstructorsTest + */ + +import java.io.IOException; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +import java.util.List; +import java.util.Set; +import javax.annotation.processing.AbstractProcessor; +import javax.annotation.processing.RoundEnvironment; +import javax.annotation.processing.SupportedAnnotationTypes; +import javax.lang.model.SourceVersion; +import javax.lang.model.element.TypeElement; + +import toolbox.JavacTask; +import toolbox.Task; +import toolbox.Task.Mode; +import toolbox.Task.OutputKind; +import toolbox.TestRunner; +import toolbox.ToolBox; + +public class TypeAnnosOnConstructorsTest extends TestRunner { + protected ToolBox tb; + + TypeAnnosOnConstructorsTest() { + super(System.err); + tb = new ToolBox(); + } + + public static void main(String... args) throws Exception { + new TypeAnnosOnConstructorsTest().runTests(); + } + + protected void runTests() throws Exception { + runTests(m -> new Object[]{Paths.get(m.getName())}); + } + + Path[] findJavaFiles(Path... paths) throws IOException { + return tb.findJavaFiles(paths); + } + + @Test + public void testAnnoOnConstructors(Path base) throws Exception { + Path src = base.resolve("src"); + Path y = src.resolve("Y.java"); + Path classes = base.resolve("classes"); + + Files.createDirectories(classes); + + tb.writeJavaFiles(src, + """ + import java.lang.annotation.Target; + import java.lang.annotation.ElementType; + import java.lang.annotation.Retention; + import java.lang.annotation.RetentionPolicy; + + class Y { + @TA public Y() {} + } + + @Target(ElementType.TYPE_USE) + @Retention(RetentionPolicy.RUNTIME) + @interface TA {} + """); + + // we need to compile Y first + new JavacTask(tb) + .files(y) + .outdir(classes) + .run(); + + Path classDir = getClassDir(); + new JavacTask(tb) + .classpath(classes, classDir) + .options("-processor", SimpleProcessor.class.getName()) + .classes("Y") + .outdir(classes) + .run(Task.Expect.SUCCESS); + } + + public Path getClassDir() { + String classes = ToolBox.testClasses; + if (classes == null) { + return Paths.get("build"); + } else { + return Paths.get(classes); + } + } + + @SupportedAnnotationTypes("*") + public static final class SimpleProcessor extends AbstractProcessor { + @Override + public SourceVersion getSupportedSourceVersion() { + return SourceVersion.latestSupported(); + } + + @Override + public boolean process(Set annotations, RoundEnvironment roundEnv) { + return false; + } + } +} From 12e983a72e72ed56741ddc45e47d337716a8da65 Mon Sep 17 00:00:00 2001 From: Archie Cobbs Date: Mon, 27 Nov 2023 17:26:52 +0000 Subject: [PATCH 067/250] 8194743: Compiler implementation for Statements before super() Reviewed-by: vromero, jwaters, mcimadamore --- .../com/sun/tools/javac/code/Preview.java | 1 + .../com/sun/tools/javac/code/Source.java | 1 + .../com/sun/tools/javac/comp/Attr.java | 105 ++-- .../com/sun/tools/javac/comp/AttrContext.java | 11 +- .../com/sun/tools/javac/comp/Check.java | 140 ++++- .../com/sun/tools/javac/comp/Enter.java | 2 - .../com/sun/tools/javac/comp/Flow.java | 159 +++--- .../com/sun/tools/javac/comp/Lower.java | 44 +- .../com/sun/tools/javac/comp/Resolve.java | 73 ++- .../com/sun/tools/javac/comp/TypeEnter.java | 1 - .../classes/com/sun/tools/javac/jvm/Gen.java | 38 +- .../tools/javac/resources/compiler.properties | 23 +- .../com/sun/tools/javac/tree/TreeInfo.java | 153 ++++-- .../jdk/jshell/ExpressionToTypeInfo.java | 5 +- .../AnonymousInSuperCallNegTest.out | 2 +- .../tools/javac/SuperInit/SuperInitFails.java | 171 +++++++ .../tools/javac/SuperInit/SuperInitFails.out | 29 ++ .../tools/javac/SuperInit/SuperInitGood.java | 480 ++++++++++++++++++ .../tools/javac/diags/examples.not-yet.txt | 1 - ...eFirst.java => CallOnlyInConstructor.java} | 9 +- .../diags/examples/CallsNotAllowedHere.java | 32 ++ .../FeatureStatementsBeforeSuper.java | 33 ++ ...rstInvocationMustBeAnotherConstructor.java | 2 +- .../examples/RedundantSuperclassInit.java | 31 ++ .../examples/ReturnBeforeSuperclassInit.java | 35 ++ .../javac/records/RecordCompilationTests.java | 6 +- 26 files changed, 1274 insertions(+), 313 deletions(-) create mode 100644 test/langtools/tools/javac/SuperInit/SuperInitFails.java create mode 100644 test/langtools/tools/javac/SuperInit/SuperInitFails.out create mode 100644 test/langtools/tools/javac/SuperInit/SuperInitGood.java rename test/langtools/tools/javac/diags/examples/{CallMustBeFirst.java => CallOnlyInConstructor.java} (84%) create mode 100644 test/langtools/tools/javac/diags/examples/CallsNotAllowedHere.java create mode 100644 test/langtools/tools/javac/diags/examples/FeatureStatementsBeforeSuper.java create mode 100644 test/langtools/tools/javac/diags/examples/RedundantSuperclassInit.java create mode 100644 test/langtools/tools/javac/diags/examples/ReturnBeforeSuperclassInit.java diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Preview.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Preview.java index cdbd57047ff8f..ad859bb45077f 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Preview.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Preview.java @@ -211,6 +211,7 @@ public boolean isPreview(Feature feature) { return switch (feature) { case STRING_TEMPLATES -> true; case UNNAMED_CLASSES -> true; + case SUPER_INIT -> true; //Note: this is a backdoor which allows to optionally treat all features as 'preview' (for testing). //When real preview features will be added, this method can be implemented to return 'true' //for those selected features, and 'false' for all the others. diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Source.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Source.java index 017400adcfca9..0290f8bc75214 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Source.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Source.java @@ -248,6 +248,7 @@ public enum Feature { UNNAMED_CLASSES(JDK21, Fragments.FeatureUnnamedClasses, DiagKind.PLURAL), WARN_ON_ILLEGAL_UTF8(MIN, JDK21), UNNAMED_VARIABLES(JDK22, Fragments.FeatureUnnamedVariables, DiagKind.PLURAL), + SUPER_INIT(JDK22, Fragments.FeatureSuperInit, DiagKind.NORMAL), ; enum DiagKind { diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java index 33a751aac7e44..b69c2156e1d86 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java @@ -937,6 +937,8 @@ public void visitClassDef(JCClassDecl tree) { Optional localCacheContext = Optional.ofNullable(env.info.attributionMode.isSpeculative ? argumentAttr.withLocalCacheContext() : null); + boolean ctorProloguePrev = env.info.ctorPrologue; + env.info.ctorPrologue = false; try { // Local and anonymous classes have not been entered yet, so we need to // do it now. @@ -959,12 +961,10 @@ public void visitClassDef(JCClassDecl tree) { // make sure class has been completed: c.complete(); - // If this class appears as an anonymous class - // in a superclass constructor call - // disable implicit outer instance from being passed. + // If this class appears as an anonymous class in a constructor + // prologue, disable implicit outer instance from being passed. // (This would be an illegal access to "this before super"). - if (env.info.isSelfCall && - env.tree.hasTag(NEWCLASS)) { + if (ctorProloguePrev && env.tree.hasTag(NEWCLASS)) { c.flags_field |= NOOUTERTHIS; } attribClass(tree.pos(), c); @@ -972,6 +972,7 @@ public void visitClassDef(JCClassDecl tree) { } } finally { localCacheContext.ifPresent(LocalCacheContext::leave); + env.info.ctorPrologue = ctorProloguePrev; } } @@ -981,6 +982,8 @@ public void visitMethodDef(JCMethodDecl tree) { Lint lint = env.info.lint.augment(m); Lint prevLint = chk.setLint(lint); + boolean ctorProloguePrev = env.info.ctorPrologue; + env.info.ctorPrologue = false; MethodSymbol prevMethod = chk.setMethod(m); try { deferredLintHandler.flush(tree.pos()); @@ -1044,6 +1047,9 @@ public void visitMethodDef(JCMethodDecl tree) { chk.validate(tree.recvparam, newEnv); } + // Is this method a constructor? + boolean isConstructor = TreeInfo.isConstructor(tree); + if (env.enclClass.sym.isRecord() && tree.sym.owner.kind == TYP) { // lets find if this method is an accessor Optional recordComponent = env.enclClass.sym.getRecordComponents().stream() @@ -1071,14 +1077,11 @@ public void visitMethodDef(JCMethodDecl tree) { } } - if (tree.name == names.init) { + if (isConstructor) { // if this a constructor other than the canonical one if ((tree.sym.flags_field & RECORD) == 0) { - JCMethodInvocation app = TreeInfo.firstConstructorCall(tree); - if (app == null || - TreeInfo.name(app.meth) != names._this || - !checkFirstConstructorStat(app, tree, false)) { - log.error(tree, Errors.FirstStatementMustBeCallToAnotherConstructor(env.enclClass.sym)); + if (!TreeInfo.hasConstructorCall(tree, names._this)) { + log.error(tree, Errors.NonCanonicalConstructorInvokeAnotherConstructor(env.enclClass.sym)); } } else { // but if it is the canonical: @@ -1104,11 +1107,7 @@ public void visitMethodDef(JCMethodDecl tree) { ); } - JCMethodInvocation app = TreeInfo.firstConstructorCall(tree); - if (app != null && - (TreeInfo.name(app.meth) == names._this || - TreeInfo.name(app.meth) == names._super) && - checkFirstConstructorStat(app, tree, false)) { + if (TreeInfo.hasAnyConstructorCall(tree)) { log.error(tree, Errors.InvalidCanonicalConstructorInRecord( Fragments.Canonical, env.enclClass.sym.name, Fragments.CanonicalMustNotContainExplicitConstructorInvocation)); @@ -1186,16 +1185,14 @@ public void visitMethodDef(JCMethodDecl tree) { // Add an implicit super() call unless an explicit call to // super(...) or this(...) is given // or we are compiling class java.lang.Object. - if (tree.name == names.init && owner.type != syms.objectType) { - JCBlock body = tree.body; - if (body.stats.isEmpty() || - TreeInfo.getConstructorInvocationName(body.stats, names) == names.empty) { - JCStatement supCall = make.at(body.pos).Exec(make.Apply(List.nil(), + if (isConstructor && owner.type != syms.objectType) { + if (!TreeInfo.hasAnyConstructorCall(tree)) { + JCStatement supCall = make.at(tree.body.pos).Exec(make.Apply(List.nil(), make.Ident(names._super), make.Idents(List.nil()))); - body.stats = body.stats.prepend(supCall); + tree.body.stats = tree.body.stats.prepend(supCall); } else if ((env.enclClass.sym.flags() & ENUM) != 0 && (tree.mods.flags & GENERATEDCONSTR) == 0 && - TreeInfo.isSuperCall(body.stats.head)) { + TreeInfo.hasConstructorCall(tree, names._super)) { // enum constructors are not allowed to call super // directly, so make sure there aren't any super calls // in enum constructors, except in the compiler @@ -1225,6 +1222,9 @@ public void visitMethodDef(JCMethodDecl tree) { annotate.queueScanTreeAndTypeAnnotate(tree.body, localEnv, m, null); annotate.flush(); + // Start of constructor prologue + localEnv.info.ctorPrologue = isConstructor; + // Attribute method body. attribStat(tree.body, localEnv); } @@ -1234,6 +1234,7 @@ public void visitMethodDef(JCMethodDecl tree) { } finally { chk.setLint(prevLint); chk.setMethod(prevMethod); + env.info.ctorPrologue = ctorProloguePrev; } } @@ -2518,21 +2519,15 @@ public void visitApply(JCMethodInvocation tree) { ListBuffer argtypesBuf = new ListBuffer<>(); if (isConstructorCall) { - // We are seeing a ...this(...) or ...super(...) call. - // Check that this is the first statement in a constructor. - checkFirstConstructorStat(tree, env.enclMethod, true); - - // Record the fact - // that this is a constructor call (using isSelfCall). - localEnv.info.isSelfCall = true; // Attribute arguments, yielding list of argument types. - localEnv.info.constructorArgs = true; KindSelector kind = attribArgs(KindSelector.MTH, tree.args, localEnv, argtypesBuf); - localEnv.info.constructorArgs = false; argtypes = argtypesBuf.toList(); typeargtypes = attribTypes(tree.typeargs, localEnv); + // Done with this()/super() parameters. End of constructor prologue. + env.info.ctorPrologue = false; + // Variable `site' points to the class in which the called // constructor is defined. Type site = env.enclClass.sym.type; @@ -2661,26 +2656,6 @@ Type adjustMethodReturnType(Symbol msym, Type qualifierType, Name methodName, Li } } - /** Check that given application node appears as first statement - * in a constructor call. - * @param tree The application node - * @param enclMethod The enclosing method of the application. - * @param error Should an error be issued? - */ - boolean checkFirstConstructorStat(JCMethodInvocation tree, JCMethodDecl enclMethod, boolean error) { - if (enclMethod != null && enclMethod.name == names.init) { - JCBlock body = enclMethod.body; - if (body.stats.head.hasTag(EXEC) && - ((JCExpressionStatement) body.stats.head).expr == tree) - return true; - } - if (error) { - log.error(tree.pos(), - Errors.CallMustBeFirstStmtInCtor(TreeInfo.name(tree.meth))); - } - return false; - } - /** Obtain a method type with given argument types. */ Type newMethodTemplate(Type restype, List argtypes, List typeargtypes) { @@ -4353,16 +4328,6 @@ public void visitIdent(JCIdent tree) { checkAssignable(tree.pos(), v, null, env); } - // In a constructor body, - // if symbol is a field or instance method, check that it is - // not accessed before the supertype constructor is called. - if (symEnv.info.isSelfCall && - sym.kind.matches(KindSelector.VAL_MTH) && - sym.owner.kind == TYP && - (sym.flags() & STATIC) == 0) { - chk.earlyRefError(tree.pos(), sym.kind == VAR ? - sym : thisSym(tree.pos(), env)); - } Env env1 = env; if (sym.kind != ERR && sym.kind != TYP && sym.owner != null && sym.owner != env1.enclClass.sym) { @@ -4474,18 +4439,7 @@ public void visitSelect(JCFieldAccess tree) { } if (isType(sitesym)) { - if (sym.name == names._this || sym.name == names._super) { - // If `C' is the currently compiled class, check that - // `C.this' does not appear in an explicit call to a constructor - // also make sure that `super` is not used in constructor invocations - if (env.info.isSelfCall && - ((sym.name == names._this && - site.tsym == env.enclClass.sym) || - sym.name == names._super && env.info.constructorArgs && - (sitesym.isInterface() || site.tsym == env.enclClass.sym))) { - chk.earlyRefError(tree.pos(), sym); - } - } else { + if (sym.name != names._this && sym.name != names._super) { // Check if type-qualified fields or methods are static (JLS) if ((sym.flags() & STATIC) == 0 && sym.name != names._super && @@ -5674,6 +5628,9 @@ private void attribClassBody(Env env, ClassSymbol c) { } } + // Check for proper placement of super()/this() calls. + chk.checkSuperInitCalls(tree); + // Check for cycles among non-initial constructors. chk.checkCyclicConstructors(tree); diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/AttrContext.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/AttrContext.java index 2a96b11316c01..b8afce009a591 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/AttrContext.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/AttrContext.java @@ -49,13 +49,9 @@ public class AttrContext { */ int staticLevel = 0; - /** Is this an environment for a this(...) or super(...) call? + /** Are we in the 'prologue' part of a constructor, prior to an explicit this()/super()? */ - boolean isSelfCall = false; - - /** are we analyzing the arguments for a constructor invocation? - */ - boolean constructorArgs = false; + boolean ctorPrologue = false; /** Are we evaluating the selector of a `super' or type name? */ @@ -136,8 +132,7 @@ AttrContext dup(WriteableScope scope) { AttrContext info = new AttrContext(); info.scope = scope; info.staticLevel = staticLevel; - info.isSelfCall = isSelfCall; - info.constructorArgs = constructorArgs; + info.ctorPrologue = ctorPrologue; info.selectSuper = selectSuper; info.pendingResolutionPhase = pendingResolutionPhase; info.lint = lint; diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java index d05d5e2f51095..ead1ecf3c633f 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java @@ -359,15 +359,6 @@ Type typeTagError(DiagnosticPosition pos, JCDiagnostic required, Object found) { return types.createErrorType(found instanceof Type type ? type : syms.errType); } - /** Report an error that symbol cannot be referenced before super - * has been called. - * @param pos Position to be used for error reporting. - * @param sym The referenced symbol. - */ - void earlyRefError(DiagnosticPosition pos, Symbol sym) { - log.error(pos, Errors.CantRefBeforeCtorCalled(sym)); - } - /** Report duplicate declaration error. */ void duplicateError(DiagnosticPosition pos, Symbol sym) { @@ -3934,10 +3925,11 @@ void checkCyclicConstructors(JCClassDecl tree) { // enter each constructor this-call into the map for (List l = tree.defs; l.nonEmpty(); l = l.tail) { - JCMethodInvocation app = TreeInfo.firstConstructorCall(l.head); - if (app == null) continue; - JCMethodDecl meth = (JCMethodDecl) l.head; - if (TreeInfo.name(app.meth) == names._this) { + if (!TreeInfo.isConstructor(l.head)) + continue; + JCMethodDecl meth = (JCMethodDecl)l.head; + JCMethodInvocation app = TreeInfo.findConstructorCall(meth); + if (app != null && TreeInfo.name(app.meth) == names._this) { callMap.put(meth.sym, TreeInfo.symbol(app.meth)); } else { meth.sym.flags_field |= ACYCLIC; @@ -3970,6 +3962,128 @@ private void checkCyclicConstructor(JCClassDecl tree, Symbol ctor, } } +/* ************************************************************************* + * Verify the proper placement of super()/this() calls. + * + * - super()/this() may only appear in constructors + * - There must be at most one super()/this() call per constructor + * - The super()/this() call, if any, must be a top-level statement in the + * constructor, i.e., not nested inside any other statement or block + * - There must be no return statements prior to the super()/this() call + **************************************************************************/ + + void checkSuperInitCalls(JCClassDecl tree) { + new SuperThisChecker().check(tree); + } + + private class SuperThisChecker extends TreeScanner { + + // Match this scan stack: 1=JCMethodDecl, 2=JCExpressionStatement, 3=JCMethodInvocation + private static final int MATCH_SCAN_DEPTH = 3; + + private boolean constructor; // is this method a constructor? + private boolean firstStatement; // at the first statement in method? + private JCReturn earlyReturn; // first return prior to the super()/init(), if any + private Name initCall; // whichever of "super" or "init" we've seen already + private int scanDepth; // current scan recursion depth in method body + + public void check(JCClassDecl classDef) { + scan(classDef.defs); + } + + @Override + public void visitMethodDef(JCMethodDecl tree) { + Assert.check(!constructor); + Assert.check(earlyReturn == null); + Assert.check(initCall == null); + Assert.check(scanDepth == 1); + + // Initialize state for this method + constructor = TreeInfo.isConstructor(tree); + try { + + // Scan method body + if (tree.body != null) { + firstStatement = true; + for (List l = tree.body.stats; l.nonEmpty(); l = l.tail) { + scan(l.head); + firstStatement = false; + } + } + + // Verify no 'return' seen prior to an explicit super()/this() call + if (constructor && earlyReturn != null && initCall != null) + log.error(earlyReturn.pos(), Errors.ReturnBeforeSuperclassInitialized); + } finally { + firstStatement = false; + constructor = false; + earlyReturn = null; + initCall = null; + } + } + + @Override + public void scan(JCTree tree) { + scanDepth++; + try { + super.scan(tree); + } finally { + scanDepth--; + } + } + + @Override + public void visitApply(JCMethodInvocation apply) { + do { + + // Is this a super() or this() call? + Name methodName = TreeInfo.name(apply.meth); + if (methodName != names._super && methodName != names._this) + break; + + // super()/this() calls must only appear in a constructor + if (!constructor) { + log.error(apply.pos(), Errors.CallMustOnlyAppearInCtor); + break; + } + + // super()/this() calls must be a top level statement + if (scanDepth != MATCH_SCAN_DEPTH) { + log.error(apply.pos(), Errors.CtorCallsNotAllowedHere); + break; + } + + // super()/this() calls must not appear more than once + if (initCall != null) { + log.error(apply.pos(), Errors.RedundantSuperclassInit); + break; + } + + // If super()/this() isn't first, require "statements before super()" feature + if (!firstStatement) + preview.checkSourceLevel(apply.pos(), Feature.SUPER_INIT); + + // We found a legitimate super()/this() call; remember it + initCall = methodName; + } while (false); + + // Proceed + super.visitApply(apply); + } + + @Override + public void visitReturn(JCReturn tree) { + if (constructor && initCall == null && earlyReturn == null) + earlyReturn = tree; // we have seen a return but not (yet) a super()/this() + super.visitReturn(tree); + } + + @Override + public void visitClassDef(JCClassDecl tree) { + // don't descend any further + } + } + /* ************************************************************************* * Miscellaneous **************************************************************************/ diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Enter.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Enter.java index e09ed62d62bb0..90d482438417f 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Enter.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Enter.java @@ -206,7 +206,6 @@ public Env classEnv(JCClassDecl tree, Env env) { env.dup(tree, env.info.dup(WriteableScope.create(tree.sym))); localEnv.enclClass = tree; localEnv.outer = env; - localEnv.info.isSelfCall = false; localEnv.info.lint = null; // leave this to be filled in by Attr, // when annotations have been processed localEnv.info.isAnonymousDiamond = TreeInfo.isDiamond(env.tree); @@ -259,7 +258,6 @@ public Env moduleEnv(JCModuleDecl tree, Env env) { env.dup(tree, env.info.dup(WriteableScope.create(tree.sym))); localEnv.enclClass = predefClassDef; localEnv.outer = env; - localEnv.info.isSelfCall = false; localEnv.info.lint = null; // leave this to be filled in by Attr, // when annotations have been processed return localEnv; diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Flow.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Flow.java index 4a23bda0ea875..d07b3a41ccb7c 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Flow.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Flow.java @@ -32,6 +32,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Set; +import java.util.function.Consumer; import com.sun.source.tree.CaseTree; import com.sun.source.tree.LambdaExpressionTree.BodyKind; @@ -386,6 +387,13 @@ private JumpKind(Tag treeTag) { */ ListBuffer pendingExits; + /** A class whose initializers we are scanning. Because initializer + * scans can be triggered out of sequence when visiting certain nodes + * (e.g., super()), we protect against infinite loops that could be + * triggered by incorrect code (e.g., super() inside initializer). + */ + JCClassDecl initScanClass; + /** A pending exit. These are the statements return, break, and * continue. In addition, exception-throwing expressions or * statements are put here when not known to be caught. This @@ -471,6 +479,24 @@ protected void scanSyntheticBreak(TreeMaker make, JCTree swtch) { scan(brk); } } + + // Do something with all static or non-static field initializers and initialization blocks. + // Note: This method also sends nested class definitions to the handler. + protected void forEachInitializer(JCClassDecl classDef, boolean isStatic, Consumer handler) { + if (classDef == initScanClass) // avoid infinite loops + return; + JCClassDecl initScanClassPrev = initScanClass; + initScanClass = classDef; + try { + for (List defs = classDef.defs; defs.nonEmpty(); defs = defs.tail) { + JCTree def = defs.head; + if (!def.hasTag(METHODDEF) && ((TreeInfo.flags(def) & STATIC) != 0) == isStatic) + handler.accept(def); + } + } finally { + initScanClass = initScanClassPrev; + } + } } /** @@ -536,22 +562,16 @@ public void visitClassDef(JCClassDecl tree) { try { // process all the static initializers - for (List l = tree.defs; l.nonEmpty(); l = l.tail) { - if (!l.head.hasTag(METHODDEF) && - (TreeInfo.flags(l.head) & STATIC) != 0) { - scanDef(l.head); - clearPendingExits(false); - } - } + forEachInitializer(tree, true, def -> { + scanDef(def); + clearPendingExits(false); + }); // process all the instance initializers - for (List l = tree.defs; l.nonEmpty(); l = l.tail) { - if (!l.head.hasTag(METHODDEF) && - (TreeInfo.flags(l.head) & STATIC) == 0) { - scanDef(l.head); - clearPendingExits(false); - } - } + forEachInitializer(tree, false, def -> { + scanDef(def); + clearPendingExits(false); + }); // process all the methods for (List l = tree.defs; l.nonEmpty(); l = l.tail) { @@ -1362,40 +1382,10 @@ public void visitClassDef(JCClassDecl tree) { try { // process all the static initializers - for (List l = tree.defs; l.nonEmpty(); l = l.tail) { - if (!l.head.hasTag(METHODDEF) && - (TreeInfo.flags(l.head) & STATIC) != 0) { - scan(l.head); - errorUncaught(); - } - } - - // add intersection of all throws clauses of initial constructors - // to set of caught exceptions, unless class is anonymous. - if (!anonymousClass) { - boolean firstConstructor = true; - for (List l = tree.defs; l.nonEmpty(); l = l.tail) { - if (TreeInfo.isInitialConstructor(l.head)) { - List mthrown = - ((JCMethodDecl) l.head).sym.type.getThrownTypes(); - if (firstConstructor) { - caught = mthrown; - firstConstructor = false; - } else { - caught = chk.intersect(mthrown, caught); - } - } - } - } - - // process all the instance initializers - for (List l = tree.defs; l.nonEmpty(); l = l.tail) { - if (!l.head.hasTag(METHODDEF) && - (TreeInfo.flags(l.head) & STATIC) == 0) { - scan(l.head); - errorUncaught(); - } - } + forEachInitializer(tree, true, def -> { + scan(def); + errorUncaught(); + }); // in an anonymous class, add the set of thrown exceptions to // the throws clause of the synthetic constructor and propagate @@ -1450,7 +1440,7 @@ public void visitMethodDef(JCMethodDecl tree) { JCVariableDecl def = l.head; scan(def); } - if (TreeInfo.isInitialConstructor(tree)) + if (TreeInfo.hasConstructorCall(tree, names._super)) caught = chk.union(caught, mthrown); else if ((tree.sym.flags() & (BLOCK | STATIC)) != BLOCK) caught = mthrown; @@ -1751,8 +1741,18 @@ public void visitThrow(JCThrow tree) { public void visitApply(JCMethodInvocation tree) { scan(tree.meth); scan(tree.args); + + // Mark as thrown the exceptions thrown by the method being invoked for (List l = tree.meth.type.getThrownTypes(); l.nonEmpty(); l = l.tail) markThrown(tree, l.head); + + // After super(), scan initializers to uncover any exceptions they throw + if (TreeInfo.name(tree.meth) == names._super) { + forEachInitializer(classDef, false, def -> { + scan(def); + errorUncaught(); + }); + } } public void visitNewClass(JCNewClass tree) { @@ -2095,11 +2095,11 @@ public AssignAnalyzer() { uninitsWhenFalse = new Bits(true); } - private boolean isInitialConstructor = false; + private boolean isConstructor; @Override protected void markDead() { - if (!isInitialConstructor) { + if (!isConstructor) { inits.inclRange(returnadr, nextadr); } else { for (int address = returnadr; address < nextadr; address++) { @@ -2346,13 +2346,10 @@ public void visitClassDef(JCClassDecl tree) { } // process all the static initializers - for (List l = tree.defs; l.nonEmpty(); l = l.tail) { - if (!l.head.hasTag(METHODDEF) && - (TreeInfo.flags(l.head) & STATIC) != 0) { - scan(l.head); - clearPendingExits(false); - } - } + forEachInitializer(tree, true, def -> { + scan(def); + clearPendingExits(false); + }); // verify all static final fields got initailized for (int i = firstadr; i < nextadr; i++) { @@ -2376,15 +2373,6 @@ public void visitClassDef(JCClassDecl tree) { } } - // process all the instance initializers - for (List l = tree.defs; l.nonEmpty(); l = l.tail) { - if (!l.head.hasTag(METHODDEF) && - (TreeInfo.flags(l.head) & STATIC) == 0) { - scan(l.head); - clearPendingExits(false); - } - } - // process all the methods for (List l = tree.defs; l.nonEmpty(); l = l.tail) { if (l.head.hasTag(METHODDEF)) { @@ -2423,13 +2411,16 @@ public void visitMethodDef(JCMethodDecl tree) { int returnadrPrev = returnadr; Assert.check(pendingExits.isEmpty()); - boolean lastInitialConstructor = isInitialConstructor; + boolean isConstructorPrev = isConstructor; try { - isInitialConstructor = TreeInfo.isInitialConstructor(tree); + isConstructor = TreeInfo.isConstructor(tree); - if (!isInitialConstructor) { + // We only track field initialization inside constructors + if (!isConstructor) { firstadr = nextadr; } + + // Mark all method parameters as DA for (List l = tree.params; l.nonEmpty(); l = l.tail) { JCVariableDecl def = l.head; scan(def); @@ -2445,7 +2436,7 @@ public void visitMethodDef(JCMethodDecl tree) { boolean isCompactOrGeneratedRecordConstructor = (tree.sym.flags() & Flags.COMPACT_RECORD_CONSTRUCTOR) != 0 || (tree.sym.flags() & (GENERATEDCONSTR | RECORD)) == (GENERATEDCONSTR | RECORD); - if (isInitialConstructor) { + if (isConstructor) { boolean isSynthesized = (tree.sym.flags() & GENERATEDCONSTR) != 0; for (int i = firstadr; i < nextadr; i++) { @@ -2487,7 +2478,7 @@ public void visitMethodDef(JCMethodDecl tree) { nextadr = nextadrPrev; firstadr = firstadrPrev; returnadr = returnadrPrev; - isInitialConstructor = lastInitialConstructor; + isConstructor = isConstructorPrev; } } finally { lint = lintPrev; @@ -2503,7 +2494,7 @@ private void clearPendingExits(boolean inMethod) { Assert.check((inMethod && exit.tree.hasTag(RETURN)) || log.hasErrorOn(exit.tree.pos()), exit.tree); - if (inMethod && isInitialConstructor) { + if (inMethod && isConstructor) { Assert.check(exit instanceof AssignPendingExit); inits.assign(((AssignPendingExit) exit).exit_inits); for (int i = firstadr; i < nextadr; i++) { @@ -2959,6 +2950,28 @@ public void visitThrow(JCThrow tree) { public void visitApply(JCMethodInvocation tree) { scanExpr(tree.meth); scanExprs(tree.args); + + // Handle superclass constructor invocations + if (isConstructor) { + + // If super(): at this point all initialization blocks will execute + Name name = TreeInfo.name(tree.meth); + if (name == names._super) { + forEachInitializer(classDef, false, def -> { + scan(def); + clearPendingExits(false); + }); + } + + // If this(): at this point all final uninitialized fields will get initialized + else if (name == names._this) { + for (int address = firstadr; address < nextadr; address++) { + VarSymbol sym = vardecls[address].sym; + if (isFinalUninitializedField(sym) && !sym.isStatic()) + letInit(tree.pos(), sym); + } + } + } } public void visitNewClass(JCNewClass tree) { diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Lower.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Lower.java index c51b1cb2a7e8b..39807aeaa5e18 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Lower.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Lower.java @@ -1859,7 +1859,7 @@ JCExpression makeOuterThis(DiagnosticPosition pos, TypeSymbol c) { ot = ots.head; } while (ot.owner != otc); if (otc.owner.kind != PCK && !otc.hasOuterInstance()) { - chk.earlyRefError(pos, c); + log.error(pos, Errors.NoEnclInstanceOfTypeInScope(c)); Assert.error(); // should have been caught in Attr return makeNull(); } @@ -1899,7 +1899,6 @@ JCExpression makeOwnerThisN(DiagnosticPosition pos, Symbol sym, boolean preciseM List ots = outerThisStack; if (ots.isEmpty()) { log.error(pos, Errors.NoEnclInstanceOfTypeInScope(c)); - Assert.error(); return makeNull(); } VarSymbol ot = ots.head; @@ -1911,7 +1910,6 @@ JCExpression makeOwnerThisN(DiagnosticPosition pos, Symbol sym, boolean preciseM ots = ots.tail; if (ots.isEmpty()) { log.error(pos, Errors.NoEnclInstanceOfTypeInScope(c)); - Assert.error(); return tree; } ot = ots.head; @@ -2351,17 +2349,19 @@ public void visitClassDef(JCClassDecl tree) { tree.defs = tree.defs.prepend(l.head); enterSynthetic(tree.pos(), l.head.sym, currentClass.members()); } - // If this$n was accessed, add the field definition and - // update initial constructors to initialize it + // If this$n was accessed, add the field definition and prepend + // initializer code to any super() invocation to initialize it if (currentClass.hasOuterInstance() && shouldEmitOuterThis(currentClass)) { tree.defs = tree.defs.prepend(otdef); enterSynthetic(tree.pos(), otdef.sym, currentClass.members()); - for (JCTree def : tree.defs) { - if (TreeInfo.isInitialConstructor(def)) { - JCMethodDecl mdef = (JCMethodDecl) def; - mdef.body.stats = mdef.body.stats.prepend( - initOuterThis(mdef.body.pos, mdef.params.head.sym)); + for (JCTree def : tree.defs) { + if (TreeInfo.isConstructor(def)) { + JCMethodDecl mdef = (JCMethodDecl)def; + if (TreeInfo.hasConstructorCall(mdef, names._super)) { + List initializer = List.of(initOuterThis(mdef.body.pos, mdef.params.head.sym)); + TreeInfo.mapSuperCalls(mdef.body, supercall -> make.Block(0, initializer.append(supercall))); + } } } } @@ -2826,19 +2826,18 @@ private void visitMethodDefInternal(JCMethodDecl tree) { tree.params = tree.params.prepend(otdef); } - // If this is an initial constructor, i.e., it does not start with - // this(...), insert initializers for this$n and proxies - // before (pre-1.4, after) the call to superclass constructor. - JCStatement selfCall = translate(tree.body.stats.head); + // Determine whether this constructor has a super() invocation + boolean invokesSuper = TreeInfo.hasConstructorCall(tree, names._super); - List added = List.nil(); + // Create initializers for this$n and proxies + ListBuffer added = new ListBuffer<>(); if (fvs.nonEmpty()) { List addedargtypes = List.nil(); for (List l = fvs; l.nonEmpty(); l = l.tail) { m.capturedLocals = m.capturedLocals.prepend((VarSymbol) (proxies.get(l.head))); - if (TreeInfo.isInitialConstructor(tree)) { + if (invokesSuper) { added = added.prepend( initField(tree.body.pos, proxies.get(l.head), prevProxies.get(l.head))); } @@ -2852,13 +2851,18 @@ private void visitMethodDefInternal(JCMethodDecl tree) { syms.methodClass); } + // Recursively translate existing local statements + tree.body.stats = translate(tree.body.stats); + + // Prepend initializers in front of super() call + if (added.nonEmpty()) { + List initializers = added.toList(); + TreeInfo.mapSuperCalls(tree.body, supercall -> make.Block(0, initializers.append(supercall))); + } + // pop local variables from proxy stack proxies = prevProxies; - // recursively translate following local statements and - // combine with this- or super-call - List stats = translate(tree.body.stats.tail); - tree.body.stats = stats.prepend(selfCall).prependList(added); outerThisStack = prevOuterThisStack; } else { Map prevLambdaTranslationMap = diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java index ab84d372bd72d..3980f03713d0a 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java @@ -1503,13 +1503,15 @@ Symbol findVar(Env env, Name name) { sym = findField(env1, env1.enclClass.sym.type, name, env1.enclClass.sym); } if (sym.exists()) { - if (staticOnly && - sym.kind == VAR && + if (sym.kind == VAR && sym.owner.kind == TYP && - (sym.flags() & STATIC) == 0) - return new StaticError(sym); - else - return sym; + (sym.flags() & STATIC) == 0) { + if (staticOnly) + return new StaticError(sym); + if (env1.info.ctorPrologue && (sym.flags_field & SYNTHETIC) == 0) + return new RefBeforeCtorCalledError(sym); + } + return sym; } else { bestSoFar = bestOf(bestSoFar, sym); } @@ -2006,11 +2008,15 @@ Symbol findFun(Env env, Name name, env1, env1.enclClass.sym.type, name, argtypes, typeargtypes, allowBoxing, useVarargs); if (sym.exists()) { - if (staticOnly && - sym.kind == MTH && - sym.owner.kind == TYP && - (sym.flags() & STATIC) == 0) return new StaticError(sym); - else return sym; + if (sym.kind == MTH && + sym.owner.kind == TYP && + (sym.flags() & STATIC) == 0) { + if (staticOnly) + return new StaticError(sym); + if (env1.info.ctorPrologue && env1 == env) + return new RefBeforeCtorCalledError(sym); + } + return sym; } else { bestSoFar = bestOf(bestSoFar, sym); } @@ -3767,7 +3773,10 @@ Symbol resolveSelf(DiagnosticPosition pos, if (env1.enclClass.sym == c) { Symbol sym = env1.info.scope.findFirst(name); if (sym != null) { - if (staticOnly) sym = new StaticError(sym); + if (staticOnly) + sym = new StaticError(sym); + else if (env1.info.ctorPrologue) + sym = new RefBeforeCtorCalledError(sym); return accessBase(sym, pos, env.enclClass.sym.type, name, true); } @@ -3781,6 +3790,8 @@ Symbol resolveSelf(DiagnosticPosition pos, //this might be a default super call if one of the superinterfaces is 'c' for (Type t : pruneInterfaces(env.enclClass.type)) { if (t.tsym == c) { + if (env.info.ctorPrologue) + log.error(pos, Errors.CantRefBeforeCtorCalled(name)); env.info.defaultSuperCallSite = t; return new VarSymbol(0, names._super, types.asSuper(env.enclClass.type, c), env.enclClass.sym); @@ -3882,8 +3893,8 @@ Type resolveImplicitThis(DiagnosticPosition pos, Env env, Type t, b Type thisType = (t.tsym.owner.kind.matches(KindSelector.VAL_MTH) ? resolveSelf(pos, env, t.getEnclosingType().tsym, names._this) : resolveSelfContaining(pos, env, t.tsym, isSuperCall)).type; - if (env.info.isSelfCall && thisType.tsym == env.enclClass.sym) { - log.error(pos, Errors.CantRefBeforeCtorCalled("this")); + if (env.info.ctorPrologue && thisType.tsym == env.enclClass.sym) { + log.error(pos, Errors.CantRefBeforeCtorCalled(names._this)); } return thisType; } @@ -4588,7 +4599,11 @@ JCDiagnostic inaccessiblePackageReason(Env env, PackageSymbol sym) class StaticError extends InvalidSymbolError { StaticError(Symbol sym) { - super(STATICERR, sym, "static error"); + this(sym, "static error"); + } + + StaticError(Symbol sym, String debugName) { + super(STATICERR, sym, debugName); } @Override @@ -4607,6 +4622,32 @@ JCDiagnostic getDiagnostic(JCDiagnostic.DiagnosticType dkind, } } + /** + * Specialization of {@link InvalidSymbolError} for illegal + * early accesses within a constructor prologue. + */ + class RefBeforeCtorCalledError extends StaticError { + + RefBeforeCtorCalledError(Symbol sym) { + super(sym, "prologue error"); + } + + @Override + JCDiagnostic getDiagnostic(JCDiagnostic.DiagnosticType dkind, + DiagnosticPosition pos, + Symbol location, + Type site, + Name name, + List argtypes, + List typeargtypes) { + Symbol errSym = ((sym.kind == TYP && sym.type.hasTag(CLASS)) + ? types.erasure(sym.type).tsym + : sym); + return diags.create(dkind, log.currentSource(), pos, + "cant.ref.before.ctor.called", errSym); + } + } + /** * InvalidSymbolError error class indicating that a pair of symbols * (either methods, constructors or operands) are ambiguous @@ -4720,7 +4761,7 @@ class BadMethodReferenceError extends StaticError { boolean unboundLookup; public BadMethodReferenceError(Symbol sym, boolean unboundLookup) { - super(sym); + super(sym, "bad method ref error"); this.unboundLookup = unboundLookup; } diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TypeEnter.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TypeEnter.java index 313ee5c16d144..ef74ccc9877ca 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TypeEnter.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TypeEnter.java @@ -570,7 +570,6 @@ protected Env baseEnv(JCClassDecl tree, Env env) { Env localEnv = outer.dup(tree, outer.info.dup(baseScope)); localEnv.baseClause = true; localEnv.outer = outer; - localEnv.info.isSelfCall = false; return localEnv; } diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Gen.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Gen.java index caa5249bb8324..4e5c4e49436c2 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Gen.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Gen.java @@ -541,44 +541,18 @@ private void checkStringConstant(DiagnosticPosition pos, Object constValue) { nerrs++; } - /** Insert instance initializer code into initial constructor. + /** Insert instance initializer code into constructors prior to the super() call. * @param md The tree potentially representing a * constructor's definition. * @param initCode The list of instance initializer statements. * @param initTAs Type annotations from the initializer expression. */ void normalizeMethod(JCMethodDecl md, List initCode, List initTAs) { - if (md.name == names.init && TreeInfo.isInitialConstructor(md)) { - // We are seeing a constructor that does not call another - // constructor of the same class. - List stats = md.body.stats; - ListBuffer newstats = new ListBuffer<>(); - - if (stats.nonEmpty()) { - // Copy initializers of synthetic variables generated in - // the translation of inner classes. - while (TreeInfo.isSyntheticInit(stats.head)) { - newstats.append(stats.head); - stats = stats.tail; - } - // Copy superclass constructor call - newstats.append(stats.head); - stats = stats.tail; - // Copy remaining synthetic initializers. - while (stats.nonEmpty() && - TreeInfo.isSyntheticInit(stats.head)) { - newstats.append(stats.head); - stats = stats.tail; - } - // Now insert the initializer code. - newstats.appendList(initCode); - // And copy all remaining statements. - while (stats.nonEmpty()) { - newstats.append(stats.head); - stats = stats.tail; - } - } - md.body.stats = newstats.toList(); + if (TreeInfo.isConstructor(md) && TreeInfo.hasConstructorCall(md, names._super)) { + // We are seeing a constructor that has a super() call. + // Find the super() invocation and append the given initializer code. + TreeInfo.mapSuperCalls(md.body, supercall -> make.Block(0, initCode.prepend(supercall))); + if (md.body.endpos == Position.NOPOS) md.body.endpos = TreeInfo.endPos(md.body.stats.last()); diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties index b485370da27ef..57e31441632a1 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties @@ -233,9 +233,17 @@ compiler.err.switch.expression.empty=\ compiler.err.switch.expression.no.result.expressions=\ switch expression does not have any result expressions -# 0: name -compiler.err.call.must.be.first.stmt.in.ctor=\ - call to {0} must be first statement in constructor +compiler.err.call.must.only.appear.in.ctor=\ + explicit constructor invocation may only appear within a constructor body + +compiler.err.redundant.superclass.init=\ + redundant explicit constructor invocation + +compiler.err.ctor.calls.not.allowed.here=\ + explicit constructor invocation not allowed here + +compiler.err.return.before.superclass.initialized=\ + ''return'' not allowed before explicit constructor invocation # 0: symbol kind, 1: name, 2: symbol kind, 3: type, 4: message segment compiler.err.cant.apply.symbol.noargs=\ @@ -387,7 +395,7 @@ compiler.err.annotation.decl.not.allowed.here=\ compiler.err.cant.inherit.from.final=\ cannot inherit from final {0} -# 0: symbol or string +# 0: symbol or name compiler.err.cant.ref.before.ctor.called=\ cannot reference {0} before supertype constructor has been called @@ -3193,6 +3201,9 @@ compiler.misc.feature.unconditional.patterns.in.instanceof=\ compiler.misc.feature.unnamed.classes=\ unnamed classes +compiler.misc.feature.super.init=\ + statements before super() + compiler.warn.underscore.as.identifier=\ as of release 9, ''_'' is a keyword, and may not be used as an identifier @@ -3895,8 +3906,8 @@ compiler.err.invalid.supertype.record=\ classes cannot directly extend {0} # 0: symbol -compiler.err.first.statement.must.be.call.to.another.constructor=\ - constructor is not canonical, so its first statement must invoke another constructor of class {0} +compiler.err.non.canonical.constructor.invoke.another.constructor=\ + constructor is not canonical, so it must invoke another constructor of class {0} compiler.err.instance.initializer.not.allowed.in.records=\ instance initializers not allowed in records diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/tree/TreeInfo.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/tree/TreeInfo.java index 1393256043447..ee4477135c678 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/tree/TreeInfo.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/tree/TreeInfo.java @@ -50,6 +50,7 @@ import javax.lang.model.element.ElementKind; import javax.tools.JavaFileObject; +import java.util.function.Function; import java.util.function.Predicate; import java.util.function.ToIntFunction; @@ -113,25 +114,6 @@ public static boolean hasConstructors(List trees) { return false; } - /** Is there a constructor invocation in the given list of trees? - */ - public static Name getConstructorInvocationName(List trees, Names names) { - for (JCTree tree : trees) { - if (tree.hasTag(EXEC)) { - JCExpressionStatement stat = (JCExpressionStatement)tree; - if (stat.expr.hasTag(APPLY)) { - JCMethodInvocation apply = (JCMethodInvocation)stat.expr; - Name methName = TreeInfo.name(apply.meth); - if (methName == names._this || - methName == names._super) { - return methName; - } - } - } - } - return names.empty; - } - public static boolean isMultiCatch(JCCatch catchClause) { return catchClause.param.vartype.hasTag(TYPEUNION); } @@ -170,18 +152,6 @@ public static Name calledMethodName(JCTree tree) { return null; } - /** Is this a call to this or super? - */ - public static boolean isSelfCall(JCTree tree) { - Name name = calledMethodName(tree); - if (name != null) { - Names names = name.table.names; - return name==names._this || name==names._super; - } else { - return false; - } - } - /** Is this tree a 'this' identifier? */ public static boolean isThisQualifier(JCTree tree) { @@ -238,32 +208,103 @@ public static List recordFieldTypes(JCClassDecl tree) { .collect(List.collector()); } - /** Is this a constructor whose first (non-synthetic) statement is not - * of the form this(...)? + /** Is the given method a constructor containing a super() or this() call? + */ + public static boolean hasAnyConstructorCall(JCMethodDecl tree) { + return hasConstructorCall(tree, null); + } + + /** Is the given method a constructor containing a super() and/or this() call? + * The "target" is either names._this, names._super, or null for either/both. + */ + public static boolean hasConstructorCall(JCMethodDecl tree, Name target) { + JCMethodInvocation app = findConstructorCall(tree); + return app != null && (target == null || target == name(app.meth)); + } + + /** Find the first super() or init() call in the given constructor. + */ + public static JCMethodInvocation findConstructorCall(JCMethodDecl md) { + if (!TreeInfo.isConstructor(md) || md.body == null) + return null; + return new ConstructorCallFinder(md.name.table.names).find(md).head; + } + + /** Finds all calls to this() and/or super() in a given constructor. + * We can't assume they will be "top level" statements, because + * some synthetic calls to super() are added inside { } blocks. + * So we must recurse through the method's entire syntax tree. + */ + private static class ConstructorCallFinder extends TreeScanner { + + final ListBuffer calls = new ListBuffer<>(); + final Names names; + + ConstructorCallFinder(Names names) { + this.names = names; + } + + List find(JCMethodDecl meth) { + scan(meth); + return calls.toList(); + } + + @Override + public void visitApply(JCMethodInvocation invoke) { + Name name = TreeInfo.name(invoke.meth); + if ((name == names._this || name == names._super)) + calls.append(invoke); + super.visitApply(invoke); + } + + @Override + public void visitClassDef(JCClassDecl tree) { + // don't descend any further + } + + @Override + public void visitLambda(JCLambda tree) { + // don't descend any further + } + } + + /** Finds super() invocations and translates them using the given mapping. + */ + public static void mapSuperCalls(JCBlock block, Function mapper) { + block.stats = block.stats.map(new TreeInfo.SuperCallTranslator(mapper)::translate); + } + + /** Finds all super() invocations and translates them somehow. */ - public static boolean isInitialConstructor(JCTree tree) { - JCMethodInvocation app = firstConstructorCall(tree); - if (app == null) return false; - Name meth = name(app.meth); - return meth == null || meth != meth.table.names._this; - } - - /** Return the first call in a constructor definition. */ - public static JCMethodInvocation firstConstructorCall(JCTree tree) { - if (!tree.hasTag(METHODDEF)) return null; - JCMethodDecl md = (JCMethodDecl) tree; - Names names = md.name.table.names; - if (md.name != names.init) return null; - if (md.body == null) return null; - List stats = md.body.stats; - // Synthetic initializations can appear before the super call. - while (stats.nonEmpty() && isSyntheticInit(stats.head)) - stats = stats.tail; - if (stats.isEmpty()) return null; - if (!stats.head.hasTag(EXEC)) return null; - JCExpressionStatement exec = (JCExpressionStatement) stats.head; - if (!exec.expr.hasTag(APPLY)) return null; - return (JCMethodInvocation)exec.expr; + private static class SuperCallTranslator extends TreeTranslator { + + final Function translator; + + /** Constructor. + * + * @param translator translates super() invocations, returning replacement statement or null for no change + */ + SuperCallTranslator(Function translator) { + this.translator = translator; + } + + // Because it returns void, anywhere super() can legally appear must be a location where a JCStatement + // could also appear, so it's OK that we are replacing a JCExpressionStatement with a JCStatement here. + @Override + public void visitExec(JCExpressionStatement stat) { + if (!TreeInfo.isSuperCall(stat) || (result = this.translator.apply(stat)) == null) + super.visitExec(stat); + } + + @Override + public void visitClassDef(JCClassDecl tree) { + // don't descend any further + } + + @Override + public void visitLambda(JCLambda tree) { + // don't descend any further + } } /** Return true if a tree represents a diamond new expr. */ diff --git a/src/jdk.jshell/share/classes/jdk/jshell/ExpressionToTypeInfo.java b/src/jdk.jshell/share/classes/jdk/jshell/ExpressionToTypeInfo.java index 414d58b589d94..e9eaccea32149 100644 --- a/src/jdk.jshell/share/classes/jdk/jshell/ExpressionToTypeInfo.java +++ b/src/jdk.jshell/share/classes/jdk/jshell/ExpressionToTypeInfo.java @@ -56,6 +56,7 @@ import com.sun.tools.javac.code.Type; import com.sun.tools.javac.code.Types; import com.sun.tools.javac.tree.JCTree.JCClassDecl; +import com.sun.tools.javac.tree.JCTree.JCMethodDecl; import com.sun.tools.javac.tree.TreeInfo; import com.sun.tools.javac.util.List; import com.sun.tools.javac.util.ListBuffer; @@ -428,7 +429,9 @@ private ExpressionInfo treeToInfo(TreePath tp) { MethodInvocationTree superCall = clazz.getMembers() .stream() - .map(TreeInfo::firstConstructorCall) + .filter(JCMethodDecl.class::isInstance) + .map(JCMethodDecl.class::cast) + .map(TreeInfo::findConstructorCall) .findAny() .get(); TreePath superCallPath diff --git a/test/langtools/tools/javac/AnonymousClass/AnonymousInSuperCallNegTest.out b/test/langtools/tools/javac/AnonymousClass/AnonymousInSuperCallNegTest.out index c04b45bce1e7d..140521689a095 100644 --- a/test/langtools/tools/javac/AnonymousClass/AnonymousInSuperCallNegTest.out +++ b/test/langtools/tools/javac/AnonymousClass/AnonymousInSuperCallNegTest.out @@ -1,2 +1,2 @@ -AnonymousInSuperCallNegTest.java:23:49: compiler.err.cant.ref.before.ctor.called: x +AnonymousInSuperCallNegTest.java:23:49: compiler.err.no.encl.instance.of.type.in.scope: AnonymousInSuperCallNegTest.JavacBug 1 error diff --git a/test/langtools/tools/javac/SuperInit/SuperInitFails.java b/test/langtools/tools/javac/SuperInit/SuperInitFails.java new file mode 100644 index 0000000000000..cd0fc3fd903b0 --- /dev/null +++ b/test/langtools/tools/javac/SuperInit/SuperInitFails.java @@ -0,0 +1,171 @@ +/* + * @test /nodynamiccopyright/ + * @bug 8194743 + * @summary Permit additional statements before this/super in constructors + * @compile/fail/ref=SuperInitFails.out -XDrawDiagnostics SuperInitFails.java + * @enablePreview + */ +import java.util.concurrent.atomic.AtomicReference; +public class SuperInitFails extends AtomicReference implements Iterable { + + private int x; + +/// GOOD EXAMPLES + + public SuperInitFails() { // this should be OK + } + + public SuperInitFails(Object x) { + this.x = x.hashCode(); // this should be OK + } + + public SuperInitFails(byte x) { + super(); // this should be OK + } + + public SuperInitFails(char x) { + this((int)x); // this should be OK + } + +/// FAIL EXAMPLES + + { + this(1); // this should FAIL + } + + { + super(); // this should FAIL + } + + void normalMethod1() { + super(); // this should FAIL + } + + void normalMethod2() { + this(); // this should FAIL + } + + void normalMethod3() { + Runnable r = () -> super(); // this should FAIL + } + + void normalMethod4() { + Runnable r = () -> this(); // this should FAIL + } + + public SuperInitFails(short x) { + hashCode(); // this should FAIL + super(); + } + + public SuperInitFails(float x) { + this.hashCode(); // this should FAIL + super(); + } + + public SuperInitFails(int x) { + super.hashCode(); // this should FAIL + super(); + } + + public SuperInitFails(long x) { + SuperInitFails.this.hashCode(); // this should FAIL + super(); + } + + public SuperInitFails(double x) { + SuperInitFails.super.hashCode(); // this should FAIL + super(); + } + + public SuperInitFails(byte[] x) { + { + super(); // this should FAIL + } + } + + public SuperInitFails(char[] x) { + if (x.length == 0) + return; // this should FAIL + super(); + } + + public SuperInitFails(short[] x) { + this.x = x.length; // this should FAIL + super(); + } + + public SuperInitFails(float[] x) { + System.identityHashCode(this); // this should FAIL + super(); + } + + public SuperInitFails(int[] x) { + this(this); // this should FAIL + } + + public SuperInitFails(long[] x) { + this(Object.this); // this should FAIL + } + + public SuperInitFails(double[] x) { + Iterable.super.spliterator(); // this should FAIL + super(); + } + + public SuperInitFails(byte[][] x) { + super(new Object() { + { + super(); // this should FAIL + } + }); + } + + public SuperInitFails(char[][] x) { + new Inner1(); // this should FAIL + super(); + } + + class Inner1 { + } + + record Record1(int value) { + Record1(float x) { // this should FAIL + } + } + + record Record2(int value) { + Record2(float x) { // this should FAIL + super(); + } + } + + @Override + public java.util.Iterator iterator() { + return null; + } + + public SuperInitFails(short[][] x) { + class Foo { + Foo() { + SuperInitFails.this.hashCode(); + } + }; + new Foo(); // this should FAIL + super(); + } + + public SuperInitFails(float[][] x) { + Runnable r = () -> { + super(); // this should FAIL + }; + } + + public SuperInitFails(int[][] z) { + super((Runnable)() -> x); // this should FAIL + } + + public SuperInitFails(long[][] z) { + super(new Inner1()); // this should FAIL + } +} diff --git a/test/langtools/tools/javac/SuperInit/SuperInitFails.out b/test/langtools/tools/javac/SuperInit/SuperInitFails.out new file mode 100644 index 0000000000000..60bbd83dcc034 --- /dev/null +++ b/test/langtools/tools/javac/SuperInit/SuperInitFails.out @@ -0,0 +1,29 @@ +SuperInitFails.java:57:9: compiler.err.cant.ref.before.ctor.called: hashCode() +SuperInitFails.java:62:9: compiler.err.cant.ref.before.ctor.called: this +SuperInitFails.java:67:9: compiler.err.cant.ref.before.ctor.called: super +SuperInitFails.java:72:23: compiler.err.cant.ref.before.ctor.called: this +SuperInitFails.java:77:23: compiler.err.cant.ref.before.ctor.called: super +SuperInitFails.java:94:9: compiler.err.cant.ref.before.ctor.called: this +SuperInitFails.java:99:33: compiler.err.cant.ref.before.ctor.called: this +SuperInitFails.java:104:14: compiler.err.cant.ref.before.ctor.called: this +SuperInitFails.java:108:20: compiler.err.not.encl.class: java.lang.Object +SuperInitFails.java:112:17: compiler.err.cant.ref.before.ctor.called: super +SuperInitFails.java:119:22: compiler.err.call.must.only.appear.in.ctor +SuperInitFails.java:125:9: compiler.err.cant.ref.before.ctor.called: this +SuperInitFails.java:133:9: compiler.err.non.canonical.constructor.invoke.another.constructor: SuperInitFails.Record1 +SuperInitFails.java:138:9: compiler.err.non.canonical.constructor.invoke.another.constructor: SuperInitFails.Record2 +SuperInitFails.java:154:9: compiler.err.cant.ref.before.ctor.called: this +SuperInitFails.java:165:31: compiler.err.cant.ref.before.ctor.called: x +SuperInitFails.java:169:15: compiler.err.cant.ref.before.ctor.called: this +SuperInitFails.java:33:13: compiler.err.call.must.only.appear.in.ctor +SuperInitFails.java:37:14: compiler.err.call.must.only.appear.in.ctor +SuperInitFails.java:41:14: compiler.err.call.must.only.appear.in.ctor +SuperInitFails.java:45:13: compiler.err.call.must.only.appear.in.ctor +SuperInitFails.java:49:33: compiler.err.call.must.only.appear.in.ctor +SuperInitFails.java:53:32: compiler.err.call.must.only.appear.in.ctor +SuperInitFails.java:83:18: compiler.err.ctor.calls.not.allowed.here +SuperInitFails.java:89:13: compiler.err.return.before.superclass.initialized +SuperInitFails.java:160:18: compiler.err.ctor.calls.not.allowed.here +- compiler.note.preview.filename: SuperInitFails.java, DEFAULT +- compiler.note.preview.recompile +26 errors diff --git a/test/langtools/tools/javac/SuperInit/SuperInitGood.java b/test/langtools/tools/javac/SuperInit/SuperInitGood.java new file mode 100644 index 0000000000000..cbcbee8fef0bb --- /dev/null +++ b/test/langtools/tools/javac/SuperInit/SuperInitGood.java @@ -0,0 +1,480 @@ +/* + * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +/* + * @test + * @bug 8194743 + * @summary Test valid placements of super()/this() in constructors + * @enablePreview + */ + +import java.util.concurrent.atomic.AtomicReference; + +public class SuperInitGood { + + SuperInitGood(Object obj) { + } + + SuperInitGood(int x) { + } + + // Default constructor provided by compiler + static class Test0 { + } + + // No explicit calls to this()/super() + static class Test1 { + Test1() { + } + Test1(int a) { + this.hashCode(); + } + } + + // Explicit calls to this()/super() + static class Test2 { + static int i; + Test2() { + this(0); + } + Test2(int i) { + Test2.i = i; + super(); + } + Test2(T obj) { + this(java.util.Objects.hashCode(obj)); + } + public T get() { + return null; + } + } + + // Explicit this()/super() with stuff in front + static class Test3 { + int x; + final int y; + final int z; + + Test3() { + new Object().hashCode(); + new Object().hashCode(); + super(); + this.x = new Object().hashCode(); + this.y = new Object().hashCode() % 17; + this.z = this.x + this.y; + } + } + + // Reference within constructor to outer class that's also my superclass + class Test5 extends SuperInitGood { + Test5(Object obj) { + if (obj == null) + throw new IllegalArgumentException(); + super(SuperInitGood.this); // NOT a 'this' reference + } + } + + // Initialization blocks + class Test6 { + final long startTime; + final int x; + { + this.x = 12; + } + Test6() { + long now = System.nanoTime(); + long then = now + 1000000L; + while (System.nanoTime() < then) { + try { + Thread.sleep(1); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + break; + } + } + super(); + this.startTime = now; + } + } + + // Mix up inner classes, proxies, and super() calls + // Copied mostly from UnverifiableInitForNestedLocalClassTest.java + public static void test7(final String arg) { + final String inlined = " inlined "; + class LocalClass { + String m() { + return "LocalClass " + arg + inlined; + } + + class SubClass extends LocalClass { + @Override + String m() { + return "SubClass " + arg + inlined; + } + } + + class SubSubClass extends SubClass { + @Override + String m() { + return "SubSubClass " + arg + inlined; + } + } + + class AnotherLocal { + class AnotherSub extends LocalClass { + AnotherSub() { + } + AnotherSub(int x) { + this((char)x); + } + AnotherSub(char y) { + super(); + } + @Override + String m() { + return "AnotherSub " + arg + inlined; + } + } + } + } + } + + // Anonymous inner class + public static void test8() { + new Test2(null) { + @Override + public Byte get() { + return (byte)-1; + } + }; + } + + // Qualified super() invocation + public static class Test9 extends Test5 { + + public Test9(SuperInitGood implicit, Object obj) { + obj.hashCode(); + implicit.super(obj); + } + } + + // Copied from WhichImplicitThis6 + public static class Test10 { + private int i; + public Test10(int i) {} + public class Sub extends Test10 { + public Sub() { + super(i); // i is not inherited, so it is the enclosing i + } + } + } + + // Two constructors where only one invokes super() + public static class Test11 { + public Test11() { + } + public Test11(int x) { + super(); + } + } + + // Nested version of the previous test + public static class Test12 { + Test12() { + class Sub { + public Sub() { + } + public Sub(int j) { + super(); + } + } + } + } + + // Nested super()'s requiring initialization code appended + public static class Test13 extends SuperInitGood { + final int x = new Object().hashCode(); + Test13() { + super(new Object() { + public void foo() { + class Bar { + final int y = new Object().hashCode(); + Bar() { + super(); + } + Bar(int ignored) { + } + } + } + }); + } + } + + // Initializer in initializer block + public static class Test14 { + final int x; // initialized in constructor + final int y; // initialized in initialization block + final int z = 13; // initialized with intializer value + public Test14() { + this(0); + } + public Test14(boolean z) { + this.x = z ? 1 : 0; + } + public Test14(int x) { + super(); + this.x = x; + } + { + this.y = -1; + } + } + + // Qualified super() invocation with superclass instance + public static class Test15 { + + final String name; + + public Test15(String name) { + this.name = name; + } + + public class Test15b extends Test15 { + + public Test15b(String name) { + super(name); + } + + public String getName() { + return Test15.this.name; + } + } + } + + public static class Test15c extends Test15.Test15b { + public Test15c(Test15 a, String name) { + a.super(name); + } + } + + // Mixing up outer instances, proxies, and initializers + public static class Test16 { + + final String x = String.valueOf(new Object().hashCode()); + + public void run() { + + final String y = String.valueOf(new Object().hashCode()); + + class Sub { + + final String z; + + Sub(String z, int ignored) { + this(z, (float)ignored); + } + + Sub(String z, float ignored) { + this.z = z; + } + + Sub(String z, byte ignored) { + super(); + this.z = z; + } + + Sub(String z, char ignored) { + this(z, (int)ignored); + } + + String x() { + return x; + } + + String y() { + return y; + } + + String z() { + return z; + } + } + + final String z = String.valueOf(new Object().hashCode()); + + final Sub[] subs = new Sub[] { + new Sub(z, 1), + new Sub(z, -1), + new Sub(z, (float)0), + new Sub(z, (byte)0), + new Sub(z, (char)0) + }; + + for (int i = 0; i < subs.length; i++) { + //System.err.println("i = " + i); + final Sub sub = subs[i]; + final String subx = sub.x(); + final String suby = sub.y(); + final String subz = sub.z(); + if (!x.equals(subx)) + throw new RuntimeException("x=" + x + " but sub[" + i + "].x()=" + subx); + if (!y.equals(suby)) + throw new RuntimeException("y=" + y + " but sub[" + i + "].y()=" + suby); + if (!z.equals(subz)) + throw new RuntimeException("z=" + z + " but sub[" + i + "].z()=" + subz); + } + } + } + + // Records + public class Test17 { + + record Rectangle(float length, float width) { } + + record StringHolder(String string) { + StringHolder { + java.util.Objects.requireNonNull(string); + } + } + + record ValueHolder(int value) { + ValueHolder(float x) { + if (Float.isNaN(x)) + throw new IllegalArgumentException(); + this((int)x); + } + } + } + + // Exceptions thrown by initializer block + public static class Test18 extends AtomicReference { + + { + if ((this.get().hashCode() % 3) == 0) + throw new MyException(); + } + + public Test18(Object obj) throws MyException { + super(obj); + } + + public Test18(boolean fail) throws MyException { + Object obj; + for (obj = new Object(); true; obj = new Object()) { + if (((obj.hashCode() % 3) == 0) != fail) + continue; + break; + } + this(obj); + } + + public static class MyException extends Exception { + } + } + + // super()/this() within outer try block but inside inner class + public static class Test19 { + public Test19(int x) { + try { + new Test1(x) { + @Override + public int hashCode() { + return x ^ super.hashCode(); + } + }; + } catch (StackOverflowError e) { + // ignore + } + } + } + + // local class declared before super(), but not used until after super() + public static class Test20 { + public Test20() { + class Foo { + Foo() { + Test20.this.hashCode(); + } + } + super(); + new Foo(); + } + } + + // local class inside super() parameter list + public static class Test21 extends AtomicReference { + private int x; + public Test21() { + super(switch ("foo".hashCode()) { + default -> { + class Nested {{ System.out.println(x); }} // class is NOT instantiated - OK + yield "bar"; + } + }); + } + } + + public static void main(String[] args) { + new Test0(); + new Test1(); + new Test1(7); + new Test2(); + new Test2<>(args); + new Test3(); + new SuperInitGood(3).new Test5(3); + new SuperInitGood(3).new Test6(); + SuperInitGood.test7("foo"); + SuperInitGood.test8(); + new Test9(new SuperInitGood(5), "abc"); + new Test10(7); + new Test11(9); + new Test12(); + new Test13(); + Test14 t14 = new Test14(); + assert t14.x == 0 && t14.y == -1 && t14.z == 13; + t14 = new Test14(7); + assert t14.x == 7 && t14.y == -1 && t14.z == 13; + new Test15c(new Test15("foo"), "bar"); + new Test16().run(); + new Test17.StringHolder("foo"); + try { + new Test17.StringHolder(null); + throw new Error(); + } catch (NullPointerException e) { + // expected + } + try { + new Test18(true); + assert false : "expected exception"; + } catch (Test18.MyException e) { + // expected + } + try { + new Test18(false); + } catch (Test18.MyException e) { + assert false : "unexpected exception: " + e; + } + new Test19(123); + new Test20(); + new Test21(); + } +} diff --git a/test/langtools/tools/javac/diags/examples.not-yet.txt b/test/langtools/tools/javac/diags/examples.not-yet.txt index 06b7cea1afe16..9d7d79eca165e 100644 --- a/test/langtools/tools/javac/diags/examples.not-yet.txt +++ b/test/langtools/tools/javac/diags/examples.not-yet.txt @@ -141,7 +141,6 @@ compiler.warn.invalid.path # this warning is genera compiler.err.invalid.path # this error is generated only in Windows systems compiler.note.multiple.elements # needs user code compiler.err.preview.feature.disabled.classfile # preview feature support: needs compilation against classfile -compiler.warn.preview.feature.use # preview feature support: not generated currently compiler.warn.preview.feature.use.classfile # preview feature support: needs compilation against classfile compiler.note.preview.plural.additional # preview feature support: diag test causes intermittent failures (see JDK-8201498) compiler.misc.bad.intersection.target.for.functional.expr # currently not generated, should be removed? diff --git a/test/langtools/tools/javac/diags/examples/CallMustBeFirst.java b/test/langtools/tools/javac/diags/examples/CallOnlyInConstructor.java similarity index 84% rename from test/langtools/tools/javac/diags/examples/CallMustBeFirst.java rename to test/langtools/tools/javac/diags/examples/CallOnlyInConstructor.java index 3f0987062450c..f1018be46cebe 100644 --- a/test/langtools/tools/javac/diags/examples/CallMustBeFirst.java +++ b/test/langtools/tools/javac/diags/examples/CallOnlyInConstructor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, 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 @@ -21,11 +21,10 @@ * questions. */ -// key: compiler.err.call.must.be.first.stmt.in.ctor +// key: compiler.err.call.must.only.appear.in.ctor -class CallMustBeFirst { - CallMustBeFirst() { - int i = 0; +class CallOnlyInConstructor { + void foo() { super(); } } diff --git a/test/langtools/tools/javac/diags/examples/CallsNotAllowedHere.java b/test/langtools/tools/javac/diags/examples/CallsNotAllowedHere.java new file mode 100644 index 0000000000000..2f9239f09c024 --- /dev/null +++ b/test/langtools/tools/javac/diags/examples/CallsNotAllowedHere.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2023, 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. + */ + +// key: compiler.err.ctor.calls.not.allowed.here + +class CallsNotAllowedHere { + public CallsNotAllowedHere() { + { + super(); + } + } +} diff --git a/test/langtools/tools/javac/diags/examples/FeatureStatementsBeforeSuper.java b/test/langtools/tools/javac/diags/examples/FeatureStatementsBeforeSuper.java new file mode 100644 index 0000000000000..f0e44836850b4 --- /dev/null +++ b/test/langtools/tools/javac/diags/examples/FeatureStatementsBeforeSuper.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2023, 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. + */ + + // key: compiler.misc.feature.super.init + // key: compiler.warn.preview.feature.use + // options: --enable-preview -source ${jdk.version} -Xlint:preview + +class FeatureStatementsBeforeSuper { + FeatureStatementsBeforeSuper() { + System.out.println(); + super(); + } +} diff --git a/test/langtools/tools/javac/diags/examples/FirstInvocationMustBeAnotherConstructor.java b/test/langtools/tools/javac/diags/examples/FirstInvocationMustBeAnotherConstructor.java index e2478244cc90c..da7b69ba16cd1 100644 --- a/test/langtools/tools/javac/diags/examples/FirstInvocationMustBeAnotherConstructor.java +++ b/test/langtools/tools/javac/diags/examples/FirstInvocationMustBeAnotherConstructor.java @@ -21,7 +21,7 @@ * questions. */ -// key: compiler.err.first.statement.must.be.call.to.another.constructor +// key: compiler.err.non.canonical.constructor.invoke.another.constructor record R(int x) { public R(int x, int y) { this.x = x; } diff --git a/test/langtools/tools/javac/diags/examples/RedundantSuperclassInit.java b/test/langtools/tools/javac/diags/examples/RedundantSuperclassInit.java new file mode 100644 index 0000000000000..82c5faf1d0443 --- /dev/null +++ b/test/langtools/tools/javac/diags/examples/RedundantSuperclassInit.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2023, 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. + */ + +// key: compiler.err.redundant.superclass.init + +class RedundantSuperclassInit { + RedundantSuperclassInit() { + super(); + super(); + } +} diff --git a/test/langtools/tools/javac/diags/examples/ReturnBeforeSuperclassInit.java b/test/langtools/tools/javac/diags/examples/ReturnBeforeSuperclassInit.java new file mode 100644 index 0000000000000..dc883b59b8f69 --- /dev/null +++ b/test/langtools/tools/javac/diags/examples/ReturnBeforeSuperclassInit.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2023, 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. + */ + +// key: compiler.err.return.before.superclass.initialized +// key: compiler.note.preview.filename +// key: compiler.note.preview.recompile +// options: --enable-preview -source ${jdk.version} + +class ReturnBeforeSuperclassInit { + ReturnBeforeSuperclassInit(boolean maybe) { + if (maybe) + return; + super(); + } +} diff --git a/test/langtools/tools/javac/records/RecordCompilationTests.java b/test/langtools/tools/javac/records/RecordCompilationTests.java index 5f20459832428..5a51496ff1973 100644 --- a/test/langtools/tools/javac/records/RecordCompilationTests.java +++ b/test/langtools/tools/javac/records/RecordCompilationTests.java @@ -403,11 +403,11 @@ record R(String v) { assertFail("compiler.err.invalid.canonical.constructor.in.record", "record R(int x, int y) { public R(int y, int x) { this.x = this.y = 0; }}"); - // first invocation should be one to the canonical - assertFail("compiler.err.first.statement.must.be.call.to.another.constructor", + // constructor is not canonical, so it must only invoke another constructor + assertFail("compiler.err.non.canonical.constructor.invoke.another.constructor", "record R(int x, int y) { public R(int y, int x, int z) { this.x = this.y = 0; } }"); - assertFail("compiler.err.first.statement.must.be.call.to.another.constructor", + assertFail("compiler.err.non.canonical.constructor.invoke.another.constructor", "record R(int x, int y) { public R(int y, int x, int z) { super(); this.x = this.y = 0; } }"); assertOK("record R(int x, int y) { " + From f0a12c571b3c2e7f5c1cdadb70742f27a69f93e3 Mon Sep 17 00:00:00 2001 From: Magnus Ihse Bursie Date: Mon, 27 Nov 2023 17:32:41 +0000 Subject: [PATCH 068/250] 8320763: Fix spacing arround assignment in spec.gmk.in Reviewed-by: erikj, iris --- make/autoconf/spec.gmk.in | 702 +++++++++++++++++++------------------- 1 file changed, 351 insertions(+), 351 deletions(-) diff --git a/make/autoconf/spec.gmk.in b/make/autoconf/spec.gmk.in index 3ac1ea7427197..25f985bd45df9 100644 --- a/make/autoconf/spec.gmk.in +++ b/make/autoconf/spec.gmk.in @@ -31,9 +31,9 @@ # using 'configure @CONFIGURE_COMMAND_LINE@' # The command line given to configure. -CONFIGURE_COMMAND_LINE:=@CONFIGURE_COMMAND_LINE@ +CONFIGURE_COMMAND_LINE := @CONFIGURE_COMMAND_LINE@ # The current directory when configure was run -CONFIGURE_START_DIR:=@CONFIGURE_START_DIR@ +CONFIGURE_START_DIR := @CONFIGURE_START_DIR@ # How configure was originally called, if not called directly REAL_CONFIGURE_COMMAND_EXEC_SHORT := @REAL_CONFIGURE_COMMAND_EXEC_SHORT@ @@ -41,7 +41,7 @@ REAL_CONFIGURE_COMMAND_EXEC_FULL := @REAL_CONFIGURE_COMMAND_EXEC_FULL@ REAL_CONFIGURE_COMMAND_LINE := @REAL_CONFIGURE_COMMAND_LINE@ # A self-referential reference to this file. -SPEC:=@SPEC@ +SPEC := @SPEC@ # Path to autoconf if overridden by the user, to be used by "make reconfigure" AUTOCONF := @AUTOCONF@ @@ -49,9 +49,9 @@ AUTOCONF := @AUTOCONF@ # SPACE and COMMA are defined in MakeBase.gmk, but they are also used in # some definitions here, and are needed if MakeBase.gmk is not included before # this file. -X:= -SPACE:=$(X) $(X) -COMMA:=, +X := +SPACE := $(X) $(X) +COMMA := , # What make to use for main processing, after bootstrapping top-level Makefile. MAKE := @MAKE@ @@ -66,37 +66,37 @@ export CLASSPATH := @CLASSPATH@ MAKE_ARGS = $(MAKE_LOG_FLAGS) -r -R -I $(TOPDIR)/make/common SPEC=$(SPEC) \ MAKE_LOG_FLAGS="$(MAKE_LOG_FLAGS)" $(MAKE_LOG_VARS) -OUTPUT_SYNC_SUPPORTED:=@OUTPUT_SYNC_SUPPORTED@ -OUTPUT_SYNC:=@OUTPUT_SYNC@ +OUTPUT_SYNC_SUPPORTED := @OUTPUT_SYNC_SUPPORTED@ +OUTPUT_SYNC := @OUTPUT_SYNC@ # Override the shell with bash -BASH:=@BASH@ -BASH_ARGS:=@BASH_ARGS@ -SHELL:=$(BASH) $(BASH_ARGS) +BASH := @BASH@ +BASH_ARGS := @BASH_ARGS@ +SHELL := $(BASH) $(BASH_ARGS) # The "human readable" name of this configuration -CONF_NAME:=@CONF_NAME@ +CONF_NAME := @CONF_NAME@ # The built jdk will run in this target system. -OPENJDK_TARGET_OS:=@OPENJDK_TARGET_OS@ -OPENJDK_TARGET_OS_TYPE:=@OPENJDK_TARGET_OS_TYPE@ -OPENJDK_TARGET_OS_ENV:=@OPENJDK_TARGET_OS_ENV@ -OPENJDK_TARGET_OS_UPPERCASE:=@OPENJDK_TARGET_OS_UPPERCASE@ +OPENJDK_TARGET_OS := @OPENJDK_TARGET_OS@ +OPENJDK_TARGET_OS_TYPE := @OPENJDK_TARGET_OS_TYPE@ +OPENJDK_TARGET_OS_ENV := @OPENJDK_TARGET_OS_ENV@ +OPENJDK_TARGET_OS_UPPERCASE := @OPENJDK_TARGET_OS_UPPERCASE@ -OPENJDK_TARGET_CPU:=@OPENJDK_TARGET_CPU@ -OPENJDK_TARGET_CPU_ARCH:=@OPENJDK_TARGET_CPU_ARCH@ -OPENJDK_TARGET_CPU_BITS:=@OPENJDK_TARGET_CPU_BITS@ -OPENJDK_TARGET_CPU_ENDIAN:=@OPENJDK_TARGET_CPU_ENDIAN@ +OPENJDK_TARGET_CPU := @OPENJDK_TARGET_CPU@ +OPENJDK_TARGET_CPU_ARCH := @OPENJDK_TARGET_CPU_ARCH@ +OPENJDK_TARGET_CPU_BITS := @OPENJDK_TARGET_CPU_BITS@ +OPENJDK_TARGET_CPU_ENDIAN := @OPENJDK_TARGET_CPU_ENDIAN@ -OPENJDK_TARGET_LIBC:=@OPENJDK_TARGET_LIBC@ +OPENJDK_TARGET_LIBC := @OPENJDK_TARGET_LIBC@ -COMPILE_TYPE:=@COMPILE_TYPE@ +COMPILE_TYPE := @COMPILE_TYPE@ # Legacy support -OPENJDK_TARGET_CPU_LEGACY:=@OPENJDK_TARGET_CPU_LEGACY@ -OPENJDK_TARGET_CPU_LEGACY_LIB:=@OPENJDK_TARGET_CPU_LEGACY_LIB@ -OPENJDK_TARGET_CPU_OSARCH:=@OPENJDK_TARGET_CPU_OSARCH@ -OPENJDK_TARGET_OS_INCLUDE_SUBDIR:=@OPENJDK_TARGET_OS_INCLUDE_SUBDIR@ +OPENJDK_TARGET_CPU_LEGACY := @OPENJDK_TARGET_CPU_LEGACY@ +OPENJDK_TARGET_CPU_LEGACY_LIB := @OPENJDK_TARGET_CPU_LEGACY_LIB@ +OPENJDK_TARGET_CPU_OSARCH := @OPENJDK_TARGET_CPU_OSARCH@ +OPENJDK_TARGET_OS_INCLUDE_SUBDIR := @OPENJDK_TARGET_OS_INCLUDE_SUBDIR@ HOTSPOT_TARGET_OS := @HOTSPOT_TARGET_OS@ HOTSPOT_TARGET_OS_TYPE := @HOTSPOT_TARGET_OS_TYPE@ @@ -107,31 +107,31 @@ HOTSPOT_TARGET_CPU_DEFINE := @HOTSPOT_TARGET_CPU_DEFINE@ HOTSPOT_TARGET_LIBC := @HOTSPOT_TARGET_LIBC@ -OPENJDK_TARGET_BUNDLE_PLATFORM:=@OPENJDK_TARGET_BUNDLE_PLATFORM@ +OPENJDK_TARGET_BUNDLE_PLATFORM := @OPENJDK_TARGET_BUNDLE_PLATFORM@ JDK_ARCH_ABI_PROP_NAME := @JDK_ARCH_ABI_PROP_NAME@ # We are building on this build system. # When not cross-compiling, it is the same as the target. -OPENJDK_BUILD_OS:=@OPENJDK_BUILD_OS@ -OPENJDK_BUILD_OS_TYPE:=@OPENJDK_BUILD_OS_TYPE@ -OPENJDK_BUILD_OS_ENV:=@OPENJDK_BUILD_OS_ENV@ +OPENJDK_BUILD_OS := @OPENJDK_BUILD_OS@ +OPENJDK_BUILD_OS_TYPE := @OPENJDK_BUILD_OS_TYPE@ +OPENJDK_BUILD_OS_ENV := @OPENJDK_BUILD_OS_ENV@ -OPENJDK_BUILD_CPU:=@OPENJDK_BUILD_CPU@ -OPENJDK_BUILD_CPU_ARCH:=@OPENJDK_BUILD_CPU_ARCH@ -OPENJDK_BUILD_CPU_BITS:=@OPENJDK_BUILD_CPU_BITS@ -OPENJDK_BUILD_CPU_ENDIAN:=@OPENJDK_BUILD_CPU_ENDIAN@ +OPENJDK_BUILD_CPU := @OPENJDK_BUILD_CPU@ +OPENJDK_BUILD_CPU_ARCH := @OPENJDK_BUILD_CPU_ARCH@ +OPENJDK_BUILD_CPU_BITS := @OPENJDK_BUILD_CPU_BITS@ +OPENJDK_BUILD_CPU_ENDIAN := @OPENJDK_BUILD_CPU_ENDIAN@ -OPENJDK_BUILD_LIBC:=@OPENJDK_BUILD_LIBC@ +OPENJDK_BUILD_LIBC := @OPENJDK_BUILD_LIBC@ -OPENJDK_BUILD_OS_INCLUDE_SUBDIR:=@OPENJDK_TARGET_OS_INCLUDE_SUBDIR@ +OPENJDK_BUILD_OS_INCLUDE_SUBDIR := @OPENJDK_TARGET_OS_INCLUDE_SUBDIR@ # Target platform value in ModuleTarget class file attribute. -OPENJDK_MODULE_TARGET_PLATFORM:=@OPENJDK_MODULE_TARGET_PLATFORM@ +OPENJDK_MODULE_TARGET_PLATFORM := @OPENJDK_MODULE_TARGET_PLATFORM@ # OS_* properties in release file -RELEASE_FILE_OS_NAME:=@RELEASE_FILE_OS_NAME@ -RELEASE_FILE_OS_ARCH:=@RELEASE_FILE_OS_ARCH@ -RELEASE_FILE_LIBC:=@RELEASE_FILE_LIBC@ +RELEASE_FILE_OS_NAME := @RELEASE_FILE_OS_NAME@ +RELEASE_FILE_OS_ARCH := @RELEASE_FILE_OS_ARCH@ +RELEASE_FILE_LIBC := @RELEASE_FILE_LIBC@ SOURCE_DATE := @SOURCE_DATE@ ISO_8601_FORMAT_STRING := @ISO_8601_FORMAT_STRING@ @@ -142,8 +142,8 @@ ifneq ($(SOURCE_DATE), updated) SOURCE_DATE_ISO_8601 := @SOURCE_DATE_ISO_8601@ endif -LIBM:=@LIBM@ -LIBDL:=@LIBDL@ +LIBM := @LIBM@ +LIBDL := @LIBDL@ WINENV_ROOT := @WINENV_ROOT@ WINENV_PREFIX := @WINENV_PREFIX@ @@ -169,37 +169,37 @@ SYSROOT_CFLAGS := @SYSROOT_CFLAGS@ SYSROOT_LDFLAGS := @SYSROOT_LDFLAGS@ # The top-level directory of the source repository -TOPDIR:=@TOPDIR@ +TOPDIR := @TOPDIR@ # Usually the top level directory, but could be something else if a custom # root is defined. -WORKSPACE_ROOT:=@WORKSPACE_ROOT@ -IMPORT_MODULES_CLASSES:=@IMPORT_MODULES_CLASSES@ -IMPORT_MODULES_CMDS:=@IMPORT_MODULES_CMDS@ -IMPORT_MODULES_LIBS:=@IMPORT_MODULES_LIBS@ -IMPORT_MODULES_CONF:=@IMPORT_MODULES_CONF@ -IMPORT_MODULES_LEGAL:=@IMPORT_MODULES_LEGAL@ -IMPORT_MODULES_MAN:=@IMPORT_MODULES_MAN@ -IMPORT_MODULES_SRC:=@IMPORT_MODULES_SRC@ -IMPORT_MODULES_MAKE:=@IMPORT_MODULES_MAKE@ - -COPYRIGHT_YEAR:=@COPYRIGHT_YEAR@ -HOTSPOT_BUILD_TIME:=@HOTSPOT_BUILD_TIME@ +WORKSPACE_ROOT := @WORKSPACE_ROOT@ +IMPORT_MODULES_CLASSES := @IMPORT_MODULES_CLASSES@ +IMPORT_MODULES_CMDS := @IMPORT_MODULES_CMDS@ +IMPORT_MODULES_LIBS := @IMPORT_MODULES_LIBS@ +IMPORT_MODULES_CONF := @IMPORT_MODULES_CONF@ +IMPORT_MODULES_LEGAL := @IMPORT_MODULES_LEGAL@ +IMPORT_MODULES_MAN := @IMPORT_MODULES_MAN@ +IMPORT_MODULES_SRC := @IMPORT_MODULES_SRC@ +IMPORT_MODULES_MAKE := @IMPORT_MODULES_MAKE@ + +COPYRIGHT_YEAR := @COPYRIGHT_YEAR@ +HOTSPOT_BUILD_TIME := @HOTSPOT_BUILD_TIME@ # Platform naming variables -LAUNCHER_NAME:=@LAUNCHER_NAME@ -PRODUCT_NAME:=@PRODUCT_NAME@ -PRODUCT_SUFFIX:=@PRODUCT_SUFFIX@ -JDK_RC_PLATFORM_NAME:=@JDK_RC_PLATFORM_NAME@ -JDK_RC_NAME:=@JDK_RC_NAME@ -COMPANY_NAME:=@COMPANY_NAME@ -HOTSPOT_VM_DISTRO:=@HOTSPOT_VM_DISTRO@ -MACOSX_BUNDLE_NAME_BASE=@MACOSX_BUNDLE_NAME_BASE@ -MACOSX_BUNDLE_ID_BASE=@MACOSX_BUNDLE_ID_BASE@ -MACOSX_BUNDLE_BUILD_VERSION=@MACOSX_BUNDLE_BUILD_VERSION@ -USERNAME:=@USERNAME@ -VENDOR_URL:=@VENDOR_URL@ -VENDOR_URL_BUG:=@VENDOR_URL_BUG@ -VENDOR_URL_VM_BUG:=@VENDOR_URL_VM_BUG@ +LAUNCHER_NAME := @LAUNCHER_NAME@ +PRODUCT_NAME := @PRODUCT_NAME@ +PRODUCT_SUFFIX := @PRODUCT_SUFFIX@ +JDK_RC_PLATFORM_NAME := @JDK_RC_PLATFORM_NAME@ +JDK_RC_NAME := @JDK_RC_NAME@ +COMPANY_NAME := @COMPANY_NAME@ +HOTSPOT_VM_DISTRO := @HOTSPOT_VM_DISTRO@ +MACOSX_BUNDLE_NAME_BASE = @MACOSX_BUNDLE_NAME_BASE@ +MACOSX_BUNDLE_ID_BASE = @MACOSX_BUNDLE_ID_BASE@ +MACOSX_BUNDLE_BUILD_VERSION = @MACOSX_BUNDLE_BUILD_VERSION@ +USERNAME := @USERNAME@ +VENDOR_URL := @VENDOR_URL@ +VENDOR_URL_BUG := @VENDOR_URL_BUG@ +VENDOR_URL_VM_BUG := @VENDOR_URL_VM_BUG@ # New (JEP-223) version information @@ -298,11 +298,11 @@ ifneq ($(VENDOR_URL_VM_BUG),) endif # Different naming strings generated from the above information. -RUNTIME_NAME=$(PRODUCT_NAME) $(PRODUCT_SUFFIX) +RUNTIME_NAME = $(PRODUCT_NAME) $(PRODUCT_SUFFIX) # How to compile the code: release, fastdebug or slowdebug -DEBUG_LEVEL:=@DEBUG_LEVEL@ -HOTSPOT_DEBUG_LEVEL:=@HOTSPOT_DEBUG_LEVEL@ +DEBUG_LEVEL := @DEBUG_LEVEL@ +HOTSPOT_DEBUG_LEVEL := @HOTSPOT_DEBUG_LEVEL@ # Which JVM variants to build (space-separated list) JVM_VARIANTS := @JVM_VARIANTS@ @@ -342,19 +342,19 @@ ENABLE_FULL_DOCS := @ENABLE_FULL_DOCS@ OUTPUTDIR := @OUTPUTDIR@ # Colon left out to be able to override IMAGES_OUTPUTDIR for bootcycle-images -SUPPORT_OUTPUTDIR=$(OUTPUTDIR)/support -BUILDTOOLS_OUTPUTDIR=$(OUTPUTDIR)/buildtools +SUPPORT_OUTPUTDIR = $(OUTPUTDIR)/support +BUILDTOOLS_OUTPUTDIR = $(OUTPUTDIR)/buildtools -HOTSPOT_OUTPUTDIR=$(OUTPUTDIR)/hotspot -JDK_OUTPUTDIR=$(OUTPUTDIR)/jdk -IMAGES_OUTPUTDIR=$(OUTPUTDIR)/images -BUNDLES_OUTPUTDIR=$(OUTPUTDIR)/bundles -TESTMAKE_OUTPUTDIR=$(OUTPUTDIR)/test-make -MAKESUPPORT_OUTPUTDIR=$(OUTPUTDIR)/make-support +HOTSPOT_OUTPUTDIR = $(OUTPUTDIR)/hotspot +JDK_OUTPUTDIR = $(OUTPUTDIR)/jdk +IMAGES_OUTPUTDIR = $(OUTPUTDIR)/images +BUNDLES_OUTPUTDIR = $(OUTPUTDIR)/bundles +TESTMAKE_OUTPUTDIR = $(OUTPUTDIR)/test-make +MAKESUPPORT_OUTPUTDIR = $(OUTPUTDIR)/make-support # This does not get overridden in a bootcycle build -CONFIGURESUPPORT_OUTPUTDIR:=@CONFIGURESUPPORT_OUTPUTDIR@ -BUILDJDK_OUTPUTDIR=$(OUTPUTDIR)/buildjdk +CONFIGURESUPPORT_OUTPUTDIR := @CONFIGURESUPPORT_OUTPUTDIR@ +BUILDJDK_OUTPUTDIR = $(OUTPUTDIR)/buildjdk BUILD_FAILURE_HANDLER := @BUILD_FAILURE_HANDLER@ @@ -380,49 +380,49 @@ HSDIS_LIBS := @HSDIS_LIBS@ # The boot jdk to use. This is overridden in bootcycle-spec.gmk. Make sure to keep # it in sync. -BOOT_JDK:=@BOOT_JDK@ +BOOT_JDK := @BOOT_JDK@ -BUILD_JDK:=@BUILD_JDK@ -CREATE_BUILDJDK:=@CREATE_BUILDJDK@ -EXTERNAL_BUILDJDK:=@EXTERNAL_BUILDJDK@ +BUILD_JDK := @BUILD_JDK@ +CREATE_BUILDJDK := @CREATE_BUILDJDK@ +EXTERNAL_BUILDJDK := @EXTERNAL_BUILDJDK@ # Whether the boot jdk jar supports --date=TIMESTAMP -BOOT_JDK_JAR_SUPPORTS_DATE:=@BOOT_JDK_JAR_SUPPORTS_DATE@ +BOOT_JDK_JAR_SUPPORTS_DATE := @BOOT_JDK_JAR_SUPPORTS_DATE@ # When compiling Java source to be run by the boot jdk # use these extra flags, eg -source 6 -target 6 -BOOT_JDK_SOURCETARGET:=@BOOT_JDK_SOURCETARGET@ +BOOT_JDK_SOURCETARGET := @BOOT_JDK_SOURCETARGET@ # Information about the build system -NUM_CORES:=@NUM_CORES@ -MEMORY_SIZE:=@MEMORY_SIZE@ -ENABLE_JAVAC_SERVER:=@ENABLE_JAVAC_SERVER@ +NUM_CORES := @NUM_CORES@ +MEMORY_SIZE := @MEMORY_SIZE@ +ENABLE_JAVAC_SERVER := @ENABLE_JAVAC_SERVER@ # Store javac server synchronization files here, and # the javac server log files. -JAVAC_SERVER_DIR=$(MAKESUPPORT_OUTPUTDIR)/javacservers +JAVAC_SERVER_DIR = $(MAKESUPPORT_OUTPUTDIR)/javacservers # Number of parallel jobs to use for compilation -JOBS?=@JOBS@ -TEST_JOBS?=@TEST_JOBS@ +JOBS ?= @JOBS@ +TEST_JOBS ?= @TEST_JOBS@ # Default make target -DEFAULT_MAKE_TARGET:=@DEFAULT_MAKE_TARGET@ -DEFAULT_LOG:=@DEFAULT_LOG@ +DEFAULT_MAKE_TARGET := @DEFAULT_MAKE_TARGET@ +DEFAULT_LOG := @DEFAULT_LOG@ # Fallback linker -ENABLE_FALLBACK_LINKER:=@ENABLE_FALLBACK_LINKER@ - -FREETYPE_TO_USE:=@FREETYPE_TO_USE@ -FREETYPE_LIBS:=@FREETYPE_LIBS@ -FREETYPE_CFLAGS:=@FREETYPE_CFLAGS@ -FONTCONFIG_CFLAGS:=@FONTCONFIG_CFLAGS@ -CUPS_CFLAGS:=@CUPS_CFLAGS@ -ALSA_LIBS:=@ALSA_LIBS@ -ALSA_CFLAGS:=@ALSA_CFLAGS@ -LIBFFI_LIBS:=@LIBFFI_LIBS@ -LIBFFI_CFLAGS:=@LIBFFI_CFLAGS@ -ENABLE_LIBFFI_BUNDLING:=@ENABLE_LIBFFI_BUNDLING@ -LIBFFI_LIB_FILE:=@LIBFFI_LIB_FILE@ +ENABLE_FALLBACK_LINKER := @ENABLE_FALLBACK_LINKER@ + +FREETYPE_TO_USE := @FREETYPE_TO_USE@ +FREETYPE_LIBS := @FREETYPE_LIBS@ +FREETYPE_CFLAGS := @FREETYPE_CFLAGS@ +FONTCONFIG_CFLAGS := @FONTCONFIG_CFLAGS@ +CUPS_CFLAGS := @CUPS_CFLAGS@ +ALSA_LIBS := @ALSA_LIBS@ +ALSA_CFLAGS := @ALSA_CFLAGS@ +LIBFFI_LIBS := @LIBFFI_LIBS@ +LIBFFI_CFLAGS := @LIBFFI_CFLAGS@ +ENABLE_LIBFFI_BUNDLING := @ENABLE_LIBFFI_BUNDLING@ +LIBFFI_LIB_FILE := @LIBFFI_LIB_FILE@ FILE_MACRO_CFLAGS := @FILE_MACRO_CFLAGS@ REPRODUCIBLE_CFLAGS := @REPRODUCIBLE_CFLAGS@ BRANCH_PROTECTION_CFLAGS := @BRANCH_PROTECTION_CFLAGS@ @@ -438,45 +438,45 @@ JMH_VERSION := @JMH_VERSION@ GTEST_FRAMEWORK_SRC := @GTEST_FRAMEWORK_SRC@ # Source file for cacerts -CACERTS_FILE=@CACERTS_FILE@ +CACERTS_FILE = @CACERTS_FILE@ # Source folder for user provided cacerts PEM files -CACERTS_SRC=@CACERTS_SRC@ +CACERTS_SRC = @CACERTS_SRC@ # Enable unlimited crypto policy -UNLIMITED_CRYPTO=@UNLIMITED_CRYPTO@ +UNLIMITED_CRYPTO = @UNLIMITED_CRYPTO@ -GCOV_ENABLED=@GCOV_ENABLED@ -JCOV_ENABLED=@JCOV_ENABLED@ -JCOV_HOME=@JCOV_HOME@ -JCOV_INPUT_JDK=@JCOV_INPUT_JDK@ -JCOV_FILTERS=@JCOV_FILTERS@ +GCOV_ENABLED = @GCOV_ENABLED@ +JCOV_ENABLED = @JCOV_ENABLED@ +JCOV_HOME = @JCOV_HOME@ +JCOV_INPUT_JDK = @JCOV_INPUT_JDK@ +JCOV_FILTERS = @JCOV_FILTERS@ # AddressSanitizer -ASAN_ENABLED:=@ASAN_ENABLED@ +ASAN_ENABLED := @ASAN_ENABLED@ # LeakSanitizer -LSAN_ENABLED:=@LSAN_ENABLED@ +LSAN_ENABLED := @LSAN_ENABLED@ # UndefinedBehaviorSanitizer -UBSAN_ENABLED:=@UBSAN_ENABLED@ -UBSAN_CFLAGS:=@UBSAN_CFLAGS@ -UBSAN_LDFLAGS:=@UBSAN_LDFLAGS@ +UBSAN_ENABLED := @UBSAN_ENABLED@ +UBSAN_CFLAGS := @UBSAN_CFLAGS@ +UBSAN_LDFLAGS := @UBSAN_LDFLAGS@ # Necessary additional compiler flags to compile X11 -X_CFLAGS:=@X_CFLAGS@ -X_LIBS:=@X_LIBS@ +X_CFLAGS := @X_CFLAGS@ +X_LIBS := @X_LIBS@ # The lowest required version of macosx -MACOSX_VERSION_MIN=@MACOSX_VERSION_MIN@ +MACOSX_VERSION_MIN = @MACOSX_VERSION_MIN@ # The highest allowed version of macosx -MACOSX_VERSION_MAX=@MACOSX_VERSION_MAX@ +MACOSX_VERSION_MAX = @MACOSX_VERSION_MAX@ # The macosx code signing configuration -MACOSX_CODESIGN_MODE:=@MACOSX_CODESIGN_MODE@ -MACOSX_CODESIGN_IDENTITY=@MACOSX_CODESIGN_IDENTITY@ +MACOSX_CODESIGN_MODE := @MACOSX_CODESIGN_MODE@ +MACOSX_CODESIGN_IDENTITY = @MACOSX_CODESIGN_IDENTITY@ # Toolchain type: gcc, clang, xlc, microsoft... -TOOLCHAIN_TYPE:=@TOOLCHAIN_TYPE@ +TOOLCHAIN_TYPE := @TOOLCHAIN_TYPE@ TOOLCHAIN_VERSION := @TOOLCHAIN_VERSION@ CC_VERSION_NUMBER := @CC_VERSION_NUMBER@ CXX_VERSION_NUMBER := @CXX_VERSION_NUMBER@ @@ -485,38 +485,38 @@ CXX_VERSION_NUMBER := @CXX_VERSION_NUMBER@ HOTSPOT_TOOLCHAIN_TYPE := @HOTSPOT_TOOLCHAIN_TYPE@ # Option used to tell the compiler whether to create 32- or 64-bit executables -COMPILER_TARGET_BITS_FLAG:=@COMPILER_TARGET_BITS_FLAG@ -COMPILER_SUPPORTS_TARGET_BITS_FLAG=@COMPILER_SUPPORTS_TARGET_BITS_FLAG@ +COMPILER_TARGET_BITS_FLAG := @COMPILER_TARGET_BITS_FLAG@ +COMPILER_SUPPORTS_TARGET_BITS_FLAG = @COMPILER_SUPPORTS_TARGET_BITS_FLAG@ # Option used to pass a command file to the compiler -COMPILER_COMMAND_FILE_FLAG:=@COMPILER_COMMAND_FILE_FLAG@ +COMPILER_COMMAND_FILE_FLAG := @COMPILER_COMMAND_FILE_FLAG@ # Option for specifying a file which saves the binder commands # produced by the link step (for debugging, currently AIX only) -COMPILER_BINDCMD_FILE_FLAG:=@COMPILER_BINDCMD_FILE_FLAG@ +COMPILER_BINDCMD_FILE_FLAG := @COMPILER_BINDCMD_FILE_FLAG@ -CC_OUT_OPTION:=@CC_OUT_OPTION@ -LD_OUT_OPTION:=@LD_OUT_OPTION@ -AR_OUT_OPTION:=@AR_OUT_OPTION@ +CC_OUT_OPTION := @CC_OUT_OPTION@ +LD_OUT_OPTION := @LD_OUT_OPTION@ +AR_OUT_OPTION := @AR_OUT_OPTION@ # Flags used for overriding the default opt setting for a C/C++ source file. -C_O_FLAG_HIGHEST_JVM:=@C_O_FLAG_HIGHEST_JVM@ -C_O_FLAG_HIGHEST:=@C_O_FLAG_HIGHEST@ -C_O_FLAG_HI:=@C_O_FLAG_HI@ -C_O_FLAG_NORM:=@C_O_FLAG_NORM@ -C_O_FLAG_NONE:=@C_O_FLAG_NONE@ -C_O_FLAG_SIZE:=@C_O_FLAG_SIZE@ -CXX_O_FLAG_HIGHEST_JVM:=@CXX_O_FLAG_HIGHEST_JVM@ -CXX_O_FLAG_HIGHEST:=@CXX_O_FLAG_HIGHEST@ -CXX_O_FLAG_HI:=@CXX_O_FLAG_HI@ -CXX_O_FLAG_NORM:=@CXX_O_FLAG_NORM@ -CXX_O_FLAG_NONE:=@CXX_O_FLAG_NONE@ -CXX_O_FLAG_SIZE:=@CXX_O_FLAG_SIZE@ +C_O_FLAG_HIGHEST_JVM := @C_O_FLAG_HIGHEST_JVM@ +C_O_FLAG_HIGHEST := @C_O_FLAG_HIGHEST@ +C_O_FLAG_HI := @C_O_FLAG_HI@ +C_O_FLAG_NORM := @C_O_FLAG_NORM@ +C_O_FLAG_NONE := @C_O_FLAG_NONE@ +C_O_FLAG_SIZE := @C_O_FLAG_SIZE@ +CXX_O_FLAG_HIGHEST_JVM := @CXX_O_FLAG_HIGHEST_JVM@ +CXX_O_FLAG_HIGHEST := @CXX_O_FLAG_HIGHEST@ +CXX_O_FLAG_HI := @CXX_O_FLAG_HI@ +CXX_O_FLAG_NORM := @CXX_O_FLAG_NORM@ +CXX_O_FLAG_NONE := @CXX_O_FLAG_NONE@ +CXX_O_FLAG_SIZE := @CXX_O_FLAG_SIZE@ GENDEPS_FLAGS := @GENDEPS_FLAGS@ DISABLE_WARNING_PREFIX := @DISABLE_WARNING_PREFIX@ -CFLAGS_WARNINGS_ARE_ERRORS:=@CFLAGS_WARNINGS_ARE_ERRORS@ +CFLAGS_WARNINGS_ARE_ERRORS := @CFLAGS_WARNINGS_ARE_ERRORS@ DISABLED_WARNINGS := @DISABLED_WARNINGS@ DISABLED_WARNINGS_C := @DISABLED_WARNINGS_C@ DISABLED_WARNINGS_CXX := @DISABLED_WARNINGS_CXX@ @@ -524,20 +524,20 @@ DISABLED_WARNINGS_CXX := @DISABLED_WARNINGS_CXX@ # A global flag (true or false) determining if native warnings are considered errors. WARNINGS_AS_ERRORS := @WARNINGS_AS_ERRORS@ -CFLAGS_CCACHE:=@CFLAGS_CCACHE@ -ADLC_LANGSTD_CXXFLAGS=@ADLC_LANGSTD_CXXFLAGS@ -ADLC_LDFLAGS=@ADLC_LDFLAGS@ +CFLAGS_CCACHE := @CFLAGS_CCACHE@ +ADLC_LANGSTD_CXXFLAGS = @ADLC_LANGSTD_CXXFLAGS@ +ADLC_LDFLAGS = @ADLC_LDFLAGS@ # Tools that potentially need to be cross compilation aware. CC := @CCACHE@ @ICECC@ @CC@ # CFLAGS used to compile the jdk native libraries (C-code) -CFLAGS_JDKLIB:=@CFLAGS_JDKLIB@ -CXXFLAGS_JDKLIB:=@CXXFLAGS_JDKLIB@ +CFLAGS_JDKLIB := @CFLAGS_JDKLIB@ +CXXFLAGS_JDKLIB := @CXXFLAGS_JDKLIB@ # CFLAGS used to compile the jdk native launchers (C-code) -CFLAGS_JDKEXE:=@CFLAGS_JDKEXE@ -CXXFLAGS_JDKEXE:=@CXXFLAGS_JDKEXE@ +CFLAGS_JDKEXE := @CFLAGS_JDKEXE@ +CXXFLAGS_JDKEXE := @CXXFLAGS_JDKEXE@ FDLIBM_CFLAGS := @FDLIBM_CFLAGS@ JVM_CFLAGS := @JVM_CFLAGS@ @@ -565,26 +565,26 @@ LD := @LD@ SYSROOT := @SYSROOT@ # LDFLAGS used to link the jdk native libraries (C-code) -LDFLAGS_JDKLIB:=@LDFLAGS_JDKLIB@ -JDKLIB_LIBS:=@JDKLIB_LIBS@ +LDFLAGS_JDKLIB := @LDFLAGS_JDKLIB@ +JDKLIB_LIBS := @JDKLIB_LIBS@ # LDFLAGS used to link the jdk native launchers (C-code) -LDFLAGS_JDKEXE:=@LDFLAGS_JDKEXE@ -JDKEXE_LIBS:=@JDKEXE_LIBS@ +LDFLAGS_JDKEXE := @LDFLAGS_JDKEXE@ +JDKEXE_LIBS := @JDKEXE_LIBS@ # LDFLAGS specific to C++ linking. -LDFLAGS_CXX_JDK:=@LDFLAGS_CXX_JDK@ +LDFLAGS_CXX_JDK := @LDFLAGS_CXX_JDK@ # LDFLAGS specific to partial linking. -LDFLAGS_CXX_PARTIAL_LINKING:=@LDFLAGS_CXX_PARTIAL_LINKING@ +LDFLAGS_CXX_PARTIAL_LINKING := @LDFLAGS_CXX_PARTIAL_LINKING@ # Sometimes a different linker is needed for c++ libs LDCXX := @LDCXX@ # The flags for linking libstdc++ linker. -LIBCXX:=@LIBCXX@ +LIBCXX := @LIBCXX@ # Compiler and linker flags used when building native tests -LDFLAGS_TESTEXE:=@LDFLAGS_TESTEXE@ +LDFLAGS_TESTEXE := @LDFLAGS_TESTEXE@ # BUILD_CC/BUILD_LD is a compiler/linker that generates code that is runnable on the # build platform. @@ -595,31 +595,31 @@ BUILD_LDCXX := @BUILD_LDCXX@ BUILD_AS := @BUILD_AS@ BUILD_AR := @BUILD_AR@ BUILD_NM := @BUILD_NM@ -BUILD_OBJCOPY:=@BUILD_OBJCOPY@ -BUILD_STRIP:=@BUILD_STRIP@ -BUILD_SYSROOT_CFLAGS:=@BUILD_SYSROOT_CFLAGS@ -BUILD_SYSROOT_LDFLAGS:=@BUILD_SYSROOT_LDFLAGS@ +BUILD_OBJCOPY := @BUILD_OBJCOPY@ +BUILD_STRIP := @BUILD_STRIP@ +BUILD_SYSROOT_CFLAGS := @BUILD_SYSROOT_CFLAGS@ +BUILD_SYSROOT_LDFLAGS := @BUILD_SYSROOT_LDFLAGS@ AS := @AS@ # AR is used to create a static library (is ar in unix, lib.exe in windows) AR := @AR@ -ARFLAGS:=@ARFLAGS@ +ARFLAGS := @ARFLAGS@ -NM:=@NM@ -NMFLAGS:=@NMFLAGS@ -STRIP:=@STRIP@ -OBJDUMP:=@OBJDUMP@ -CXXFILT:=@CXXFILT@ +NM := @NM@ +NMFLAGS := @NMFLAGS@ +STRIP := @STRIP@ +OBJDUMP := @OBJDUMP@ +CXXFILT := @CXXFILT@ -LIPO:=@LIPO@ -INSTALL_NAME_TOOL:=@INSTALL_NAME_TOOL@ +LIPO := @LIPO@ +INSTALL_NAME_TOOL := @INSTALL_NAME_TOOL@ METAL := @METAL@ METALLIB := @METALLIB@ # Options to linker to specify a mapfile. # (Note absence of := assignment, because we do not want to evaluate the macro body here) -SET_SHARED_LIBRARY_MAPFILE=@SET_SHARED_LIBRARY_MAPFILE@ +SET_SHARED_LIBRARY_MAPFILE = @SET_SHARED_LIBRARY_MAPFILE@ # # Options for generating debug symbols @@ -627,52 +627,52 @@ COMPILE_WITH_DEBUG_SYMBOLS := @COMPILE_WITH_DEBUG_SYMBOLS@ COPY_DEBUG_SYMBOLS := @COPY_DEBUG_SYMBOLS@ ZIP_EXTERNAL_DEBUG_SYMBOLS := @ZIP_EXTERNAL_DEBUG_SYMBOLS@ -CFLAGS_DEBUG_SYMBOLS:=@CFLAGS_DEBUG_SYMBOLS@ -ASFLAGS_DEBUG_SYMBOLS:=@ASFLAGS_DEBUG_SYMBOLS@ +CFLAGS_DEBUG_SYMBOLS := @CFLAGS_DEBUG_SYMBOLS@ +ASFLAGS_DEBUG_SYMBOLS := @ASFLAGS_DEBUG_SYMBOLS@ # # Compress (or not) jars -COMPRESS_JARS=@COMPRESS_JARS@ +COMPRESS_JARS = @COMPRESS_JARS@ # Options to linker to specify the library name. # (Note absence of := assignment, because we do not want to evaluate the macro body here) -SET_SHARED_LIBRARY_NAME=@SET_SHARED_LIBRARY_NAME@ +SET_SHARED_LIBRARY_NAME = @SET_SHARED_LIBRARY_NAME@ -SHARED_LIBRARY_FLAGS=@SHARED_LIBRARY_FLAGS@ +SHARED_LIBRARY_FLAGS = @SHARED_LIBRARY_FLAGS@ # Set origin using the linker, ie use the relative path to the dependent library to find the dependencies. # (Note absence of := assignment, because we do not want to evaluate the macro body here) -SET_SHARED_LIBRARY_ORIGIN=@SET_SHARED_LIBRARY_ORIGIN@ -SET_EXECUTABLE_ORIGIN=@SET_EXECUTABLE_ORIGIN@ +SET_SHARED_LIBRARY_ORIGIN = @SET_SHARED_LIBRARY_ORIGIN@ +SET_EXECUTABLE_ORIGIN = @SET_EXECUTABLE_ORIGIN@ # Different OS:es have different ways of naming shared libraries. # The SHARED_LIBRARY macro takes "verify" as and argument and returns: # "libverify.so" or "libverify.dylib" or "verify.dll" depending on platform. # (Note absence of := assignment, because we do not want to evaluate the macro body here) -SHARED_LIBRARY=@SHARED_LIBRARY@ -STATIC_LIBRARY=@STATIC_LIBRARY@ -LIBRARY_PREFIX:=@LIBRARY_PREFIX@ -SHARED_LIBRARY_SUFFIX:=@SHARED_LIBRARY_SUFFIX@ -STATIC_LIBRARY_SUFFIX:=@STATIC_LIBRARY_SUFFIX@ -EXECUTABLE_SUFFIX:=@EXECUTABLE_SUFFIX@ -OBJ_SUFFIX:=@OBJ_SUFFIX@ -STATIC_BUILD:=@STATIC_BUILD@ - -STRIPFLAGS:=@STRIPFLAGS@ - -JAVA_FLAGS:=@JAVA_FLAGS@ -JAVA_FLAGS_BIG:=@JAVA_FLAGS_BIG@ -JAVA_FLAGS_SMALL:=@JAVA_FLAGS_SMALL@ -BUILD_JAVA_FLAGS_SMALL:=@BUILD_JAVA_FLAGS_SMALL@ -JAVA_TOOL_FLAGS_SMALL:=@JAVA_TOOL_FLAGS_SMALL@ +SHARED_LIBRARY = @SHARED_LIBRARY@ +STATIC_LIBRARY = @STATIC_LIBRARY@ +LIBRARY_PREFIX := @LIBRARY_PREFIX@ +SHARED_LIBRARY_SUFFIX := @SHARED_LIBRARY_SUFFIX@ +STATIC_LIBRARY_SUFFIX := @STATIC_LIBRARY_SUFFIX@ +EXECUTABLE_SUFFIX := @EXECUTABLE_SUFFIX@ +OBJ_SUFFIX := @OBJ_SUFFIX@ +STATIC_BUILD := @STATIC_BUILD@ + +STRIPFLAGS := @STRIPFLAGS@ + +JAVA_FLAGS := @JAVA_FLAGS@ +JAVA_FLAGS_BIG := @JAVA_FLAGS_BIG@ +JAVA_FLAGS_SMALL := @JAVA_FLAGS_SMALL@ +BUILD_JAVA_FLAGS_SMALL := @BUILD_JAVA_FLAGS_SMALL@ +JAVA_TOOL_FLAGS_SMALL := @JAVA_TOOL_FLAGS_SMALL@ # The *_CMD variables are defined separately to be easily overridden in bootcycle-spec.gmk # for bootcycle-images build. Make sure to keep them in sync. Do not use the *_CMD # versions of the variables directly. -JAVA_CMD:=@JAVA@ -JAVAC_CMD:=@JAVAC@ -JAVADOC_CMD:=@JAVADOC@ -JAR_CMD:=@JAR@ +JAVA_CMD := @JAVA@ +JAVAC_CMD := @JAVAC@ +JAVADOC_CMD := @JAVADOC@ +JAR_CMD := @JAR@ JLINK_CMD := @JLINK@ JMOD_CMD := @JMOD@ # These variables are meant to be used. They are defined with = instead of := to make @@ -689,10 +689,10 @@ JTREG_JDK := @JTREG_JDK@ JTREG_JAVA = @FIXPATH@ $(JTREG_JDK)/bin/java $(JAVA_FLAGS_BIG) $(JAVA_FLAGS) BUILD_JAVA_FLAGS := @BOOTCYCLE_JVM_ARGS_BIG@ -BUILD_JAVA=@FIXPATH@ $(BUILD_JDK)/bin/java $(BUILD_JAVA_FLAGS) -BUILD_JAVA_SMALL=@FIXPATH@ $(BUILD_JDK)/bin/java $(BUILD_JAVA_FLAGS_SMALL) -BUILD_JAVAC=@FIXPATH@ $(BUILD_JDK)/bin/javac -BUILD_JAR=@FIXPATH@ $(BUILD_JDK)/bin/jar +BUILD_JAVA = @FIXPATH@ $(BUILD_JDK)/bin/java $(BUILD_JAVA_FLAGS) +BUILD_JAVA_SMALL = @FIXPATH@ $(BUILD_JDK)/bin/java $(BUILD_JAVA_FLAGS_SMALL) +BUILD_JAVAC = @FIXPATH@ $(BUILD_JDK)/bin/javac +BUILD_JAR = @FIXPATH@ $(BUILD_JDK)/bin/jar DOCS_REFERENCE_JAVADOC := @DOCS_REFERENCE_JAVADOC@ @@ -723,104 +723,104 @@ JAVADOC_MAIN_CLASS = -m jdk.javadoc.interim/jdk.javadoc.internal.tool.Main # You run the new javac using the boot jdk with $(BOOT_JDK)/bin/java $(NEW_JAVAC) ... # Use = assignment to be able to override in bootcycle-spec.gmk -NEW_JAVAC = $(INTERIM_LANGTOOLS_ARGS) $(JAVAC_MAIN_CLASS) +NEW_JAVAC = $(INTERIM_LANGTOOLS_ARGS) $(JAVAC_MAIN_CLASS) NEW_JAVADOC = $(INTERIM_LANGTOOLS_ARGS) $(JAVADOC_MAIN_CLASS) -JMOD_COMPRESS:=@JMOD_COMPRESS@ -JLINK_KEEP_PACKAGED_MODULES:=@JLINK_KEEP_PACKAGED_MODULES@ +JMOD_COMPRESS := @JMOD_COMPRESS@ +JLINK_KEEP_PACKAGED_MODULES := @JLINK_KEEP_PACKAGED_MODULES@ RCFLAGS := @RCFLAGS@ # Tools adhering to a minimal and common standard of posix compliance. -AWK:=@AWK@ -BASENAME:=@BASENAME@ -CAT:=@CAT@ -CCACHE:=@CCACHE@ +AWK := @AWK@ +BASENAME := @BASENAME@ +CAT := @CAT@ +CCACHE := @CCACHE@ # CD is going away, but remains to cater for legacy makefiles. -CD:=cd -CHMOD:=@CHMOD@ -CODESIGN:=@CODESIGN@ -CP:=@CP@ -CUT:=@CUT@ -DATE:=@DATE@ -IS_GNU_DATE:=@IS_GNU_DATE@ -DIFF:=@DIFF@ -DIRNAME:=@DIRNAME@ -DSYMUTIL:=@DSYMUTIL@ -FIND:=@FIND@ -FIND_DELETE:=@FIND_DELETE@ -FLOCK:=@FLOCK@ -ECHO:=@ECHO@ -EGREP:=@EGREP@ -FGREP:=@FGREP@ -GREP:=@GREP@ -GZIP:=@GZIP@ -HEAD:=@HEAD@ -LS:=@LS@ -LN:=@LN@ -MIG:=@MIG@ -MKDIR:=@MKDIR@ -MV:=@MV@ -NICE:=@NICE@ -PANDOC:=@PANDOC@ -PATCH:=@PATCH@ -PRINTF:=@PRINTF@ -READLINK:=@READLINK@ -RM:=@RM@ -RMDIR:=@RMDIR@ -SED:=@SED@ -SH:=@SH@ -SORT:=@SORT@ -TAR:=@TAR@ -TAIL:=@TAIL@ -TEE:=@TEE@ -TIME:=@TIME@ -IS_GNU_TIME:=@IS_GNU_TIME@ -TR:=@TR@ -TOUCH:=@TOUCH@ -WC:=@WC@ -XARGS:=@XARGS@ -ZIPEXE:=@ZIPEXE@ -UNZIP:=@UNZIP@ -MT:=@MT@ -RC:=@RC@ -DUMPBIN:=@DUMPBIN@ -PATHTOOL:=@PATHTOOL@ -WSLPATH:=@WSLPATH@ -LDD:=@LDD@ -OTOOL:=@OTOOL@ -READELF:=@READELF@ -EXPR:=@EXPR@ -FILE:=@FILE@ -DOT:=@DOT@ -GIT:=@GIT@ -OBJCOPY:=@OBJCOPY@ -SETFILE:=@SETFILE@ -XATTR:=@XATTR@ -JT_HOME:=@JT_HOME@ -JIB_HOME:=@JIB_HOME@ +CD := cd +CHMOD := @CHMOD@ +CODESIGN := @CODESIGN@ +CP := @CP@ +CUT := @CUT@ +DATE := @DATE@ +IS_GNU_DATE := @IS_GNU_DATE@ +DIFF := @DIFF@ +DIRNAME := @DIRNAME@ +DSYMUTIL := @DSYMUTIL@ +FIND := @FIND@ +FIND_DELETE := @FIND_DELETE@ +FLOCK := @FLOCK@ +ECHO := @ECHO@ +EGREP := @EGREP@ +FGREP := @FGREP@ +GREP := @GREP@ +GZIP := @GZIP@ +HEAD := @HEAD@ +LS := @LS@ +LN := @LN@ +MIG := @MIG@ +MKDIR := @MKDIR@ +MV := @MV@ +NICE := @NICE@ +PANDOC := @PANDOC@ +PATCH := @PATCH@ +PRINTF := @PRINTF@ +READLINK := @READLINK@ +RM := @RM@ +RMDIR := @RMDIR@ +SED := @SED@ +SH := @SH@ +SORT := @SORT@ +TAR := @TAR@ +TAIL := @TAIL@ +TEE := @TEE@ +TIME := @TIME@ +IS_GNU_TIME := @IS_GNU_TIME@ +TR := @TR@ +TOUCH := @TOUCH@ +WC := @WC@ +XARGS := @XARGS@ +ZIPEXE := @ZIPEXE@ +UNZIP := @UNZIP@ +MT := @MT@ +RC := @RC@ +DUMPBIN := @DUMPBIN@ +PATHTOOL := @PATHTOOL@ +WSLPATH := @WSLPATH@ +LDD := @LDD@ +OTOOL := @OTOOL@ +READELF := @READELF@ +EXPR := @EXPR@ +FILE := @FILE@ +DOT := @DOT@ +GIT := @GIT@ +OBJCOPY := @OBJCOPY@ +SETFILE := @SETFILE@ +XATTR := @XATTR@ +JT_HOME := @JT_HOME@ +JIB_HOME := @JIB_HOME@ DTRACE := @DTRACE@ FIXPATH := @FIXPATH@ FIXPATH_BASE := @FIXPATH_BASE@ -ULIMIT:=@ULIMIT@ +ULIMIT := @ULIMIT@ -TAR_TYPE:=@TAR_TYPE@ -TAR_INCLUDE_PARAM:=@TAR_INCLUDE_PARAM@ -TAR_SUPPORTS_TRANSFORM:=@TAR_SUPPORTS_TRANSFORM@ +TAR_TYPE := @TAR_TYPE@ +TAR_INCLUDE_PARAM := @TAR_INCLUDE_PARAM@ +TAR_SUPPORTS_TRANSFORM := @TAR_SUPPORTS_TRANSFORM@ # Build setup -USE_EXTERNAL_LIBJPEG:=@USE_EXTERNAL_LIBJPEG@ -USE_EXTERNAL_LIBGIF:=@USE_EXTERNAL_LIBGIF@ -USE_EXTERNAL_LIBZ:=@USE_EXTERNAL_LIBZ@ -LIBZ_CFLAGS:=@LIBZ_CFLAGS@ -LIBZ_LIBS:=@LIBZ_LIBS@ -LIBZIP_CAN_USE_MMAP:=@LIBZIP_CAN_USE_MMAP@ -MSVCR_DLL:=@MSVCR_DLL@ -VCRUNTIME_1_DLL:=@VCRUNTIME_1_DLL@ -MSVCP_DLL:=@MSVCP_DLL@ -UCRT_DLL_DIR:=@UCRT_DLL_DIR@ -ENABLE_PANDOC:=@ENABLE_PANDOC@ -PANDOC_MARKDOWN_FLAG:=@PANDOC_MARKDOWN_FLAG@ +USE_EXTERNAL_LIBJPEG := @USE_EXTERNAL_LIBJPEG@ +USE_EXTERNAL_LIBGIF := @USE_EXTERNAL_LIBGIF@ +USE_EXTERNAL_LIBZ := @USE_EXTERNAL_LIBZ@ +LIBZ_CFLAGS := @LIBZ_CFLAGS@ +LIBZ_LIBS := @LIBZ_LIBS@ +LIBZIP_CAN_USE_MMAP := @LIBZIP_CAN_USE_MMAP@ +MSVCR_DLL := @MSVCR_DLL@ +VCRUNTIME_1_DLL := @VCRUNTIME_1_DLL@ +MSVCP_DLL := @MSVCP_DLL@ +UCRT_DLL_DIR := @UCRT_DLL_DIR@ +ENABLE_PANDOC := @ENABLE_PANDOC@ +PANDOC_MARKDOWN_FLAG := @PANDOC_MARKDOWN_FLAG@ #################################################### # @@ -829,97 +829,97 @@ PANDOC_MARKDOWN_FLAG:=@PANDOC_MARKDOWN_FLAG@ # Common prefix for all installed files. Defaults to /usr/local, # but /opt/myjdk is another common version. -INSTALL_PREFIX=@prefix@ +INSTALL_PREFIX = @prefix@ # Directories containing architecture-dependent files should be relative to exec_prefix -INSTALL_EXECPREFIX=@exec_prefix@ +INSTALL_EXECPREFIX = @exec_prefix@ # java,javac,javap etc are installed here. -INSTALL_BINDIR=@bindir@ +INSTALL_BINDIR = @bindir@ # Read only architecture-independent data -INSTALL_DATADIR=@datadir@ +INSTALL_DATADIR = @datadir@ # Root of above. -INSTALL_DATAROOTDIR=@datarootdir@ +INSTALL_DATAROOTDIR = @datarootdir@ # Doc files, other than info and man. -INSTALL_DOCDIR=@docdir@ +INSTALL_DOCDIR = @docdir@ # Html documentation -INSTALL_HTMLDIR=@htmldir@ +INSTALL_HTMLDIR = @htmldir@ # Installing C header files, JNI headers for example. -INSTALL_INCLUDEDIR=@includedir@ +INSTALL_INCLUDEDIR = @includedir@ # Installing library files.... -INSTALL_INCLUDEDIR=@libdir@ +INSTALL_INCLUDEDIR = @libdir@ # Executables that other programs run. -INSTALL_LIBEXECDIR=@libexecdir@ +INSTALL_LIBEXECDIR = @libexecdir@ # Locale-dependent but architecture-independent data, such as message catalogs. -INSTALL_LOCALEDIR=@localedir@ +INSTALL_LOCALEDIR = @localedir@ # Modifiable single-machine data -INSTALL_LOCALSTATEDIR=@localstatedir@ +INSTALL_LOCALSTATEDIR = @localstatedir@ # Man pages -INSTALL_MANDIR=@mandir@ +INSTALL_MANDIR = @mandir@ # Modifiable architecture-independent data. -INSTALL_SHAREDSTATEDIR=@sharedstatedir@ +INSTALL_SHAREDSTATEDIR = @sharedstatedir@ # Read-only single-machine data -INSTALL_SYSCONFDIR=@sysconfdir@ +INSTALL_SYSCONFDIR = @sysconfdir@ #################################################### # # Libraries # -USE_EXTERNAL_LCMS:=@USE_EXTERNAL_LCMS@ -LCMS_CFLAGS:=@LCMS_CFLAGS@ -LCMS_LIBS:=@LCMS_LIBS@ +USE_EXTERNAL_LCMS := @USE_EXTERNAL_LCMS@ +LCMS_CFLAGS := @LCMS_CFLAGS@ +LCMS_LIBS := @LCMS_LIBS@ -USE_EXTERNAL_HARFBUZZ:=@USE_EXTERNAL_HARFBUZZ@ -HARFBUZZ_CFLAGS:=@HARFBUZZ_CFLAGS@ -HARFBUZZ_LIBS:=@HARFBUZZ_LIBS@ +USE_EXTERNAL_HARFBUZZ := @USE_EXTERNAL_HARFBUZZ@ +HARFBUZZ_CFLAGS := @HARFBUZZ_CFLAGS@ +HARFBUZZ_LIBS := @HARFBUZZ_LIBS@ -USE_EXTERNAL_LIBPNG:=@USE_EXTERNAL_LIBPNG@ -PNG_LIBS:=@PNG_LIBS@ -PNG_CFLAGS:=@PNG_CFLAGS@ +USE_EXTERNAL_LIBPNG := @USE_EXTERNAL_LIBPNG@ +PNG_LIBS := @PNG_LIBS@ +PNG_CFLAGS := @PNG_CFLAGS@ #################################################### # # Misc # -INCLUDE_SA=@INCLUDE_SA@ -INCLUDE_JVMCI=@INCLUDE_JVMCI@ -INCLUDE_COMPILER2=@INCLUDE_COMPILER2@ +INCLUDE_SA = @INCLUDE_SA@ +INCLUDE_JVMCI = @INCLUDE_JVMCI@ +INCLUDE_COMPILER2 = @INCLUDE_COMPILER2@ -OS_VERSION_MAJOR:=@OS_VERSION_MAJOR@ -OS_VERSION_MINOR:=@OS_VERSION_MINOR@ -OS_VERSION_MICRO:=@OS_VERSION_MICRO@ +OS_VERSION_MAJOR := @OS_VERSION_MAJOR@ +OS_VERSION_MINOR := @OS_VERSION_MINOR@ +OS_VERSION_MICRO := @OS_VERSION_MICRO@ # Images directory definitions -JDK_IMAGE_SUBDIR:=jdk -JRE_IMAGE_SUBDIR:=jre +JDK_IMAGE_SUBDIR := jdk +JRE_IMAGE_SUBDIR := jre JCOV_IMAGE_SUBDIR := jdk-jcov # Colon left out to be able to override output dir for bootcycle-images -JDK_IMAGE_DIR=$(IMAGES_OUTPUTDIR)/$(JDK_IMAGE_SUBDIR) -JRE_IMAGE_DIR=$(IMAGES_OUTPUTDIR)/$(JRE_IMAGE_SUBDIR) +JDK_IMAGE_DIR = $(IMAGES_OUTPUTDIR)/$(JDK_IMAGE_SUBDIR) +JRE_IMAGE_DIR = $(IMAGES_OUTPUTDIR)/$(JRE_IMAGE_SUBDIR) JCOV_IMAGE_DIR = $(IMAGES_OUTPUTDIR)/$(JCOV_IMAGE_SUBDIR) # Test image, as above -TEST_IMAGE_SUBDIR:=test -TEST_IMAGE_DIR=$(IMAGES_OUTPUTDIR)/$(TEST_IMAGE_SUBDIR) +TEST_IMAGE_SUBDIR := test +TEST_IMAGE_DIR = $(IMAGES_OUTPUTDIR)/$(TEST_IMAGE_SUBDIR) # Symbols image -SYMBOLS_IMAGE_SUBDIR:=symbols -SYMBOLS_IMAGE_DIR=$(IMAGES_OUTPUTDIR)/$(SYMBOLS_IMAGE_SUBDIR) +SYMBOLS_IMAGE_SUBDIR := symbols +SYMBOLS_IMAGE_DIR = $(IMAGES_OUTPUTDIR)/$(SYMBOLS_IMAGE_SUBDIR) # Interim image INTERIM_JMODS_DIR := $(SUPPORT_OUTPUTDIR)/interim-jmods @@ -948,20 +948,20 @@ GRAAL_BUILDER_IMAGE_SUBDIR := graal-builder-jdk GRAAL_BUILDER_IMAGE_DIR := $(IMAGES_OUTPUTDIR)/$(GRAAL_BUILDER_IMAGE_SUBDIR) # Macosx bundles directory definitions -JDK_MACOSX_BUNDLE_SUBDIR=jdk-bundle -JRE_MACOSX_BUNDLE_SUBDIR=jre-bundle -JDK_MACOSX_BUNDLE_SUBDIR_SIGNED=jdk-bundle-signed -JRE_MACOSX_BUNDLE_SUBDIR_SIGNED=jre-bundle-signed -JDK_MACOSX_BUNDLE_DIR=$(IMAGES_OUTPUTDIR)/$(JDK_MACOSX_BUNDLE_SUBDIR) -JRE_MACOSX_BUNDLE_DIR=$(IMAGES_OUTPUTDIR)/$(JRE_MACOSX_BUNDLE_SUBDIR) -JDK_MACOSX_BUNDLE_DIR_SIGNED=$(IMAGES_OUTPUTDIR)/$(JDK_MACOSX_BUNDLE_SUBDIR_SIGNED) -JRE_MACOSX_BUNDLE_DIR_SIGNED=$(IMAGES_OUTPUTDIR)/$(JRE_MACOSX_BUNDLE_SUBDIR_SIGNED) -JDK_MACOSX_BUNDLE_TOP_DIR=jdk-$(VERSION_NUMBER).jdk -JRE_MACOSX_BUNDLE_TOP_DIR=jre-$(VERSION_NUMBER).jre -JDK_MACOSX_CONTENTS_SUBDIR=$(JDK_MACOSX_BUNDLE_TOP_DIR)/Contents -JRE_MACOSX_CONTENTS_SUBDIR=$(JRE_MACOSX_BUNDLE_TOP_DIR)/Contents -JDK_MACOSX_CONTENTS_DIR=$(JDK_MACOSX_BUNDLE_DIR)/$(JDK_MACOSX_CONTENTS_SUBDIR) -JRE_MACOSX_CONTENTS_DIR=$(JRE_MACOSX_BUNDLE_DIR)/$(JRE_MACOSX_CONTENTS_SUBDIR) +JDK_MACOSX_BUNDLE_SUBDIR = jdk-bundle +JRE_MACOSX_BUNDLE_SUBDIR = jre-bundle +JDK_MACOSX_BUNDLE_SUBDIR_SIGNED = jdk-bundle-signed +JRE_MACOSX_BUNDLE_SUBDIR_SIGNED = jre-bundle-signed +JDK_MACOSX_BUNDLE_DIR = $(IMAGES_OUTPUTDIR)/$(JDK_MACOSX_BUNDLE_SUBDIR) +JRE_MACOSX_BUNDLE_DIR = $(IMAGES_OUTPUTDIR)/$(JRE_MACOSX_BUNDLE_SUBDIR) +JDK_MACOSX_BUNDLE_DIR_SIGNED = $(IMAGES_OUTPUTDIR)/$(JDK_MACOSX_BUNDLE_SUBDIR_SIGNED) +JRE_MACOSX_BUNDLE_DIR_SIGNED = $(IMAGES_OUTPUTDIR)/$(JRE_MACOSX_BUNDLE_SUBDIR_SIGNED) +JDK_MACOSX_BUNDLE_TOP_DIR = jdk-$(VERSION_NUMBER).jdk +JRE_MACOSX_BUNDLE_TOP_DIR = jre-$(VERSION_NUMBER).jre +JDK_MACOSX_CONTENTS_SUBDIR = $(JDK_MACOSX_BUNDLE_TOP_DIR)/Contents +JRE_MACOSX_CONTENTS_SUBDIR = $(JRE_MACOSX_BUNDLE_TOP_DIR)/Contents +JDK_MACOSX_CONTENTS_DIR = $(JDK_MACOSX_BUNDLE_DIR)/$(JDK_MACOSX_CONTENTS_SUBDIR) +JRE_MACOSX_CONTENTS_DIR = $(JRE_MACOSX_BUNDLE_DIR)/$(JRE_MACOSX_CONTENTS_SUBDIR) # Bundle names ifneq ($(VERSION_BUILD), ) @@ -993,13 +993,13 @@ STATIC_LIBS_GRAAL_BUNDLE_NAME := jdk-$(BASE_NAME)_bin-static-libs-graal$(DEBUG_P JCOV_BUNDLE_NAME := jdk-jcov-$(BASE_NAME)_bin$(DEBUG_PART).$(JDK_BUNDLE_EXTENSION) JDK_BUNDLE := $(BUNDLES_OUTPUTDIR)/$(JDK_BUNDLE_NAME) -JRE_BUNDLE := $(BUNDLES_OUTPUTDIR)/$(JRE_BUNDLE_NAME) -JDK_SYMBOLS_BUNDLE := $(BUNDLES_OUTPUTDIR)/$(JDK_SYMBOLS_BUNDLE_NAME) +JRE_BUNDLE := $(BUNDLES_OUTPUTDIR)/$(JRE_BUNDLE_NAME) +JDK_SYMBOLS_BUNDLE := $(BUNDLES_OUTPUTDIR)/$(JDK_SYMBOLS_BUNDLE_NAME) TEST_DEMOS_BUNDLE := $(BUNDLES_OUTPUTDIR)/$(TEST_DEMOS_BUNDLE_NAME) -TEST_BUNDLE := $(BUNDLES_OUTPUTDIR)/$(TEST_BUNDLE_NAME) -DOCS_JDK_BUNDLE := $(BUNDLES_OUTPUTDIR)/$(DOCS_JDK_BUNDLE_NAME) -DOCS_JAVASE_BUNDLE := $(BUNDLES_OUTPUTDIR)/$(DOCS_JAVASE_BUNDLE_NAME) -DOCS_REFERENCE_BUNDLE := $(BUNDLES_OUTPUTDIR)/$(DOCS_REFERENCE_BUNDLE_NAME) +TEST_BUNDLE := $(BUNDLES_OUTPUTDIR)/$(TEST_BUNDLE_NAME) +DOCS_JDK_BUNDLE := $(BUNDLES_OUTPUTDIR)/$(DOCS_JDK_BUNDLE_NAME) +DOCS_JAVASE_BUNDLE := $(BUNDLES_OUTPUTDIR)/$(DOCS_JAVASE_BUNDLE_NAME) +DOCS_REFERENCE_BUNDLE := $(BUNDLES_OUTPUTDIR)/$(DOCS_REFERENCE_BUNDLE_NAME) JCOV_BUNDLE := $(BUNDLES_OUTPUTDIR)/$(JCOV_BUNDLE_NAME) # This macro is called to allow inclusion of closed source counterparts. From 82967f45db3b9555be03fcabdba380852ea21e2c Mon Sep 17 00:00:00 2001 From: steveatgh Date: Mon, 27 Nov 2023 17:35:39 +0000 Subject: [PATCH 069/250] 8310159: Bulk copy with Unsafe::arrayCopy is slower compared to memcpy Co-authored-by: Maurizio Cimadamore Reviewed-by: thartmann, jbhateja, sviswanathan --- src/hotspot/cpu/x86/assembler_x86.cpp | 21 +++ src/hotspot/cpu/x86/assembler_x86.hpp | 3 + src/hotspot/cpu/x86/stubGenerator_x86_64.hpp | 12 ++ .../x86/stubGenerator_x86_64_arraycopy.cpp | 153 ++++++++++++++++++ .../java/lang/ArrayCopyAlignedLarge.java | 70 ++++++++ 5 files changed, 259 insertions(+) create mode 100644 test/micro/org/openjdk/bench/java/lang/ArrayCopyAlignedLarge.java diff --git a/src/hotspot/cpu/x86/assembler_x86.cpp b/src/hotspot/cpu/x86/assembler_x86.cpp index 0fc98a6ac1006..cedddaed97588 100644 --- a/src/hotspot/cpu/x86/assembler_x86.cpp +++ b/src/hotspot/cpu/x86/assembler_x86.cpp @@ -3417,6 +3417,27 @@ void Assembler::evmovdquq(XMMRegister dst, KRegister mask, Address src, bool mer emit_operand(dst, src, 0); } +void Assembler::evmovntdquq(Address dst, XMMRegister src, int vector_len) { + // Unmasked instruction + evmovntdquq(dst, k0, src, /*merge*/ true, vector_len); +} + +void Assembler::evmovntdquq(Address dst, KRegister mask, XMMRegister src, bool merge, int vector_len) { + assert(VM_Version::supports_evex(), ""); + assert(src != xnoreg, "sanity"); + InstructionMark im(this); + InstructionAttr attributes(vector_len, /* vex_w */ false, /* legacy_mode */ false, /* no_mask_reg */ false, /* uses_vl */ true); + attributes.set_address_attributes(/* tuple_type */ EVEX_FVM, /* input_size_in_bits */ EVEX_NObit); + attributes.set_embedded_opmask_register_specifier(mask); + if (merge) { + attributes.reset_is_clear_context(); + } + attributes.set_is_evex_instruction(); + vex_prefix(dst, 0, src->encoding(), VEX_SIMD_66, VEX_OPCODE_0F, &attributes); + emit_int8(0xE7); + emit_operand(src, dst, 0); +} + void Assembler::evmovdquq(Address dst, XMMRegister src, int vector_len) { // Unmasked instruction evmovdquq(dst, k0, src, /*merge*/ true, vector_len); diff --git a/src/hotspot/cpu/x86/assembler_x86.hpp b/src/hotspot/cpu/x86/assembler_x86.hpp index c6083d844aa4f..3bcfee90b3537 100644 --- a/src/hotspot/cpu/x86/assembler_x86.hpp +++ b/src/hotspot/cpu/x86/assembler_x86.hpp @@ -1615,6 +1615,9 @@ class Assembler : public AbstractAssembler { void evmovdqul(XMMRegister dst, KRegister mask, Address src, bool merge, int vector_len); void evmovdqul(Address dst, KRegister mask, XMMRegister src, bool merge, int vector_len); + void evmovntdquq(Address dst, KRegister mask, XMMRegister src, bool merge, int vector_len); + void evmovntdquq(Address dst, XMMRegister src, int vector_len); + void evmovdquq(Address dst, XMMRegister src, int vector_len); void evmovdquq(XMMRegister dst, Address src, int vector_len); void evmovdquq(XMMRegister dst, XMMRegister src, int vector_len); diff --git a/src/hotspot/cpu/x86/stubGenerator_x86_64.hpp b/src/hotspot/cpu/x86/stubGenerator_x86_64.hpp index 109c98f83bd2a..6b7da7184988e 100644 --- a/src/hotspot/cpu/x86/stubGenerator_x86_64.hpp +++ b/src/hotspot/cpu/x86/stubGenerator_x86_64.hpp @@ -187,11 +187,20 @@ class StubGenerator: public StubCodeGenerator { Register index, Register temp, bool use64byteVector, Label& L_entry, Label& L_exit); + void arraycopy_avx3_special_cases_256(XMMRegister xmm, KRegister mask, Register from, + Register to, Register count, int shift, + Register index, Register temp, Label& L_exit); + void arraycopy_avx3_special_cases_conjoint(XMMRegister xmm, KRegister mask, Register from, Register to, Register start_index, Register end_index, Register count, int shift, Register temp, bool use64byteVector, Label& L_entry, Label& L_exit); + void arraycopy_avx3_large(Register to, Register from, Register temp1, Register temp2, + Register temp3, Register temp4, Register count, + XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, + XMMRegister xmm4, int shift); + void copy32_avx(Register dst, Register src, Register index, XMMRegister xmm, int shift = Address::times_1, int offset = 0); @@ -199,6 +208,9 @@ class StubGenerator: public StubCodeGenerator { bool conjoint, int shift = Address::times_1, int offset = 0, bool use64byteVector = false); + void copy256_avx3(Register dst, Register src, Register index, XMMRegister xmm1, XMMRegister xmm2, + XMMRegister xmm3, XMMRegister xmm4, int shift, int offset = 0); + void copy64_masked_avx(Register dst, Register src, XMMRegister xmm, KRegister mask, Register length, Register index, Register temp, int shift = Address::times_1, int offset = 0, diff --git a/src/hotspot/cpu/x86/stubGenerator_x86_64_arraycopy.cpp b/src/hotspot/cpu/x86/stubGenerator_x86_64_arraycopy.cpp index 80d9b4844ea25..c802f953c9054 100644 --- a/src/hotspot/cpu/x86/stubGenerator_x86_64_arraycopy.cpp +++ b/src/hotspot/cpu/x86/stubGenerator_x86_64_arraycopy.cpp @@ -515,8 +515,10 @@ address StubGenerator::generate_disjoint_copy_avx3_masked(address* entry, const int avx3threshold = VM_Version::avx3_threshold(); bool use64byteVector = (MaxVectorSize > 32) && (avx3threshold == 0); + const int large_threshold = 2621440; // 2.5 MB Label L_main_loop, L_main_loop_64bytes, L_tail, L_tail64, L_exit, L_entry; Label L_repmovs, L_main_pre_loop, L_main_pre_loop_64bytes, L_pre_main_post_64; + Label L_copy_large, L_finish; const Register from = rdi; // source array address const Register to = rsi; // destination array address const Register count = rdx; // elements count @@ -577,6 +579,12 @@ address StubGenerator::generate_disjoint_copy_avx3_masked(address* entry, const // PRE-MAIN-POST loop for aligned copy. __ BIND(L_entry); + if (MaxVectorSize == 64) { + __ movq(temp2, temp1); + __ shlq(temp2, shift); + __ cmpq(temp2, large_threshold); + __ jcc(Assembler::greaterEqual, L_copy_large); + } if (avx3threshold != 0) { __ cmpq(count, threshold[shift]); if (MaxVectorSize == 64) { @@ -703,6 +711,7 @@ address StubGenerator::generate_disjoint_copy_avx3_masked(address* entry, const __ BIND(L_exit); } + __ BIND(L_finish); address ucme_exit_pc = __ pc(); // When called from generic_arraycopy r11 contains specific values // used during arraycopy epilogue, re-initializing r11. @@ -717,9 +726,77 @@ address StubGenerator::generate_disjoint_copy_avx3_masked(address* entry, const __ leave(); // required for proper stackwalking of RuntimeStub frame __ ret(0); + if (MaxVectorSize == 64) { + __ BIND(L_copy_large); + arraycopy_avx3_large(to, from, temp1, temp2, temp3, temp4, count, xmm1, xmm2, xmm3, xmm4, shift); + __ jmp(L_finish); + } return start; } +void StubGenerator::arraycopy_avx3_large(Register to, Register from, Register temp1, Register temp2, + Register temp3, Register temp4, Register count, + XMMRegister xmm1, XMMRegister xmm2, XMMRegister xmm3, + XMMRegister xmm4, int shift) { + + // Type(shift) byte(0), short(1), int(2), long(3) + int loop_size[] = { 256, 128, 64, 32}; + int threshold[] = { 4096, 2048, 1024, 512}; + + Label L_main_loop_large; + Label L_tail_large; + Label L_exit_large; + Label L_entry_large; + Label L_main_pre_loop_large; + Label L_pre_main_post_large; + + assert(MaxVectorSize == 64, "vector length != 64"); + __ BIND(L_entry_large); + + __ BIND(L_pre_main_post_large); + // Partial copy to make dst address 64 byte aligned. + __ movq(temp2, to); + __ andq(temp2, 63); + __ jcc(Assembler::equal, L_main_pre_loop_large); + + __ negptr(temp2); + __ addq(temp2, 64); + if (shift) { + __ shrq(temp2, shift); + } + __ movq(temp3, temp2); + copy64_masked_avx(to, from, xmm1, k2, temp3, temp4, temp1, shift, 0, true); + __ movq(temp4, temp2); + __ movq(temp1, count); + __ subq(temp1, temp2); + + __ cmpq(temp1, loop_size[shift]); + __ jcc(Assembler::less, L_tail_large); + + __ BIND(L_main_pre_loop_large); + __ subq(temp1, loop_size[shift]); + + // Main loop with aligned copy block size of 256 bytes at 64 byte copy granularity. + __ align32(); + __ BIND(L_main_loop_large); + copy256_avx3(to, from, temp4, xmm1, xmm2, xmm3, xmm4, shift, 0); + __ addptr(temp4, loop_size[shift]); + __ subq(temp1, loop_size[shift]); + __ jcc(Assembler::greater, L_main_loop_large); + // fence needed because copy256_avx3 uses non-temporal stores + __ sfence(); + + __ addq(temp1, loop_size[shift]); + // Zero length check. + __ jcc(Assembler::lessEqual, L_exit_large); + __ BIND(L_tail_large); + // Tail handling using 64 byte [masked] vector copy operations. + __ cmpq(temp1, 0); + __ jcc(Assembler::lessEqual, L_exit_large); + arraycopy_avx3_special_cases_256(xmm1, k2, from, to, temp1, shift, + temp4, temp3, L_exit_large); + __ BIND(L_exit_large); +} // Inputs: // c_rarg0 - source array address @@ -965,6 +1042,55 @@ void StubGenerator::arraycopy_avx3_special_cases(XMMRegister xmm, KRegister mask __ jmp(L_exit); } +void StubGenerator::arraycopy_avx3_special_cases_256(XMMRegister xmm, KRegister mask, Register from, + Register to, Register count, int shift, Register index, + Register temp, Label& L_exit) { + Label L_entry_64, L_entry_128, L_entry_192, L_entry_256; + + int size_mat[][4] = { + /* T_BYTE */ {64, 128, 192, 256}, + /* T_SHORT*/ {32, 64 , 96 , 128}, + /* T_INT */ {16, 32 , 48 , 64}, + /* T_LONG */ { 8, 16 , 24 , 32} + }; + + assert(MaxVectorSize == 64, "vector length != 64"); + // Case A) Special case for length less than or equal to 64 bytes. + __ BIND(L_entry_64); + __ cmpq(count, size_mat[shift][0]); + __ jccb(Assembler::greater, L_entry_128); + copy64_masked_avx(to, from, xmm, mask, count, index, temp, shift, 0, true); + __ jmp(L_exit); + + // Case B) Special case for length less than or equal to 128 bytes. + __ BIND(L_entry_128); + __ cmpq(count, size_mat[shift][1]); + __ jccb(Assembler::greater, L_entry_192); + copy64_avx(to, from, index, xmm, false, shift, 0, true); + __ subq(count, 64 >> shift); + copy64_masked_avx(to, from, xmm, mask, count, index, temp, shift, 64, true); + __ jmp(L_exit); + + // Case C) Special case for length less than or equal to 192 bytes. + __ BIND(L_entry_192); + __ cmpq(count, size_mat[shift][2]); + __ jcc(Assembler::greater, L_entry_256); + copy64_avx(to, from, index, xmm, false, shift, 0, true); + copy64_avx(to, from, index, xmm, false, shift, 64, true); + __ subq(count, 128 >> shift); + copy64_masked_avx(to, from, xmm, mask, count, index, temp, shift, 128, true); + __ jmp(L_exit); + + // Case D) Special case for length less than or equal to 256 bytes. + __ BIND(L_entry_256); + copy64_avx(to, from, index, xmm, false, shift, 0, true); + copy64_avx(to, from, index, xmm, false, shift, 64, true); + copy64_avx(to, from, index, xmm, false, shift, 128, true); + __ subq(count, 192 >> shift); + copy64_masked_avx(to, from, xmm, mask, count, index, temp, shift, 192, true); + __ jmp(L_exit); +} + void StubGenerator::arraycopy_avx3_special_cases_conjoint(XMMRegister xmm, KRegister mask, Register from, Register to, Register start_index, Register end_index, Register count, int shift, Register temp, @@ -1040,6 +1166,33 @@ void StubGenerator::arraycopy_avx3_special_cases_conjoint(XMMRegister xmm, KRegi __ jmp(L_exit); } +void StubGenerator::copy256_avx3(Register dst, Register src, Register index, XMMRegister xmm1, + XMMRegister xmm2, XMMRegister xmm3, XMMRegister xmm4, + int shift, int offset) { + if (MaxVectorSize == 64) { + Address::ScaleFactor scale = (Address::ScaleFactor)(shift); + __ prefetcht0(Address(src, index, scale, offset + 0x200)); + __ prefetcht0(Address(src, index, scale, offset + 0x240)); + __ prefetcht0(Address(src, index, scale, offset + 0x280)); + __ prefetcht0(Address(src, index, scale, offset + 0x2C0)); + + __ prefetcht0(Address(src, index, scale, offset + 0x400)); + __ prefetcht0(Address(src, index, scale, offset + 0x440)); + __ prefetcht0(Address(src, index, scale, offset + 0x480)); + __ prefetcht0(Address(src, index, scale, offset + 0x4C0)); + + __ evmovdquq(xmm1, Address(src, index, scale, offset), Assembler::AVX_512bit); + __ evmovdquq(xmm2, Address(src, index, scale, offset + 0x40), Assembler::AVX_512bit); + __ evmovdquq(xmm3, Address(src, index, scale, offset + 0x80), Assembler::AVX_512bit); + __ evmovdquq(xmm4, Address(src, index, scale, offset + 0xC0), Assembler::AVX_512bit); + + __ evmovntdquq(Address(dst, index, scale, offset), xmm1, Assembler::AVX_512bit); + __ evmovntdquq(Address(dst, index, scale, offset + 0x40), xmm2, Assembler::AVX_512bit); + __ evmovntdquq(Address(dst, index, scale, offset + 0x80), xmm3, Assembler::AVX_512bit); + __ evmovntdquq(Address(dst, index, scale, offset + 0xC0), xmm4, Assembler::AVX_512bit); + } +} + void StubGenerator::copy64_masked_avx(Register dst, Register src, XMMRegister xmm, KRegister mask, Register length, Register index, Register temp, int shift, int offset, diff --git a/test/micro/org/openjdk/bench/java/lang/ArrayCopyAlignedLarge.java b/test/micro/org/openjdk/bench/java/lang/ArrayCopyAlignedLarge.java new file mode 100644 index 0000000000000..f5f6bb2949059 --- /dev/null +++ b/test/micro/org/openjdk/bench/java/lang/ArrayCopyAlignedLarge.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2023, 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. + */ +package org.openjdk.bench.java.lang; + +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Fork; +import org.openjdk.jmh.annotations.Measurement; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Param; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.Setup; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.Warmup; + +import java.util.concurrent.TimeUnit; + +/** + * Benchmark measuring aligned System.arraycopy. + */ +@BenchmarkMode(Mode.AverageTime) +@OutputTimeUnit(TimeUnit.NANOSECONDS) +@State(Scope.Thread) +@Warmup(iterations = 10, time = 1) +@Measurement(iterations = 5, time = 1) +@Fork(value = 3) +public class ArrayCopyAlignedLarge { + + @Param({"100000", "1000000", "2000000", "5000000", "10000000"}) + int length; + + int fromPos, toPos; + byte[] fromByteArr, toByteArr; + + @Setup + public void setup() { + // Both positions aligned + fromPos = 0; + toPos = 0; + + fromByteArr = new byte[length]; + toByteArr = new byte[length]; + } + + @Benchmark + public void testByte() { + System.arraycopy(fromByteArr, fromPos, toByteArr, toPos, length); + } +} From 6871a2ff1207d3ee70973b1c4ee9bd09969c185b Mon Sep 17 00:00:00 2001 From: Joe Darcy Date: Mon, 27 Nov 2023 20:36:29 +0000 Subject: [PATCH 070/250] 8320803: Update SourceVersion.RELEASE_22 description for language changes Reviewed-by: jjg --- .../classes/javax/lang/model/SourceVersion.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/java.compiler/share/classes/javax/lang/model/SourceVersion.java b/src/java.compiler/share/classes/javax/lang/model/SourceVersion.java index fd905da80a51c..ee041e215a32a 100644 --- a/src/java.compiler/share/classes/javax/lang/model/SourceVersion.java +++ b/src/java.compiler/share/classes/javax/lang/model/SourceVersion.java @@ -74,7 +74,8 @@ public enum SourceVersion { * 21: pattern matching for switch and record patterns (string * templates in preview, unnamed patterns and variables in * preview, unnamed classes and instance main methods in preview) - * 22: tbd + * 22: Unnamed Variables & Patterns (Statements before super(...) + * in Preview) */ /** @@ -392,9 +393,9 @@ public enum SourceVersion { * href="https://docs.oracle.com/javase/specs/jls/se21/html/index.html"> * The Java Language Specification, Java SE 21 Edition * @see - * Record Patterns + * JEP 440: Record Patterns * @see - * Pattern Matching for switch + * JEP 441: Pattern Matching for switch */ RELEASE_21, @@ -402,11 +403,16 @@ public enum SourceVersion { * The version introduced by the Java Platform, Standard Edition * 22. * + * Additions in this release include unnamed variables and unnamed + * patterns. + * * @since 22 * * @see * The Java Language Specification, Java SE 22 Edition + * @see + * JEP 456: Unnamed Variables & Patterns */ RELEASE_22, ; // Reduce code churn when appending new constants From 5f7f2c4ea07d41c2f280ca341b49c857c1436224 Mon Sep 17 00:00:00 2001 From: Alexey Semenyuk Date: Mon, 27 Nov 2023 21:42:47 +0000 Subject: [PATCH 071/250] 8320249: tools/jpackage/share/AddLauncherTest.java#id1 fails intermittently on Windows in verifyDescription Reviewed-by: almatvee --- .../jpackage/internal/ExecutableRebrander.java | 18 +++++++++++++----- .../internal/resources/WinResources.properties | 1 + .../resources/WinResources_de.properties | 1 + .../resources/WinResources_ja.properties | 1 + .../resources/WinResources_zh_CN.properties | 1 + .../native/libjpackage/ResourceEditor.cpp | 9 ++++++++- .../native/libjpackage/ResourceEditor.h | 11 +++++++++-- .../windows/native/libjpackage/jpackage.cpp | 13 +++++++++---- 8 files changed, 43 insertions(+), 12 deletions(-) diff --git a/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/ExecutableRebrander.java b/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/ExecutableRebrander.java index cc7d7b019f553..060c94b12cf8a 100644 --- a/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/ExecutableRebrander.java +++ b/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/ExecutableRebrander.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2023, 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 @@ -131,18 +131,26 @@ private void rebrandExecutable(Map params, I18N.getString("error.lock-resource"), target)); } + final boolean resourceUnlockedSuccess; try { action.editResource(resourceLock); if (extraActions != null) { - for (UpdateResourceAction extraAction: extraActions) { + for (UpdateResourceAction extraAction : extraActions) { extraAction.editResource(resourceLock); } } } finally { - if (resourceLock != 0) { - unlockResource(resourceLock); + if (resourceLock == 0) { + resourceUnlockedSuccess = true; + } else { + resourceUnlockedSuccess = unlockResource(resourceLock); } } + + if (!resourceUnlockedSuccess) { + throw new RuntimeException(MessageFormat.format(I18N.getString( + "error.unlock-resource"), target)); + } } finally { target.toFile().setReadOnly(); } @@ -250,7 +258,7 @@ private static void versionSwapWrapper(long resourceLock, private static native long lockResource(String executable); - private static native void unlockResource(long resourceLock); + private static native boolean unlockResource(long resourceLock); private static native int iconSwap(long resourceLock, String iconTarget); diff --git a/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/resources/WinResources.properties b/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/resources/WinResources.properties index 5d2a6d9754124..cdbf04e746460 100644 --- a/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/resources/WinResources.properties +++ b/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/resources/WinResources.properties @@ -53,6 +53,7 @@ error.version-swap=Failed to update version information for {0} error.icon-swap=Failed to update icon for {0} error.invalid-envvar=Invalid value of {0} environment variable error.lock-resource=Failed to lock: {0} +error.unlock-resource=Failed to unlock: {0} error.read-wix-l10n-file=Failed to parse {0} file error.extract-culture-from-wix-l10n-file=Failed to read value of culture from {0} file diff --git a/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/resources/WinResources_de.properties b/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/resources/WinResources_de.properties index abae3d6b4d0dc..473dc5f0a9878 100644 --- a/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/resources/WinResources_de.properties +++ b/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/resources/WinResources_de.properties @@ -53,6 +53,7 @@ error.version-swap=Versionsinformationen für {0} konnten nicht aktualisiert wer error.icon-swap=Symbol für {0} konnte nicht aktualisiert werden error.invalid-envvar=Ungültiger Wert der {0}-Umgebungsvariable error.lock-resource=Sperren nicht erfolgreich: {0} +error.unlock-resource=Failed to unlock: {0} error.read-wix-l10n-file=Datei {0} konnte nicht geparst werden error.extract-culture-from-wix-l10n-file=Kulturwert konnte nicht aus Datei {0} gelesen werden diff --git a/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/resources/WinResources_ja.properties b/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/resources/WinResources_ja.properties index 89579e50c02f2..7a6bcf40ef405 100644 --- a/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/resources/WinResources_ja.properties +++ b/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/resources/WinResources_ja.properties @@ -53,6 +53,7 @@ error.version-swap={0}のバージョン情報の更新に失敗しました error.icon-swap={0}のアイコンの更新に失敗しました error.invalid-envvar={0}環境変数の値が無効です error.lock-resource=ロックに失敗しました: {0} +error.unlock-resource=Failed to unlock: {0} error.read-wix-l10n-file={0}ファイルの解析に失敗しました error.extract-culture-from-wix-l10n-file={0}ファイルからのカルチャの値の読取りに失敗しました diff --git a/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/resources/WinResources_zh_CN.properties b/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/resources/WinResources_zh_CN.properties index 3e08edf2e6461..9b0809e09844e 100644 --- a/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/resources/WinResources_zh_CN.properties +++ b/src/jdk.jpackage/windows/classes/jdk/jpackage/internal/resources/WinResources_zh_CN.properties @@ -53,6 +53,7 @@ error.version-swap=无法更新 {0} 的版本信息 error.icon-swap=无法更新 {0} 的图标 error.invalid-envvar={0} 环境变量的值无效 error.lock-resource=无法锁定:{0} +error.unlock-resource=Failed to unlock: {0} error.read-wix-l10n-file=无法解析 {0} 文件 error.extract-culture-from-wix-l10n-file=无法从 {0} 文件读取文化值 diff --git a/src/jdk.jpackage/windows/native/libjpackage/ResourceEditor.cpp b/src/jdk.jpackage/windows/native/libjpackage/ResourceEditor.cpp index 288a1d2394c2c..69ed25264e872 100644 --- a/src/jdk.jpackage/windows/native/libjpackage/ResourceEditor.cpp +++ b/src/jdk.jpackage/windows/native/libjpackage/ResourceEditor.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, 2020, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2023, 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 @@ -39,19 +39,26 @@ ResourceEditor::FileLock::FileLock(const std::wstring& binaryPath) { ownHandle(true); discard(false); + notifyUnlockFailed(); } ResourceEditor::FileLock::FileLock(HANDLE h): h(h) { ownHandle(false); discard(false); + notifyUnlockFailed(); } ResourceEditor::FileLock::~FileLock() { if (theOwnHandle && !EndUpdateResource(h, theDiscard)) { + if (unlockFailed) { + *unlockFailed = true; + } JP_NO_THROW(JP_THROW(SysError(tstrings::any() << "EndUpdateResource(" << h << ") failed.", EndUpdateResource))); + } else if (unlockFailed) { + *unlockFailed = false; } } diff --git a/src/jdk.jpackage/windows/native/libjpackage/ResourceEditor.h b/src/jdk.jpackage/windows/native/libjpackage/ResourceEditor.h index 6bf81134f5da6..a41de54d96048 100644 --- a/src/jdk.jpackage/windows/native/libjpackage/ResourceEditor.h +++ b/src/jdk.jpackage/windows/native/libjpackage/ResourceEditor.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, 2020, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2023, 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 @@ -43,8 +43,14 @@ class ResourceEditor { return h; } - void discard(bool v = true) { + FileLock& discard(bool v = true) { theDiscard = v; + return *this; + } + + FileLock& notifyUnlockFailed(bool* v = 0) { + unlockFailed = v; + return *this; } FileLock& ownHandle(bool v) { @@ -59,6 +65,7 @@ class ResourceEditor { HANDLE h; bool theOwnHandle; bool theDiscard; + bool* unlockFailed; }; public: diff --git a/src/jdk.jpackage/windows/native/libjpackage/jpackage.cpp b/src/jdk.jpackage/windows/native/libjpackage/jpackage.cpp index b6dcb53b525dd..6317842787e52 100644 --- a/src/jdk.jpackage/windows/native/libjpackage/jpackage.cpp +++ b/src/jdk.jpackage/windows/native/libjpackage/jpackage.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2020, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2023, 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 @@ -56,16 +56,21 @@ extern "C" { /* * Class: jdk_jpackage_internal_ExecutableRebrander * Method: unlockResource - * Signature: (J;)V + * Signature: (J;)Z */ - JNIEXPORT void JNICALL + JNIEXPORT jboolean JNICALL Java_jdk_jpackage_internal_ExecutableRebrander_unlockResource( JNIEnv *pEnv, jclass c, jlong jResourceLock) { + bool unlockFailed = false; JP_TRY; ResourceEditor::FileLock( - reinterpret_cast(jResourceLock)).ownHandle(true); + reinterpret_cast(jResourceLock)) + .ownHandle(true) + .notifyUnlockFailed(&unlockFailed); JP_CATCH_ALL; + + return unlockFailed ? JNI_FALSE : JNI_TRUE; } /* From 1bb250c9e6b65d1a7a2b90eeb7d6e3a936fb8e8e Mon Sep 17 00:00:00 2001 From: Dean Long Date: Mon, 27 Nov 2023 22:01:37 +0000 Subject: [PATCH 072/250] 8261837: SIGSEGV in ciVirtualCallTypeData::translate_from Co-authored-by: Fei Yang Reviewed-by: iveresov, vlivanov, kvn --- .../cpu/aarch64/c1_LIRAssembler_aarch64.cpp | 16 ++++- .../cpu/aarch64/interp_masm_aarch64.cpp | 12 ++-- .../cpu/riscv/c1_LIRAssembler_riscv.cpp | 13 +++- src/hotspot/cpu/riscv/interp_masm_riscv.cpp | 24 ++++--- src/hotspot/cpu/x86/c1_LIRAssembler_x86.cpp | 68 +++++++++++++------ src/hotspot/cpu/x86/interp_masm_x86.cpp | 20 ++++++ src/hotspot/cpu/x86/macroAssembler_x86.hpp | 1 + 7 files changed, 115 insertions(+), 39 deletions(-) diff --git a/src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.cpp b/src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.cpp index 92df369593877..360ef7a747a83 100644 --- a/src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.cpp @@ -2699,7 +2699,10 @@ void LIR_Assembler::emit_profile_type(LIR_OpProfileType* op) { __ verify_oop(obj); if (tmp != obj) { + assert_different_registers(obj, tmp, rscratch1, rscratch2, mdo_addr.base(), mdo_addr.index()); __ mov(tmp, obj); + } else { + assert_different_registers(obj, rscratch1, rscratch2, mdo_addr.base(), mdo_addr.index()); } if (do_null) { __ cbnz(tmp, update); @@ -2756,10 +2759,11 @@ void LIR_Assembler::emit_profile_type(LIR_OpProfileType* op) { __ cbz(rscratch2, none); __ cmp(rscratch2, (u1)TypeEntries::null_seen); __ br(Assembler::EQ, none); - // There is a chance that the checks above (re-reading profiling - // data from memory) fail if another thread has just set the + // There is a chance that the checks above + // fail if another thread has just set the // profiling to this obj's klass __ dmb(Assembler::ISHLD); + __ eor(tmp, tmp, rscratch2); // get back original value before XOR __ ldr(rscratch2, mdo_addr); __ eor(tmp, tmp, rscratch2); __ andr(rscratch1, tmp, TypeEntries::type_klass_mask); @@ -2784,6 +2788,10 @@ void LIR_Assembler::emit_profile_type(LIR_OpProfileType* op) { __ bind(none); // first time here. Set profile type. __ str(tmp, mdo_addr); +#ifdef ASSERT + __ andr(tmp, tmp, TypeEntries::type_mask); + __ verify_klass_ptr(tmp); +#endif } } else { // There's a single possible klass at this profile point @@ -2815,6 +2823,10 @@ void LIR_Assembler::emit_profile_type(LIR_OpProfileType* op) { #endif // first time here. Set profile type. __ str(tmp, mdo_addr); +#ifdef ASSERT + __ andr(tmp, tmp, TypeEntries::type_mask); + __ verify_klass_ptr(tmp); +#endif } else { assert(ciTypeEntries::valid_ciklass(current_klass) != nullptr && ciTypeEntries::valid_ciklass(current_klass) != exact_klass, "inconsistent"); diff --git a/src/hotspot/cpu/aarch64/interp_masm_aarch64.cpp b/src/hotspot/cpu/aarch64/interp_masm_aarch64.cpp index ecd97b36776eb..69a61e281f352 100644 --- a/src/hotspot/cpu/aarch64/interp_masm_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/interp_masm_aarch64.cpp @@ -1562,7 +1562,7 @@ void InterpreterMacroAssembler::call_VM_base(Register oop_result, } void InterpreterMacroAssembler::profile_obj_type(Register obj, const Address& mdo_addr) { - assert_different_registers(obj, rscratch1); + assert_different_registers(obj, rscratch1, mdo_addr.base(), mdo_addr.index()); Label update, next, none; verify_oop(obj); @@ -1584,13 +1584,13 @@ void InterpreterMacroAssembler::profile_obj_type(Register obj, const Address& md tbnz(obj, exact_log2(TypeEntries::type_unknown), next); // already unknown. Nothing to do anymore. - ldr(rscratch1, mdo_addr); cbz(rscratch1, none); cmp(rscratch1, (u1)TypeEntries::null_seen); br(Assembler::EQ, none); - // There is a chance that the checks above (re-reading profiling - // data from memory) fail if another thread has just set the + // There is a chance that the checks above + // fail if another thread has just set the // profiling to this obj's klass + eor(obj, obj, rscratch1); // get back original value before XOR ldr(rscratch1, mdo_addr); eor(obj, obj, rscratch1); tst(obj, TypeEntries::type_klass_mask); @@ -1603,6 +1603,10 @@ void InterpreterMacroAssembler::profile_obj_type(Register obj, const Address& md bind(none); // first time here. Set profile type. str(obj, mdo_addr); +#ifdef ASSERT + andr(obj, obj, TypeEntries::type_mask); + verify_klass_ptr(obj); +#endif bind(next); } diff --git a/src/hotspot/cpu/riscv/c1_LIRAssembler_riscv.cpp b/src/hotspot/cpu/riscv/c1_LIRAssembler_riscv.cpp index 99dc81438a700..afdf25c58d234 100644 --- a/src/hotspot/cpu/riscv/c1_LIRAssembler_riscv.cpp +++ b/src/hotspot/cpu/riscv/c1_LIRAssembler_riscv.cpp @@ -1653,10 +1653,11 @@ void LIR_Assembler::check_conflict(ciKlass* exact_klass, intptr_t current_klass, __ beqz(t1, none); __ mv(t0, (u1)TypeEntries::null_seen); __ beq(t0, t1, none); - // There is a chance that the checks above (re-reading profiling - // data from memory) fail if another thread has just set the + // There is a chance that the checks above + // fail if another thread has just set the // profiling to this obj's klass __ membar(MacroAssembler::LoadLoad); + __ xorr(tmp, tmp, t1); // get back original value before XOR __ ld(t1, mdo_addr); __ xorr(tmp, tmp, t1); __ andi(t0, tmp, TypeEntries::type_klass_mask); @@ -1683,6 +1684,10 @@ void LIR_Assembler::check_conflict(ciKlass* exact_klass, intptr_t current_klass, __ bind(none); // first time here. Set profile type. __ sd(tmp, mdo_addr); +#ifdef ASSERT + __ andi(tmp, tmp, TypeEntries::type_mask); + __ verify_klass_ptr(tmp); +#endif } } @@ -1717,6 +1722,10 @@ void LIR_Assembler::check_no_conflict(ciKlass* exact_klass, intptr_t current_kla #endif // first time here. Set profile type. __ sd(tmp, mdo_addr); +#ifdef ASSERT + __ andi(tmp, tmp, TypeEntries::type_mask); + __ verify_klass_ptr(tmp); +#endif } else { assert(ciTypeEntries::valid_ciklass(current_klass) != nullptr && ciTypeEntries::valid_ciklass(current_klass) != exact_klass, "inconsistent"); diff --git a/src/hotspot/cpu/riscv/interp_masm_riscv.cpp b/src/hotspot/cpu/riscv/interp_masm_riscv.cpp index 1240566e26cc4..f9a23af41b09b 100644 --- a/src/hotspot/cpu/riscv/interp_masm_riscv.cpp +++ b/src/hotspot/cpu/riscv/interp_masm_riscv.cpp @@ -1627,8 +1627,8 @@ void InterpreterMacroAssembler::profile_obj_type(Register obj, const Address& md bind(update); load_klass(obj, obj); - ld(t0, mdo_addr); - xorr(obj, obj, t0); + ld(tmp, mdo_addr); + xorr(obj, obj, tmp); andi(t0, obj, TypeEntries::type_klass_mask); beqz(t0, next); // klass seen before, nothing to // do. The unknown bit may have been @@ -1638,15 +1638,15 @@ void InterpreterMacroAssembler::profile_obj_type(Register obj, const Address& md bnez(t0, next); // already unknown. Nothing to do anymore. - ld(t0, mdo_addr); - beqz(t0, none); - mv(tmp, (u1)TypeEntries::null_seen); - beq(t0, tmp, none); - // There is a chance that the checks above (re-reading profiling - // data from memory) fail if another thread has just set the + beqz(tmp, none); + mv(t0, (u1)TypeEntries::null_seen); + beq(tmp, t0, none); + // There is a chance that the checks above + // fail if another thread has just set the // profiling to this obj's klass - ld(t0, mdo_addr); - xorr(obj, obj, t0); + xorr(obj, obj, tmp); // get back original value before XOR + ld(tmp, mdo_addr); + xorr(obj, obj, tmp); andi(t0, obj, TypeEntries::type_klass_mask); beqz(t0, next); @@ -1657,6 +1657,10 @@ void InterpreterMacroAssembler::profile_obj_type(Register obj, const Address& md bind(none); // first time here. Set profile type. sd(obj, mdo_addr); +#ifdef ASSERT + andi(obj, obj, TypeEntries::type_mask); + verify_klass_ptr(obj); +#endif bind(next); } diff --git a/src/hotspot/cpu/x86/c1_LIRAssembler_x86.cpp b/src/hotspot/cpu/x86/c1_LIRAssembler_x86.cpp index 46c6c7e92641e..ff0726840d30a 100644 --- a/src/hotspot/cpu/x86/c1_LIRAssembler_x86.cpp +++ b/src/hotspot/cpu/x86/c1_LIRAssembler_x86.cpp @@ -3629,13 +3629,33 @@ void LIR_Assembler::emit_profile_type(LIR_OpProfileType* op) { __ verify_oop(obj); - if (tmp != obj) { - __ mov(tmp, obj); +#ifdef ASSERT + if (obj == tmp) { +#ifdef _LP64 + assert_different_registers(obj, rscratch1, mdo_addr.base(), mdo_addr.index()); +#else + assert_different_registers(obj, mdo_addr.base(), mdo_addr.index()); +#endif + } else { +#ifdef _LP64 + assert_different_registers(obj, tmp, rscratch1, mdo_addr.base(), mdo_addr.index()); +#else + assert_different_registers(obj, tmp, mdo_addr.base(), mdo_addr.index()); +#endif } +#endif if (do_null) { - __ testptr(tmp, tmp); + __ testptr(obj, obj); __ jccb(Assembler::notZero, update); if (!TypeEntries::was_null_seen(current_klass)) { + __ testptr(mdo_addr, TypeEntries::null_seen); +#ifndef ASSERT + __ jccb(Assembler::notZero, next); // already set +#else + __ jcc(Assembler::notZero, next); // already set +#endif + // atomic update to prevent overwriting Klass* with 0 + __ lock(); __ orptr(mdo_addr, TypeEntries::null_seen); } if (do_update) { @@ -3646,7 +3666,7 @@ void LIR_Assembler::emit_profile_type(LIR_OpProfileType* op) { __ jmp(next); } } else { - __ testptr(tmp, tmp); + __ testptr(obj, obj); __ jcc(Assembler::notZero, update); __ stop("unexpected null obj"); #endif @@ -3658,7 +3678,7 @@ void LIR_Assembler::emit_profile_type(LIR_OpProfileType* op) { #ifdef ASSERT if (exact_klass != nullptr) { Label ok; - __ load_klass(tmp, tmp, tmp_load_klass); + __ load_klass(tmp, obj, tmp_load_klass); __ push(tmp); __ mov_metadata(tmp, exact_klass->constant_encoding()); __ cmpptr(tmp, Address(rsp, 0)); @@ -3673,9 +3693,11 @@ void LIR_Assembler::emit_profile_type(LIR_OpProfileType* op) { if (exact_klass != nullptr) { __ mov_metadata(tmp, exact_klass->constant_encoding()); } else { - __ load_klass(tmp, tmp, tmp_load_klass); + __ load_klass(tmp, obj, tmp_load_klass); } - +#ifdef _LP64 + __ mov(rscratch1, tmp); // save original value before XOR +#endif __ xorptr(tmp, mdo_addr); __ testptr(tmp, TypeEntries::type_klass_mask); // klass seen before, nothing to do. The unknown bit may have been @@ -3686,23 +3708,23 @@ void LIR_Assembler::emit_profile_type(LIR_OpProfileType* op) { __ jccb(Assembler::notZero, next); // already unknown. Nothing to do anymore. if (TypeEntries::is_type_none(current_klass)) { - __ cmpptr(mdo_addr, 0); - __ jccb(Assembler::equal, none); - __ cmpptr(mdo_addr, TypeEntries::null_seen); - __ jccb(Assembler::equal, none); + __ testptr(mdo_addr, TypeEntries::type_mask); + __ jccb(Assembler::zero, none); +#ifdef _LP64 // There is a chance that the checks above (re-reading profiling // data from memory) fail if another thread has just set the // profiling to this obj's klass + __ mov(tmp, rscratch1); // get back original value before XOR __ xorptr(tmp, mdo_addr); __ testptr(tmp, TypeEntries::type_klass_mask); __ jccb(Assembler::zero, next); +#endif } } else { assert(ciTypeEntries::valid_ciklass(current_klass) != nullptr && ciTypeEntries::valid_ciklass(current_klass) != exact_klass, "conflict only"); - __ movptr(tmp, mdo_addr); - __ testptr(tmp, TypeEntries::type_unknown); + __ testptr(mdo_addr, TypeEntries::type_unknown); __ jccb(Assembler::notZero, next); // already unknown. Nothing to do anymore. } @@ -3715,6 +3737,10 @@ void LIR_Assembler::emit_profile_type(LIR_OpProfileType* op) { __ bind(none); // first time here. Set profile type. __ movptr(mdo_addr, tmp); +#ifdef ASSERT + __ andptr(tmp, TypeEntries::type_klass_mask); + __ verify_klass_ptr(tmp); +#endif } } else { // There's a single possible klass at this profile point @@ -3729,10 +3755,8 @@ void LIR_Assembler::emit_profile_type(LIR_OpProfileType* op) { { Label ok; __ push(tmp); - __ cmpptr(mdo_addr, 0); - __ jcc(Assembler::equal, ok); - __ cmpptr(mdo_addr, TypeEntries::null_seen); - __ jcc(Assembler::equal, ok); + __ testptr(mdo_addr, TypeEntries::type_mask); + __ jcc(Assembler::zero, ok); // may have been set by another thread __ mov_metadata(tmp, exact_klass->constant_encoding()); __ xorptr(tmp, mdo_addr); @@ -3748,20 +3772,22 @@ void LIR_Assembler::emit_profile_type(LIR_OpProfileType* op) { #endif // first time here. Set profile type. __ movptr(mdo_addr, tmp); +#ifdef ASSERT + __ andptr(tmp, TypeEntries::type_klass_mask); + __ verify_klass_ptr(tmp); +#endif } else { assert(ciTypeEntries::valid_ciklass(current_klass) != nullptr && ciTypeEntries::valid_ciklass(current_klass) != exact_klass, "inconsistent"); - __ movptr(tmp, mdo_addr); - __ testptr(tmp, TypeEntries::type_unknown); + __ testptr(mdo_addr, TypeEntries::type_unknown); __ jccb(Assembler::notZero, next); // already unknown. Nothing to do anymore. __ orptr(mdo_addr, TypeEntries::type_unknown); } } - - __ bind(next); } + __ bind(next); } void LIR_Assembler::emit_delay(LIR_OpDelay*) { diff --git a/src/hotspot/cpu/x86/interp_masm_x86.cpp b/src/hotspot/cpu/x86/interp_masm_x86.cpp index 913ac4c1df95a..f5f83ae21f475 100644 --- a/src/hotspot/cpu/x86/interp_masm_x86.cpp +++ b/src/hotspot/cpu/x86/interp_masm_x86.cpp @@ -54,15 +54,28 @@ void InterpreterMacroAssembler::jump_to_entry(address entry) { void InterpreterMacroAssembler::profile_obj_type(Register obj, const Address& mdo_addr) { Label update, next, none; +#ifdef _LP64 + assert_different_registers(obj, rscratch1, mdo_addr.base(), mdo_addr.index()); +#else + assert_different_registers(obj, mdo_addr.base(), mdo_addr.index()); +#endif + interp_verify_oop(obj, atos); testptr(obj, obj); jccb(Assembler::notZero, update); + testptr(mdo_addr, TypeEntries::null_seen); + jccb(Assembler::notZero, next); // null already seen. Nothing to do anymore. + // atomic update to prevent overwriting Klass* with 0 + lock(); orptr(mdo_addr, TypeEntries::null_seen); jmpb(next); bind(update); load_klass(obj, obj, rscratch1); +#ifdef _LP64 + mov(rscratch1, obj); +#endif xorptr(obj, mdo_addr); testptr(obj, TypeEntries::type_klass_mask); @@ -77,12 +90,15 @@ void InterpreterMacroAssembler::profile_obj_type(Register obj, const Address& md jccb(Assembler::equal, none); cmpptr(mdo_addr, TypeEntries::null_seen); jccb(Assembler::equal, none); +#ifdef _LP64 // There is a chance that the checks above (re-reading profiling // data from memory) fail if another thread has just set the // profiling to this obj's klass + mov(obj, rscratch1); xorptr(obj, mdo_addr); testptr(obj, TypeEntries::type_klass_mask); jccb(Assembler::zero, next); +#endif // different than before. Cannot keep accurate profile. orptr(mdo_addr, TypeEntries::type_unknown); @@ -91,6 +107,10 @@ void InterpreterMacroAssembler::profile_obj_type(Register obj, const Address& md bind(none); // first time here. Set profile type. movptr(mdo_addr, obj); +#ifdef ASSERT + andptr(obj, TypeEntries::type_klass_mask); + verify_klass_ptr(obj); +#endif bind(next); } diff --git a/src/hotspot/cpu/x86/macroAssembler_x86.hpp b/src/hotspot/cpu/x86/macroAssembler_x86.hpp index f875089ac678a..47943576dcec9 100644 --- a/src/hotspot/cpu/x86/macroAssembler_x86.hpp +++ b/src/hotspot/cpu/x86/macroAssembler_x86.hpp @@ -894,6 +894,7 @@ class MacroAssembler: public Assembler { void testptr(Register src, int32_t imm32) { LP64_ONLY(testq(src, imm32)) NOT_LP64(testl(src, imm32)); } void testptr(Register src1, Address src2) { LP64_ONLY(testq(src1, src2)) NOT_LP64(testl(src1, src2)); } + void testptr(Address src, int32_t imm32) { LP64_ONLY(testq(src, imm32)) NOT_LP64(testl(src, imm32)); } void testptr(Register src1, Register src2); void xorptr(Register dst, Register src) { LP64_ONLY(xorq(dst, src)) NOT_LP64(xorl(dst, src)); } From 726f854b141dc2f6474e81c7bcf12608bf6577ae Mon Sep 17 00:00:00 2001 From: Alexey Semenyuk Date: Mon, 27 Nov 2023 22:20:43 +0000 Subject: [PATCH 073/250] 8320706: RuntimePackageTest.testUsrInstallDir test fails on Linux Reviewed-by: almatvee --- .../jdk/jpackage/test/JPackageCommand.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/JPackageCommand.java b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/JPackageCommand.java index e328fe996c0cb..30a4c6f8cd8e5 100644 --- a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/JPackageCommand.java +++ b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/JPackageCommand.java @@ -888,10 +888,17 @@ private void assertFileInAppImage(Path filename, Path expectedPath) { final Path rootDir = isImagePackageType() ? outputBundle() : pathToUnpackedPackageFile( appInstallationDirectory()); - try ( Stream walk = ThrowingSupplier.toSupplier(() -> Files.walk( - rootDir)).get()) { - List files = walk.filter(path -> path.getFileName().equals( - filename)).map(Path::toString).toList(); + try ( Stream walk = ThrowingSupplier.toSupplier(() -> { + if (TKit.isLinux() && rootDir.equals(Path.of("/"))) { + // Installed package with split app image on Linux. Iterate + // through package file list instead of the entire file system. + return LinuxHelper.getPackageFiles(this); + } else { + return Files.walk(rootDir); + } + }).get()) { + List files = walk.filter(path -> filename.equals( + path.getFileName())).map(Path::toString).toList(); if (expectedPath == null) { TKit.assertStringListEquals(List.of(), files, String.format( From 7848ed779b8c292fe78b5e4c90a7504e034e1bf0 Mon Sep 17 00:00:00 2001 From: Alexey Semenyuk Date: Mon, 27 Nov 2023 22:28:38 +0000 Subject: [PATCH 074/250] 8301856: Generated .spec file for RPM installers uninstalls desktop launcher on update Reviewed-by: almatvee --- .../jpackage/internal/DesktopIntegration.java | 45 +++++---- .../internal/LinuxLaunchersAsServices.java | 32 ++++++- .../internal/LinuxPackageBundler.java | 5 +- .../internal/resources/common_utils.sh | 23 +++++ .../internal/resources/desktop_utils.sh | 16 ++-- .../internal/resources/services_utils.sh | 13 --- .../internal/resources/template.preinst | 3 +- .../internal/resources/template.prerm | 1 + .../jpackage/internal/resources/template.spec | 6 +- .../jpackage/internal/ShellCustomAction.java | 23 ++++- .../internal/UnixLaunchersAsServices.java | 14 +-- .../jdk/jpackage/test/AdditionalLauncher.java | 45 ++++++++- .../test/LauncherAsServiceVerifier.java | 46 +++++++-- .../jdk/jpackage/test/LinuxHelper.java | 11 ++- .../jpackage/linux/ServiceAndDesktopTest.java | 74 +++++++++++++++ .../jdk/tools/jpackage/linux/UpgradeTest.java | 94 +++++++++++++++++++ 16 files changed, 377 insertions(+), 74 deletions(-) create mode 100644 src/jdk.jpackage/linux/classes/jdk/jpackage/internal/resources/common_utils.sh create mode 100644 test/jdk/tools/jpackage/linux/ServiceAndDesktopTest.java create mode 100644 test/jdk/tools/jpackage/linux/UpgradeTest.java diff --git a/src/jdk.jpackage/linux/classes/jdk/jpackage/internal/DesktopIntegration.java b/src/jdk.jpackage/linux/classes/jdk/jpackage/internal/DesktopIntegration.java index 0e027ebbf417f..6a5b200f8f304 100644 --- a/src/jdk.jpackage/linux/classes/jdk/jpackage/internal/DesktopIntegration.java +++ b/src/jdk.jpackage/linux/classes/jdk/jpackage/internal/DesktopIntegration.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2023, 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,9 +63,10 @@ final class DesktopIntegration extends ShellCustomAction { private static final String COMMANDS_INSTALL = "DESKTOP_COMMANDS_INSTALL"; private static final String COMMANDS_UNINSTALL = "DESKTOP_COMMANDS_UNINSTALL"; private static final String SCRIPTS = "DESKTOP_SCRIPTS"; + private static final String COMMON_SCRIPTS = "COMMON_SCRIPTS"; private static final List REPLACEMENT_STRING_IDS = List.of( - COMMANDS_INSTALL, COMMANDS_UNINSTALL, SCRIPTS); + COMMANDS_INSTALL, COMMANDS_UNINSTALL, SCRIPTS, COMMON_SCRIPTS); private DesktopIntegration(PlatformPackage thePackage, Map params, @@ -229,8 +230,6 @@ protected Map createImpl() throws IOException { shellCommands.applyTo(data); } - boolean needCleanupScripts = !associations.isEmpty(); - // Take care of additional launchers if there are any. // Process every additional launcher as the main application launcher. // Collect shell commands to install/uninstall integration with desktop @@ -241,10 +240,6 @@ protected Map createImpl() throws IOException { List uninstallShellCmds = new ArrayList<>(Arrays.asList( data.get(COMMANDS_UNINSTALL))); for (var integration: nestedIntegrations) { - if (!integration.associations.isEmpty()) { - needCleanupScripts = true; - } - Map launcherData = integration.create(); installShellCmds.add(launcherData.get(COMMANDS_INSTALL)); @@ -254,10 +249,8 @@ protected Map createImpl() throws IOException { data.put(COMMANDS_INSTALL, stringifyShellCommands(installShellCmds)); data.put(COMMANDS_UNINSTALL, stringifyShellCommands(uninstallShellCmds)); - if (needCleanupScripts) { - // Pull in desktop_utils.sh scrips library. - data.put(SCRIPTS, stringifyTextFile("desktop_utils.sh")); - } + data.put(COMMON_SCRIPTS, stringifyTextFile("common_utils.sh")); + data.put(SCRIPTS, stringifyTextFile("desktop_utils.sh")); return data; } @@ -295,7 +288,9 @@ private class ShellCommands { registerDesktopFileCmd = String.join(" ", "xdg-desktop-menu", "install", desktopFile.installPath().toString()); - unregisterDesktopFileCmd = String.join(" ", "xdg-desktop-menu", + unregisterDesktopFileCmd = String.join(" ", + "do_if_file_belongs_to_single_package", desktopFile. + installPath().toString(), "xdg-desktop-menu", "uninstall", desktopFile.installPath().toString()); } @@ -303,8 +298,10 @@ void setFileAssociations() { registerFileAssociationsCmd = String.join(" ", "xdg-mime", "install", mimeInfoFile.installPath().toString()); - unregisterFileAssociationsCmd = String.join(" ", "xdg-mime", - "uninstall", mimeInfoFile.installPath().toString()); + unregisterFileAssociationsCmd = String.join(" ", + "do_if_file_belongs_to_single_package", mimeInfoFile. + installPath().toString(), "xdg-mime", "uninstall", + mimeInfoFile.installPath().toString()); // // Add manual cleanup of system files to get rid of @@ -320,26 +317,26 @@ void setFileAssociations() { // of non-existing desktop file. // String cleanUpCommand = String.join(" ", - "uninstall_default_mime_handler", - desktopFile.installPath().getFileName().toString(), - String.join(" ", getMimeTypeNamesFromFileAssociations())); + "do_if_file_belongs_to_single_package", desktopFile. + installPath().toString(), + "desktop_uninstall_default_mime_handler", desktopFile. + installPath().getFileName().toString(), String.join( + " ", getMimeTypeNamesFromFileAssociations())); unregisterFileAssociationsCmd = stringifyShellCommands( unregisterFileAssociationsCmd, cleanUpCommand); } - void addIcon(String mimeType, Path iconFile) { - addIcon(mimeType, iconFile, getSquareSizeOfImage(iconFile.toFile())); - } - void addIcon(String mimeType, Path iconFile, int imgSize) { imgSize = normalizeIconSize(imgSize); final String dashMime = mimeType.replace('/', '-'); registerIconCmds.add(String.join(" ", "xdg-icon-resource", "install", "--context", "mimetypes", "--size", Integer.toString(imgSize), iconFile.toString(), dashMime)); - unregisterIconCmds.add(String.join(" ", "xdg-icon-resource", - "uninstall", dashMime, "--size", Integer.toString(imgSize))); + unregisterIconCmds.add(String.join(" ", + "do_if_file_belongs_to_single_package", iconFile.toString(), + "xdg-icon-resource", "uninstall", dashMime, "--size", + Integer.toString(imgSize))); } void applyTo(Map data) { diff --git a/src/jdk.jpackage/linux/classes/jdk/jpackage/internal/LinuxLaunchersAsServices.java b/src/jdk.jpackage/linux/classes/jdk/jpackage/internal/LinuxLaunchersAsServices.java index 10a655538507e..9c5b272b4312e 100644 --- a/src/jdk.jpackage/linux/classes/jdk/jpackage/internal/LinuxLaunchersAsServices.java +++ b/src/jdk.jpackage/linux/classes/jdk/jpackage/internal/LinuxLaunchersAsServices.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,6 +26,8 @@ import java.io.IOException; import java.nio.file.Path; +import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Map; import static jdk.jpackage.internal.OverridableResource.createResource; @@ -42,10 +44,24 @@ private LinuxLaunchersAsServices(PlatformPackage thePackage, }); } + @Override + protected List replacementStringIds() { + return LINUX_REPLACEMENT_STRING_IDS; + } + + @Override + protected Map createImpl() throws IOException { + var data = super.createImpl(); + if (!data.isEmpty()) { + data.put(COMMON_SCRIPTS, stringifyTextFile("common_utils.sh")); + } + return data; + } + static ShellCustomAction create(PlatformPackage thePackage, Map params) throws IOException { if (StandardBundlerParam.isRuntimeInstaller(params)) { - return ShellCustomAction.nop(REPLACEMENT_STRING_IDS); + return ShellCustomAction.nop(LINUX_REPLACEMENT_STRING_IDS); } return new LinuxLaunchersAsServices(thePackage, params); } @@ -84,4 +100,16 @@ Path descriptorFilePath(Path root) { private final static List REQUIRED_PACKAGES = List.of("systemd", "coreutils" /* /usr/bin/wc */, "grep"); + + private static final String COMMON_SCRIPTS = "COMMON_SCRIPTS"; + + private static final List LINUX_REPLACEMENT_STRING_IDS; + + static { + ArrayList buf = new ArrayList<>(); + buf.addAll(UnixLaunchersAsServices.REPLACEMENT_STRING_IDS); + buf.add(COMMON_SCRIPTS); + + LINUX_REPLACEMENT_STRING_IDS = Collections.unmodifiableList(buf); + } } diff --git a/src/jdk.jpackage/linux/classes/jdk/jpackage/internal/LinuxPackageBundler.java b/src/jdk.jpackage/linux/classes/jdk/jpackage/internal/LinuxPackageBundler.java index 374f88878e82d..b510ed414118b 100644 --- a/src/jdk.jpackage/linux/classes/jdk/jpackage/internal/LinuxPackageBundler.java +++ b/src/jdk.jpackage/linux/classes/jdk/jpackage/internal/LinuxPackageBundler.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2023, 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 @@ -155,7 +155,8 @@ public final Path execute(Map params, Map data = createDefaultReplacementData(params); for (var ca : customActions) { - data.putAll(ca.instance.create()); + ShellCustomAction.mergeReplacementData(data, ca.instance. + create()); } data.putAll(createReplacementData(params)); diff --git a/src/jdk.jpackage/linux/classes/jdk/jpackage/internal/resources/common_utils.sh b/src/jdk.jpackage/linux/classes/jdk/jpackage/internal/resources/common_utils.sh new file mode 100644 index 0000000000000..31a81bb5fb0bf --- /dev/null +++ b/src/jdk.jpackage/linux/classes/jdk/jpackage/internal/resources/common_utils.sh @@ -0,0 +1,23 @@ +file_belongs_to_single_package () +{ + if [ ! -e "$1" ]; then + false + elif [ "$package_type" = rpm ]; then + test `rpm -q --whatprovides "$1" | wc -l` = 1 + elif [ "$package_type" = deb ]; then + test `dpkg -S "$1" | wc -l` = 1 + else + exit 1 + fi +} + + +do_if_file_belongs_to_single_package () +{ + local file="$1" + shift + + if file_belongs_to_single_package "$file"; then + "$@" + fi +} diff --git a/src/jdk.jpackage/linux/classes/jdk/jpackage/internal/resources/desktop_utils.sh b/src/jdk.jpackage/linux/classes/jdk/jpackage/internal/resources/desktop_utils.sh index 1ed96076282c4..7c243b2b5c5bc 100644 --- a/src/jdk.jpackage/linux/classes/jdk/jpackage/internal/resources/desktop_utils.sh +++ b/src/jdk.jpackage/linux/classes/jdk/jpackage/internal/resources/desktop_utils.sh @@ -2,7 +2,7 @@ # Remove $1 desktop file from the list of default handlers for $2 mime type # in $3 file dumping output to stdout. # -_filter_out_default_mime_handler () +desktop_filter_out_default_mime_handler () { local defaults_list="$3" @@ -50,7 +50,7 @@ EOF # in $1 file. # Result is saved in $1 file. # -_uninstall_default_mime_handler () +desktop_uninstall_default_mime_handler_0 () { local defaults_list=$1 shift @@ -66,20 +66,20 @@ _uninstall_default_mime_handler () local v local update= for mime in "$@"; do - _filter_out_default_mime_handler "$desktop_file" "$mime" "$tmpfile1" > "$tmpfile2" + desktop_filter_out_default_mime_handler "$desktop_file" "$mime" "$tmpfile1" > "$tmpfile2" v="$tmpfile2" tmpfile2="$tmpfile1" tmpfile1="$v" if ! diff -q "$tmpfile1" "$tmpfile2" > /dev/null; then update=yes - trace Remove $desktop_file default handler for $mime mime type from $defaults_list file + desktop_trace Remove $desktop_file default handler for $mime mime type from $defaults_list file fi done if [ -n "$update" ]; then cat "$tmpfile1" > "$defaults_list" - trace "$defaults_list" file updated + desktop_trace "$defaults_list" file updated fi rm -f "$tmpfile1" "$tmpfile2" @@ -90,15 +90,15 @@ _uninstall_default_mime_handler () # Remove $1 desktop file from the list of default handlers for $@ mime types # in all known system defaults lists. # -uninstall_default_mime_handler () +desktop_uninstall_default_mime_handler () { for f in /usr/share/applications/defaults.list /usr/local/share/applications/defaults.list; do - _uninstall_default_mime_handler "$f" "$@" + desktop_uninstall_default_mime_handler_0 "$f" "$@" done } -trace () +desktop_trace () { echo "$@" } diff --git a/src/jdk.jpackage/linux/classes/jdk/jpackage/internal/resources/services_utils.sh b/src/jdk.jpackage/linux/classes/jdk/jpackage/internal/resources/services_utils.sh index 39ea958d1a427..730137104cf4f 100644 --- a/src/jdk.jpackage/linux/classes/jdk/jpackage/internal/resources/services_utils.sh +++ b/src/jdk.jpackage/linux/classes/jdk/jpackage/internal/resources/services_utils.sh @@ -23,16 +23,3 @@ unregister_services () fi done } - -file_belongs_to_single_package () -{ - if [ ! -e "$1" ]; then - false - elif [ "$package_type" = rpm ]; then - test `rpm -q --whatprovides "$1" | wc -l` = 1 - elif [ "$package_type" = deb ]; then - test `dpkg -S "$1" | wc -l` = 1 - else - exit 1 - fi -} diff --git a/src/jdk.jpackage/linux/classes/jdk/jpackage/internal/resources/template.preinst b/src/jdk.jpackage/linux/classes/jdk/jpackage/internal/resources/template.preinst index 16288e4f34894..489c161377297 100644 --- a/src/jdk.jpackage/linux/classes/jdk/jpackage/internal/resources/template.preinst +++ b/src/jdk.jpackage/linux/classes/jdk/jpackage/internal/resources/template.preinst @@ -14,12 +14,13 @@ set -e # the debian-policy package package_type=deb +COMMON_SCRIPTS LAUNCHER_AS_SERVICE_SCRIPTS case "$1" in install|upgrade) if [ -n "$2" ]; then - true; LAUNCHER_AS_SERVICE_COMMANDS_UNINSTALL + :; LAUNCHER_AS_SERVICE_COMMANDS_UNINSTALL fi ;; diff --git a/src/jdk.jpackage/linux/classes/jdk/jpackage/internal/resources/template.prerm b/src/jdk.jpackage/linux/classes/jdk/jpackage/internal/resources/template.prerm index a772e309aceae..b5ed447ad69e2 100644 --- a/src/jdk.jpackage/linux/classes/jdk/jpackage/internal/resources/template.prerm +++ b/src/jdk.jpackage/linux/classes/jdk/jpackage/internal/resources/template.prerm @@ -18,6 +18,7 @@ set -e package_type=deb +COMMON_SCRIPTS DESKTOP_SCRIPTS LAUNCHER_AS_SERVICE_SCRIPTS diff --git a/src/jdk.jpackage/linux/classes/jdk/jpackage/internal/resources/template.spec b/src/jdk.jpackage/linux/classes/jdk/jpackage/internal/resources/template.spec index 45e5e86126bc6..7918ce6bd884f 100644 --- a/src/jdk.jpackage/linux/classes/jdk/jpackage/internal/resources/template.spec +++ b/src/jdk.jpackage/linux/classes/jdk/jpackage/internal/resources/template.spec @@ -83,13 +83,15 @@ LAUNCHER_AS_SERVICE_COMMANDS_INSTALL %pre package_type=rpm +COMMON_SCRIPTS LAUNCHER_AS_SERVICE_SCRIPTS -if [ "$1" = 2 ]; then - true; LAUNCHER_AS_SERVICE_COMMANDS_UNINSTALL +if [ "$1" -gt 1 ]; then + :; LAUNCHER_AS_SERVICE_COMMANDS_UNINSTALL fi %preun package_type=rpm +COMMON_SCRIPTS DESKTOP_SCRIPTS LAUNCHER_AS_SERVICE_SCRIPTS DESKTOP_COMMANDS_UNINSTALL diff --git a/src/jdk.jpackage/unix/classes/jdk/jpackage/internal/ShellCustomAction.java b/src/jdk.jpackage/unix/classes/jdk/jpackage/internal/ShellCustomAction.java index 8b37377058c10..64afc95516da8 100644 --- a/src/jdk.jpackage/unix/classes/jdk/jpackage/internal/ShellCustomAction.java +++ b/src/jdk.jpackage/unix/classes/jdk/jpackage/internal/ShellCustomAction.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2023, 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 @@ -34,6 +34,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.stream.Collectors; /** @@ -74,6 +75,26 @@ protected Map createImpl() throws IOException { }; } + static void mergeReplacementData(Map target, + Map newValues) { + Objects.requireNonNull(target); + Objects.requireNonNull(newValues); + + for (var kvp : newValues.entrySet()) { + String newValue = kvp.getValue(); + String existingValue = target.putIfAbsent(kvp.getKey(), newValue); + if (existingValue != null) { + if (existingValue.isEmpty()) { + target.replace(kvp.getKey(), newValue); + } else if (!newValue.isEmpty() && !newValue. + equals(existingValue)) { + throw new IllegalArgumentException(String.format( + "Key [%s] value mismatch", kvp.getKey())); + } + } + } + } + protected static String stringifyShellCommands(String... commands) { return stringifyShellCommands(Arrays.asList(commands)); } diff --git a/src/jdk.jpackage/unix/classes/jdk/jpackage/internal/UnixLaunchersAsServices.java b/src/jdk.jpackage/unix/classes/jdk/jpackage/internal/UnixLaunchersAsServices.java index 59f4dacca57b5..1e90c8371b10c 100644 --- a/src/jdk.jpackage/unix/classes/jdk/jpackage/internal/UnixLaunchersAsServices.java +++ b/src/jdk.jpackage/unix/classes/jdk/jpackage/internal/UnixLaunchersAsServices.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2023, 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 @@ -65,12 +65,12 @@ final List requiredPackages() { } @Override - final protected List replacementStringIds() { - return List.of(COMMANDS_INSTALL, COMMANDS_UNINSTALL, SCRIPTS); + protected List replacementStringIds() { + return REPLACEMENT_STRING_IDS; } @Override - final protected Map createImpl() throws IOException { + protected Map createImpl() throws IOException { Map data = new HashMap<>(); if (launchers.isEmpty()) { @@ -87,11 +87,7 @@ final protected Map createImpl() throws IOException { Collectors.joining(" "))); }; - try { - data.put(SCRIPTS, stringifyTextFile("services_utils.sh")); - } catch (IOException ex) { - throw new RuntimeException(ex); - } + data.put(SCRIPTS, stringifyTextFile("services_utils.sh")); data.put(COMMANDS_INSTALL, strigifier.apply("register_services")); data.put(COMMANDS_UNINSTALL, strigifier.apply("unregister_services")); diff --git a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/AdditionalLauncher.java b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/AdditionalLauncher.java index d2d7ac9f66ee9..6c388ac77ffb9 100644 --- a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/AdditionalLauncher.java +++ b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/AdditionalLauncher.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2023, 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 @@ -76,6 +76,11 @@ final public AdditionalLauncher addJavaOptions(String... v) { return this; } + final public AdditionalLauncher setVerifyUninstalled(boolean value) { + verifyUninstalled = value; + return this; + } + final public AdditionalLauncher setLauncherAsService() { return addRawProperties(LAUNCHER_AS_SERVICE); } @@ -141,6 +146,13 @@ final public void applyTo(JPackageCommand cmd) { final public void applyTo(PackageTest test) { test.addInitializer(this::initialize); test.addInstallVerifier(this::verify); + if (verifyUninstalled) { + test.addUninstallVerifier(this::verifyUninstalled); + } + } + + final public void verifyRemovedInUpgrade(PackageTest test) { + test.addInstallVerifier(this::verifyUninstalled); } static void forEachAdditionalLauncher(JPackageCommand cmd, @@ -318,10 +330,40 @@ private void verifyDescription(JPackageCommand cmd) throws IOException { } } + private void verifyInstalled(JPackageCommand cmd, boolean installed) throws IOException { + if (TKit.isLinux() && !cmd.isImagePackageType() && !cmd. + isPackageUnpacked(String.format( + "Not verifying package and system .desktop files for [%s] launcher", + cmd.appLauncherPath(name)))) { + Path packageDesktopFile = LinuxHelper.getDesktopFile(cmd, name); + Path systemDesktopFile = LinuxHelper.getSystemDesktopFilesFolder(). + resolve(packageDesktopFile.getFileName()); + if (Files.exists(packageDesktopFile) && installed) { + TKit.assertFileExists(systemDesktopFile); + TKit.assertStringListEquals(Files.readAllLines( + packageDesktopFile), + Files.readAllLines(systemDesktopFile), String.format( + "Check [%s] and [%s] files are equal", + packageDesktopFile, + systemDesktopFile)); + } else { + TKit.assertPathExists(packageDesktopFile, false); + TKit.assertPathExists(systemDesktopFile, false); + } + } + } + + protected void verifyUninstalled(JPackageCommand cmd) throws IOException { + verifyInstalled(cmd, false); + Path launcherPath = cmd.appLauncherPath(name); + TKit.assertPathExists(launcherPath, false); + } + protected void verify(JPackageCommand cmd) throws IOException { verifyIcon(cmd); verifyShortcuts(cmd); verifyDescription(cmd); + verifyInstalled(cmd, true); Path launcherPath = cmd.appLauncherPath(name); @@ -394,6 +436,7 @@ private static String resolveVariables(JPackageCommand cmd, String str) { return str; } + private boolean verifyUninstalled; private List javaOptions; private List defaultArguments; private Path icon; diff --git a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/LauncherAsServiceVerifier.java b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/LauncherAsServiceVerifier.java index a695a3b693d5f..b7ebc4939ba38 100644 --- a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/LauncherAsServiceVerifier.java +++ b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/LauncherAsServiceVerifier.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,6 +23,7 @@ package jdk.jpackage.test; import java.io.IOException; +import java.nio.file.FileSystemException; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; @@ -30,6 +31,7 @@ import java.util.Objects; import java.util.Optional; import java.util.Set; +import java.util.function.Consumer; import java.util.regex.Pattern; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -58,10 +60,16 @@ public Builder setAppOutputFileName(String v) { return this; } + public Builder setAdditionalLauncherCallback(Consumer v) { + additionalLauncherCallback = v; + return this; + } + public LauncherAsServiceVerifier create() { Objects.requireNonNull(expectedValue); return new LauncherAsServiceVerifier(launcherName, appOutputFileName, - expectedValue); + expectedValue, + launcherName != null ? additionalLauncherCallback : null); } public Builder applyTo(PackageTest pkg) { @@ -72,6 +80,7 @@ public Builder applyTo(PackageTest pkg) { private String launcherName; private String expectedValue; private String appOutputFileName = "launcher-as-service.txt"; + private Consumer additionalLauncherCallback; } public static Builder build() { @@ -80,10 +89,12 @@ public static Builder build() { private LauncherAsServiceVerifier(String launcherName, String appOutputFileName, - String expectedArgValue) { + String expectedArgValue, + Consumer additionalLauncherCallback) { this.expectedValue = expectedArgValue; this.launcherName = launcherName; this.appOutputFileName = Path.of(appOutputFileName); + this.additionalLauncherCallback = additionalLauncherCallback; } public void applyTo(PackageTest pkg) { @@ -233,7 +244,7 @@ private void applyToMainLauncher(PackageTest pkg) { outputFilePath.toString()) .addDefaultArguments(expectedValue) .verifyOutput(); - TKit.deleteIfExists(outputFilePath); + deleteOutputFile(outputFilePath); } }); pkg.addInstallVerifier(cmd -> { @@ -242,13 +253,13 @@ private void applyToMainLauncher(PackageTest pkg) { } private void applyToAdditionalLauncher(PackageTest pkg) { - new AdditionalLauncher(launcherName) { + AdditionalLauncher al = new AdditionalLauncher(launcherName) { @Override protected void verify(JPackageCommand cmd) throws IOException { if (canVerifyInstall(cmd)) { delayInstallVerify(); super.verify(cmd); - TKit.deleteIfExists(appOutputFilePathVerify(cmd)); + deleteOutputFile(appOutputFilePathVerify(cmd)); } LauncherAsServiceVerifier.verify(cmd, launcherName); } @@ -256,8 +267,26 @@ protected void verify(JPackageCommand cmd) throws IOException { .addJavaOptions("-Djpackage.test.appOutput=" + appOutputFilePathInitialize().toString()) .addJavaOptions("-Djpackage.test.noexit=true") - .addDefaultArguments(expectedValue) - .applyTo(pkg); + .addDefaultArguments(expectedValue); + + Optional.ofNullable(additionalLauncherCallback).ifPresent(v -> v.accept(al)); + + al.applyTo(pkg); + } + + private static void deleteOutputFile(Path file) throws IOException { + try { + TKit.deleteIfExists(file); + } catch (FileSystemException ex) { + if (TKit.isLinux() || TKit.isOSX()) { + // Probably "Operation no permitted" error. Try with "sudo" as the + // file is created by a launcher started under root account. + Executor.of("sudo", "rm", "-f").addArgument(file.toString()). + execute(); + } else { + throw ex; + } + } } private static void verify(JPackageCommand cmd, String launcherName) throws @@ -337,6 +366,7 @@ private Path appOutputFilePathVerify(JPackageCommand cmd) { private final String expectedValue; private final String launcherName; private final Path appOutputFileName; + private final Consumer additionalLauncherCallback; final static Set SUPPORTED_PACKAGES = Stream.of(LINUX, WINDOWS, Set.of(MAC_PKG)).flatMap(x -> x.stream()).collect(Collectors.toSet()); diff --git a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/LinuxHelper.java b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/LinuxHelper.java index 44212587f7dd9..bf5ced09bc771 100644 --- a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/LinuxHelper.java +++ b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/LinuxHelper.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2023, 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 @@ -464,7 +464,7 @@ static void initFileAssociationsTestFile(Path testFile) { } } - private static Path getSystemDesktopFilesFolder() { + static Path getSystemDesktopFilesFolder() { return Stream.of("/usr/share/applications", "/usr/local/share/applications").map(Path::of).filter(dir -> { return Files.exists(dir.resolve("defaults.list")); @@ -558,12 +558,17 @@ private static void verifyIconInScriptlet(Scriptlet scriptletType, final String xdgCmdName = "xdg-icon-resource"; Stream scriptletBodyStream = scriptletBody.stream() - .filter(str -> str.startsWith(xdgCmdName)) .filter(str -> Pattern.compile( "\\b" + dashMime + "\\b").matcher(str).find()); if (scriptletType == Scriptlet.PostInstall) { + scriptletBodyStream = scriptletBodyStream.filter(str -> str. + startsWith(xdgCmdName)); scriptletBodyStream = scriptletBodyStream.filter(str -> List.of( str.split("\\s+")).contains(iconPathInPackage.toString())); + } else { + scriptletBodyStream = scriptletBodyStream.filter(str -> str. + contains(xdgCmdName)).filter(str -> str.startsWith( + "do_if_file_belongs_to_single_package")); } scriptletBodyStream.peek(xdgCmd -> { diff --git a/test/jdk/tools/jpackage/linux/ServiceAndDesktopTest.java b/test/jdk/tools/jpackage/linux/ServiceAndDesktopTest.java new file mode 100644 index 0000000000000..b047ce3e8f427 --- /dev/null +++ b/test/jdk/tools/jpackage/linux/ServiceAndDesktopTest.java @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2023, 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. + */ + +import java.nio.file.Path; +import jdk.jpackage.test.AdditionalLauncher; +import jdk.jpackage.test.PackageTest; +import jdk.jpackage.test.Annotations.Test; +import jdk.jpackage.test.LauncherAsServiceVerifier; +import jdk.jpackage.test.TKit; + +/** + * Test how services and desktop integration align together in the same package. + * On Linux these features share common code in custom actions (common_utils.sh). + * Test correctness of integration of this code. + * + * The test is not intended to be executed by SQE. It is for internal use only + */ + +/* + * @test + * @summary jpackage with desktop integration and services on Linux + * @library ../helpers + * @key jpackagePlatformPackage + * @requires jpackage.test.SQETest == null + * @build jdk.jpackage.test.* + * @requires (os.family == "linux") + * @modules jdk.jpackage/jdk.jpackage.internal + * @compile ServiceAndDesktopTest.java + * @run main/othervm/timeout=720 jdk.jpackage.test.Main + * --jpt-run=ServiceAndDesktopTest + */ + +public class ServiceAndDesktopTest { + + @Test + public static void test() { + var pkg = new PackageTest() + .configureHelloApp() + .addBundleDesktopIntegrationVerifier(true) + .addInitializer(cmd -> { + // Want a .desktop file for the main launcher + cmd.addArguments("--icon", GOLDEN_ICON.toString()); + }); + LauncherAsServiceVerifier.build().setLauncherName("foo"). + setExpectedValue("Fun").setAdditionalLauncherCallback(al -> { + // Don't want .desktop file for service launcher + al.setNoIcon(); + }).applyTo(pkg); + pkg.run(); + } + + private final static Path GOLDEN_ICON = TKit.TEST_SRC_ROOT.resolve(Path.of( + "resources", "icon" + TKit.ICON_SUFFIX)); +} diff --git a/test/jdk/tools/jpackage/linux/UpgradeTest.java b/test/jdk/tools/jpackage/linux/UpgradeTest.java new file mode 100644 index 0000000000000..1a4234db86f62 --- /dev/null +++ b/test/jdk/tools/jpackage/linux/UpgradeTest.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2023, 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. + */ + +import java.util.Map; +import java.nio.file.Path; +import jdk.jpackage.test.AdditionalLauncher; +import jdk.jpackage.test.PackageTest; +import jdk.jpackage.test.Annotations.Test; +import jdk.jpackage.test.JPackageCommand; +import jdk.jpackage.test.TKit; + +/* + * @test + * @summary Linux upgrade testing + * @library ../helpers + * @key jpackagePlatformPackage + * @build jdk.jpackage.test.* + * @requires (os.family == "linux") + * @modules jdk.jpackage/jdk.jpackage.internal + * @compile UpgradeTest.java + * @run main/othervm/timeout=360 jdk.jpackage.test.Main + * --jpt-run=UpgradeTest + */ +public class UpgradeTest { + + @Test + public void testDesktopFiles() { + // Create two packages with the same name but different versions. + // The first will have `launcherA`, and `launcherB` additional launchers. + // The second will have `launcherB`, and `launcherC` additional launchers. + // Launchers are configured in a way to have correpsonding .desktop files. + // These files will be installed in system directories. + // After the upgrade `launcherA`-related files must be deleted and + // `launcherB`-related files from the first package must be replaced with + // the files from the second package. + // Checks that correct files are installed in system directories + // encapsulated in AdditionalLauncher class. + + var pkg = createPackageTest().disablePackageUninstaller(); + + var alA = createAdditionalLauncher("launcherA"); + + alA.applyTo(pkg); + createAdditionalLauncher("launcherB").addRawProperties(Map.entry( + "description", "Foo")).applyTo(pkg); + + var pkg2 = createPackageTest().addInitializer(cmd -> { + cmd.addArguments("--app-version", "2.0"); + }); + + alA.verifyRemovedInUpgrade(pkg2); + createAdditionalLauncher("launcherB").addRawProperties(Map.entry( + "description", "Bar")).applyTo(pkg2); + createAdditionalLauncher("launcherC").applyTo(pkg2); + + new PackageTest.Group(pkg, pkg2).run(); + } + + private static PackageTest createPackageTest() { + return new PackageTest().configureHelloApp().addInitializer( + JPackageCommand::setInputToEmptyDirectory).addInitializer( + JPackageCommand::setFakeRuntime). + addBundleDesktopIntegrationVerifier(true); + } + + private static AdditionalLauncher createAdditionalLauncher(String name) { + // Configure additionl launcher in a way to trigger jpackage create + // corresponding .desktop file. + return new AdditionalLauncher(name).setIcon(GOLDEN_ICON); + } + + private final static Path GOLDEN_ICON = TKit.TEST_SRC_ROOT.resolve(Path.of( + "resources", "icon" + TKit.ICON_SUFFIX)); +} From f1a24f6d4827f9b8648dd2afe6d606dab67d51fe Mon Sep 17 00:00:00 2001 From: Michael McMahon Date: Mon, 27 Nov 2023 22:43:48 +0000 Subject: [PATCH 075/250] 8318599: HttpURLConnection cache issues leading to crashes in JGSS w/ native GSS introduced by 8303809 Reviewed-by: dfuchs --- .../sun/net/www/protocol/http/NegotiateAuthentication.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/java.base/share/classes/sun/net/www/protocol/http/NegotiateAuthentication.java b/src/java.base/share/classes/sun/net/www/protocol/http/NegotiateAuthentication.java index 1021503318ec6..7881a1480c990 100644 --- a/src/java.base/share/classes/sun/net/www/protocol/http/NegotiateAuthentication.java +++ b/src/java.base/share/classes/sun/net/www/protocol/http/NegotiateAuthentication.java @@ -152,7 +152,7 @@ private static HashMap getCache() { @Override protected boolean useAuthCache() { - return super.useAuthCache() && cacheSPNEGO; + return false; } /** From 0678253bffca91775d29d2942f48c806ab4d2cab Mon Sep 17 00:00:00 2001 From: Joe Wang Date: Tue, 28 Nov 2023 06:48:22 +0000 Subject: [PATCH 076/250] 8320602: Lock contention in SchemaDVFactory.getInstance() Reviewed-by: iris, lancea --- .../org/apache/xerces/internal/impl/dv/SchemaDVFactory.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/dv/SchemaDVFactory.java b/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/dv/SchemaDVFactory.java index f81b7cf41ee33..85d4ac0a50c9e 100644 --- a/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/dv/SchemaDVFactory.java +++ b/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/dv/SchemaDVFactory.java @@ -53,7 +53,7 @@ public abstract class SchemaDVFactory { * @exception DVFactoryException cannot create an instance of the specified * class name or the default class name */ - public static synchronized final SchemaDVFactory getInstance() throws DVFactoryException { + public static final SchemaDVFactory getInstance() throws DVFactoryException { return getInstance(DEFAULT_FACTORY_CLASS); } //getInstance(): SchemaDVFactory @@ -66,7 +66,7 @@ public static synchronized final SchemaDVFactory getInstance() throws DVFactoryE * @exception DVFactoryException cannot create an instance of the specified * class name or the default class name */ - public static synchronized final SchemaDVFactory getInstance(String factoryClass) throws DVFactoryException { + public static final SchemaDVFactory getInstance(String factoryClass) throws DVFactoryException { try { // if the class name is not specified, use the default one @@ -78,7 +78,7 @@ public static synchronized final SchemaDVFactory getInstance(String factoryClass } // can't create a new object of this class - protected SchemaDVFactory(){} + protected SchemaDVFactory() {} /** * Get a built-in simple type of the given name From 20aae3c4388ac33af54bbe25328c5fe817c0bd5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Galder=20Zamarren=CC=83o?= Date: Tue, 28 Nov 2023 08:33:23 +0000 Subject: [PATCH 077/250] 8320533: Adjust capstone integration for v6 changes Reviewed-by: ihse, aph --- make/Hsdis.gmk | 2 +- make/autoconf/lib-hsdis.m4 | 14 ++++++++++++++ make/autoconf/spec.gmk.in | 1 + src/utils/hsdis/capstone/hsdis-capstone.c | 8 +++++++- 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/make/Hsdis.gmk b/make/Hsdis.gmk index ec06a89aaab1f..bcf01dbe1529a 100644 --- a/make/Hsdis.gmk +++ b/make/Hsdis.gmk @@ -47,7 +47,7 @@ ifeq ($(HSDIS_BACKEND), capstone) CAPSTONE_ARCH := CS_ARCH_X86 CAPSTONE_MODE := CS_MODE_$(OPENJDK_TARGET_CPU_BITS) else ifeq ($(call isTargetCpuArch, aarch64), true) - CAPSTONE_ARCH := CS_ARCH_ARM64 + CAPSTONE_ARCH := CS_ARCH_$(CAPSTONE_ARCH_AARCH64_NAME) CAPSTONE_MODE := CS_MODE_ARM else $(error No support for Capstone on this platform) diff --git a/make/autoconf/lib-hsdis.m4 b/make/autoconf/lib-hsdis.m4 index c020bf4505424..33d8a35f8fdf4 100644 --- a/make/autoconf/lib-hsdis.m4 +++ b/make/autoconf/lib-hsdis.m4 @@ -63,6 +63,19 @@ AC_DEFUN([LIB_SETUP_HSDIS_CAPSTONE], AC_MSG_ERROR([Cannot continue]) fi fi + + capstone_header="\"$CAPSTONE/include/capstone/capstone.h\"" + AC_MSG_CHECKING([capstone aarch64 arch name]) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include $capstone_header],[[cs_arch test = CS_ARCH_AARCH64]])], + [ + AC_MSG_RESULT([AARCH64]) + CAPSTONE_ARCH_AARCH64_NAME="AARCH64" + ], + [ + AC_MSG_RESULT([ARM64]) + CAPSTONE_ARCH_AARCH64_NAME="ARM64" + ] + ) ]) ################################################################################ @@ -365,6 +378,7 @@ AC_DEFUN_ONCE([LIB_SETUP_HSDIS], AC_SUBST(HSDIS_CFLAGS) AC_SUBST(HSDIS_LDFLAGS) AC_SUBST(HSDIS_LIBS) + AC_SUBST(CAPSTONE_ARCH_AARCH64_NAME) AC_MSG_CHECKING([if hsdis should be bundled]) if test "x$ENABLE_HSDIS_BUNDLING" = "xtrue"; then diff --git a/make/autoconf/spec.gmk.in b/make/autoconf/spec.gmk.in index 25f985bd45df9..26b7d3ec9586c 100644 --- a/make/autoconf/spec.gmk.in +++ b/make/autoconf/spec.gmk.in @@ -377,6 +377,7 @@ ENABLE_HSDIS_BUNDLING := @ENABLE_HSDIS_BUNDLING@ HSDIS_CFLAGS := @HSDIS_CFLAGS@ HSDIS_LDFLAGS := @HSDIS_LDFLAGS@ HSDIS_LIBS := @HSDIS_LIBS@ +CAPSTONE_ARCH_AARCH64_NAME := @CAPSTONE_ARCH_AARCH64_NAME@ # The boot jdk to use. This is overridden in bootcycle-spec.gmk. Make sure to keep # it in sync. diff --git a/src/utils/hsdis/capstone/hsdis-capstone.c b/src/utils/hsdis/capstone/hsdis-capstone.c index ef65a01efcaf0..410b88eb2db46 100644 --- a/src/utils/hsdis/capstone/hsdis-capstone.c +++ b/src/utils/hsdis/capstone/hsdis-capstone.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * The Universal Permissive License (UPL), Version 1.0 @@ -52,6 +52,12 @@ #include #include +/* Undefine macro to avoid generating invalid C code. + Capstone refactored cs_detail for AArch64 architecture + from `cs_arm64 arm64` to `cs_aarch64 aarch64` + and that causes invalid macro expansion. +*/ +#undef aarch64 #include #include "hsdis.h" From debf0ecfb0076f5513595c74038215520d630764 Mon Sep 17 00:00:00 2001 From: Kevin Walls Date: Tue, 28 Nov 2023 09:48:40 +0000 Subject: [PATCH 078/250] 8313355: javax/management/remote/mandatory/notif/ListenerScaleTest.java failed with "Exception: Failed: ratio=792.2791601423487" Reviewed-by: sspitsyn --- .../remote/mandatory/notif/ListenerScaleTest.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/test/jdk/javax/management/remote/mandatory/notif/ListenerScaleTest.java b/test/jdk/javax/management/remote/mandatory/notif/ListenerScaleTest.java index c03c75adee5c0..e5e0c0493cb1a 100644 --- a/test/jdk/javax/management/remote/mandatory/notif/ListenerScaleTest.java +++ b/test/jdk/javax/management/remote/mandatory/notif/ListenerScaleTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2023, 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,6 +77,7 @@ public class ListenerScaleTest { private static final int WARMUP_WITH_ONE_MBEAN = 1000; private static final int NOTIFS_TO_TIME = 100; private static final int EXTRA_MBEANS = 20000; + private static final double RATIO_FAIL_VALUE = 2500.0; private static final ObjectName testObjectName; static { @@ -187,8 +188,9 @@ private static void test(MBeanServer mbs, JMXConnectorServer cs, long manyMBeansTime = timeNotif(mbs); System.out.println("Time with many MBeans: " + manyMBeansTime + "ns"); double ratio = (double) manyMBeansTime / singleMBeanTime; - if (ratio > 500.0) + if (ratio > RATIO_FAIL_VALUE) { throw new Exception("Failed: ratio=" + ratio); + } System.out.println("Test passed: ratio=" + ratio); } } From efc392259c64986bbbe880259e95b09058b9076a Mon Sep 17 00:00:00 2001 From: Aleksey Shipilev Date: Tue, 28 Nov 2023 09:49:03 +0000 Subject: [PATCH 079/250] 8319048: Monitor deflation unlink phase prolongs time to safepoint Reviewed-by: ysr, stefank, aboldtch, dcubed --- src/hotspot/share/runtime/globals.hpp | 4 + src/hotspot/share/runtime/synchronizer.cpp | 66 +++++-- src/hotspot/share/runtime/synchronizer.hpp | 1 + .../Monitor/MonitorUnlinkBatchTest.java | 178 ++++++++++++++++++ 4 files changed, 235 insertions(+), 14 deletions(-) create mode 100644 test/hotspot/jtreg/runtime/Monitor/MonitorUnlinkBatchTest.java diff --git a/src/hotspot/share/runtime/globals.hpp b/src/hotspot/share/runtime/globals.hpp index e28017a0d4bf9..7a5b8615594b0 100644 --- a/src/hotspot/share/runtime/globals.hpp +++ b/src/hotspot/share/runtime/globals.hpp @@ -736,6 +736,10 @@ const int ObjectAlignmentInBytes = 8; "at one time (minimum is 1024).") \ range(1024, max_jint) \ \ + product(intx, MonitorUnlinkBatch, 500, DIAGNOSTIC, \ + "The maximum number of monitors to unlink in one batch. ") \ + range(1, max_jint) \ + \ product(int, MonitorUsedDeflationThreshold, 90, DIAGNOSTIC, \ "Percentage of used monitors before triggering deflation (0 is " \ "off). The check is performed on GuaranteedSafepointInterval, " \ diff --git a/src/hotspot/share/runtime/synchronizer.cpp b/src/hotspot/share/runtime/synchronizer.cpp index 28bfbb6d71c71..4d01037380d88 100644 --- a/src/hotspot/share/runtime/synchronizer.cpp +++ b/src/hotspot/share/runtime/synchronizer.cpp @@ -84,44 +84,68 @@ size_t MonitorList::max() const { return Atomic::load(&_max); } -// Walk the in-use list and unlink (at most MonitorDeflationMax) deflated -// ObjectMonitors. Returns the number of unlinked ObjectMonitors. +// Walk the in-use list and unlink deflated ObjectMonitors. +// Returns the number of unlinked ObjectMonitors. size_t MonitorList::unlink_deflated(Thread* current, LogStream* ls, elapsedTimer* timer_p, + size_t deflated_count, GrowableArray* unlinked_list) { size_t unlinked_count = 0; ObjectMonitor* prev = nullptr; - ObjectMonitor* head = Atomic::load_acquire(&_head); - ObjectMonitor* m = head; + ObjectMonitor* m = Atomic::load_acquire(&_head); + // The in-use list head can be null during the final audit. while (m != nullptr) { if (m->is_being_async_deflated()) { - // Find next live ObjectMonitor. + // Find next live ObjectMonitor. Batch up the unlinkable monitors, so we can + // modify the list once per batch. The batch starts at "m". + size_t unlinked_batch = 0; ObjectMonitor* next = m; + // Look for at most MonitorUnlinkBatch monitors, or the number of + // deflated and not unlinked monitors, whatever comes first. + assert(deflated_count >= unlinked_count, "Sanity: underflow"); + size_t unlinked_batch_limit = MIN2(deflated_count - unlinked_count, MonitorUnlinkBatch); do { ObjectMonitor* next_next = next->next_om(); - unlinked_count++; + unlinked_batch++; unlinked_list->append(next); next = next_next; - if (unlinked_count >= (size_t)MonitorDeflationMax) { - // Reached the max so bail out on the gathering loop. + if (unlinked_batch >= unlinked_batch_limit) { + // Reached the max batch, so bail out of the gathering loop. + break; + } + if (prev == nullptr && Atomic::load(&_head) != m) { + // Current batch used to be at head, but it is not at head anymore. + // Bail out and figure out where we currently are. This avoids long + // walks searching for new prev during unlink under heavy list inserts. break; } } while (next != nullptr && next->is_being_async_deflated()); + + // Unlink the found batch. if (prev == nullptr) { - ObjectMonitor* prev_head = Atomic::cmpxchg(&_head, head, next); - if (prev_head != head) { - // Find new prev ObjectMonitor that just got inserted. + // The current batch is the first batch, so there is a chance that it starts at head. + // Optimistically assume no inserts happened, and try to unlink the entire batch from the head. + ObjectMonitor* prev_head = Atomic::cmpxchg(&_head, m, next); + if (prev_head != m) { + // Something must have updated the head. Figure out the actual prev for this batch. for (ObjectMonitor* n = prev_head; n != m; n = n->next_om()) { prev = n; } + assert(prev != nullptr, "Should have found the prev for the current batch"); prev->set_next_om(next); } } else { + // The current batch is preceded by another batch. This guarantees the current batch + // does not start at head. Unlink the entire current batch without updating the head. + assert(Atomic::load(&_head) != m, "Sanity"); prev->set_next_om(next); } - if (unlinked_count >= (size_t)MonitorDeflationMax) { - // Reached the max so bail out on the searching loop. + + unlinked_count += unlinked_batch; + if (unlinked_count >= deflated_count) { + // Reached the max so bail out of the searching loop. + // There should be no more deflated monitors left. break; } m = next; @@ -137,6 +161,20 @@ size_t MonitorList::unlink_deflated(Thread* current, LogStream* ls, ls, timer_p); } } + +#ifdef ASSERT + // Invariant: the code above should unlink all deflated monitors. + // The code that runs after this unlinking does not expect deflated monitors. + // Notably, attempting to deflate the already deflated monitor would break. + { + ObjectMonitor* m = Atomic::load_acquire(&_head); + while (m != nullptr) { + assert(!m->is_being_async_deflated(), "All deflated monitors should be unlinked"); + m = m->next_om(); + } + } +#endif + Atomic::sub(&_count, unlinked_count); return unlinked_count; } @@ -1625,7 +1663,7 @@ size_t ObjectSynchronizer::deflate_idle_monitors() { // Unlink deflated ObjectMonitors from the in-use list. ResourceMark rm; GrowableArray delete_list((int)deflated_count); - unlinked_count = _in_use_list.unlink_deflated(current, ls, &timer, &delete_list); + unlinked_count = _in_use_list.unlink_deflated(current, ls, &timer, deflated_count, &delete_list); if (current->is_monitor_deflation_thread()) { if (ls != nullptr) { timer.stop(); diff --git a/src/hotspot/share/runtime/synchronizer.hpp b/src/hotspot/share/runtime/synchronizer.hpp index d65a1e14bfa68..4dea13432e78e 100644 --- a/src/hotspot/share/runtime/synchronizer.hpp +++ b/src/hotspot/share/runtime/synchronizer.hpp @@ -47,6 +47,7 @@ class MonitorList { public: void add(ObjectMonitor* monitor); size_t unlink_deflated(Thread* current, LogStream* ls, elapsedTimer* timer_p, + size_t deflated_count, GrowableArray* unlinked_list); size_t count() const; size_t max() const; diff --git a/test/hotspot/jtreg/runtime/Monitor/MonitorUnlinkBatchTest.java b/test/hotspot/jtreg/runtime/Monitor/MonitorUnlinkBatchTest.java new file mode 100644 index 0000000000000..063940ce64314 --- /dev/null +++ b/test/hotspot/jtreg/runtime/Monitor/MonitorUnlinkBatchTest.java @@ -0,0 +1,178 @@ +/* + * Copyright Amazon.com Inc. 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. + */ + +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/* + * @test id=defaults + * @bug 8319048 + * @summary Test the MonitorUnlinkBatch options + * @library /test/lib + * @run driver MonitorUnlinkBatchTest defaults + */ + +/* + * @test id=legal + * @library /test/lib + * @run driver MonitorUnlinkBatchTest legal + */ + +/* + * @test id=illegal + * @library /test/lib + * @run driver MonitorUnlinkBatchTest illegal + */ + +/* + * @test id=aggressive + * @library /test/lib + * @run driver MonitorUnlinkBatchTest aggressive + */ + +/* + * @test id=lazy + * @library /test/lib + * @run driver MonitorUnlinkBatchTest lazy + */ + + +public class MonitorUnlinkBatchTest { + + public static class Test { + // Inflate a lot of monitors, so that threshold heuristics definitely fires + private static final int MONITORS = 10_000; + + // Use a handful of threads to inflate the monitors, to eat the cost of + // wait(1) calls. This can be larger than available parallelism, since threads + // would be time-waiting. + private static final int THREADS = 16; + + private static Thread[] threads; + private static Object[] monitors; + + public static void main(String... args) throws Exception { + monitors = new Object[MONITORS]; + threads = new Thread[THREADS]; + + for (int t = 0; t < THREADS; t++) { + int monStart = t * MONITORS / THREADS; + int monEnd = (t + 1) * MONITORS / THREADS; + threads[t] = new Thread(() -> { + for (int m = monStart; m < monEnd; m++) { + Object o = new Object(); + synchronized (o) { + try { + o.wait(1); + } catch (InterruptedException e) { + } + } + monitors[m] = o; + } + }); + threads[t].start(); + } + + for (Thread t : threads) { + t.join(); + } + + try { + Thread.sleep(10_000); + } catch (InterruptedException ie) { + } + } + } + + public static void main(String[] args) throws Exception { + if (args.length < 1) { + throw new IllegalArgumentException("Expect the test label"); + } + + String test = args[0]; + switch (test) { + case "defaults": + test(""); + break; + + case "legal": + // Legal, even if not useful settings + test("", + "-XX:MonitorDeflationMax=100000", + "-XX:MonitorUnlinkBatch=100001" + ); + break; + + case "illegal": + // Quick tests that should fail on JVM flags verification. + test("outside the allowed range", + "-XX:MonitorUnlinkBatch=-1" + ); + test("outside the allowed range", + "-XX:MonitorUnlinkBatch=0" + ); + break; + + case "aggressive": + // The smallest batch possible. + test("", + "-XX:MonitorUnlinkBatch=1" + ); + break; + + case "lazy": + // The largest batch possible. + test("", + "-XX:MonitorDeflationMax=1000000", + "-XX:MonitorUnlinkBatch=1000000" + ); + break; + + default: + throw new IllegalArgumentException("Unknown test: " + test); + } + } + + public static void test(String msg, String... args) throws Exception { + List opts = new ArrayList<>(); + opts.add("-Xmx128M"); + opts.add("-XX:+UnlockDiagnosticVMOptions"); + opts.add("-XX:GuaranteedAsyncDeflationInterval=100"); + opts.addAll(Arrays.asList(args)); + opts.add("MonitorUnlinkBatchTest$Test"); + + ProcessBuilder pb = ProcessTools.createTestJavaProcessBuilder(opts); + OutputAnalyzer oa = new OutputAnalyzer(pb.start()); + if (msg.isEmpty()) { + oa.shouldHaveExitValue(0); + } else { + oa.shouldNotHaveExitValue(0); + oa.shouldContain(msg); + } + } + +} From 464dc3dab540a36aeea76dbeea548c600df58763 Mon Sep 17 00:00:00 2001 From: Joachim Kern Date: Tue, 28 Nov 2023 09:57:48 +0000 Subject: [PATCH 080/250] 8319633: runtime/posixSig/TestPosixSig.java intermittent timeouts on UNIX Reviewed-by: dholmes, stuefe, mdoerr --- test/hotspot/jtreg/runtime/posixSig/TestPosixSig.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/test/hotspot/jtreg/runtime/posixSig/TestPosixSig.java b/test/hotspot/jtreg/runtime/posixSig/TestPosixSig.java index 1a9a283f740d8..337071269354f 100644 --- a/test/hotspot/jtreg/runtime/posixSig/TestPosixSig.java +++ b/test/hotspot/jtreg/runtime/posixSig/TestPosixSig.java @@ -44,8 +44,17 @@ public static void main(String[] args) throws Throwable { if (args.length == 0) { // Create a new java process for the TestPsig Java/JNI test. + // We run the VM in interpreted mode, because the JIT might mark + // a Java method as not-entrant, which means turning the first instruction + // into an illegal one. Calling such a method after establishing + // the new SIGILL signal handler with TestPosixSig.changeSigActionFor(4) + // below, but before the JNI checker noted and reacted on this signal handler + // modification, the JVM may crash or hang in an endless loop, where the + // illegal instruction will be continously executed, raising SIGILL, and + // the signal handler will return to the illegal instruction again... ProcessBuilder pb = ProcessTools.createLimitedTestJavaProcessBuilder( "-XX:+CheckJNICalls", + "-Xint", "-Djava.library.path=" + libpath + ":.", "TestPosixSig", "dummy"); From a5ccd3beaf069bdfe81736f6c62e5b4b9e18b5fe Mon Sep 17 00:00:00 2001 From: Jorn Vernee Date: Tue, 28 Nov 2023 10:17:58 +0000 Subject: [PATCH 081/250] 8267532: C2: Profile and prune untaken exception handlers 8310011: Arena with try-with-resources is slower than it should be Reviewed-by: thartmann, vlivanov --- src/hotspot/share/c1/c1_GraphBuilder.cpp | 1 - src/hotspot/share/ci/ciMethodData.cpp | 64 ++++-- src/hotspot/share/ci/ciMethodData.hpp | 37 +++- .../share/interpreter/interpreterRuntime.cpp | 2 + src/hotspot/share/oops/method.cpp | 10 + src/hotspot/share/oops/method.hpp | 3 + src/hotspot/share/oops/methodData.cpp | 43 +++- src/hotspot/share/oops/methodData.hpp | 65 +++++- src/hotspot/share/opto/c2_globals.hpp | 2 + src/hotspot/share/opto/doCall.cpp | 2 +- src/hotspot/share/opto/graphKit.cpp | 6 +- src/hotspot/share/opto/graphKit.hpp | 2 +- src/hotspot/share/opto/parse1.cpp | 16 ++ .../share/runtime/continuationFreezeThaw.cpp | 34 +-- src/hotspot/share/runtime/deoptimization.cpp | 11 + src/hotspot/share/runtime/globals.hpp | 3 + src/hotspot/share/runtime/sharedRuntime.cpp | 4 + .../jtreg/compiler/c2/TestExHandlerTrap.java | 153 +++++++++++++ .../c2/irTests/TestPrunedExHandler.java | 202 ++++++++++++++++++ .../compiler/lib/ir_framework/IRNode.java | 23 +- .../java/lang/foreign/AllocFromSliceTest.java | 17 +- .../java/lang/foreign/AllocFromTest.java | 28 ++- .../bench/java/lang/foreign/AllocTest.java | 21 +- .../lang/foreign/ResourceScopeCloseMin.java | 100 +++++++++ .../bench/java/lang/foreign/StrLenTest.java | 9 +- .../java/lang/foreign/ToCStringTest.java | 7 +- 26 files changed, 755 insertions(+), 110 deletions(-) create mode 100644 test/hotspot/jtreg/compiler/c2/TestExHandlerTrap.java create mode 100644 test/hotspot/jtreg/compiler/c2/irTests/TestPrunedExHandler.java create mode 100644 test/micro/org/openjdk/bench/java/lang/foreign/ResourceScopeCloseMin.java diff --git a/src/hotspot/share/c1/c1_GraphBuilder.cpp b/src/hotspot/share/c1/c1_GraphBuilder.cpp index 3f7f086220fef..82c48ab171f04 100644 --- a/src/hotspot/share/c1/c1_GraphBuilder.cpp +++ b/src/hotspot/share/c1/c1_GraphBuilder.cpp @@ -3506,7 +3506,6 @@ int GraphBuilder::recursive_inline_level(ciMethod* cur_callee) const { return recur_level; } - bool GraphBuilder::try_inline(ciMethod* callee, bool holder_known, bool ignore_return, Bytecodes::Code bc, Value receiver) { const char* msg = nullptr; diff --git a/src/hotspot/share/ci/ciMethodData.cpp b/src/hotspot/share/ci/ciMethodData.cpp index 9bd73d32ff9a7..8d1772f655fa9 100644 --- a/src/hotspot/share/ci/ciMethodData.cpp +++ b/src/hotspot/share/ci/ciMethodData.cpp @@ -42,6 +42,8 @@ ciMethodData::ciMethodData(MethodData* md) : ciMetadata(md), _data_size(0), _extra_data_size(0), _data(nullptr), + _parameters_data_offset(0), + _exception_handlers_data_offset(0), // Set an initial hint. Don't use set_hint_di() because // first_di() may be out of bounds if data_size is 0. _hint_di(first_di()), @@ -50,8 +52,7 @@ ciMethodData::ciMethodData(MethodData* md) // Initialize the escape information (to "don't know."); _eflags(0), _arg_local(0), _arg_stack(0), _arg_returned(0), _invocation_counter(0), - _orig(), - _parameters(nullptr) {} + _orig() {} // Check for entries that reference an unloaded method class PrepareExtraDataClosure : public CleanExtraDataClosure { @@ -134,8 +135,16 @@ void ciMethodData::load_remaining_extra_data() { // Copy the extra data once it is prepared (i.e. cache populated, no release of extra data lock anymore) Copy::disjoint_words_atomic((HeapWord*) mdo->extra_data_base(), - (HeapWord*)((address) _data + _data_size), - (_extra_data_size - mdo->parameters_size_in_bytes()) / HeapWordSize); + (HeapWord*) extra_data_base(), + // copy everything from extra_data_base() up to parameters_data_base() + pointer_delta(parameters_data_base(), extra_data_base(), HeapWordSize)); + + // skip parameter data copying. Already done in 'load_data' + + // copy exception handler data + Copy::disjoint_words_atomic((HeapWord*) mdo->exception_handler_data_base(), + (HeapWord*) exception_handler_data_base(), + exception_handler_data_size() / HeapWordSize); // speculative trap entries also hold a pointer to a Method so need to be translated DataLayout* dp_src = mdo->extra_data_base(); @@ -195,12 +204,17 @@ bool ciMethodData::load_data() { // args_data_limit: --------------------------- // | parameter data entries | // | ... | + // param_data_limit: --------------------------- + // | ex handler data entries | + // | ... | // extra_data_limit: --------------------------- // // _data_size = extra_data_base - data_base // _extra_data_size = extra_data_limit - extra_data_base // total_size = _data_size + _extra_data_size - // args_data_limit = data_base + total_size - parameter_data_size + // args_data_limit = param_data_base + // param_data_limit = exception_handler_data_base + // extra_data_limit = extra_data_limit #ifndef ZERO // Some Zero platforms do not have expected alignment, and do not use @@ -218,12 +232,15 @@ bool ciMethodData::load_data() { Copy::disjoint_words_atomic((HeapWord*) mdo->data_base(), (HeapWord*) _data, _data_size / HeapWordSize); + // Copy offsets. This is used below + _parameters_data_offset = mdo->parameters_type_data_di(); + _exception_handlers_data_offset = mdo->exception_handlers_data_di(); int parameters_data_size = mdo->parameters_size_in_bytes(); if (parameters_data_size > 0) { // Snapshot the parameter data - Copy::disjoint_words_atomic((HeapWord*) mdo->args_data_limit(), - (HeapWord*) ((address)_data + total_size - parameters_data_size), + Copy::disjoint_words_atomic((HeapWord*) mdo->parameters_data_base(), + (HeapWord*) parameters_data_base(), parameters_data_size / HeapWordSize); } // Traverse the profile data, translating any oops into their @@ -237,12 +254,12 @@ bool ciMethodData::load_data() { data = mdo->next_data(data); } if (mdo->parameters_type_data() != nullptr) { - _parameters = data_layout_at(mdo->parameters_type_data_di()); - ciParametersTypeData* parameters = new ciParametersTypeData(_parameters); + DataLayout* parameters_data = data_layout_at(_parameters_data_offset); + ciParametersTypeData* parameters = new ciParametersTypeData(parameters_data); parameters->translate_from(mdo->parameters_type_data()); } - assert((DataLayout*) ((address)_data + total_size - parameters_data_size) == args_data_limit(), + assert((DataLayout*) ((address)_data + total_size - parameters_data_size - exception_handler_data_size()) == args_data_limit(), "sanity - parameter data starts after the argument data of the single ArgInfoData entry"); load_remaining_extra_data(); @@ -367,16 +384,24 @@ ciProfileData* ciMethodData::next_data(ciProfileData* current) { return next; } -DataLayout* ciMethodData::next_data_layout(DataLayout* current) { +DataLayout* ciMethodData::next_data_layout_helper(DataLayout* current, bool extra) { int current_index = dp_to_di((address)current); int next_index = current_index + current->size_in_bytes(); - if (out_of_bounds(next_index)) { + if (extra ? out_of_bounds_extra(next_index) : out_of_bounds(next_index)) { return nullptr; } DataLayout* next = data_layout_at(next_index); return next; } +DataLayout* ciMethodData::next_data_layout(DataLayout* current) { + return next_data_layout_helper(current, false); +} + +DataLayout* ciMethodData::next_extra_data_layout(DataLayout* current) { + return next_data_layout_helper(current, true); +} + ciProfileData* ciMethodData::bci_to_extra_data(int bci, ciMethod* m, bool& two_free_slots) { DataLayout* dp = extra_data_base(); DataLayout* end = args_data_limit(); @@ -438,6 +463,19 @@ ciProfileData* ciMethodData::bci_to_data(int bci, ciMethod* m) { return nullptr; } +ciBitData ciMethodData::exception_handler_bci_to_data(int bci) { + assert(ProfileExceptionHandlers, "not profiling"); + assert(_data != nullptr, "must be initialized"); + for (DataLayout* data = exception_handler_data_base(); data < exception_handler_data_limit(); data = next_extra_data_layout(data)) { + assert(data != nullptr, "out of bounds?"); + if (data->bci() == bci) { + return ciBitData(data); + } + } + // called with invalid bci or wrong Method/MethodData + ShouldNotReachHere(); +} + // Conservatively decode the trap_state of a ciProfileData. int ciMethodData::has_trap_at(ciProfileData* data, int reason) { typedef Deoptimization::DeoptReason DR_t; @@ -612,7 +650,7 @@ uint ciMethodData::arg_modified(int arg) const { } ciParametersTypeData* ciMethodData::parameters_type_data() const { - return _parameters != nullptr ? new ciParametersTypeData(_parameters) : nullptr; + return parameter_data_size() != 0 ? new ciParametersTypeData(data_layout_at(_parameters_data_offset)) : nullptr; } ByteSize ciMethodData::offset_of_slot(ciProfileData* data, ByteSize slot_offset_in_data) { diff --git a/src/hotspot/share/ci/ciMethodData.hpp b/src/hotspot/share/ci/ciMethodData.hpp index 005fa2146470c..dedbfc9f4d68a 100644 --- a/src/hotspot/share/ci/ciMethodData.hpp +++ b/src/hotspot/share/ci/ciMethodData.hpp @@ -379,6 +379,10 @@ class ciMethodData : public ciMetadata { // Data entries intptr_t* _data; + // layout of _data + int _parameters_data_offset; + int _exception_handlers_data_offset; + // Cached hint for data_layout_before() int _hint_di; @@ -403,17 +407,13 @@ class ciMethodData : public ciMetadata { // Coherent snapshot of original header. MethodData::CompilerCounters _orig; - // Area dedicated to parameters. null if no parameter profiling for this method. - DataLayout* _parameters; - int parameters_size() const { - return _parameters == nullptr ? 0 : parameters_type_data()->size_in_bytes(); - } - ciMethodData(MethodData* md = nullptr); // Accessors int data_size() const { return _data_size; } int extra_data_size() const { return _extra_data_size; } + int parameter_data_size() const { return _exception_handlers_data_offset - _parameters_data_offset; } + int exception_handler_data_size() const { return dp_to_di((address) exception_handler_data_limit()) - _exception_handlers_data_offset; } intptr_t * data() const { return _data; } MethodData* get_MethodData() const { @@ -425,7 +425,7 @@ class ciMethodData : public ciMetadata { void print_impl(outputStream* st); DataLayout* data_layout_at(int data_index) const { - assert(data_index % sizeof(intptr_t) == 0, "unaligned"); + assert(data_index % sizeof(intptr_t) == 0, "unaligned: %d", data_index); return (DataLayout*) (((address)_data) + data_index); } @@ -433,6 +433,12 @@ class ciMethodData : public ciMetadata { return data_index >= data_size(); } + bool out_of_bounds_extra(int data_index) { + return data_index < data_size() || data_index >= data_size() + extra_data_size(); + } + + DataLayout* next_data_layout_helper(DataLayout* current, bool extra); + // hint accessors int hint_di() const { return _hint_di; } void set_hint_di(int di) { @@ -500,7 +506,7 @@ class ciMethodData : public ciMetadata { bool load_data(); // Convert a dp (data pointer) to a di (data index). - int dp_to_di(address dp) { + int dp_to_di(address dp) const { return pointer_delta_as_int(dp, ((address)_data)); } @@ -511,17 +517,28 @@ class ciMethodData : public ciMetadata { ciProfileData* first_data() { return data_at(first_di()); } ciProfileData* next_data(ciProfileData* current); DataLayout* next_data_layout(DataLayout* current); + DataLayout* next_extra_data_layout(DataLayout* current); bool is_valid(ciProfileData* current) { return current != nullptr; } bool is_valid(DataLayout* current) { return current != nullptr; } + // pointers to sections in _data + // NOTE: these may be called before ciMethodData::load_data + // this works out since everything is initialized to 0 (i.e. there will appear to be no data) DataLayout* extra_data_base() const { return data_layout_at(data_size()); } - DataLayout* args_data_limit() const { return data_layout_at(data_size() + extra_data_size() - - parameters_size()); } + DataLayout* extra_data_limit() const { return data_layout_at(data_size() + extra_data_size()); } + // pointers to sections in extra data + DataLayout* args_data_limit() const { return parameters_data_base(); } + DataLayout* parameters_data_base() const { return data_layout_at(_parameters_data_offset); } + DataLayout* parameters_data_limit() const { return exception_handler_data_base(); } + DataLayout* exception_handler_data_base() const { return data_layout_at(_exception_handlers_data_offset); } + DataLayout* exception_handler_data_limit() const { return extra_data_limit(); } // Get the data at an arbitrary bci, or null if there is none. If m // is not null look for a SpeculativeTrapData if any first. ciProfileData* bci_to_data(int bci, ciMethod* m = nullptr); + ciBitData exception_handler_bci_to_data(int bci); + uint overflow_trap_count() const { return _orig.overflow_trap_count(); } diff --git a/src/hotspot/share/interpreter/interpreterRuntime.cpp b/src/hotspot/share/interpreter/interpreterRuntime.cpp index a82092216e3d8..70439459d3523 100644 --- a/src/hotspot/share/interpreter/interpreterRuntime.cpp +++ b/src/hotspot/share/interpreter/interpreterRuntime.cpp @@ -460,6 +460,7 @@ JRT_END // bci where the exception happened. If the exception was propagated back // from a call, the expression stack contains the values for the bci at the // invoke w/o arguments (i.e., as if one were inside the call). +// Note that the implementation of this method assumes it's only called when an exception has actually occured JRT_ENTRY(address, InterpreterRuntime::exception_handler_for_exception(JavaThread* current, oopDesc* exception)) // We get here after we have unwound from a callee throwing an exception // into the interpreter. Any deferred stack processing is notified of @@ -574,6 +575,7 @@ JRT_ENTRY(address, InterpreterRuntime::exception_handler_for_exception(JavaThrea } else { // handler in this method => change bci/bcp to handler bci/bcp and continue there handler_pc = h_method->code_base() + handler_bci; + h_method->set_exception_handler_entered(handler_bci); // profiling #ifndef ZERO set_bcp_and_mdp(handler_pc, current); continuation = Interpreter::dispatch_table(vtos)[*handler_pc]; diff --git a/src/hotspot/share/oops/method.cpp b/src/hotspot/share/oops/method.cpp index c408bc23be7c7..0e116161ccf4a 100644 --- a/src/hotspot/share/oops/method.cpp +++ b/src/hotspot/share/oops/method.cpp @@ -648,6 +648,16 @@ bool Method::init_method_counters(MethodCounters* counters) { return Atomic::replace_if_null(&_method_counters, counters); } +void Method::set_exception_handler_entered(int handler_bci) { + if (ProfileExceptionHandlers) { + MethodData* mdo = method_data(); + if (mdo != nullptr) { + BitData handler_data = mdo->exception_handler_bci_to_data(handler_bci); + handler_data.set_exception_handler_entered(); + } + } +} + int Method::extra_stack_words() { // not an inline function, to avoid a header dependency on Interpreter return extra_stack_entries() * Interpreter::stackElementSize; diff --git a/src/hotspot/share/oops/method.hpp b/src/hotspot/share/oops/method.hpp index 1dab585a66069..c8b7dd1d91d0f 100644 --- a/src/hotspot/share/oops/method.hpp +++ b/src/hotspot/share/oops/method.hpp @@ -308,6 +308,9 @@ class Method : public Metadata { return _method_data; } + // mark an exception handler as entered (used to prune dead catch blocks in C2) + void set_exception_handler_entered(int handler_bci); + MethodCounters* method_counters() const { return _method_counters; } diff --git a/src/hotspot/share/oops/methodData.cpp b/src/hotspot/share/oops/methodData.cpp index 71f950bafec1e..af0fcdeeb5f77 100644 --- a/src/hotspot/share/oops/methodData.cpp +++ b/src/hotspot/share/oops/methodData.cpp @@ -965,6 +965,12 @@ int MethodData::compute_allocation_size_in_bytes(const methodHandle& method) { if (args_cell > 0) { object_size += DataLayout::compute_size_in_bytes(args_cell); } + + if (ProfileExceptionHandlers && method()->has_exception_handler()) { + int num_exception_handlers = method()->exception_table_length(); + object_size += num_exception_handlers * single_exception_handler_data_size(); + } + return object_size; } @@ -1275,8 +1281,10 @@ void MethodData::initialize() { // for method entry so they don't fit with the framework for the // profiling of bytecodes). We store the offset within the MDO of // this area (or -1 if no parameter is profiled) + int parm_data_size = 0; if (parms_cell > 0) { - object_size += DataLayout::compute_size_in_bytes(parms_cell); + parm_data_size = DataLayout::compute_size_in_bytes(parms_cell); + object_size += parm_data_size; _parameters_type_data_di = data_size + extra_size + arg_data_size; DataLayout *dp = data_layout_at(data_size + extra_size + arg_data_size); dp->initialize(DataLayout::parameters_type_data_tag, 0, parms_cell); @@ -1284,6 +1292,17 @@ void MethodData::initialize() { _parameters_type_data_di = no_parameters; } + _exception_handler_data_di = data_size + extra_size + arg_data_size + parm_data_size; + if (ProfileExceptionHandlers && method()->has_exception_handler()) { + int num_exception_handlers = method()->exception_table_length(); + object_size += num_exception_handlers * single_exception_handler_data_size(); + ExceptionTableElement* exception_handlers = method()->exception_table_start(); + for (int i = 0; i < num_exception_handlers; i++) { + DataLayout *dp = exception_handler_data_at(i); + dp->initialize(DataLayout::bit_data_tag, exception_handlers[i].handler_pc, single_exception_handler_data_cell_count()); + } + } + // Set an initial hint. Don't use set_hint_di() because // first_di() may be out of bounds if data_size is 0. // In that situation, _hint_di is never used, but at @@ -1378,6 +1397,28 @@ ProfileData* MethodData::bci_to_data(int bci) { return bci_to_extra_data(bci, nullptr, false); } +DataLayout* MethodData::exception_handler_bci_to_data_helper(int bci) { + assert(ProfileExceptionHandlers, "not profiling"); + for (int i = 0; i < num_exception_handler_data(); i++) { + DataLayout* exception_handler_data = exception_handler_data_at(i); + if (exception_handler_data->bci() == bci) { + return exception_handler_data; + } + } + return nullptr; +} + +BitData* MethodData::exception_handler_bci_to_data_or_null(int bci) { + DataLayout* data = exception_handler_bci_to_data_helper(bci); + return data != nullptr ? new BitData(data) : nullptr; +} + +BitData MethodData::exception_handler_bci_to_data(int bci) { + DataLayout* data = exception_handler_bci_to_data_helper(bci); + assert(data != nullptr, "invalid bci"); + return BitData(data); +} + DataLayout* MethodData::next_extra(DataLayout* dp) { int nb_cells = 0; switch(dp->tag()) { diff --git a/src/hotspot/share/oops/methodData.hpp b/src/hotspot/share/oops/methodData.hpp index 1d4dd7f19e98a..ee49bd189498c 100644 --- a/src/hotspot/share/oops/methodData.hpp +++ b/src/hotspot/share/oops/methodData.hpp @@ -491,10 +491,11 @@ class BitData : public ProfileData { enum : u1 { // null_seen: // saw a null operand (cast/aastore/instanceof) - null_seen_flag = DataLayout::first_flag + 0 + null_seen_flag = DataLayout::first_flag + 0, + exception_handler_entered_flag = null_seen_flag + 1 #if INCLUDE_JVMCI // bytecode threw any exception - , exception_seen_flag = null_seen_flag + 1 + , exception_seen_flag = exception_handler_entered_flag + 1 #endif }; enum { bit_cell_count = 0 }; // no additional data fields needed. @@ -525,6 +526,10 @@ class BitData : public ProfileData { void set_exception_seen() { set_flag_at(exception_seen_flag); } #endif + // true if a ex handler block at this bci was entered + bool exception_handler_entered() { return flag_at(exception_handler_entered_flag); } + void set_exception_handler_entered() { set_flag_at(exception_handler_entered_flag); } + // Code generation support static u1 null_seen_byte_constant() { return flag_number_to_constant(null_seen_flag); @@ -2063,7 +2068,11 @@ class MethodData : public Metadata { enum { no_parameters = -2, parameters_uninitialized = -1 }; int _parameters_type_data_di; + // data index of exception handler profiling data + int _exception_handler_data_di; + // Beginning of the data entries + // See comment in ciMethodData::load_data intptr_t _data[1]; // Helper for size computation @@ -2078,6 +2087,22 @@ class MethodData : public Metadata { return (DataLayout*) (((address)_data) + data_index); } + static int single_exception_handler_data_cell_count() { + return BitData::static_cell_count(); + } + + static int single_exception_handler_data_size() { + return DataLayout::compute_size_in_bytes(single_exception_handler_data_cell_count()); + } + + DataLayout* exception_handler_data_at(int exception_handler_index) const { + return data_layout_at(_exception_handler_data_di + (exception_handler_index * single_exception_handler_data_size())); + } + + int num_exception_handler_data() const { + return exception_handlers_data_size() / single_exception_handler_data_size(); + } + // Initialize an individual data segment. Returns the size of // the segment in bytes. int initialize_data(BytecodeStream* stream, int data_index); @@ -2143,6 +2168,8 @@ class MethodData : public Metadata { void clean_extra_data_helper(DataLayout* dp, int shift, bool reset = false); void verify_extra_data_clean(CleanExtraDataClosure* cl); + DataLayout* exception_handler_bci_to_data_helper(int bci); + public: void clean_extra_data(CleanExtraDataClosure* cl); @@ -2279,8 +2306,11 @@ class MethodData : public Metadata { } int parameters_size_in_bytes() const { - ParametersTypeData* param = parameters_type_data(); - return param == nullptr ? 0 : param->size_in_bytes(); + return pointer_delta_as_int((address) parameters_data_limit(), (address) parameters_data_base()); + } + + int exception_handlers_data_size() const { + return pointer_delta_as_int((address) exception_handler_data_limit(), (address) exception_handler_data_base()); } // Accessors @@ -2333,11 +2363,26 @@ class MethodData : public Metadata { return bci_to_extra_data(bci, nullptr, true); } + BitData* exception_handler_bci_to_data_or_null(int bci); + BitData exception_handler_bci_to_data(int bci); + // Add a handful of extra data records, for trap tracking. + // Only valid after 'set_size' is called at the end of MethodData::initialize DataLayout* extra_data_base() const { return limit_data_position(); } DataLayout* extra_data_limit() const { return (DataLayout*)((address)this + size_in_bytes()); } - DataLayout* args_data_limit() const { return (DataLayout*)((address)this + size_in_bytes() - - parameters_size_in_bytes()); } + // pointers to sections in extra data + DataLayout* args_data_limit() const { return parameters_data_base(); } + DataLayout* parameters_data_base() const { + assert(_parameters_type_data_di != parameters_uninitialized, "called too early"); + return _parameters_type_data_di != no_parameters ? data_layout_at(_parameters_type_data_di) : parameters_data_limit(); + } + DataLayout* parameters_data_limit() const { + assert(_parameters_type_data_di != parameters_uninitialized, "called too early"); + return exception_handler_data_base(); + } + DataLayout* exception_handler_data_base() const { return data_layout_at(_exception_handler_data_di); } + DataLayout* exception_handler_data_limit() const { return extra_data_limit(); } + int extra_data_size() const { return (int)((address)extra_data_limit() - (address)extra_data_base()); } static DataLayout* next_extra(DataLayout* dp); @@ -2385,8 +2430,12 @@ class MethodData : public Metadata { } int parameters_type_data_di() const { - assert(_parameters_type_data_di != parameters_uninitialized && _parameters_type_data_di != no_parameters, "no args type data"); - return _parameters_type_data_di; + assert(_parameters_type_data_di != parameters_uninitialized, "called too early"); + return _parameters_type_data_di != no_parameters ? _parameters_type_data_di : exception_handlers_data_di(); + } + + int exception_handlers_data_di() const { + return _exception_handler_data_di; } // Support for code generation diff --git a/src/hotspot/share/opto/c2_globals.hpp b/src/hotspot/share/opto/c2_globals.hpp index 3e466539c8771..9a398e0dbb5ac 100644 --- a/src/hotspot/share/opto/c2_globals.hpp +++ b/src/hotspot/share/opto/c2_globals.hpp @@ -783,6 +783,8 @@ "more than this threshold") \ range(0, 100) \ \ + develop(bool, StressPrunedExceptionHandlers, false, \ + "Always prune exception handlers") \ // end of C2_FLAGS diff --git a/src/hotspot/share/opto/doCall.cpp b/src/hotspot/share/opto/doCall.cpp index bad44ca46d473..122da9b447c5e 100644 --- a/src/hotspot/share/opto/doCall.cpp +++ b/src/hotspot/share/opto/doCall.cpp @@ -941,7 +941,7 @@ void Parse::catch_inline_exceptions(SafePointNode* ex_map) { // Get the exception oop klass from its header Node* ex_klass_node = nullptr; - if (has_ex_handler() && !ex_type->klass_is_exact()) { + if (has_exception_handler() && !ex_type->klass_is_exact()) { Node* p = basic_plus_adr( ex_node, ex_node, oopDesc::klass_offset_in_bytes()); ex_klass_node = _gvn.transform(LoadKlassNode::make(_gvn, nullptr, immutable_memory(), p, TypeInstPtr::KLASS, TypeInstKlassPtr::OBJECT)); diff --git a/src/hotspot/share/opto/graphKit.cpp b/src/hotspot/share/opto/graphKit.cpp index b271dd6f63ceb..1a8ae950305cf 100644 --- a/src/hotspot/share/opto/graphKit.cpp +++ b/src/hotspot/share/opto/graphKit.cpp @@ -181,9 +181,9 @@ bool GraphKit::stopped() { } -//-----------------------------has_ex_handler---------------------------------- +//-----------------------------has_exception_handler---------------------------------- // Tell if this method or any caller method has exception handlers. -bool GraphKit::has_ex_handler() { +bool GraphKit::has_exception_handler() { for (JVMState* jvmsp = jvms(); jvmsp != nullptr; jvmsp = jvmsp->caller()) { if (jvmsp->has_method() && jvmsp->method()->has_exception_handlers()) { return true; @@ -548,7 +548,7 @@ void GraphKit::builtin_throw(Deoptimization::DeoptReason reason) { // as hot if there has been at least one in this method. if (C->trap_count(reason) != 0 && method()->method_data()->trap_count(reason) != 0 - && has_ex_handler()) { + && has_exception_handler()) { treat_throw_as_hot = true; } } diff --git a/src/hotspot/share/opto/graphKit.hpp b/src/hotspot/share/opto/graphKit.hpp index 92180371c067b..3f917ec882b07 100644 --- a/src/hotspot/share/opto/graphKit.hpp +++ b/src/hotspot/share/opto/graphKit.hpp @@ -194,7 +194,7 @@ class GraphKit : public Phase { bool stopped(); // Tell if this method or any caller method has exception handlers. - bool has_ex_handler(); + bool has_exception_handler(); // Save an exception without blowing stack contents or other JVM state. // (The extra pointer is stuck with add_req on the map, beyond the JVMS.) diff --git a/src/hotspot/share/opto/parse1.cpp b/src/hotspot/share/opto/parse1.cpp index 0b867c69ebc74..1e2edbb4bf807 100644 --- a/src/hotspot/share/opto/parse1.cpp +++ b/src/hotspot/share/opto/parse1.cpp @@ -1532,6 +1532,22 @@ void Parse::do_one_block() { // Set iterator to start of block. iter().reset_to_bci(block()->start()); + if (ProfileExceptionHandlers && block()->is_handler()) { + ciMethodData* methodData = method()->method_data(); + if (methodData->is_mature()) { + ciBitData data = methodData->exception_handler_bci_to_data(block()->start()); + if (!data.exception_handler_entered() || StressPrunedExceptionHandlers) { + // dead catch block + // Emit an uncommon trap instead of processing the block. + set_parse_bci(block()->start()); + uncommon_trap(Deoptimization::Reason_unreached, + Deoptimization::Action_reinterpret, + nullptr, "dead catch block"); + return; + } + } + } + CompileLog* log = C->log(); // Parse bytecodes diff --git a/src/hotspot/share/runtime/continuationFreezeThaw.cpp b/src/hotspot/share/runtime/continuationFreezeThaw.cpp index ca8affdca2158..fe1dfc62ee48d 100644 --- a/src/hotspot/share/runtime/continuationFreezeThaw.cpp +++ b/src/hotspot/share/runtime/continuationFreezeThaw.cpp @@ -1498,21 +1498,21 @@ static void jvmti_yield_cleanup(JavaThread* thread, ContinuationWrapper& cont) { #endif // INCLUDE_JVMTI #ifdef ASSERT -static bool monitors_on_stack(JavaThread* thread) { - ContinuationEntry* ce = thread->last_continuation(); - RegisterMap map(thread, - RegisterMap::UpdateMap::include, - RegisterMap::ProcessFrames::include, - RegisterMap::WalkContinuation::skip); - map.set_include_argument_oops(false); - for (frame f = thread->last_frame(); Continuation::is_frame_in_continuation(ce, f); f = f.sender(&map)) { - if ((f.is_interpreted_frame() && ContinuationHelper::InterpretedFrame::is_owning_locks(f)) || - (f.is_compiled_frame() && ContinuationHelper::CompiledFrame::is_owning_locks(map.thread(), &map, f))) { - return true; - } - } - return false; -} +// static bool monitors_on_stack(JavaThread* thread) { +// ContinuationEntry* ce = thread->last_continuation(); +// RegisterMap map(thread, +// RegisterMap::UpdateMap::include, +// RegisterMap::ProcessFrames::include, +// RegisterMap::WalkContinuation::skip); +// map.set_include_argument_oops(false); +// for (frame f = thread->last_frame(); Continuation::is_frame_in_continuation(ce, f); f = f.sender(&map)) { +// if ((f.is_interpreted_frame() && ContinuationHelper::InterpretedFrame::is_owning_locks(f)) || +// (f.is_compiled_frame() && ContinuationHelper::CompiledFrame::is_owning_locks(map.thread(), &map, f))) { +// return true; +// } +// } +// return false; +// } bool FreezeBase::interpreted_native_or_deoptimized_on_stack() { ContinuationEntry* ce = _thread->last_continuation(); @@ -1575,8 +1575,8 @@ static inline int freeze_internal(JavaThread* current, intptr_t* const sp) { assert(entry->is_virtual_thread() == (entry->scope(current) == java_lang_VirtualThread::vthread_scope()), ""); - assert(monitors_on_stack(current) == ((current->held_monitor_count() - current->jni_monitor_count()) > 0), - "Held monitor count and locks on stack invariant: " INT64_FORMAT " JNI: " INT64_FORMAT, (int64_t)current->held_monitor_count(), (int64_t)current->jni_monitor_count()); + // assert(monitors_on_stack(current) == ((current->held_monitor_count() - current->jni_monitor_count()) > 0), + // "Held monitor count and locks on stack invariant: " INT64_FORMAT " JNI: " INT64_FORMAT, (int64_t)current->held_monitor_count(), (int64_t)current->jni_monitor_count()); if (entry->is_pinned() || current->held_monitor_count() > 0) { log_develop_debug(continuations)("PINNED due to critical section/hold monitor"); diff --git a/src/hotspot/share/runtime/deoptimization.cpp b/src/hotspot/share/runtime/deoptimization.cpp index f809cd031c358..a5f2e09afaa8e 100644 --- a/src/hotspot/share/runtime/deoptimization.cpp +++ b/src/hotspot/share/runtime/deoptimization.cpp @@ -2444,6 +2444,17 @@ JRT_ENTRY(void, Deoptimization::uncommon_trap_inner(JavaThread* current, jint tr nm->method()->set_not_compilable("give up compiling", CompLevel_full_optimization); } + if (ProfileExceptionHandlers && trap_mdo != nullptr) { + BitData* exception_handler_data = trap_mdo->exception_handler_bci_to_data_or_null(trap_bci); + if (exception_handler_data != nullptr) { + // uncommon trap at the start of an exception handler. + // C2 generates these for un-entered exception handlers. + // mark the handler as entered to avoid generating + // another uncommon trap the next time the handler is compiled + exception_handler_data->set_exception_handler_entered(); + } + } + } // Free marked resources } diff --git a/src/hotspot/share/runtime/globals.hpp b/src/hotspot/share/runtime/globals.hpp index 7a5b8615594b0..99d2488a593cb 100644 --- a/src/hotspot/share/runtime/globals.hpp +++ b/src/hotspot/share/runtime/globals.hpp @@ -1998,6 +1998,9 @@ const int ObjectAlignmentInBytes = 8; "more eagerly at the cost of higher overhead. A value of 0 " \ "(default) disables native heap trimming.") \ range(0, UINT_MAX) \ + \ + product(bool, ProfileExceptionHandlers, true, \ + "Profile exception handlers") \ // end of RUNTIME_FLAGS diff --git a/src/hotspot/share/runtime/sharedRuntime.cpp b/src/hotspot/share/runtime/sharedRuntime.cpp index 536944a61dcca..cbb7c84d0d94f 100644 --- a/src/hotspot/share/runtime/sharedRuntime.cpp +++ b/src/hotspot/share/runtime/sharedRuntime.cpp @@ -677,6 +677,7 @@ JRT_END // ret_pc points into caller; we are returning caller's exception handler // for given exception +// Note that the implementation of this method assumes it's only called when an exception has actually occured address SharedRuntime::compute_compiled_exc_handler(CompiledMethod* cm, address ret_pc, Handle& exception, bool force_unwind, bool top_frame_only, bool& recursive_exception_occurred) { assert(cm != nullptr, "must exist"); @@ -779,6 +780,9 @@ address SharedRuntime::compute_compiled_exc_handler(CompiledMethod* cm, address return nullptr; } + if (handler_bci != -1) { // did we find a handler in this method? + sd->method()->set_exception_handler_entered(handler_bci); // profile + } return nm->code_begin() + t->pco(); } diff --git a/test/hotspot/jtreg/compiler/c2/TestExHandlerTrap.java b/test/hotspot/jtreg/compiler/c2/TestExHandlerTrap.java new file mode 100644 index 0000000000000..611f3da2bba9e --- /dev/null +++ b/test/hotspot/jtreg/compiler/c2/TestExHandlerTrap.java @@ -0,0 +1,153 @@ +/* + * Copyright (c) 2023, 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. + */ +package compiler.c2; + +import java.io.PrintStream; +import java.util.List; +import java.util.ArrayList; + +/* + * @test id=default_config + * @bug 8267532 + * @summary Test whether trap in place of pruned exception handler block works + * + * @run main/othervm + * -Xbatch + * -Xlog:deoptimization=trace + * -XX:CompileCommand=PrintCompilation,compiler.c2.TestExHandlerTrap::payload + * -XX:CompileCommand=dontinline,compiler.c2.TestExHandlerTrap::payload + * -XX:CompileCommand=dontinline,compiler.c2.TestExHandlerTrap::maybeThrow + * compiler.c2.TestExHandlerTrap + */ + +/* + * @test id=no_profiling + * @bug 8267532 + * @summary basic smoke test for disabled ex. handler profiling + * + * @run main/othervm + * -Xbatch + * -Xlog:deoptimization=trace + * -XX:CompileCommand=PrintCompilation,compiler.c2.TestExHandlerTrap::payload + * -XX:CompileCommand=dontinline,compiler.c2.TestExHandlerTrap::payload + * -XX:CompileCommand=dontinline,compiler.c2.TestExHandlerTrap::maybeThrow + * -XX:-ProfileExceptionHandlers + * compiler.c2.TestExHandlerTrap + */ + +/* + * @test id=stress + * @bug 8267532 + * @summary basic smoke test for stressing ex. handler pruning + * @requires vm.debug + * + * @run main/othervm + * -Xbatch + * -Xlog:deoptimization=trace + * -XX:CompileCommand=PrintCompilation,compiler.c2.TestExHandlerTrap::payload + * -XX:CompileCommand=dontinline,compiler.c2.TestExHandlerTrap::payload + * -XX:CompileCommand=dontinline,compiler.c2.TestExHandlerTrap::maybeThrow + * -XX:+StressPrunedExceptionHandlers + * compiler.c2.TestExHandlerTrap + */ + +public class TestExHandlerTrap { + + private static final String EX_MESSAGE = "Testing trap"; + + public static void main(String[] args) throws Throwable { + // warmup, compile payload + for (int i = 0; i < 20_000; i++) { + payload(false); + } + + try { + // trigger uncommon trap in pruned catch block + payload(true); + } catch (IllegalStateException e) { + if (!e.getMessage().equals(EX_MESSAGE)) { + throw e; + } + } + + // continue for a bit, to see if anything breaks + for (int i = 0; i < 1_000; i++) { + payload(false); + } + } + + public static void payload(boolean shouldThrow) { + doIt(shouldThrow); // mix in some inlining + } + + public static void doIt(boolean shouldThrow) { + PrintStream err = System.err; + try (ConfinedScope r = new ConfinedScope()) { + r.addCloseAction(dummy); + maybeThrow(shouldThrow); // out of line to prevent 'payload' from being deoptimized by unstable if + } catch (IllegalArgumentException e) { + // some side effects to see whether deopt is successful + err.println("Exception message: " + e.getMessage()); + err.println("shouldThrow: " + shouldThrow); + } + } + + private static void maybeThrow(boolean shouldThrow) { + if (shouldThrow) { + throw new IllegalStateException(EX_MESSAGE); + } + } + + static final Runnable dummy = () -> {}; + + static class ConfinedScope implements AutoCloseable { + final Thread owner; + boolean closed; + final List resources = new ArrayList<>(); + + private void checkState() { + if (closed) { + throw new AssertionError("Closed"); + } else if (owner != Thread.currentThread()) { + throw new AssertionError("Wrong thread"); + } + } + + ConfinedScope() { + this.owner = Thread.currentThread(); + } + + void addCloseAction(Runnable runnable) { + checkState(); + resources.add(runnable); + } + + public void close() { + checkState(); + closed = true; + for (Runnable r : resources) { + r.run(); + } + } + } +} diff --git a/test/hotspot/jtreg/compiler/c2/irTests/TestPrunedExHandler.java b/test/hotspot/jtreg/compiler/c2/irTests/TestPrunedExHandler.java new file mode 100644 index 0000000000000..eacaa9fca8583 --- /dev/null +++ b/test/hotspot/jtreg/compiler/c2/irTests/TestPrunedExHandler.java @@ -0,0 +1,202 @@ +/* + * Copyright (c) 2023, 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. + */ + +package compiler.c2.irTests; + +import compiler.lib.ir_framework.*; + +/* + * @test + * @bug 8267532 + * @summary check that uncommon trap is generated for unhandled catch block + * @library /test/lib / + * @run driver compiler.c2.irTests.TestPrunedExHandler + */ + +public class TestPrunedExHandler { + public static void main(String[] args) { + TestFramework.runWithFlags( + "-XX:+TieredCompilation", // we only profile in tier 3 + "-XX:CompileCommand=inline,compiler.c2.irTests.TestPrunedExHandler::inlinee", + "-XX:CompileCommand=dontinline,compiler.c2.irTests.TestPrunedExHandler::outOfLine"); + } + + @Test + @IR(counts = {IRNode.UNREACHED_TRAP, "1"}) + public static void testTrap() { + try { + outOfLine(false); + } catch (IllegalStateException e) { + e.printStackTrace(); + } + } + + private static void outOfLine(boolean shouldThrow) { + if (shouldThrow) { + throw new IllegalStateException(); + } + } + + @Test + @IR(counts = {IRNode.UNREACHED_TRAP, "0"}) + public static void testNoTrap(boolean shouldThrow) { + try { + outOfLine(shouldThrow); + } catch (IllegalStateException e) { + e.printStackTrace(); + } + } + + @Run(test = "testNoTrap", mode = RunMode.STANDALONE) + public static void runNoTrap(RunInfo info) { + for (int i = 0; i < 2_000; i++) { // tier 3 + testNoTrap(false); + } + + TestFramework.assertCompiledAtLevel(info.getTest(), CompLevel.C1_FULL_PROFILE); + + testNoTrap(true); // mark ex handler as entered + + for (int i = 0; i < 20_000; i++) { // tier 4 + testNoTrap(false); // should have no trap + } + } + + @Test + @IR(counts = {IRNode.UNREACHED_TRAP, "0"}) + public static void testNoTrapAfterDeopt(boolean shouldThrow) { + try { + outOfLine(shouldThrow); + } catch (IllegalStateException e) { + e.printStackTrace(); + } + } + + @Run(test = "testNoTrapAfterDeopt", mode = RunMode.STANDALONE) + public static void runNoTrapAfterDeopt(RunInfo info) { + for (int i = 0; i < 20_000; i++) { // tier 4 + testNoTrapAfterDeopt(false); + } + + TestFramework.assertCompiledByC2(info.getTest()); + + testNoTrapAfterDeopt(true); // deopt + mark ex handler as entered + + TestFramework.assertDeoptimizedByC2(info.getTest()); + + for (int i = 0; i < 20_000; i++) { // tier 4 again + testNoTrapAfterDeopt(false); // should have no trap + } + } + + @Test + @IR(counts = {IRNode.UNREACHED_TRAP, "0"}) + public static void testNoTrapAfterDeoptInlined(boolean shouldThrow) { + // check that we handle exception thrown in inlinee, caught in caller. + // C2 handles exception dispatch differently for those cases + try { + inlinee(shouldThrow); + } catch (IllegalStateException e) { + e.printStackTrace(); + } + } + + private static void inlinee(boolean shouldThrow) { + outOfLine(shouldThrow); + } + + @Run(test = "testNoTrapAfterDeoptInlined", mode = RunMode.STANDALONE) + public static void runNoTrapAfterDeoptInlined(RunInfo info) { + for (int i = 0; i < 20_000; i++) { // tier 4 + testNoTrapAfterDeoptInlined(false); + } + + TestFramework.assertCompiledByC2(info.getTest()); + + testNoTrapAfterDeoptInlined(true); // deopt + mark ex handler as entered + + TestFramework.assertDeoptimizedByC2(info.getTest()); + + for (int i = 0; i < 20_000; i++) { // tier 4 again + testNoTrapAfterDeoptInlined(false); // should have no trap + } + } + + @Test + @IR(counts = {IRNode.UNREACHED_TRAP, "1"}) + public static void testThrowBeforeProfiling(boolean shouldThrow) { + try { + outOfLine(shouldThrow); + } catch (IllegalStateException e) { + e.printStackTrace(); + } + } + + @Run(test = "testThrowBeforeProfiling", mode = RunMode.STANDALONE) + public static void runThrowBeforeProfiling(RunInfo info) { + testThrowBeforeProfiling(true); + // this exception should not be profiled, as MDO has not been created yet + + for (int i = 0; i < 20_000; i++) { // tier 4 + testThrowBeforeProfiling(false); + } + // should have trap + } + + @Test + @IR(counts = {IRNode.UNREACHED_TRAP, "0"}) + public static void testInterpreterProfiling(boolean takeBranch, boolean shouldThrow) { + if (takeBranch) { + System.out.println("testInterpreterProfiling: branch taken"); + } + + try { + outOfLine(shouldThrow); + } catch (IllegalStateException e) { + e.printStackTrace(); + } + } + + @Run(test = "testInterpreterProfiling", mode = RunMode.STANDALONE) + public static void runInterpreterProfiling(RunInfo info) { + for (int i = 0; i < 20_000; i++) { // tier 4 + testInterpreterProfiling(false, false); + } + TestFramework.assertCompiledByC2(info.getTest()); + // should have no trap at this point + + testInterpreterProfiling(true, false); // take branch -> deopt due to unstable if + TestFramework.assertDeoptimizedByC2(info.getTest()); + + // continue in the interpreter: + testInterpreterProfiling(false, false); + // throw exception in the interpreter, test interpreter profiling: + testInterpreterProfiling(false, true); + + for (int i = 0; i < 20_000; i++) { // tier 4 again + testInterpreterProfiling(false, false); + } + // should have no trap + } + +} diff --git a/test/hotspot/jtreg/compiler/lib/ir_framework/IRNode.java b/test/hotspot/jtreg/compiler/lib/ir_framework/IRNode.java index 9be4cc7be6bac..9e91268edffc3 100644 --- a/test/hotspot/jtreg/compiler/lib/ir_framework/IRNode.java +++ b/test/hotspot/jtreg/compiler/lib/ir_framework/IRNode.java @@ -549,12 +549,12 @@ public class IRNode { // Does not work for VM builds without JVMCI like x86_32 (a rule containing this regex will be skipped without having JVMCI built). public static final String INTRINSIC_OR_TYPE_CHECKED_INLINING_TRAP = PREFIX + "INTRINSIC_OR_TYPE_CHECKED_INLINING_TRAP" + POSTFIX; static { - trapNodes(INTRINSIC_OR_TYPE_CHECKED_INLINING_TRAP,"intrinsic_or_type_checked_inlining"); + trapNodes(INTRINSIC_OR_TYPE_CHECKED_INLINING_TRAP, "intrinsic_or_type_checked_inlining"); } public static final String INTRINSIC_TRAP = PREFIX + "INTRINSIC_TRAP" + POSTFIX; static { - trapNodes(INTRINSIC_TRAP,"intrinsic"); + trapNodes(INTRINSIC_TRAP, "intrinsic"); } // Is only supported on riscv64. @@ -1040,12 +1040,12 @@ public class IRNode { public static final String NULL_ASSERT_TRAP = PREFIX + "NULL_ASSERT_TRAP" + POSTFIX; static { - trapNodes(NULL_ASSERT_TRAP,"null_assert"); + trapNodes(NULL_ASSERT_TRAP, "null_assert"); } public static final String NULL_CHECK_TRAP = PREFIX + "NULL_CHECK_TRAP" + POSTFIX; static { - trapNodes(NULL_CHECK_TRAP,"null_check"); + trapNodes(NULL_CHECK_TRAP, "null_check"); } public static final String OR_VB = VECTOR_PREFIX + "OR_VB" + POSTFIX; @@ -1129,12 +1129,12 @@ public class IRNode { public static final String PREDICATE_TRAP = PREFIX + "PREDICATE_TRAP" + POSTFIX; static { - trapNodes(PREDICATE_TRAP,"predicate"); + trapNodes(PREDICATE_TRAP, "predicate"); } public static final String RANGE_CHECK_TRAP = PREFIX + "RANGE_CHECK_TRAP" + POSTFIX; static { - trapNodes(RANGE_CHECK_TRAP,"range_check"); + trapNodes(RANGE_CHECK_TRAP, "range_check"); } public static final String REPLICATE_B = VECTOR_PREFIX + "REPLICATE_B" + POSTFIX; @@ -1486,7 +1486,7 @@ public class IRNode { public static final String TRAP = PREFIX + "TRAP" + POSTFIX; static { - trapNodes(TRAP,"reason"); + trapNodes(TRAP, "reason"); } public static final String UDIV_I = PREFIX + "UDIV_I" + POSTFIX; @@ -1521,12 +1521,17 @@ public class IRNode { public static final String UNHANDLED_TRAP = PREFIX + "UNHANDLED_TRAP" + POSTFIX; static { - trapNodes(UNHANDLED_TRAP,"unhandled"); + trapNodes(UNHANDLED_TRAP, "unhandled"); } public static final String UNSTABLE_IF_TRAP = PREFIX + "UNSTABLE_IF_TRAP" + POSTFIX; static { - trapNodes(UNSTABLE_IF_TRAP,"unstable_if"); + trapNodes(UNSTABLE_IF_TRAP, "unstable_if"); + } + + public static final String UNREACHED_TRAP = PREFIX + "UNREACHED_TRAP" + POSTFIX; + static { + trapNodes(UNREACHED_TRAP, "unreached"); } public static final String URSHIFT = PREFIX + "URSHIFT" + POSTFIX; diff --git a/test/micro/org/openjdk/bench/java/lang/foreign/AllocFromSliceTest.java b/test/micro/org/openjdk/bench/java/lang/foreign/AllocFromSliceTest.java index ff73699bd300b..390add8801ce0 100644 --- a/test/micro/org/openjdk/bench/java/lang/foreign/AllocFromSliceTest.java +++ b/test/micro/org/openjdk/bench/java/lang/foreign/AllocFromSliceTest.java @@ -63,18 +63,17 @@ public void setup() { @Benchmark public MemorySegment alloc_confined() { - Arena arena = Arena.ofConfined(); - MemorySegment segment = arena.allocate(size); - MemorySegment.copy(arr, start, segment, C_CHAR, 0, size); - arena.close(); - return segment; + try (Arena arena = Arena.ofConfined()) { + MemorySegment segment = arena.allocate(size); + MemorySegment.copy(arr, start, segment, C_CHAR, 0, size); + return segment; + } } @Benchmark public MemorySegment alloc_confined_slice() { - Arena arena = Arena.ofConfined(); - MemorySegment segment = arena.allocateFrom(C_CHAR, MemorySegment.ofArray(arr), C_CHAR, start, size); - arena.close(); - return segment; + try (Arena arena = Arena.ofConfined()) { + return arena.allocateFrom(C_CHAR, MemorySegment.ofArray(arr), C_CHAR, start, size); + } } } diff --git a/test/micro/org/openjdk/bench/java/lang/foreign/AllocFromTest.java b/test/micro/org/openjdk/bench/java/lang/foreign/AllocFromTest.java index a0c5d5be28927..fcd79870ca0bf 100644 --- a/test/micro/org/openjdk/bench/java/lang/foreign/AllocFromTest.java +++ b/test/micro/org/openjdk/bench/java/lang/foreign/AllocFromTest.java @@ -68,34 +68,30 @@ public void setup() { @Benchmark public MemorySegment alloc_confined() { - Arena arena = Arena.ofConfined(); - MemorySegment segment = arena.allocateFrom(ValueLayout.JAVA_BYTE, arr); - arena.close(); - return segment; + try (Arena arena = Arena.ofConfined()) { + return arena.allocateFrom(ValueLayout.JAVA_BYTE, arr); + } } @Benchmark public MemorySegment alloc_malloc_arena() { - MallocArena arena = new MallocArena(); - MemorySegment segment = arena.allocateFrom(ValueLayout.JAVA_BYTE, arr); - arena.close(); - return segment; + try (MallocArena arena = new MallocArena()) { + return arena.allocateFrom(ValueLayout.JAVA_BYTE, arr); + } } @Benchmark public MemorySegment alloc_unsafe_arena() { - UnsafeArena arena = new UnsafeArena(); - MemorySegment segment = arena.allocateFrom(ValueLayout.JAVA_BYTE, arr); - arena.close(); - return segment; + try (UnsafeArena arena = new UnsafeArena()) { + return arena.allocateFrom(ValueLayout.JAVA_BYTE, arr); + } } @Benchmark public MemorySegment alloc_pool_arena() { - Arena arena = pool.acquire(); - MemorySegment segment = arena.allocateFrom(ValueLayout.JAVA_BYTE, arr); - arena.close(); - return segment; + try (Arena arena = pool.acquire()) { + return arena.allocateFrom(ValueLayout.JAVA_BYTE, arr); + } } static class SlicingPool { diff --git a/test/micro/org/openjdk/bench/java/lang/foreign/AllocTest.java b/test/micro/org/openjdk/bench/java/lang/foreign/AllocTest.java index b9b5a3f30da05..b7e4bfd5f57d4 100644 --- a/test/micro/org/openjdk/bench/java/lang/foreign/AllocTest.java +++ b/test/micro/org/openjdk/bench/java/lang/foreign/AllocTest.java @@ -65,26 +65,23 @@ public void tearDown() { @Benchmark public MemorySegment alloc_confined() { - Arena arena = Arena.ofConfined(); - MemorySegment segment = arena.allocate(size); - arena.close(); - return segment; + try (Arena arena = Arena.ofConfined()) { + return arena.allocate(size); + } } @Benchmark public long alloc_calloc_arena() { - CallocArena arena = new CallocArena(); - MemorySegment segment = arena.allocate(size); - arena.close(); - return segment.address(); + try (CallocArena arena = new CallocArena()) { + return arena.allocate(size).address(); + } } @Benchmark public long alloc_unsafe_arena() { - UnsafeArena arena = new UnsafeArena(); - MemorySegment segment = arena.allocate(size); - arena.close(); - return segment.address(); + try (UnsafeArena arena = new UnsafeArena()) { + return arena.allocate(size).address(); + } } public static class CallocArena implements Arena { diff --git a/test/micro/org/openjdk/bench/java/lang/foreign/ResourceScopeCloseMin.java b/test/micro/org/openjdk/bench/java/lang/foreign/ResourceScopeCloseMin.java new file mode 100644 index 0000000000000..51c6d72b3e04a --- /dev/null +++ b/test/micro/org/openjdk/bench/java/lang/foreign/ResourceScopeCloseMin.java @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2023, 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. + */ +package org.openjdk.bench.java.lang.foreign; + +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Fork; +import org.openjdk.jmh.annotations.Measurement; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Param; +import org.openjdk.jmh.annotations.Setup; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.TearDown; +import org.openjdk.jmh.annotations.Warmup; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.TimeUnit; + +@BenchmarkMode(Mode.AverageTime) +@Warmup(iterations = 5, time = 500, timeUnit = TimeUnit.MILLISECONDS) +@Measurement(iterations = 10, time = 500, timeUnit = TimeUnit.MILLISECONDS) +@State(org.openjdk.jmh.annotations.Scope.Thread) +@OutputTimeUnit(TimeUnit.NANOSECONDS) +@Fork(value = 3) +public class ResourceScopeCloseMin { + + Runnable dummy = () -> {}; + + static class ConfinedScope { + final Thread owner; + boolean closed; + final List resources = new ArrayList<>(); + + private void checkState() { + if (closed) { + throw new AssertionError("Closed"); + } else if (owner != Thread.currentThread()) { + throw new AssertionError("Wrong thread"); + } + } + + ConfinedScope() { + this.owner = Thread.currentThread(); + } + + void addCloseAction(Runnable runnable) { + checkState(); + resources.add(runnable); + } + + public void close() { + checkState(); + closed = true; + for (Runnable r : resources) { + r.run(); + } + } + } + + @Benchmark + public void confined_close() { + ConfinedScope scope = new ConfinedScope(); + try { // simulate TWR + scope.addCloseAction(dummy); + scope.close(); + } catch (RuntimeException ex) { + scope.close(); + throw ex; + } + } + + @Benchmark + public void confined_close_notry() { + ConfinedScope scope = new ConfinedScope(); + scope.addCloseAction(dummy); + scope.close(); + } +} diff --git a/test/micro/org/openjdk/bench/java/lang/foreign/StrLenTest.java b/test/micro/org/openjdk/bench/java/lang/foreign/StrLenTest.java index 83751d07eda26..d50b8d0900fa3 100644 --- a/test/micro/org/openjdk/bench/java/lang/foreign/StrLenTest.java +++ b/test/micro/org/openjdk/bench/java/lang/foreign/StrLenTest.java @@ -90,7 +90,7 @@ public int jni_strlen() throws Throwable { } @Benchmark - public int panama_strlen() throws Throwable { + public int panama_strlen_alloc() throws Throwable { try (Arena arena = Arena.ofConfined()) { MemorySegment segment = arena.allocateFrom(str); return (int)STRLEN.invokeExact(segment); @@ -104,10 +104,9 @@ public int panama_strlen_ring() throws Throwable { @Benchmark public int panama_strlen_pool() throws Throwable { - Arena arena = pool.acquire(); - int l = (int) STRLEN.invokeExact(arena.allocateFrom(str)); - arena.close(); - return l; + try (Arena arena = pool.acquire()) { + return (int) STRLEN.invokeExact(arena.allocateFrom(str)); + } } @Benchmark diff --git a/test/micro/org/openjdk/bench/java/lang/foreign/ToCStringTest.java b/test/micro/org/openjdk/bench/java/lang/foreign/ToCStringTest.java index 7194dec9b2320..8ed0f10e0be5c 100644 --- a/test/micro/org/openjdk/bench/java/lang/foreign/ToCStringTest.java +++ b/test/micro/org/openjdk/bench/java/lang/foreign/ToCStringTest.java @@ -82,10 +82,9 @@ public long jni_writeString() throws Throwable { @Benchmark public MemorySegment panama_writeString() throws Throwable { - Arena arena = Arena.ofConfined(); - MemorySegment segment = arena.allocateFrom(str); - arena.close(); - return segment; + try (Arena arena = Arena.ofConfined()) { + return arena.allocateFrom(str); + } } static native long writeString(String str); From 99f870c43fea4e31a63240733ab9a471469f282b Mon Sep 17 00:00:00 2001 From: Eirik Bjorsnos Date: Tue, 28 Nov 2023 10:20:11 +0000 Subject: [PATCH 082/250] 8320781: Fix whitespace in j.l.Double and j.u.z.ZipInputStream @snippets Reviewed-by: lancea, bpb, darcy, jpai --- src/java.base/share/classes/java/lang/Double.java | 6 +++--- .../share/classes/java/util/zip/ZipInputStream.java | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/java.base/share/classes/java/lang/Double.java b/src/java.base/share/classes/java/lang/Double.java index 14ddcd0de2a5e..d7df6db3e16d9 100644 --- a/src/java.base/share/classes/java/lang/Double.java +++ b/src/java.base/share/classes/java/lang/Double.java @@ -316,7 +316,7 @@ * * {@snippet lang="java" : * double d = 0.0; - * while(d != 1.0) { // Surprising infinite loop + * while (d != 1.0) { // Surprising infinite loop * d += 0.1; // Sum never _exactly_ equals 1.0 * } * } @@ -325,7 +325,7 @@ * * {@snippet lang="java" : * double d = 0.0; - * for(int i = 0; i < 10; i++) { + * for (int i = 0; i < 10; i++) { * d += 0.1; * } // Value of d is equal to Math.nextDown(1.0). * } @@ -335,7 +335,7 @@ * * {@snippet lang="java" : * double d = 0.0; - * while(d <= 1.0) { + * while (d <= 1.0) { * d += 0.1; * } // Value of d approximately 1.0999999999999999 * } diff --git a/src/java.base/share/classes/java/util/zip/ZipInputStream.java b/src/java.base/share/classes/java/util/zip/ZipInputStream.java index 9e265fd668edc..e583bc289347f 100644 --- a/src/java.base/share/classes/java/util/zip/ZipInputStream.java +++ b/src/java.base/share/classes/java/util/zip/ZipInputStream.java @@ -51,12 +51,12 @@ * {@code ZipInputStream} read methods such * as {@link #read(byte[], int, int) read} or {@link #readAllBytes() readAllBytes()}. * For example: - * {@snippet : + * {@snippet lang="java" : * Path jar = Path.of("foo.jar"); * try (InputStream is = Files.newInputStream(jar); * ZipInputStream zis = new ZipInputStream(is)) { * ZipEntry ze; - * while((ze= zis.getNextEntry()) != null) { + * while ((ze = zis.getNextEntry()) != null) { * var bytes = zis.readAllBytes(); * System.out.printf("Entry: %s, bytes read: %s%n", ze.getName(), * bytes.length); From 4bcda602668835c35e2ac6ff6702d15cd249bc2a Mon Sep 17 00:00:00 2001 From: Albert Mingkun Yang Date: Tue, 28 Nov 2023 10:40:14 +0000 Subject: [PATCH 083/250] 8319713: Parallel: Remove PSAdaptiveSizePolicy::should_full_GC Reviewed-by: tschatzl, sjohanss --- .../share/gc/parallel/psAdaptiveSizePolicy.cpp | 16 ---------------- .../share/gc/parallel/psAdaptiveSizePolicy.hpp | 4 ---- src/hotspot/share/gc/parallel/psScavenge.cpp | 5 +---- 3 files changed, 1 insertion(+), 24 deletions(-) diff --git a/src/hotspot/share/gc/parallel/psAdaptiveSizePolicy.cpp b/src/hotspot/share/gc/parallel/psAdaptiveSizePolicy.cpp index 34d6621c82073..3e255c15a4e0a 100644 --- a/src/hotspot/share/gc/parallel/psAdaptiveSizePolicy.cpp +++ b/src/hotspot/share/gc/parallel/psAdaptiveSizePolicy.cpp @@ -169,22 +169,6 @@ void PSAdaptiveSizePolicy::major_collection_end(size_t amount_live, _major_timer.start(); } -// If the remaining free space in the old generation is less that -// that expected to be needed by the next collection, do a full -// collection now. -bool PSAdaptiveSizePolicy::should_full_GC(size_t old_free_in_bytes) { - - // A similar test is done in the scavenge's should_attempt_scavenge(). If - // this is changed, decide if that test should also be changed. - bool result = padded_average_promoted_in_bytes() > (float) old_free_in_bytes; - log_trace(gc, ergo)("%s after scavenge average_promoted " SIZE_FORMAT " padded_average_promoted " SIZE_FORMAT " free in old gen " SIZE_FORMAT, - result ? "Full" : "No full", - (size_t) average_promoted_in_bytes(), - (size_t) padded_average_promoted_in_bytes(), - old_free_in_bytes); - return result; -} - void PSAdaptiveSizePolicy::clear_generation_free_space_flags() { AdaptiveSizePolicy::clear_generation_free_space_flags(); diff --git a/src/hotspot/share/gc/parallel/psAdaptiveSizePolicy.hpp b/src/hotspot/share/gc/parallel/psAdaptiveSizePolicy.hpp index fb5c30f824ad1..580ff9d06c005 100644 --- a/src/hotspot/share/gc/parallel/psAdaptiveSizePolicy.hpp +++ b/src/hotspot/share/gc/parallel/psAdaptiveSizePolicy.hpp @@ -306,10 +306,6 @@ class PSAdaptiveSizePolicy : public AdaptiveSizePolicy { } double major_collection_slope() { return _major_collection_estimator->slope();} - // Given the amount of live data in the heap, should we - // perform a Full GC? - bool should_full_GC(size_t live_in_old_gen); - // Calculates optimal (free) space sizes for both the young and old // generations. Stores results in _eden_size and _promo_size. // Takes current used space in all generations as input, as well diff --git a/src/hotspot/share/gc/parallel/psScavenge.cpp b/src/hotspot/share/gc/parallel/psScavenge.cpp index 2f114e1e2cecc..a783dfe7155bb 100644 --- a/src/hotspot/share/gc/parallel/psScavenge.cpp +++ b/src/hotspot/share/gc/parallel/psScavenge.cpp @@ -239,8 +239,7 @@ bool PSScavenge::invoke() { IsGCActiveMark mark; const bool scavenge_done = PSScavenge::invoke_no_policy(); - const bool need_full_gc = !scavenge_done || - policy->should_full_GC(heap->old_gen()->free_in_bytes()); + const bool need_full_gc = !scavenge_done; bool full_gc_done = false; if (UsePerfData) { @@ -703,8 +702,6 @@ bool PSScavenge::should_attempt_scavenge() { // Test to see if the scavenge will likely fail. PSAdaptiveSizePolicy* policy = heap->size_policy(); - // A similar test is done in the policy's should_full_GC(). If this is - // changed, decide if that test should also be changed. size_t avg_promoted = (size_t) policy->padded_average_promoted_in_bytes(); size_t promotion_estimate = MIN2(avg_promoted, young_gen->used_in_bytes()); bool result = promotion_estimate < old_gen->free_in_bytes(); From 63ad868e182279eeef8b5d27a25453873039d22f Mon Sep 17 00:00:00 2001 From: Gaurav Chaudhari Date: Tue, 28 Nov 2023 11:35:00 +0000 Subject: [PATCH 084/250] 8319668: Fixup of jar filename typo in BadFactoryTest.sh Reviewed-by: alanb, jpai --- test/jdk/javax/script/JDK_8196959/BadFactoryTest.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/jdk/javax/script/JDK_8196959/BadFactoryTest.sh b/test/jdk/javax/script/JDK_8196959/BadFactoryTest.sh index 21becec9f7134..e5d1a063840ba 100644 --- a/test/jdk/javax/script/JDK_8196959/BadFactoryTest.sh +++ b/test/jdk/javax/script/JDK_8196959/BadFactoryTest.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2018, 2023, 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 @@ -56,5 +56,5 @@ fi echo "Running test without security manager ..." $JAVA ${TESTVMOPTS} -classpath \ - "${TESTCLASSES}${PS}${TESTCLASSES}/badfactoty.jar" \ + "${TESTCLASSES}${PS}${TESTCLASSES}/badfactory.jar" \ BadFactoryTest From 2fae07f53f84b71df80ff95d858e8bbef281672f Mon Sep 17 00:00:00 2001 From: Jan Lahoda Date: Tue, 28 Nov 2023 12:32:23 +0000 Subject: [PATCH 085/250] 8319311: JShell Process Builder should be configurable Reviewed-by: asotona --- .../execution/JdiDefaultExecutionControl.java | 69 +++++++++++++-- .../JdiExecutionControlProvider.java | 49 +++++++++-- .../jdk/jshell/execution/JdiInitiator.java | 84 ++++++++++++++----- test/langtools/jdk/jshell/JdiStarterTest.java | 75 +++++++++++++++++ 4 files changed, 241 insertions(+), 36 deletions(-) create mode 100644 test/langtools/jdk/jshell/JdiStarterTest.java diff --git a/src/jdk.jshell/share/classes/jdk/jshell/execution/JdiDefaultExecutionControl.java b/src/jdk.jshell/share/classes/jdk/jshell/execution/JdiDefaultExecutionControl.java index 329e9445cead6..2d429691b6013 100644 --- a/src/jdk.jshell/share/classes/jdk/jshell/execution/JdiDefaultExecutionControl.java +++ b/src/jdk.jshell/share/classes/jdk/jshell/execution/JdiDefaultExecutionControl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2023, 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 @@ -33,7 +33,6 @@ import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -48,9 +47,11 @@ import com.sun.jdi.ThreadReference; import com.sun.jdi.VMDisconnectedException; import com.sun.jdi.VirtualMachine; +import java.io.PrintStream; import java.util.Optional; import java.util.stream.Stream; import jdk.jshell.JShellConsole; +import jdk.jshell.execution.JdiDefaultExecutionControl.JdiStarter.TargetDescription; import jdk.jshell.spi.ExecutionControl; import jdk.jshell.spi.ExecutionEnv; import static jdk.jshell.execution.Util.remoteInputOutput; @@ -94,8 +95,7 @@ public class JdiDefaultExecutionControl extends JdiExecutionControl { * @return the channel * @throws IOException if there are errors in set-up */ - static ExecutionControl create(ExecutionEnv env, String remoteAgent, - boolean isLaunch, String host, int timeout) throws IOException { + static ExecutionControl create(ExecutionEnv env, Map parameters, String remoteAgent, int timeout, JdiStarter starter) throws IOException { try (final ServerSocket listener = new ServerSocket(0, 1, InetAddress.getLoopbackAddress())) { // timeout on I/O-socket listener.setSoTimeout(timeout); @@ -107,13 +107,37 @@ static ExecutionControl create(ExecutionEnv env, String remoteAgent, //disable System.console(): List.of("-Djdk.console=" + consoleModule).stream()) .toList(); + ExecutionEnv augmentedEnv = new ExecutionEnv() { + @Override + public InputStream userIn() { + return env.userIn(); + } + + @Override + public PrintStream userOut() { + return env.userOut(); + } + + @Override + public PrintStream userErr() { + return env.userErr(); + } + + @Override + public List extraRemoteVMOptions() { + return augmentedremoteVMOptions; + } + + @Override + public void closeDown() { + env.closeDown(); + } + }; // Set-up the JDI connection - JdiInitiator jdii = new JdiInitiator(port, - augmentedremoteVMOptions, remoteAgent, isLaunch, host, - timeout, Collections.emptyMap()); - VirtualMachine vm = jdii.vm(); - Process process = jdii.process(); + TargetDescription target = starter.start(augmentedEnv, parameters, port); + VirtualMachine vm = target.vm(); + Process process = target.process(); List> deathListeners = new ArrayList<>(); Util.detectJdiExitEvent(vm, s -> { @@ -294,4 +318,31 @@ private static void debug(Throwable ex, String where) { // Reserved for future logging } + /** + * Start an external process where the user's snippets can be run. + * + * @since 22 + */ + public interface JdiStarter { + /** + * Start the external process based on the given parameters. The external + * process should connect to the given {@code port} to communicate with the + * driving instance of JShell. + * + * @param env the execution context + * @param parameters additional execution parameters + * @param port the port to which the remote process should connect + * @return a description of the started external process + * @throws RuntimeException if the process cannot be started + * @throws Error if the process cannot be started + */ + public TargetDescription start(ExecutionEnv env, Map parameters, int port); + + /** + * The description of a started external process. + * @param vm the JDI's {@code VirtualMachine} + * @param process the external {@code Process} + */ + public record TargetDescription(VirtualMachine vm, Process process) {} + } } diff --git a/src/jdk.jshell/share/classes/jdk/jshell/execution/JdiExecutionControlProvider.java b/src/jdk.jshell/share/classes/jdk/jshell/execution/JdiExecutionControlProvider.java index 7d3db170ec4ce..120138dfbf4a7 100644 --- a/src/jdk.jshell/share/classes/jdk/jshell/execution/JdiExecutionControlProvider.java +++ b/src/jdk.jshell/share/classes/jdk/jshell/execution/JdiExecutionControlProvider.java @@ -26,9 +26,11 @@ package jdk.jshell.execution; import java.io.IOException; +import java.util.Collections; import java.util.HashMap; import java.util.Locale; import java.util.Map; +import jdk.jshell.execution.JdiDefaultExecutionControl.JdiStarter; import jdk.jshell.spi.ExecutionControl; import jdk.jshell.spi.ExecutionControlProvider; import jdk.jshell.spi.ExecutionEnv; @@ -66,6 +68,8 @@ public class JdiExecutionControlProvider implements ExecutionControlProvider { */ private static final int DEFAULT_TIMEOUT = 5000; + private final JdiStarter starter; + /** * Create an instance. An instance can be used to * {@linkplain #generate generate} an {@link ExecutionControl} instance @@ -73,6 +77,37 @@ public class JdiExecutionControlProvider implements ExecutionControlProvider { * process. */ public JdiExecutionControlProvider() { + this(new JdiStarter() { + @Override + public TargetDescription start(ExecutionEnv env, Map parameters, int port) { + String remoteAgent = parameters.get(PARAM_REMOTE_AGENT); + int timeout = Integer.parseUnsignedInt( + parameters.get(PARAM_TIMEOUT)); + String host = parameters.get(PARAM_HOST_NAME); + String sIsLaunch = parameters.get(PARAM_LAUNCH) + .toLowerCase(Locale.ROOT); + boolean isLaunch = sIsLaunch.length() > 0 + && ("true".startsWith(sIsLaunch) || "yes".startsWith(sIsLaunch)); + + JdiInitiator jdii = new JdiInitiator(port, + env.extraRemoteVMOptions(), remoteAgent, isLaunch, host, + timeout, Collections.emptyMap()); + return new TargetDescription(jdii.vm(), jdii.process()); + } + }); + } + + /** + * Create an instance. An instance can be used to + * {@linkplain #generate generate} an {@link ExecutionControl} instance + * that uses the Java Debug Interface as part of the control of a remote + * process. The provided {@code start} will be used to start the remote process. + * + * @param starter starter that will create the remote process + * @since 22 + */ + public JdiExecutionControlProvider(JdiStarter starter) { + this.starter = starter; } /** @@ -142,14 +177,14 @@ public ExecutionControl generate(ExecutionEnv env, Map parameter if (parameters == null) { parameters = dp; } - String remoteAgent = parameters.getOrDefault(PARAM_REMOTE_AGENT, dp.get(PARAM_REMOTE_AGENT)); + parameters = new HashMap<>(parameters); + String remoteAgent = parameters.computeIfAbsent(PARAM_REMOTE_AGENT, x -> dp.get(PARAM_REMOTE_AGENT)); int timeout = Integer.parseUnsignedInt( - parameters.getOrDefault(PARAM_TIMEOUT, dp.get(PARAM_TIMEOUT))); - String host = parameters.getOrDefault(PARAM_HOST_NAME, dp.get(PARAM_HOST_NAME)); - String sIsLaunch = parameters.getOrDefault(PARAM_LAUNCH, dp.get(PARAM_LAUNCH)).toLowerCase(Locale.ROOT); - boolean isLaunch = sIsLaunch.length() > 0 - && ("true".startsWith(sIsLaunch) || "yes".startsWith(sIsLaunch)); - return JdiDefaultExecutionControl.create(env, remoteAgent, isLaunch, host, timeout); + parameters.computeIfAbsent(PARAM_TIMEOUT, x -> dp.get(PARAM_TIMEOUT))); + parameters.putIfAbsent(PARAM_HOST_NAME, dp.get(PARAM_HOST_NAME)); + parameters.putIfAbsent(PARAM_LAUNCH, dp.get(PARAM_LAUNCH)); + + return JdiDefaultExecutionControl.create(env, parameters, remoteAgent, timeout, starter); } } diff --git a/src/jdk.jshell/share/classes/jdk/jshell/execution/JdiInitiator.java b/src/jdk.jshell/share/classes/jdk/jshell/execution/JdiInitiator.java index 2dad37186edbf..fd908745d81d8 100644 --- a/src/jdk.jshell/share/classes/jdk/jshell/execution/JdiInitiator.java +++ b/src/jdk.jshell/share/classes/jdk/jshell/execution/JdiInitiator.java @@ -153,14 +153,55 @@ private VirtualMachine launchTarget() { */ private VirtualMachine listenTarget(int port, List remoteVMOptions) { ListeningConnector listener = (ListeningConnector) connector; + try { + String addr; + + try { + // Start listening, get the JDI connection address + addr = listener.startListening(connectorArgs); + debug("Listening at address: " + addr); + } catch (Throwable t) { + throw reportLaunchFail(t, "listen"); + } + + runListenProcess(addr, port, remoteVMOptions, process -> { + // Accept the connection from the remote agent + vm = timedVirtualMachineCreation(() -> listener.accept(connectorArgs), + () -> process.waitFor()); + try { + listener.stopListening(connectorArgs); + } catch (IOException | IllegalConnectorArgumentsException ex) { + // ignore + } + }); + return vm; + } catch (Throwable ex) { + try { + listener.stopListening(connectorArgs); + } catch (IOException | IllegalConnectorArgumentsException iex) { + // ignore + } + throw ex; + } + } + + /** + * Create a process that will attach to the given address. + * @param jdiAddress address on which a JDI server is waiting for a connection + * @param jshellControlPort the port which the remote agent should connect to + * @param remoteVMOptions VM options for the remote agent VM + * @param setupVM a callback that should be called then the remote agent process + * is created. The callback will setup the JDI's {@code VirtualMachine}. + * @since 22 + */ + protected void runListenProcess(String jdiAddress, + int jshellControlPort, + List remoteVMOptions, + ProcessStarted setupVM) { // Files to collection to output of a start-up failure File crashErrorFile = createTempFile("error"); File crashOutputFile = createTempFile("output"); try { - // Start listening, get the JDI connection address - String addr = listener.startListening(connectorArgs); - debug("Listening at address: " + addr); - // Launch the RemoteAgent requesting a connection on that address String javaHome = System.getProperty("java.home"); List args = new ArrayList<>(); @@ -168,35 +209,23 @@ private VirtualMachine listenTarget(int port, List remoteVMOptions) { ? "java" : javaHome + File.separator + "bin" + File.separator + "java"); args.add("-agentlib:jdwp=transport=" + connector.transport().name() + - ",address=" + addr); + ",address=" + jdiAddress); args.addAll(remoteVMOptions); args.add(remoteAgent); - args.add("" + port); + args.add("" + jshellControlPort); ProcessBuilder pb = new ProcessBuilder(args); pb.redirectError(crashErrorFile); pb.redirectOutput(crashOutputFile); process = pb.start(); - // Accept the connection from the remote agent - vm = timedVirtualMachineCreation(() -> listener.accept(connectorArgs), - () -> process.waitFor()); - try { - listener.stopListening(connectorArgs); - } catch (IOException | IllegalConnectorArgumentsException ex) { - // ignore - } + setupVM.processStarted(process); + crashErrorFile.delete(); crashOutputFile.delete(); - return vm; } catch (Throwable ex) { if (process != null) { process.destroyForcibly(); } - try { - listener.stopListening(connectorArgs); - } catch (IOException | IllegalConnectorArgumentsException iex) { - // ignore - } String text = readFile(crashErrorFile) + readFile(crashOutputFile); crashErrorFile.delete(); crashOutputFile.delete(); @@ -328,4 +357,19 @@ private void debug(Throwable ex, String where) { // Reserved for future logging } + /** + * Callback that should invoked when the remote process is invoked. + * + * @since 22 + */ + protected interface ProcessStarted { + /** + * Notify the process has been started. + * + * @param p the {@code Process} + * @throws Throwable thrown when anything goes wrong. + */ + public void processStarted(Process p) throws Throwable; + } + } diff --git a/test/langtools/jdk/jshell/JdiStarterTest.java b/test/langtools/jdk/jshell/JdiStarterTest.java new file mode 100644 index 0000000000000..0beee9ceda164 --- /dev/null +++ b/test/langtools/jdk/jshell/JdiStarterTest.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8319311 + * @summary Tests JdiStarter + * @modules jdk.jshell/jdk.jshell jdk.jshell/jdk.jshell.spi jdk.jshell/jdk.jshell.execution + * @run testng JdiStarterTest + */ + +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.testng.annotations.Test; +import jdk.jshell.JShell; +import jdk.jshell.SnippetEvent; +import jdk.jshell.execution.JdiDefaultExecutionControl.JdiStarter; +import jdk.jshell.execution.JdiDefaultExecutionControl.JdiStarter.TargetDescription; +import jdk.jshell.execution.JdiExecutionControlProvider; +import jdk.jshell.execution.JdiInitiator; +import static org.testng.Assert.assertEquals; + +@Test +public class JdiStarterTest { + + public void jdiStarter() { + // turn on logging of launch failures + Logger.getLogger("jdk.jshell.execution").setLevel(Level.ALL); + JdiStarter starter = (env, parameters, port) -> { + assertEquals(parameters.get(JdiExecutionControlProvider.PARAM_HOST_NAME), ""); + assertEquals(parameters.get(JdiExecutionControlProvider.PARAM_LAUNCH), "false"); + assertEquals(parameters.get(JdiExecutionControlProvider.PARAM_REMOTE_AGENT), "jdk.jshell.execution.RemoteExecutionControl"); + assertEquals(parameters.get(JdiExecutionControlProvider.PARAM_TIMEOUT), "5000"); + JdiInitiator jdii = + new JdiInitiator(port, + env.extraRemoteVMOptions(), + "jdk.jshell.execution.RemoteExecutionControl", + false, + null, + 5000, + Collections.emptyMap()); + return new TargetDescription(jdii.vm(), jdii.process()); + }; + JShell jshell = + JShell.builder() + .executionEngine(new JdiExecutionControlProvider(starter), Map.of()) + .build(); + List evts = jshell.eval("1 + 2"); + assertEquals(1, evts.size()); + assertEquals("3", evts.get(0).value()); + } +} From e33b6c10f8d3244ec2f4204cd4de404e0e0686eb Mon Sep 17 00:00:00 2001 From: Thomas Stuefe Date: Tue, 28 Nov 2023 13:33:50 +0000 Subject: [PATCH 086/250] 8319437: NMT should show library names in call stacks Reviewed-by: dholmes, zgu --- .../share/utilities/nativeCallStack.cpp | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/src/hotspot/share/utilities/nativeCallStack.cpp b/src/hotspot/share/utilities/nativeCallStack.cpp index 0fb0303fb908b..3ddf296506c2a 100644 --- a/src/hotspot/share/utilities/nativeCallStack.cpp +++ b/src/hotspot/share/utilities/nativeCallStack.cpp @@ -82,18 +82,33 @@ void NativeCallStack::print_on(outputStream* out, int indent) const { char buf[1024]; int offset; if (is_empty()) { - for (int index = 0; index < indent; index ++) out->print(" "); + out->fill_to(indent); out->print("[BOOTSTRAP]"); } else { for (int frame = 0; frame < NMT_TrackingStackDepth; frame ++) { pc = get_frame(frame); if (pc == nullptr) break; - // Print indent - for (int index = 0; index < indent; index ++) out->print(" "); + out->fill_to(indent); + out->print("[" PTR_FORMAT "]", p2i(pc)); + // Print function and library; shorten library name to just its last component + // for brevity, and omit it completely for libjvm.so + bool function_printed = false; if (os::dll_address_to_function_name(pc, buf, sizeof(buf), &offset)) { - out->print("[" PTR_FORMAT "] %s+0x%x", p2i(pc), buf, offset); - } else { - out->print("[" PTR_FORMAT "]", p2i(pc)); + out->print("%s+0x%x", buf, offset); + function_printed = true; + } + if ((!function_printed || !os::address_is_in_vm(pc)) && + os::dll_address_to_library_name(pc, buf, sizeof(buf), &offset)) { + const char* libname = strrchr(buf, os::file_separator()[0]); + if (libname != nullptr) { + libname++; + } else { + libname = buf; + } + out->print(" in %s", libname); + if (!function_printed) { + out->print("+0x%x", offset); + } } // Note: we deliberately omit printing source information here. NativeCallStack::print_on() From db7fedfa88d17541738841678473dfc0d480eba5 Mon Sep 17 00:00:00 2001 From: Kevin Rushforth Date: Tue, 28 Nov 2023 13:51:10 +0000 Subject: [PATCH 087/250] 8320358: GHA: ignore jdk* branches Reviewed-by: ihse --- .github/workflows/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 43a41b939b666..ebc0f3d961d36 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -30,6 +30,7 @@ on: branches-ignore: - master - pr/* + - jdk* workflow_dispatch: inputs: platforms: From 86bb8040297bef55a46f9089f11481433746a27d Mon Sep 17 00:00:00 2001 From: Jaikiran Pai Date: Tue, 28 Nov 2023 14:51:08 +0000 Subject: [PATCH 088/250] 8320863: dsymutil command leaves around temporary directories Reviewed-by: erikj, ihse --- make/common/NativeCompilation.gmk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/make/common/NativeCompilation.gmk b/make/common/NativeCompilation.gmk index 68d1dba27ffcc..c8cd4b8ea64ae 100644 --- a/make/common/NativeCompilation.gmk +++ b/make/common/NativeCompilation.gmk @@ -1105,7 +1105,7 @@ define SetupNativeCompilationBody $$($1_SYMBOLS_DIR)/$$($1_BASENAME).dSYM/Contents/Info.plist \ $$($1_SYMBOLS_DIR)/$$($1_BASENAME).dSYM/Contents/Resources/DWARF/$$($1_BASENAME) $1_CREATE_DEBUGINFO_CMDS := \ - $(DSYMUTIL) --out $$($1_SYMBOLS_DIR)/$$($1_BASENAME).dSYM $$($1_TARGET) + $(DSYMUTIL) --reproducer Off --out $$($1_SYMBOLS_DIR)/$$($1_BASENAME).dSYM $$($1_TARGET) endif # Since the link rule creates more than one file that we want to track, From ebbef629c74dc670adc74a3905a6acf17dbd7200 Mon Sep 17 00:00:00 2001 From: Magnus Ihse Bursie Date: Tue, 28 Nov 2023 15:32:21 +0000 Subject: [PATCH 089/250] 8320769: Remove ill-adviced "make install" target Reviewed-by: erikj, shade --- make/Global.gmk | 3 +-- make/Install.gmk | 43 --------------------------------- make/Main.gmk | 8 ------ make/autoconf/spec.gmk.in | 51 --------------------------------------- 4 files changed, 1 insertion(+), 104 deletions(-) delete mode 100644 make/Install.gmk diff --git a/make/Global.gmk b/make/Global.gmk index b41c4051cfafd..e5e76b475b941 100644 --- a/make/Global.gmk +++ b/make/Global.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2012, 2022, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2012, 2023, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -52,7 +52,6 @@ help: $(info $(_) make docs # Create all docs) $(info $(_) make docs-jdk-api # Create just JDK javadocs) $(info $(_) make bootcycle-images # Build images twice, second time with newly built JDK) - $(info $(_) make install # Install the generated images locally) $(info $(_) make check # Run basic testing (currently tier1)) $(info $(_) make test- # Run test, e.g. test-tier1) $(info $(_) make test TEST= # Run test(s) given by TEST specification) diff --git a/make/Install.gmk b/make/Install.gmk deleted file mode 100644 index bfe989ffe3100..0000000000000 --- a/make/Install.gmk +++ /dev/null @@ -1,43 +0,0 @@ -# -# Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -default: install - -include $(SPEC) - -BINARIES := $(notdir $(wildcard $(JDK_IMAGE_DIR)/bin/*)) -INSTALLDIR := openjdk-$(VERSION_SHORT) - -# Install the jdk image, in a very crude way. Not taking into -# account, how to install properly on macosx or windows etc. -install: - echo Installing jdk image into $(INSTALL_PREFIX)/jvm/$(INSTALLDIR) - echo and creating $(words $(BINARIES)) links from $(INSTALL_PREFIX)/bin into the jdk. - $(MKDIR) -p $(INSTALL_PREFIX)/jvm/$(INSTALLDIR) - $(RM) -r $(INSTALL_PREFIX)/jvm/$(INSTALLDIR)/* - $(CP) -rp $(JDK_IMAGE_DIR)/* $(INSTALL_PREFIX)/jvm/$(INSTALLDIR) - $(MKDIR) -p $(INSTALL_PREFIX)/bin - $(RM) $(addprefix $(INSTALL_PREFIX)/bin/, $(BINARIES)) - $(foreach b, $(BINARIES), $(LN) -s $(INSTALL_PREFIX)/jvm/$(INSTALLDIR)/bin/$b $(INSTALL_PREFIX)/bin/$b &&) true diff --git a/make/Main.gmk b/make/Main.gmk index 1817416867738..e904235ff3f80 100644 --- a/make/Main.gmk +++ b/make/Main.gmk @@ -866,14 +866,6 @@ ifeq ($(JCOV_ENABLED), true) )) endif -################################################################################ -# Install targets - -$(eval $(call SetupTarget, install, \ - MAKEFILE := Install, \ - DEPS := product-images, \ -)) - ################################################################################ # # Dependency declarations between targets. diff --git a/make/autoconf/spec.gmk.in b/make/autoconf/spec.gmk.in index 26b7d3ec9586c..953b58a7b78c2 100644 --- a/make/autoconf/spec.gmk.in +++ b/make/autoconf/spec.gmk.in @@ -823,57 +823,6 @@ UCRT_DLL_DIR := @UCRT_DLL_DIR@ ENABLE_PANDOC := @ENABLE_PANDOC@ PANDOC_MARKDOWN_FLAG := @PANDOC_MARKDOWN_FLAG@ -#################################################### -# -# INSTALLATION -# - -# Common prefix for all installed files. Defaults to /usr/local, -# but /opt/myjdk is another common version. -INSTALL_PREFIX = @prefix@ - -# Directories containing architecture-dependent files should be relative to exec_prefix -INSTALL_EXECPREFIX = @exec_prefix@ - -# java,javac,javap etc are installed here. -INSTALL_BINDIR = @bindir@ - -# Read only architecture-independent data -INSTALL_DATADIR = @datadir@ - -# Root of above. -INSTALL_DATAROOTDIR = @datarootdir@ - -# Doc files, other than info and man. -INSTALL_DOCDIR = @docdir@ - -# Html documentation -INSTALL_HTMLDIR = @htmldir@ - -# Installing C header files, JNI headers for example. -INSTALL_INCLUDEDIR = @includedir@ - -# Installing library files.... -INSTALL_INCLUDEDIR = @libdir@ - -# Executables that other programs run. -INSTALL_LIBEXECDIR = @libexecdir@ - -# Locale-dependent but architecture-independent data, such as message catalogs. -INSTALL_LOCALEDIR = @localedir@ - -# Modifiable single-machine data -INSTALL_LOCALSTATEDIR = @localstatedir@ - -# Man pages -INSTALL_MANDIR = @mandir@ - -# Modifiable architecture-independent data. -INSTALL_SHAREDSTATEDIR = @sharedstatedir@ - -# Read-only single-machine data -INSTALL_SYSCONFDIR = @sysconfdir@ - #################################################### # # Libraries From 66ae6d52a1590d9773fc9a32623339a58d70d732 Mon Sep 17 00:00:00 2001 From: Magnus Ihse Bursie Date: Tue, 28 Nov 2023 17:15:32 +0000 Subject: [PATCH 090/250] 8320899: Select the correct Makefile when running make in build directory Reviewed-by: erikj --- make/autoconf/Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/make/autoconf/Makefile.in b/make/autoconf/Makefile.in index 8badd0f43ac84..4cb5057c05c7e 100644 --- a/make/autoconf/Makefile.in +++ b/make/autoconf/Makefile.in @@ -24,4 +24,4 @@ # This Makefile was generated by configure @DATE_WHEN_CONFIGURED@ # GENERATED FILE, DO NOT EDIT SPEC:=@OUTPUTDIR@/spec.gmk -include @TOPDIR@/Makefile +include @WORKSPACE_ROOT@/Makefile From 69c0b24386d0bcf2f2d623ccef0192a54753f916 Mon Sep 17 00:00:00 2001 From: Justin Lu Date: Tue, 28 Nov 2023 17:23:13 +0000 Subject: [PATCH 091/250] 8320714: java/util/Locale/LocaleProvidersRun.java and java/util/ResourceBundle/modules/visibility/VisibilityTest.java timeout after passing Reviewed-by: naoto, bpb, lancea --- test/jdk/java/util/Locale/LocaleProvidersRun.java | 5 +++-- .../ResourceBundle/modules/visibility/VisibilityTest.java | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/test/jdk/java/util/Locale/LocaleProvidersRun.java b/test/jdk/java/util/Locale/LocaleProvidersRun.java index aae8ff03c11a0..947633a8e21ab 100644 --- a/test/jdk/java/util/Locale/LocaleProvidersRun.java +++ b/test/jdk/java/util/Locale/LocaleProvidersRun.java @@ -28,6 +28,7 @@ * 8150432 8215913 8220227 8228465 8232871 8232860 8236495 8245241 * 8246721 8248695 8257964 8261919 * @summary tests for "java.locale.providers" system property + * @requires vm.flagless * @library /test/lib * @build LocaleProviders * providersrc.spi.src.tznp @@ -179,8 +180,8 @@ public static void main(String[] args) throws Throwable { private static void testRun(String prefList, String methodName, String param1, String param2, String param3) throws Throwable { - // Build process (with VM flags) - ProcessBuilder pb = ProcessTools.createTestJavaProcessBuilder( + // Build process (without VM flags) + ProcessBuilder pb = ProcessTools.createLimitedTestJavaProcessBuilder( "-ea", "-esa", "-cp", Utils.TEST_CLASS_PATH, "-Djava.util.logging.config.class=LocaleProviders$LogConfig", diff --git a/test/jdk/java/util/ResourceBundle/modules/visibility/VisibilityTest.java b/test/jdk/java/util/ResourceBundle/modules/visibility/VisibilityTest.java index b81c69a426938..e0fdb9a93abb9 100644 --- a/test/jdk/java/util/ResourceBundle/modules/visibility/VisibilityTest.java +++ b/test/jdk/java/util/ResourceBundle/modules/visibility/VisibilityTest.java @@ -26,6 +26,7 @@ * @bug 8137317 8139238 8210408 * @summary Visibility tests for ResourceBundle.getBundle with and without * an unnamed module argument. + * @requires vm.flagless * @library /test/lib * .. * @build jdk.test.lib.JDKToolLauncher @@ -330,8 +331,8 @@ public void RunWithPkgRes(List argsList) throws Throwable { } private int runCmd(List argsList) throws Throwable { - // Build process (with VM flags) - ProcessBuilder pb = ProcessTools.createTestJavaProcessBuilder( + // Build process (without VM flags) + ProcessBuilder pb = ProcessTools.createLimitedTestJavaProcessBuilder( Stream.concat(Stream.of("-ea", "-esa"), argsList.stream()).toList()); // Evaluate process status return ProcessTools.executeCommand(pb).getExitValue(); From adad132028507b5338d0fd055aa06e1bbf9fe8a8 Mon Sep 17 00:00:00 2001 From: Magnus Ihse Bursie Date: Tue, 28 Nov 2023 17:33:23 +0000 Subject: [PATCH 092/250] 8320767: Use := wherever possible in spec.gmk.in Reviewed-by: erikj --- make/autoconf/spec.gmk.in | 67 ++++++++++++++++++++------------------- 1 file changed, 34 insertions(+), 33 deletions(-) diff --git a/make/autoconf/spec.gmk.in b/make/autoconf/spec.gmk.in index 953b58a7b78c2..8a1eb8ed27f54 100644 --- a/make/autoconf/spec.gmk.in +++ b/make/autoconf/spec.gmk.in @@ -193,9 +193,9 @@ JDK_RC_PLATFORM_NAME := @JDK_RC_PLATFORM_NAME@ JDK_RC_NAME := @JDK_RC_NAME@ COMPANY_NAME := @COMPANY_NAME@ HOTSPOT_VM_DISTRO := @HOTSPOT_VM_DISTRO@ -MACOSX_BUNDLE_NAME_BASE = @MACOSX_BUNDLE_NAME_BASE@ -MACOSX_BUNDLE_ID_BASE = @MACOSX_BUNDLE_ID_BASE@ -MACOSX_BUNDLE_BUILD_VERSION = @MACOSX_BUNDLE_BUILD_VERSION@ +MACOSX_BUNDLE_NAME_BASE := @MACOSX_BUNDLE_NAME_BASE@ +MACOSX_BUNDLE_ID_BASE := @MACOSX_BUNDLE_ID_BASE@ +MACOSX_BUNDLE_BUILD_VERSION := @MACOSX_BUNDLE_BUILD_VERSION@ USERNAME := @USERNAME@ VENDOR_URL := @VENDOR_URL@ VENDOR_URL_BUG := @VENDOR_URL_BUG@ @@ -439,18 +439,18 @@ JMH_VERSION := @JMH_VERSION@ GTEST_FRAMEWORK_SRC := @GTEST_FRAMEWORK_SRC@ # Source file for cacerts -CACERTS_FILE = @CACERTS_FILE@ +CACERTS_FILE := @CACERTS_FILE@ # Source folder for user provided cacerts PEM files -CACERTS_SRC = @CACERTS_SRC@ +CACERTS_SRC := @CACERTS_SRC@ # Enable unlimited crypto policy -UNLIMITED_CRYPTO = @UNLIMITED_CRYPTO@ +UNLIMITED_CRYPTO := @UNLIMITED_CRYPTO@ -GCOV_ENABLED = @GCOV_ENABLED@ -JCOV_ENABLED = @JCOV_ENABLED@ -JCOV_HOME = @JCOV_HOME@ -JCOV_INPUT_JDK = @JCOV_INPUT_JDK@ -JCOV_FILTERS = @JCOV_FILTERS@ +GCOV_ENABLED := @GCOV_ENABLED@ +JCOV_ENABLED := @JCOV_ENABLED@ +JCOV_HOME := @JCOV_HOME@ +JCOV_INPUT_JDK := @JCOV_INPUT_JDK@ +JCOV_FILTERS := @JCOV_FILTERS@ # AddressSanitizer ASAN_ENABLED := @ASAN_ENABLED@ @@ -468,13 +468,13 @@ X_CFLAGS := @X_CFLAGS@ X_LIBS := @X_LIBS@ # The lowest required version of macosx -MACOSX_VERSION_MIN = @MACOSX_VERSION_MIN@ +MACOSX_VERSION_MIN := @MACOSX_VERSION_MIN@ # The highest allowed version of macosx -MACOSX_VERSION_MAX = @MACOSX_VERSION_MAX@ +MACOSX_VERSION_MAX := @MACOSX_VERSION_MAX@ # The macosx code signing configuration MACOSX_CODESIGN_MODE := @MACOSX_CODESIGN_MODE@ -MACOSX_CODESIGN_IDENTITY = @MACOSX_CODESIGN_IDENTITY@ +MACOSX_CODESIGN_IDENTITY := @MACOSX_CODESIGN_IDENTITY@ # Toolchain type: gcc, clang, xlc, microsoft... TOOLCHAIN_TYPE := @TOOLCHAIN_TYPE@ @@ -487,7 +487,7 @@ HOTSPOT_TOOLCHAIN_TYPE := @HOTSPOT_TOOLCHAIN_TYPE@ # Option used to tell the compiler whether to create 32- or 64-bit executables COMPILER_TARGET_BITS_FLAG := @COMPILER_TARGET_BITS_FLAG@ -COMPILER_SUPPORTS_TARGET_BITS_FLAG = @COMPILER_SUPPORTS_TARGET_BITS_FLAG@ +COMPILER_SUPPORTS_TARGET_BITS_FLAG := @COMPILER_SUPPORTS_TARGET_BITS_FLAG@ # Option used to pass a command file to the compiler COMPILER_COMMAND_FILE_FLAG := @COMPILER_COMMAND_FILE_FLAG@ @@ -526,8 +526,8 @@ 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_LANGSTD_CXXFLAGS := @ADLC_LANGSTD_CXXFLAGS@ +ADLC_LDFLAGS := @ADLC_LDFLAGS@ # Tools that potentially need to be cross compilation aware. CC := @CCACHE@ @ICECC@ @CC@ @@ -551,10 +551,10 @@ BASIC_ASFLAGS := @BASIC_ASFLAGS@ MACHINE_FLAG := @MACHINE_FLAG@ # These flags might contain variables set by a custom extension that is included later. -EXTRA_CFLAGS = @EXTRA_CFLAGS@ -EXTRA_CXXFLAGS = @EXTRA_CXXFLAGS@ -EXTRA_LDFLAGS = @EXTRA_LDFLAGS@ -EXTRA_ASFLAGS = @EXTRA_ASFLAGS@ +EXTRA_CFLAGS := @EXTRA_CFLAGS@ +EXTRA_CXXFLAGS := @EXTRA_CXXFLAGS@ +EXTRA_LDFLAGS := @EXTRA_LDFLAGS@ +EXTRA_ASFLAGS := @EXTRA_ASFLAGS@ CXX := @CCACHE@ @ICECC@ @CXX@ @@ -633,13 +633,13 @@ ASFLAGS_DEBUG_SYMBOLS := @ASFLAGS_DEBUG_SYMBOLS@ # # Compress (or not) jars -COMPRESS_JARS = @COMPRESS_JARS@ +COMPRESS_JARS := @COMPRESS_JARS@ # Options to linker to specify the library name. # (Note absence of := assignment, because we do not want to evaluate the macro body here) SET_SHARED_LIBRARY_NAME = @SET_SHARED_LIBRARY_NAME@ -SHARED_LIBRARY_FLAGS = @SHARED_LIBRARY_FLAGS@ +SHARED_LIBRARY_FLAGS := @SHARED_LIBRARY_FLAGS@ # Set origin using the linker, ie use the relative path to the dependent library to find the dependencies. # (Note absence of := assignment, because we do not want to evaluate the macro body here) @@ -647,11 +647,12 @@ SET_SHARED_LIBRARY_ORIGIN = @SET_SHARED_LIBRARY_ORIGIN@ SET_EXECUTABLE_ORIGIN = @SET_EXECUTABLE_ORIGIN@ # Different OS:es have different ways of naming shared libraries. -# The SHARED_LIBRARY macro takes "verify" as and argument and returns: +# The SHARED_LIBRARY and STATIC_LIBRARY macros takes "verify" as and argument and returns: # "libverify.so" or "libverify.dylib" or "verify.dll" depending on platform. # (Note absence of := assignment, because we do not want to evaluate the macro body here) SHARED_LIBRARY = @SHARED_LIBRARY@ STATIC_LIBRARY = @STATIC_LIBRARY@ + LIBRARY_PREFIX := @LIBRARY_PREFIX@ SHARED_LIBRARY_SUFFIX := @SHARED_LIBRARY_SUFFIX@ STATIC_LIBRARY_SUFFIX := @STATIC_LIBRARY_SUFFIX@ @@ -719,8 +720,8 @@ INTERIM_LANGTOOLS_ARGS := \ --patch-module java.base=$(BUILDTOOLS_OUTPUTDIR)/gensrc/java.base.interim \ $(INTERIM_LANGTOOLS_ADD_EXPORTS) \ # -JAVAC_MAIN_CLASS = -m jdk.compiler.interim/com.sun.tools.javac.Main -JAVADOC_MAIN_CLASS = -m jdk.javadoc.interim/jdk.javadoc.internal.tool.Main +JAVAC_MAIN_CLASS := -m jdk.compiler.interim/com.sun.tools.javac.Main +JAVADOC_MAIN_CLASS := -m jdk.javadoc.interim/jdk.javadoc.internal.tool.Main # You run the new javac using the boot jdk with $(BOOT_JDK)/bin/java $(NEW_JAVAC) ... # Use = assignment to be able to override in bootcycle-spec.gmk @@ -845,9 +846,9 @@ PNG_CFLAGS := @PNG_CFLAGS@ # Misc # -INCLUDE_SA = @INCLUDE_SA@ -INCLUDE_JVMCI = @INCLUDE_JVMCI@ -INCLUDE_COMPILER2 = @INCLUDE_COMPILER2@ +INCLUDE_SA := @INCLUDE_SA@ +INCLUDE_JVMCI := @INCLUDE_JVMCI@ +INCLUDE_COMPILER2 := @INCLUDE_COMPILER2@ OS_VERSION_MAJOR := @OS_VERSION_MAJOR@ OS_VERSION_MINOR := @OS_VERSION_MINOR@ @@ -898,10 +899,10 @@ GRAAL_BUILDER_IMAGE_SUBDIR := graal-builder-jdk GRAAL_BUILDER_IMAGE_DIR := $(IMAGES_OUTPUTDIR)/$(GRAAL_BUILDER_IMAGE_SUBDIR) # Macosx bundles directory definitions -JDK_MACOSX_BUNDLE_SUBDIR = jdk-bundle -JRE_MACOSX_BUNDLE_SUBDIR = jre-bundle -JDK_MACOSX_BUNDLE_SUBDIR_SIGNED = jdk-bundle-signed -JRE_MACOSX_BUNDLE_SUBDIR_SIGNED = jre-bundle-signed +JDK_MACOSX_BUNDLE_SUBDIR := jdk-bundle +JRE_MACOSX_BUNDLE_SUBDIR := jre-bundle +JDK_MACOSX_BUNDLE_SUBDIR_SIGNED := jdk-bundle-signed +JRE_MACOSX_BUNDLE_SUBDIR_SIGNED := jre-bundle-signed JDK_MACOSX_BUNDLE_DIR = $(IMAGES_OUTPUTDIR)/$(JDK_MACOSX_BUNDLE_SUBDIR) JRE_MACOSX_BUNDLE_DIR = $(IMAGES_OUTPUTDIR)/$(JRE_MACOSX_BUNDLE_SUBDIR) JDK_MACOSX_BUNDLE_DIR_SIGNED = $(IMAGES_OUTPUTDIR)/$(JDK_MACOSX_BUNDLE_SUBDIR_SIGNED) From dc256fbc6490f8163adb286dbb7380c10e5e1e06 Mon Sep 17 00:00:00 2001 From: Thomas Stuefe Date: Tue, 28 Nov 2023 17:48:54 +0000 Subject: [PATCH 093/250] 8320061: [nmt] Multiple issues with peak accounting Reviewed-by: jsjolen, mbaesken --- src/hotspot/share/nmt/memReporter.cpp | 155 ++++++++++-------- .../share/nmt/virtualMemoryTracker.cpp | 2 - .../share/nmt/virtualMemoryTracker.hpp | 13 +- .../jtreg/runtime/NMT/HugeArenaTracking.java | 74 ++++++--- .../runtime/NMT/MallocRoundingReportTest.java | 29 ++-- .../jtreg/runtime/NMT/MallocStressTest.java | 5 +- .../jtreg/runtime/NMT/MallocTestType.java | 40 +++-- .../runtime/NMT/MallocTrackingVerify.java | 26 ++- .../jtreg/runtime/NMT/NMTTestUtils.java | 70 ++++++++ .../runtime/NMT/ThreadedMallocTestType.java | 26 ++- .../NMT/ThreadedVirtualAllocTestType.java | 32 ++-- .../runtime/NMT/VirtualAllocCommitMerge.java | 118 +++++++------ .../VirtualAllocCommitUncommitRecommit.java | 54 +++--- .../runtime/NMT/VirtualAllocTestType.java | 128 ++++++++++++--- .../jdk/test/lib/process/OutputAnalyzer.java | 76 +++++++++ 15 files changed, 551 insertions(+), 297 deletions(-) create mode 100644 test/hotspot/jtreg/runtime/NMT/NMTTestUtils.java diff --git a/src/hotspot/share/nmt/memReporter.cpp b/src/hotspot/share/nmt/memReporter.cpp index 48470478b9bb8..964911bb5954e 100644 --- a/src/hotspot/share/nmt/memReporter.cpp +++ b/src/hotspot/share/nmt/memReporter.cpp @@ -55,7 +55,7 @@ void MemReporterBase::print_total(size_t reserved, size_t committed, size_t peak output()->print("reserved=" SIZE_FORMAT "%s, committed=" SIZE_FORMAT "%s", amount_in_current_scale(reserved), scale, amount_in_current_scale(committed), scale); if (peak != 0) { - output()->print(", largest_committed=" SIZE_FORMAT "%s", amount_in_current_scale(peak), scale); + output()->print(", peak=" SIZE_FORMAT "%s", amount_in_current_scale(peak), scale); } } @@ -93,9 +93,15 @@ void MemReporterBase::print_malloc(const MemoryCounter* c, MEMFLAGS flag) const } void MemReporterBase::print_virtual_memory(size_t reserved, size_t committed, size_t peak) const { + outputStream* out = output(); const char* scale = current_scale(); - output()->print("(mmap: reserved=" SIZE_FORMAT "%s, committed=" SIZE_FORMAT "%s, largest_committed=" SIZE_FORMAT "%s)", - amount_in_current_scale(reserved), scale, amount_in_current_scale(committed), scale, amount_in_current_scale(peak), scale); + out->print("(mmap: reserved=" SIZE_FORMAT "%s, committed=" SIZE_FORMAT "%s, ", + amount_in_current_scale(reserved), scale, amount_in_current_scale(committed), scale); + if (peak == committed) { + out->print_raw("at peak)"); + } else { + out->print("peak=" SIZE_FORMAT "%s)", amount_in_current_scale(peak), scale); + } } void MemReporterBase::print_malloc_line(const MemoryCounter* c) const { @@ -204,74 +210,79 @@ void MemSummaryReporter::report_summary_of_type(MEMFLAGS flag, committed_amount += _malloc_snapshot->malloc_overhead(); } - if (amount_in_current_scale(reserved_amount) > 0) { - outputStream* out = output(); - const char* scale = current_scale(); - out->print("-%26s (", NMTUtil::flag_to_name(flag)); - print_total(reserved_amount, committed_amount); + // Omit printing if the current reserved value as well as all historical peaks (malloc, mmap committed, arena) + // fall below scale threshold + const size_t pk_vm = virtual_memory->peak_size(); + const size_t pk_malloc = malloc_memory->malloc_peak_size(); + const size_t pk_arena = malloc_memory->arena_peak_size(); + + if (amount_in_current_scale(MAX4(reserved_amount, pk_vm, pk_malloc, pk_arena)) == 0) { + return; + } + + outputStream* out = output(); + const char* scale = current_scale(); + out->print("-%26s (", NMTUtil::flag_to_name(flag)); + print_total(reserved_amount, committed_amount); #if INCLUDE_CDS - if (flag == mtClassShared) { - size_t read_only_bytes = FileMapInfo::readonly_total(); - output()->print(", readonly=" SIZE_FORMAT "%s", - amount_in_current_scale(read_only_bytes), scale); - } + if (flag == mtClassShared) { + size_t read_only_bytes = FileMapInfo::readonly_total(); + output()->print(", readonly=" SIZE_FORMAT "%s", + amount_in_current_scale(read_only_bytes), scale); + } #endif - out->print_cr(")"); + out->print_cr(")"); - if (flag == mtClass) { - // report class count - out->print_cr("%27s (classes #" SIZE_FORMAT ")", - " ", (_instance_class_count + _array_class_count)); - out->print_cr("%27s ( instance classes #" SIZE_FORMAT ", array classes #" SIZE_FORMAT ")", - " ", _instance_class_count, _array_class_count); - } else if (flag == mtThread) { - if (ThreadStackTracker::track_as_vm()) { - const VirtualMemory* thread_stack_usage = - _vm_snapshot->by_type(mtThreadStack); - // report thread count - out->print_cr("%27s (threads #" SIZE_FORMAT ")", " ", ThreadStackTracker::thread_count()); - out->print("%27s (stack: ", " "); - print_total(thread_stack_usage->reserved(), thread_stack_usage->committed(), thread_stack_usage->peak_size()); - } else { - MallocMemory* thread_stack_memory = _malloc_snapshot->by_type(mtThreadStack); - const char* scale = current_scale(); - // report thread count - out->print_cr("%27s (threads #" SIZE_FORMAT ")", " ", thread_stack_memory->malloc_count()); - out->print("%27s (Stack: " SIZE_FORMAT "%s", " ", - amount_in_current_scale(thread_stack_memory->malloc_size()), scale); - } - out->print_cr(")"); + if (flag == mtClass) { + // report class count + out->print_cr("%27s (classes #" SIZE_FORMAT ")", + " ", (_instance_class_count + _array_class_count)); + out->print_cr("%27s ( instance classes #" SIZE_FORMAT ", array classes #" SIZE_FORMAT ")", + " ", _instance_class_count, _array_class_count); + } else if (flag == mtThread) { + if (ThreadStackTracker::track_as_vm()) { + const VirtualMemory* thread_stack_usage = + _vm_snapshot->by_type(mtThreadStack); + // report thread count + out->print_cr("%27s (threads #" SIZE_FORMAT ")", " ", ThreadStackTracker::thread_count()); + out->print("%27s (stack: ", " "); + print_total(thread_stack_usage->reserved(), thread_stack_usage->committed(), thread_stack_usage->peak_size()); + } else { + MallocMemory* thread_stack_memory = _malloc_snapshot->by_type(mtThreadStack); + const char* scale = current_scale(); + // report thread count + out->print_cr("%27s (threads #" SIZE_FORMAT ")", " ", thread_stack_memory->malloc_count()); + out->print("%27s (Stack: " SIZE_FORMAT "%s", " ", + amount_in_current_scale(thread_stack_memory->malloc_size()), scale); } + out->print_cr(")"); + } - // report malloc'd memory - if (amount_in_current_scale(malloc_memory->malloc_size()) > 0 - || amount_in_current_scale(malloc_memory->malloc_peak_size()) > 0) { - print_malloc_line(malloc_memory->malloc_counter()); - } + // report malloc'd memory + if (amount_in_current_scale(MAX2(malloc_memory->malloc_size(), pk_malloc)) > 0) { + print_malloc_line(malloc_memory->malloc_counter()); + } - if (amount_in_current_scale(virtual_memory->reserved()) > 0 - DEBUG_ONLY(|| amount_in_current_scale(virtual_memory->peak_size()) > 0)) { - print_virtual_memory_line(virtual_memory->reserved(), virtual_memory->committed(), virtual_memory->peak_size()); - } + if (amount_in_current_scale(MAX2(virtual_memory->reserved(), pk_vm)) > 0) { + print_virtual_memory_line(virtual_memory->reserved(), virtual_memory->committed(), virtual_memory->peak_size()); + } - if (amount_in_current_scale(malloc_memory->arena_size()) > 0 - DEBUG_ONLY(|| amount_in_current_scale(malloc_memory->arena_peak_size()) > 0)) { - print_arena_line(malloc_memory->arena_counter()); - } + if (amount_in_current_scale(MAX2(malloc_memory->arena_size(), pk_arena)) > 0) { + print_arena_line(malloc_memory->arena_counter()); + } - if (flag == mtNMT && - amount_in_current_scale(_malloc_snapshot->malloc_overhead()) > 0) { - out->print_cr("%27s (tracking overhead=" SIZE_FORMAT "%s)", " ", - amount_in_current_scale(_malloc_snapshot->malloc_overhead()), scale); - } else if (flag == mtClass) { - // Metadata information - report_metadata(Metaspace::NonClassType); - if (Metaspace::using_class_space()) { - report_metadata(Metaspace::ClassType); - } + if (flag == mtNMT && + amount_in_current_scale(_malloc_snapshot->malloc_overhead()) > 0) { + out->print_cr("%27s (tracking overhead=" SIZE_FORMAT "%s)", " ", + amount_in_current_scale(_malloc_snapshot->malloc_overhead()), scale); + } else if (flag == mtClass) { + // Metadata information + report_metadata(Metaspace::NonClassType); + if (Metaspace::using_class_space()) { + report_metadata(Metaspace::ClassType); } - out->print_cr(" "); } + out->print_cr(" "); } void MemSummaryReporter::report_metadata(Metaspace::MetadataType type) const { @@ -321,9 +332,8 @@ int MemDetailReporter::report_malloc_sites() { const MallocSite* malloc_site; int num_omitted = 0; while ((malloc_site = malloc_itr.next()) != nullptr) { - // Don't report if site has never allocated less than one unit of whatever our scale is - if (scale() > 1 && amount_in_current_scale(malloc_site->size()) == 0 - DEBUG_ONLY(&& amount_in_current_scale(malloc_site->peak_size()) == 0)) { + // Omit printing if the current value and the historic peak value both fall below the reporting scale threshold + if (amount_in_current_scale(MAX2(malloc_site->size(), malloc_site->peak_size())) == 0) { num_omitted ++; continue; } @@ -353,8 +363,10 @@ int MemDetailReporter::report_virtual_memory_allocation_sites() { if (virtual_memory_site->reserved() == 0) { continue; } - // Don't report if site has reserved less than one unit of whatever our scale is - if (scale() > 1 && amount_in_current_scale(virtual_memory_site->reserved()) == 0) { + // Omit printing if the current value and the historic peak value both fall below the + // reporting scale threshold + if (amount_in_current_scale(MAX2(virtual_memory_site->reserved(), + virtual_memory_site->peak_size())) == 0) { num_omitted++; continue; } @@ -386,7 +398,16 @@ void MemDetailReporter::report_virtual_memory_map() { void MemDetailReporter::report_virtual_memory_region(const ReservedMemoryRegion* reserved_rgn) { assert(reserved_rgn != nullptr, "null pointer"); - // Don't report if size is too small + // We don't bother about reporting peaks here. + // That is because peaks - in the context of virtual memory, peak of committed areas - make little sense + // when we report *by region*, which are identified by their location in memory. There is a philosophical + // question about identity here: e.g. a committed region that has been split into three regions by + // uncommitting a middle section of it, should that still count as "having peaked" before the split? If + // yes, which of the three new regions would be the spiritual successor? Rather than introducing more + // complexity, we avoid printing peaks altogether. Note that peaks should still be printed when reporting + // usage *by callsite*. + + // Don't report if size is too small. if (amount_in_current_scale(reserved_rgn->size()) == 0) return; outputStream* out = output(); diff --git a/src/hotspot/share/nmt/virtualMemoryTracker.cpp b/src/hotspot/share/nmt/virtualMemoryTracker.cpp index 65bd9afa2d661..5bb9072666064 100644 --- a/src/hotspot/share/nmt/virtualMemoryTracker.cpp +++ b/src/hotspot/share/nmt/virtualMemoryTracker.cpp @@ -34,7 +34,6 @@ size_t VirtualMemorySummary::_snapshot[CALC_OBJ_SIZE_IN_TYPE(VirtualMemorySnapshot, size_t)]; -#ifdef ASSERT void VirtualMemory::update_peak(size_t size) { size_t peak_sz = peak_size(); while (peak_sz < size) { @@ -46,7 +45,6 @@ void VirtualMemory::update_peak(size_t size) { } } } -#endif // ASSERT void VirtualMemorySummary::initialize() { assert(sizeof(_snapshot) >= sizeof(VirtualMemorySnapshot), "Sanity Check"); diff --git a/src/hotspot/share/nmt/virtualMemoryTracker.hpp b/src/hotspot/share/nmt/virtualMemoryTracker.hpp index b6f89c278ce15..06ca960febe1e 100644 --- a/src/hotspot/share/nmt/virtualMemoryTracker.hpp +++ b/src/hotspot/share/nmt/virtualMemoryTracker.hpp @@ -42,21 +42,17 @@ class VirtualMemory { size_t _reserved; size_t _committed; -#ifdef ASSERT volatile size_t _peak_size; void update_peak(size_t size); -#endif // ASSERT public: - VirtualMemory() : _reserved(0), _committed(0) { - DEBUG_ONLY(_peak_size = 0;) - } + VirtualMemory() : _reserved(0), _committed(0), _peak_size(0) {} inline void reserve_memory(size_t sz) { _reserved += sz; } inline void commit_memory (size_t sz) { _committed += sz; - DEBUG_ONLY(update_peak(sz);) assert(_committed <= _reserved, "Sanity check"); + update_peak(_committed); } inline void release_memory (size_t sz) { @@ -72,7 +68,7 @@ class VirtualMemory { inline size_t reserved() const { return _reserved; } inline size_t committed() const { return _committed; } inline size_t peak_size() const { - return DEBUG_ONLY(Atomic::load(&_peak_size)) NOT_DEBUG(0); + return Atomic::load(&_peak_size); } }; @@ -85,10 +81,9 @@ class VirtualMemoryAllocationSite : public AllocationSite { inline void reserve_memory(size_t sz) { _c.reserve_memory(sz); } inline void commit_memory (size_t sz) { _c.commit_memory(sz); } - inline void uncommit_memory(size_t sz) { _c.uncommit_memory(sz); } - inline void release_memory(size_t sz) { _c.release_memory(sz); } inline size_t reserved() const { return _c.reserved(); } inline size_t committed() const { return _c.committed(); } + inline size_t peak_size() const { return _c.peak_size(); } }; class VirtualMemorySummary; diff --git a/test/hotspot/jtreg/runtime/NMT/HugeArenaTracking.java b/test/hotspot/jtreg/runtime/NMT/HugeArenaTracking.java index e5a38114f6cb5..adccbd011700f 100644 --- a/test/hotspot/jtreg/runtime/NMT/HugeArenaTracking.java +++ b/test/hotspot/jtreg/runtime/NMT/HugeArenaTracking.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, 2020, Red Hat, Inc. All rights reserved. + * Copyright (c) 2019, 2023, Red Hat, Inc. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,59 +31,81 @@ * java.management * @build jdk.test.whitebox.WhiteBox * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox - * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:NativeMemoryTracking=detail HugeArenaTracking + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:NativeMemoryTracking=summary HugeArenaTracking */ import java.util.Random; import jdk.test.lib.process.ProcessTools; import jdk.test.lib.process.OutputAnalyzer; -import jdk.test.lib.JDKToolFinder; import jdk.test.lib.Utils; import jdk.test.whitebox.WhiteBox; public class HugeArenaTracking { - private static final long GB = 1024 * 1024 * 1024; + private static final long MB = 1024 * 1024; + private static final long GB = MB * 1024; public static void main(String args[]) throws Exception { - OutputAnalyzer output; final WhiteBox wb = WhiteBox.getWhiteBox(); - // Grab my own PID - String pid = Long.toString(ProcessTools.getProcessId()); - ProcessBuilder pb = new ProcessBuilder(); - long arena1 = wb.NMTNewArena(1024); long arena2 = wb.NMTNewArena(1024); - // Run 'jcmd VM.native_memory summary' - pb.command(new String[] { JDKToolFinder.getJDKTool("jcmd"), pid, "VM.native_memory", "summary"}); - output = new OutputAnalyzer(pb.start()); - output.shouldContain("Test (reserved=2KB, committed=2KB)"); + NMTTestUtils.runJcmdSummaryReportAndCheckOutput( + new String[] { "scale=K" }, + new String[] { "Test (reserved=2KB, committed=2KB)", + "(arena=2KB #2) (at peak)" }); Random rand = Utils.getRandomInstance(); // Allocate 2GB+ from arena long total = 0; while (total < 2 * GB) { - // Cap to 10M - long inc = rand.nextInt(10 * 1024 * 1024); - wb.NMTArenaMalloc(arena1, inc); - total += inc; + wb.NMTArenaMalloc(arena1, MB); + total += MB; } - ProcessBuilder pb2 = new ProcessBuilder(); - // Run 'jcmd VM.native_memory summary' - pb2.command(new String[] { JDKToolFinder.getJDKTool("jcmd"), pid, "VM.native_memory", "summary", "scale=GB"}); - output = new OutputAnalyzer(pb2.start()); - output.shouldContain("Test (reserved=2GB, committed=2GB)"); + // run a report at GB level. We should see our allocations; since they are rounded + // to GB, we expect an exact output match + NMTTestUtils.runJcmdSummaryReportAndCheckOutput( + new String[] { "scale=G" }, + new String[] { "Test (reserved=2GB, committed=2GB)", + "(arena=2GB #2) (at peak)" }); + + // Repeat at MB level; we expect the same behavior + NMTTestUtils.runJcmdSummaryReportAndCheckOutput( + new String[] { "scale=M" }, + new String[] { "Test (reserved=2048MB, committed=2048MB)", + "(arena=2048MB #2) (at peak)" }); wb.NMTFreeArena(arena1); - output = new OutputAnalyzer(pb.start()); - output.shouldContain("Test (reserved=1KB, committed=1KB)"); + // Repeat report at GB level. Reserved should be 0 now. Current usage is 1KB, since arena2 is left, but that + // is below GB scale threshold, so should show up as 0. + NMTTestUtils.runJcmdSummaryReportAndCheckOutput( + new String[] { "scale=G" }, + new String[] { "Test (reserved=0GB, committed=0GB)", + "(arena=0GB #1) (peak=2GB #2)" }); + + // Same, for MB scale + NMTTestUtils.runJcmdSummaryReportAndCheckOutput( + new String[] { "scale=M" }, + new String[] { "Test (reserved=0MB, committed=0MB)", + "(arena=0MB #1) (peak=2048MB #2)" }); + + // At KB level we should see the remaining 1KB. Note that we refrain from testing peak here + // since the number gets fuzzy: it depends on the size of the initially allocated chunk. At MB + // and GB scale, these differences don't matter. + NMTTestUtils.runJcmdSummaryReportAndCheckOutput( + new String[] { "scale=K" }, + new String[] { "Test (reserved=1KB, committed=1KB)", + "(arena=1KB #1) (peak=" }); + wb.NMTFreeArena(arena2); - output = new OutputAnalyzer(pb.start()); - output.shouldNotContain("Test (reserved"); + // Everything free'd, current usage 0, peak should be preserved. + NMTTestUtils.runJcmdSummaryReportAndCheckOutput( + new String[] { "scale=G" }, + new String[] { "Test (reserved=0GB, committed=0GB)", + "(arena=0GB #0) (peak=2GB #2)" }); } } diff --git a/test/hotspot/jtreg/runtime/NMT/MallocRoundingReportTest.java b/test/hotspot/jtreg/runtime/NMT/MallocRoundingReportTest.java index 653f8354e657a..30a03f973bf21 100644 --- a/test/hotspot/jtreg/runtime/NMT/MallocRoundingReportTest.java +++ b/test/hotspot/jtreg/runtime/NMT/MallocRoundingReportTest.java @@ -1,5 +1,6 @@ /* - * Copyright (c) 2014, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, Red Hat, Inc. 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 @@ -33,23 +34,14 @@ * */ -import jdk.test.lib.process.ProcessTools; -import jdk.test.lib.process.OutputAnalyzer; -import jdk.test.lib.JDKToolFinder; - import jdk.test.whitebox.WhiteBox; public class MallocRoundingReportTest { private static long K = 1024; public static void main(String args[]) throws Exception { - OutputAnalyzer output; WhiteBox wb = WhiteBox.getWhiteBox(); - // Grab my own PID - String pid = Long.toString(ProcessTools.getProcessId()); - ProcessBuilder pb = new ProcessBuilder(); - long[] additionalBytes = {0, 1, 512, 650}; long[] kByteSize = {1024, 2048}; long mallocd_total = 0; @@ -63,17 +55,18 @@ public static void main(String args[]) throws Exception { mallocd_total = wb.NMTMalloc(curKB); // Run 'jcmd VM.native_memory summary', check for expected output // NMT does not track memory allocations less than 1KB, and rounds to the nearest KB - String expectedOut = ("Test (reserved=" + numKB + "KB, committed=" + numKB + "KB)"); - - pb.command(new String[] { JDKToolFinder.getJDKTool("jcmd"), pid, "VM.native_memory", "summary" }); - output = new OutputAnalyzer(pb.start()); - output.shouldContain(expectedOut); + NMTTestUtils.runJcmdSummaryReportAndCheckOutput( + "Test (reserved=" + numKB + "KB, committed=" + numKB + "KB)", + "(malloc=" + numKB + "KB #1) (at peak)" + ); wb.NMTFree(mallocd_total); + // Run 'jcmd VM.native_memory summary', check for expected output - pb.command(new String[] { JDKToolFinder.getJDKTool("jcmd"), pid, "VM.native_memory", "summary" }); - output = new OutputAnalyzer(pb.start()); - output.shouldNotContain("Test (reserved="); + NMTTestUtils.runJcmdSummaryReportAndCheckOutput( + "Test (reserved=0KB, committed=0KB)", + "(malloc=0KB) (peak=" + numKB + "KB #1)" + ); } } } diff --git a/test/hotspot/jtreg/runtime/NMT/MallocStressTest.java b/test/hotspot/jtreg/runtime/NMT/MallocStressTest.java index 55531a68b9670..6af14268c7eba 100644 --- a/test/hotspot/jtreg/runtime/NMT/MallocStressTest.java +++ b/test/hotspot/jtreg/runtime/NMT/MallocStressTest.java @@ -1,5 +1,6 @@ /* - * Copyright (c) 2014, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, Red Hat, Inc. 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 @@ -130,7 +131,7 @@ public static void main(String args[]) throws Exception { // All test memory allocated should be released output = new OutputAnalyzer(pb.start()); - output.shouldNotContain("Test (reserved="); + output.shouldContain("Test (reserved=0KB, committed=0KB)"); // Verify that tracking level has not been downgraded pb.command(new String[] { JDKToolFinder.getJDKTool("jcmd"), pid, "VM.native_memory", "statistics"}); diff --git a/test/hotspot/jtreg/runtime/NMT/MallocTestType.java b/test/hotspot/jtreg/runtime/NMT/MallocTestType.java index e091ab0f7a7a7..67df864e7b41c 100644 --- a/test/hotspot/jtreg/runtime/NMT/MallocTestType.java +++ b/test/hotspot/jtreg/runtime/NMT/MallocTestType.java @@ -1,5 +1,6 @@ /* - * Copyright (c) 2013, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, Red Hat, Inc. 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,37 +33,34 @@ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:NativeMemoryTracking=detail MallocTestType */ -import jdk.test.lib.process.ProcessTools; -import jdk.test.lib.process.OutputAnalyzer; -import jdk.test.lib.JDKToolFinder; import jdk.test.whitebox.WhiteBox; public class MallocTestType { public static void main(String args[]) throws Exception { - OutputAnalyzer output; WhiteBox wb = WhiteBox.getWhiteBox(); - // Grab my own PID - String pid = Long.toString(ProcessTools.getProcessId()); - ProcessBuilder pb = new ProcessBuilder(); - // Use WB API to alloc and free with the mtTest type - long memAlloc3 = wb.NMTMalloc(128 * 1024); - long memAlloc2 = wb.NMTMalloc(256 * 1024); - wb.NMTFree(memAlloc3); - long memAlloc1 = wb.NMTMalloc(512 * 1024); - wb.NMTFree(memAlloc2); + long memAlloc3 = wb.NMTMalloc(128 * 1024); // current +128K #1 peak +128K #1 + long memAlloc2 = wb.NMTMalloc(256 * 1024); // current +384K #2 peak +384K #2 + + NMTTestUtils.runJcmdSummaryReportAndCheckOutput( + new String[]{"Test (reserved=384KB, committed=384KB)", + "(malloc=384KB #2) (at peak)"}); + + wb.NMTFree(memAlloc3); // current +256K #1 peak +384K #2 + long memAlloc1 = wb.NMTMalloc(512 * 1024); // current +768K #2 peak +768K #2 + wb.NMTFree(memAlloc2); // current +512K #1 peak +768K #2 - // Run 'jcmd VM.native_memory summary' - pb.command(new String[] { JDKToolFinder.getJDKTool("jcmd"), pid, "VM.native_memory", "summary"}); - output = new OutputAnalyzer(pb.start()); - output.shouldContain("Test (reserved=512KB, committed=512KB)"); + NMTTestUtils.runJcmdSummaryReportAndCheckOutput( + new String[]{"Test (reserved=512KB, committed=512KB)", + "(malloc=512KB #1) (peak=768KB #2)"}); // Free the memory allocated by NMTAllocTest - wb.NMTFree(memAlloc1); + wb.NMTFree(memAlloc1); // current 0K #0 peak +768K #2 - output = new OutputAnalyzer(pb.start()); - output.shouldNotContain("Test (reserved="); + NMTTestUtils.runJcmdSummaryReportAndCheckOutput( + new String[]{"Test (reserved=0KB, committed=0KB)", + "(malloc=0KB) (peak=768KB #2)"}); } } diff --git a/test/hotspot/jtreg/runtime/NMT/MallocTrackingVerify.java b/test/hotspot/jtreg/runtime/NMT/MallocTrackingVerify.java index f89f15a764e19..0c08e07fd2588 100644 --- a/test/hotspot/jtreg/runtime/NMT/MallocTrackingVerify.java +++ b/test/hotspot/jtreg/runtime/NMT/MallocTrackingVerify.java @@ -1,5 +1,6 @@ /* - * Copyright (c) 2014, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, Red Hat, Inc. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,7 +32,7 @@ * java.management * @build jdk.test.whitebox.WhiteBox * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox - * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:NativeMemoryTracking=detail MallocTrackingVerify + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:NativeMemoryTracking=summary MallocTrackingVerify * */ @@ -53,11 +54,6 @@ public class MallocTrackingVerify { public static WhiteBox wb = WhiteBox.getWhiteBox(); public static void main(String args[]) throws Exception { - OutputAnalyzer output; - - // Grab my own PID - String pid = Long.toString(ProcessTools.getProcessId()); - ProcessBuilder pb = new ProcessBuilder(); Random random = Utils.getRandomInstance(); // Allocate small amounts of memory with random pseudo call stack @@ -74,9 +70,10 @@ public static void main(String args[]) throws Exception { } } - pb.command(new String[] { JDKToolFinder.getJDKTool("jcmd"), pid, "VM.native_memory", "summary" }); - output = new OutputAnalyzer(pb.start()); - output.shouldContain("Test (reserved=4KB, committed=4KB)"); + NMTTestUtils.runJcmdSummaryReportAndCheckOutput( + "Test (reserved=4KB, committed=4KB)", + "(malloc=4KB #" + mallocd_memory.size() + ") (at peak)" + ); // Free for (MallocMemory mem : mallocd_memory) { @@ -84,10 +81,11 @@ public static void main(String args[]) throws Exception { } // Run 'jcmd VM.native_memory summary', check for expected output - pb.command(new String[] { JDKToolFinder.getJDKTool("jcmd"), pid, - "VM.native_memory", "summary" }); - output = new OutputAnalyzer(pb.start()); - output.shouldNotContain("Test (reserved="); + NMTTestUtils.runJcmdSummaryReportAndCheckOutput( + "Test (reserved=0KB, committed=0KB)", + "(malloc=0KB) (peak=4KB #" + + mallocd_memory.size() + ")" + ); + } static class MallocMemory { diff --git a/test/hotspot/jtreg/runtime/NMT/NMTTestUtils.java b/test/hotspot/jtreg/runtime/NMT/NMTTestUtils.java new file mode 100644 index 0000000000000..6cb0d727328d2 --- /dev/null +++ b/test/hotspot/jtreg/runtime/NMT/NMTTestUtils.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023 Red Hat, Inc. 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. + */ + +import jdk.test.lib.JDKToolFinder; +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; + +public class NMTTestUtils { + + public static OutputAnalyzer startJcmdVMNativeMemory(String... additional_args) throws Exception { + if (additional_args == null) { + additional_args = new String[] {}; + } + String fullargs[] = new String[3 + additional_args.length]; + fullargs[0] = JDKToolFinder.getJDKTool("jcmd"); + fullargs[1] = Long.toString(ProcessTools.getProcessId()); + fullargs[2] = "VM.native_memory"; + System.arraycopy(additional_args, 0, fullargs, 3, additional_args.length); + ProcessBuilder pb = new ProcessBuilder(); + pb.command(fullargs); + OutputAnalyzer output = new OutputAnalyzer(pb.start()); + return output; + } + + public static OutputAnalyzer startJcmdVMNativeMemoryDetail(String... additional_args) throws Exception { + return startJcmdVMNativeMemory("detail"); + } + + public static void runJcmdSummaryReportAndCheckOutput(String[] additional_args, String[] pattern, boolean verbose) throws Exception { + OutputAnalyzer output = startJcmdVMNativeMemory(additional_args); + output.stdoutShouldContainMultiLinePattern(pattern, true); + } + + public static void runJcmdSummaryReportAndCheckOutput(String[] additional_args, String[] pattern) throws Exception { + runJcmdSummaryReportAndCheckOutput(additional_args, pattern, true); + } + + public static void runJcmdSummaryReportAndCheckOutput(String... pattern) throws Exception { + runJcmdSummaryReportAndCheckOutput(null, pattern, true); + } + + public static void checkReservedCommittedSummary(OutputAnalyzer output, long reservedKB, long committedKB, long peakKB) { + String peakString = (committedKB == peakKB) ? "at peak" : "peak=" + peakKB + "KB"; + output.stdoutShouldContainMultiLinePattern( + "Test (reserved=" + reservedKB + "KB, committed=" + committedKB + "KB)", + "(mmap: reserved=" + reservedKB + "KB, committed=" + committedKB + "KB, " + peakString + ")" + ); + } +} diff --git a/test/hotspot/jtreg/runtime/NMT/ThreadedMallocTestType.java b/test/hotspot/jtreg/runtime/NMT/ThreadedMallocTestType.java index 2b1faf9fb4314..290984c41854f 100644 --- a/test/hotspot/jtreg/runtime/NMT/ThreadedMallocTestType.java +++ b/test/hotspot/jtreg/runtime/NMT/ThreadedMallocTestType.java @@ -1,5 +1,6 @@ /* - * Copyright (c) 2013, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, Red Hat, Inc. 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 @@ -28,12 +29,9 @@ * java.management * @build jdk.test.whitebox.WhiteBox * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox - * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:NativeMemoryTracking=detail ThreadedMallocTestType + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:NativeMemoryTracking=summary ThreadedMallocTestType */ -import jdk.test.lib.process.ProcessTools; -import jdk.test.lib.process.OutputAnalyzer; -import jdk.test.lib.JDKToolFinder; import jdk.test.whitebox.WhiteBox; public class ThreadedMallocTestType { @@ -42,13 +40,8 @@ public class ThreadedMallocTestType { public static long memAlloc3; public static void main(String args[]) throws Exception { - OutputAnalyzer output; final WhiteBox wb = WhiteBox.getWhiteBox(); - // Grab my own PID - String pid = Long.toString(ProcessTools.getProcessId()); - ProcessBuilder pb = new ProcessBuilder(); - Thread allocThread = new Thread() { public void run() { // Alloc memory using the WB api @@ -66,9 +59,10 @@ public void run() { System.out.println("memAlloc3:"+memAlloc3); // Run 'jcmd VM.native_memory summary' - pb.command(new String[] { JDKToolFinder.getJDKTool("jcmd"), pid, "VM.native_memory", "summary"}); - output = new OutputAnalyzer(pb.start()); - output.shouldContain("Test (reserved=896KB, committed=896KB)"); + NMTTestUtils.runJcmdSummaryReportAndCheckOutput( + "Test (reserved=896KB, committed=896KB)", + "(malloc=896KB #3) (at peak)" + ); Thread freeThread = new Thread() { public void run() { @@ -82,7 +76,9 @@ public void run() { freeThread.start(); freeThread.join(); - output = new OutputAnalyzer(pb.start()); - output.shouldNotContain("Test (reserved="); + NMTTestUtils.runJcmdSummaryReportAndCheckOutput( + "Test (reserved=0KB, committed=0KB)", + "(malloc=0KB) (peak=896KB #3)" + ); } } diff --git a/test/hotspot/jtreg/runtime/NMT/ThreadedVirtualAllocTestType.java b/test/hotspot/jtreg/runtime/NMT/ThreadedVirtualAllocTestType.java index 4bc6ffc90ccef..60a493ea728d6 100644 --- a/test/hotspot/jtreg/runtime/NMT/ThreadedVirtualAllocTestType.java +++ b/test/hotspot/jtreg/runtime/NMT/ThreadedVirtualAllocTestType.java @@ -1,5 +1,6 @@ /* - * Copyright (c) 2013, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, Red Hat, Inc. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,9 +32,7 @@ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:NativeMemoryTracking=detail ThreadedVirtualAllocTestType */ -import jdk.test.lib.process.ProcessTools; import jdk.test.lib.process.OutputAnalyzer; -import jdk.test.lib.JDKToolFinder; import jdk.test.whitebox.WhiteBox; public class ThreadedVirtualAllocTestType { @@ -45,8 +44,6 @@ public class ThreadedVirtualAllocTestType { public static void main(String args[]) throws Exception { OutputAnalyzer output; - String pid = Long.toString(ProcessTools.getProcessId()); - ProcessBuilder pb = new ProcessBuilder(); Thread reserveThread = new Thread() { public void run() { @@ -56,9 +53,8 @@ public void run() { reserveThread.start(); reserveThread.join(); - pb.command(new String[] { JDKToolFinder.getJDKTool("jcmd"), pid, "VM.native_memory", "detail"}); - output = new OutputAnalyzer(pb.start()); - output.shouldContain("Test (reserved=512KB, committed=0KB)"); + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output,512, 0); output.shouldMatch("\\[0x[0]*" + Long.toHexString(addr) + " - 0x[0]*" + Long.toHexString(addr + reserveSize) + "\\] reserved 512KB for Test"); Thread commitThread = new Thread() { @@ -69,8 +65,8 @@ public void run() { commitThread.start(); commitThread.join(); - output = new OutputAnalyzer(pb.start()); - output.shouldContain("Test (reserved=512KB, committed=128KB)"); + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output,512, 128); output.shouldMatch("\\[0x[0]*" + Long.toHexString(addr) + " - 0x[0]*" + Long.toHexString(addr + commitSize) + "\\] committed 128KB"); Thread uncommitThread = new Thread() { @@ -81,7 +77,8 @@ public void run() { uncommitThread.start(); uncommitThread.join(); - output = new OutputAnalyzer(pb.start()); + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output,512, 0); output.shouldContain("Test (reserved=512KB, committed=0KB)"); output.shouldNotMatch("\\[0x[0]*" + Long.toHexString(addr) + " - 0x[0]*" + Long.toHexString(addr + commitSize) + "\\] committed"); @@ -93,9 +90,18 @@ public void run() { releaseThread.start(); releaseThread.join(); - output = new OutputAnalyzer(pb.start()); - output.shouldNotContain("Test (reserved="); + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output,0, 0); output.shouldNotContain("\\[0x[0]*" + Long.toHexString(addr) + " - 0x[0]*" + Long.toHexString(addr + reserveSize) + "\\] reserved"); } + static long peakKB = 0; + + public static void checkReservedCommittedSummary(OutputAnalyzer output, long reservedKB, long committedKB) { + if (committedKB > peakKB) { + peakKB = committedKB; + } + NMTTestUtils.checkReservedCommittedSummary(output, reservedKB, committedKB, peakKB); + } + } diff --git a/test/hotspot/jtreg/runtime/NMT/VirtualAllocCommitMerge.java b/test/hotspot/jtreg/runtime/NMT/VirtualAllocCommitMerge.java index 9cc8c39d897b1..4d691eb920ab9 100644 --- a/test/hotspot/jtreg/runtime/NMT/VirtualAllocCommitMerge.java +++ b/test/hotspot/jtreg/runtime/NMT/VirtualAllocCommitMerge.java @@ -36,9 +36,7 @@ * */ -import jdk.test.lib.process.ProcessTools; import jdk.test.lib.process.OutputAnalyzer; -import jdk.test.lib.JDKToolFinder; import jdk.test.lib.Platform; import jdk.test.whitebox.WhiteBox; @@ -53,16 +51,10 @@ public static void main(String args[]) throws Exception { long reserveSize = 4 * 1024 * 1024; // 4096KB long addr; - String pid = Long.toString(ProcessTools.getProcessId()); - ProcessBuilder pb = new ProcessBuilder(); - // reserve addr = wb.NMTReserveMemory(reserveSize); - pb.command(new String[] { JDKToolFinder.getJDKTool("jcmd"), pid, - "VM.native_memory", "detail" }); - - output = new OutputAnalyzer(pb.start()); - checkReservedCommittedSummary(output, "4096KB", "0KB"); + output = NMTTestUtils.startJcmdVMNativeMemory("detail"); + checkReservedCommittedSummary(output, 4096, 0); checkReserved(output, addr, reserveSize, "4096KB"); long addrA = addr + (0 * commitSize); @@ -75,8 +67,8 @@ public static void main(String args[]) throws Exception { // commit overlapping ABC, A, B, C wb.NMTCommitMemory(addrA, 3 * commitSize); - output = new OutputAnalyzer(pb.start()); - checkReservedCommittedSummary(output, "4096KB", "384KB"); + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output, 4096, 384); checkReserved(output, addr, reserveSize, "4096KB"); checkCommitted(output, addrA, 3 * commitSize, "384KB"); @@ -84,8 +76,8 @@ public static void main(String args[]) throws Exception { wb.NMTCommitMemory(addrA, commitSize); - output = new OutputAnalyzer(pb.start()); - checkReservedCommittedSummary(output, "4096KB", "384KB"); + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output, 4096, 384); checkReserved(output, addr, reserveSize, "4096KB"); checkCommitted(output, addrA, 3 * commitSize, "384KB"); @@ -93,16 +85,16 @@ public static void main(String args[]) throws Exception { wb.NMTCommitMemory(addrB, commitSize); - output = new OutputAnalyzer(pb.start()); - checkReservedCommittedSummary(output, "4096KB", "384KB"); + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output, 4096, 384); checkReserved(output, addr, reserveSize, "4096KB"); checkCommitted(output, addrA, 3 * commitSize, "384KB"); wb.NMTCommitMemory(addrC, commitSize); - output = new OutputAnalyzer(pb.start()); - checkReservedCommittedSummary(output, "4096KB", "384KB"); + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output, 4096, 384); checkReserved(output, addr, reserveSize, "4096KB"); checkCommitted(output, addrA, 3 * commitSize, "384KB"); @@ -110,8 +102,8 @@ public static void main(String args[]) throws Exception { // uncommit wb.NMTUncommitMemory(addrA, 3 * commitSize); - output = new OutputAnalyzer(pb.start()); - checkReservedCommittedSummary(output, "4096KB", "0KB"); + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output, 4096, 0); } // Test discontigous areas @@ -121,8 +113,8 @@ public static void main(String args[]) throws Exception { wb.NMTCommitMemory(addrC, commitSize); wb.NMTCommitMemory(addrE, commitSize); - output = new OutputAnalyzer(pb.start()); - checkReservedCommittedSummary(output, "4096KB", "384KB"); + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output, 4096, 384); checkReserved(output, addr, reserveSize, "4096KB"); checkCommitted(output, addrA, commitSize, "128KB"); @@ -134,8 +126,8 @@ public static void main(String args[]) throws Exception { wb.NMTUncommitMemory(addrC, commitSize); wb.NMTUncommitMemory(addrE, commitSize); - output = new OutputAnalyzer(pb.start()); - checkReservedCommittedSummary(output, "4096KB", "0KB"); + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output, 4096, 0); } // Test contiguous areas @@ -144,8 +136,8 @@ public static void main(String args[]) throws Exception { wb.NMTCommitMemory(addrA, commitSize); wb.NMTCommitMemory(addrB, commitSize); - output = new OutputAnalyzer(pb.start()); - checkReservedCommittedSummary(output, "4096KB", "256KB"); + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output, 4096, 256); checkReserved(output, addr, reserveSize, "4096KB"); checkCommitted(output, addrA, 2 * commitSize, "256KB"); @@ -154,8 +146,8 @@ public static void main(String args[]) throws Exception { wb.NMTUncommitMemory(addrA, commitSize); wb.NMTUncommitMemory(addrB, commitSize); - output = new OutputAnalyzer(pb.start()); - checkReservedCommittedSummary(output, "4096KB", "0KB"); + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output, 4096, 0); } { @@ -163,8 +155,8 @@ public static void main(String args[]) throws Exception { wb.NMTCommitMemory(addrB, commitSize); wb.NMTCommitMemory(addrA, commitSize); - output = new OutputAnalyzer(pb.start()); - checkReservedCommittedSummary(output, "4096KB", "256KB"); + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output, 4096, 256); checkReserved(output, addr, reserveSize, "4096KB"); checkCommitted(output, addrA, 2 * commitSize, "256KB"); @@ -173,8 +165,8 @@ public static void main(String args[]) throws Exception { wb.NMTUncommitMemory(addrB, commitSize); wb.NMTUncommitMemory(addrA, commitSize); - output = new OutputAnalyzer(pb.start()); - checkReservedCommittedSummary(output, "4096KB", "0KB"); + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output, 4096, 0); } { @@ -183,8 +175,8 @@ public static void main(String args[]) throws Exception { wb.NMTCommitMemory(addrB, commitSize); wb.NMTCommitMemory(addrC, commitSize); - output = new OutputAnalyzer(pb.start()); - checkReservedCommittedSummary(output, "4096KB", "384KB"); + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output, 4096, 384); checkReserved(output, addr, reserveSize, "4096KB"); checkCommitted(output, addrA, 3 * commitSize, "384KB"); @@ -194,8 +186,8 @@ public static void main(String args[]) throws Exception { wb.NMTUncommitMemory(addrB, commitSize); wb.NMTUncommitMemory(addrC, commitSize); - output = new OutputAnalyzer(pb.start()); - checkReservedCommittedSummary(output, "4096KB", "0KB"); + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output, 4096, 0); } { @@ -204,8 +196,8 @@ public static void main(String args[]) throws Exception { wb.NMTCommitMemory(addrC, commitSize); wb.NMTCommitMemory(addrB, commitSize); - output = new OutputAnalyzer(pb.start()); - checkReservedCommittedSummary(output, "4096KB", "384KB"); + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output, 4096, 384); checkReserved(output, addr, reserveSize, "4096KB"); checkCommitted(output, addrA, 3 * commitSize, "384KB"); @@ -215,8 +207,8 @@ public static void main(String args[]) throws Exception { wb.NMTUncommitMemory(addrC, commitSize); wb.NMTUncommitMemory(addrB, commitSize); - output = new OutputAnalyzer(pb.start()); - checkReservedCommittedSummary(output, "4096KB", "0KB"); + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output, 4096, 0); } { @@ -225,8 +217,8 @@ public static void main(String args[]) throws Exception { wb.NMTCommitMemory(addrA, commitSize); wb.NMTCommitMemory(addrC, commitSize); - output = new OutputAnalyzer(pb.start()); - checkReservedCommittedSummary(output, "4096KB", "384KB"); + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output, 4096, 384); checkReserved(output, addr, reserveSize, "4096KB"); checkCommitted(output, addrA, 3 * commitSize, "384KB"); @@ -236,8 +228,8 @@ public static void main(String args[]) throws Exception { wb.NMTUncommitMemory(addrA, commitSize); wb.NMTUncommitMemory(addrC, commitSize); - output = new OutputAnalyzer(pb.start()); - checkReservedCommittedSummary(output, "4096KB", "0KB"); + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output, 4096, 0); } { @@ -246,8 +238,8 @@ public static void main(String args[]) throws Exception { wb.NMTCommitMemory(addrC, commitSize); wb.NMTCommitMemory(addrA, commitSize); - output = new OutputAnalyzer(pb.start()); - checkReservedCommittedSummary(output, "4096KB", "384KB"); + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output, 4096, 384); checkReserved(output, addr, reserveSize, "4096KB"); checkCommitted(output, addrA, 3 * commitSize, "384KB"); @@ -257,8 +249,8 @@ public static void main(String args[]) throws Exception { wb.NMTUncommitMemory(addrC, commitSize); wb.NMTUncommitMemory(addrA, commitSize); - output = new OutputAnalyzer(pb.start()); - checkReservedCommittedSummary(output, "4096KB", "0KB"); + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output, 4096, 0); } { @@ -267,8 +259,8 @@ public static void main(String args[]) throws Exception { wb.NMTCommitMemory(addrA, commitSize); wb.NMTCommitMemory(addrB, commitSize); - output = new OutputAnalyzer(pb.start()); - checkReservedCommittedSummary(output, "4096KB", "384KB"); + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output, 4096, 384); checkReserved(output, addr, reserveSize, "4096KB"); checkCommitted(output, addrA, 3 * commitSize, "384KB"); @@ -278,8 +270,8 @@ public static void main(String args[]) throws Exception { wb.NMTUncommitMemory(addrA, commitSize); wb.NMTUncommitMemory(addrB, commitSize); - output = new OutputAnalyzer(pb.start()); - checkReservedCommittedSummary(output, "4096KB", "0KB"); + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output, 4096, 0); } { @@ -288,8 +280,8 @@ public static void main(String args[]) throws Exception { wb.NMTCommitMemory(addrB, commitSize); wb.NMTCommitMemory(addrA, commitSize); - output = new OutputAnalyzer(pb.start()); - checkReservedCommittedSummary(output, "4096KB", "384KB"); + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output, 4096, 384); checkReserved(output, addr, reserveSize, "4096KB"); checkCommitted(output, addrA, 3 * commitSize, "384KB"); @@ -299,20 +291,26 @@ public static void main(String args[]) throws Exception { wb.NMTUncommitMemory(addrB, commitSize); wb.NMTUncommitMemory(addrA, commitSize); - output = new OutputAnalyzer(pb.start()); - checkReservedCommittedSummary(output, "4096KB", "0KB"); + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output, 4096, 0); } // release wb.NMTReleaseMemory(addr, reserveSize); - output = new OutputAnalyzer(pb.start()); - output.shouldNotContain("Test (reserved="); + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output, 0, 0); output.shouldNotMatch("\\[0x[0]*" + Long.toHexString(addr) + " - 0x[0]*" + Long.toHexString(addr + reserveSize) + "\\] reserved 4096KB for Test"); } - public static void checkReservedCommittedSummary(OutputAnalyzer output, String reservedString, String committedString) { - output.shouldContain("Test (reserved=" + reservedString + ", committed=" + committedString + ")"); + // running peak counter + static long peakKB = 0; + + public static void checkReservedCommittedSummary(OutputAnalyzer output, long reservedKB, long committedKB) { + if (committedKB > peakKB) { + peakKB = committedKB; + } + NMTTestUtils.checkReservedCommittedSummary(output, reservedKB, committedKB, peakKB); } public static void checkReserved(OutputAnalyzer output, long addr, long size, String sizeString) { diff --git a/test/hotspot/jtreg/runtime/NMT/VirtualAllocCommitUncommitRecommit.java b/test/hotspot/jtreg/runtime/NMT/VirtualAllocCommitUncommitRecommit.java index bfa4de6e0c215..ef6ee6f883863 100644 --- a/test/hotspot/jtreg/runtime/NMT/VirtualAllocCommitUncommitRecommit.java +++ b/test/hotspot/jtreg/runtime/NMT/VirtualAllocCommitUncommitRecommit.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2023, 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 @@ -33,10 +33,7 @@ * */ -import jdk.test.lib.process.ProcessTools; import jdk.test.lib.process.OutputAnalyzer; -import jdk.test.lib.JDKToolFinder; - import jdk.test.whitebox.WhiteBox; public class VirtualAllocCommitUncommitRecommit { @@ -49,16 +46,10 @@ public static void main(String args[]) throws Exception { long reserveSize = 4 * 1024 * 1024; // 4096KB long addr; - String pid = Long.toString(ProcessTools.getProcessId()); - ProcessBuilder pb = new ProcessBuilder(); - // reserve addr = wb.NMTReserveMemory(reserveSize); - pb.command(new String[] { JDKToolFinder.getJDKTool("jcmd"), pid, - "VM.native_memory", "detail" }); - - output = new OutputAnalyzer(pb.start()); - output.shouldContain("Test (reserved=4096KB, committed=0KB)"); + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output, 4096, 0); output.shouldMatch("\\[0x[0]*" + Long.toHexString(addr) + " - 0x[0]*" + Long.toHexString(addr + reserveSize) + "\\] reserved 4096KB for Test"); @@ -76,8 +67,8 @@ public static void main(String args[]) throws Exception { wb.NMTCommitMemory(addrC, commitSize); wb.NMTCommitMemory(addrD, commitSize); - output = new OutputAnalyzer(pb.start()); - output.shouldContain("Test (reserved=4096KB, committed=512KB)"); + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output, 4096, 512); output.shouldMatch("\\[0x[0]*" + Long.toHexString(addr) + " - 0x[0]*" + Long.toHexString(addr + reserveSize) @@ -86,9 +77,8 @@ public static void main(String args[]) throws Exception { wb.NMTUncommitMemory(addrB, commitSize); wb.NMTUncommitMemory(addrC, commitSize); - output = new OutputAnalyzer(pb.start()); - output.shouldContain("Test (reserved=4096KB, committed=256KB)"); - + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output, 4096, 256); output.shouldMatch("\\[0x[0]*" + Long.toHexString(addr) + " - 0x[0]*" + Long.toHexString(addr + reserveSize) + "\\] reserved 4096KB for Test"); @@ -97,8 +87,8 @@ public static void main(String args[]) throws Exception { wb.NMTCommitMemory(addrE, commitSize); wb.NMTCommitMemory(addrF, commitSize); - output = new OutputAnalyzer(pb.start()); - output.shouldContain("Test (reserved=4096KB, committed=512KB)"); + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output, 4096, 512); output.shouldMatch("\\[0x[0]*" + Long.toHexString(addr) + " - 0x[0]*" + Long.toHexString(addr + reserveSize) + "\\] reserved 4096KB for Test"); @@ -106,8 +96,8 @@ public static void main(String args[]) throws Exception { // uncommit A wb.NMTUncommitMemory(addrA, commitSize); - output = new OutputAnalyzer(pb.start()); - output.shouldContain("Test (reserved=4096KB, committed=384KB)"); + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output, 4096, 384); output.shouldMatch("\\[0x[0]*" + Long.toHexString(addr) + " - 0x[0]*" + Long.toHexString(addr + reserveSize) + "\\] reserved 4096KB for Test"); @@ -117,8 +107,8 @@ public static void main(String args[]) throws Exception { wb.NMTCommitMemory(addrB, commitSize); wb.NMTCommitMemory(addrC, commitSize); - output = new OutputAnalyzer(pb.start()); - output.shouldContain("Test (reserved=4096KB, committed=768KB)"); + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output, 4096, 768); output.shouldMatch("\\[0x[0]*" + Long.toHexString(addr) + " - 0x[0]*" + Long.toHexString(addr + reserveSize) + "\\] reserved 4096KB for Test"); @@ -131,17 +121,27 @@ public static void main(String args[]) throws Exception { wb.NMTUncommitMemory(addrE, commitSize); wb.NMTUncommitMemory(addrF, commitSize); - output = new OutputAnalyzer(pb.start()); - output.shouldContain("Test (reserved=4096KB, committed=0KB)"); + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output, 4096, 0); output.shouldMatch("\\[0x[0]*" + Long.toHexString(addr) + " - 0x[0]*" + Long.toHexString(addr + reserveSize) + "\\] reserved 4096KB for Test"); // release wb.NMTReleaseMemory(addr, reserveSize); - output = new OutputAnalyzer(pb.start()); - output.shouldNotContain("Test (reserved="); + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output, 0, 0); output.shouldNotMatch("\\[0x[0]*" + Long.toHexString(addr) + " - 0x[0]*" + Long.toHexString(addr + reserveSize) + "\\] reserved 4096KB for Test"); } + + // running peak counter + static long peakKB = 0; + + public static void checkReservedCommittedSummary(OutputAnalyzer output, long reservedKB, long committedKB) { + if (committedKB > peakKB) { + peakKB = committedKB; + } + NMTTestUtils.checkReservedCommittedSummary(output, reservedKB, committedKB, peakKB); + } } diff --git a/test/hotspot/jtreg/runtime/NMT/VirtualAllocTestType.java b/test/hotspot/jtreg/runtime/NMT/VirtualAllocTestType.java index 081ba6aafb664..f4321e80b220f 100644 --- a/test/hotspot/jtreg/runtime/NMT/VirtualAllocTestType.java +++ b/test/hotspot/jtreg/runtime/NMT/VirtualAllocTestType.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2023, 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,9 +32,7 @@ * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:NativeMemoryTracking=detail VirtualAllocTestType */ -import jdk.test.lib.process.ProcessTools; import jdk.test.lib.process.OutputAnalyzer; -import jdk.test.lib.JDKToolFinder; import jdk.test.whitebox.WhiteBox; public class VirtualAllocTestType { @@ -44,36 +42,120 @@ public static void main(String args[]) throws Exception { OutputAnalyzer output; long commitSize = 128 * 1024; long reserveSize = 256 * 1024; - long addr; + long addr1, addr2; - String pid = Long.toString(ProcessTools.getProcessId()); - ProcessBuilder pb = new ProcessBuilder(); + String info = "start"; - addr = wb.NMTReserveMemory(reserveSize); - pb.command(new String[] { JDKToolFinder.getJDKTool("jcmd"), pid, "VM.native_memory", "detail"}); + try { + // ------ + // Reserve first mapping + addr1 = wb.NMTReserveMemory(reserveSize); + info = "reserve 1: addr1=" + addr1; - output = new OutputAnalyzer(pb.start()); - output.shouldContain("Test (reserved=256KB, committed=0KB)"); - output.shouldMatch("\\[0x[0]*" + Long.toHexString(addr) + " - 0x[0]*" + Long.toHexString(addr + reserveSize) + "\\] reserved 256KB for Test"); + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output, 256, 0); + output.shouldMatch("\\[0x[0]*" + Long.toHexString(addr1) + " - 0x[0]*" + Long.toHexString(addr1 + reserveSize) + "\\] reserved 256KB for Test"); - wb.NMTCommitMemory(addr, commitSize); + // ------ + // Reserve second mapping + addr2 = wb.NMTReserveMemory(reserveSize); + info = "reserve 2: addr2=" + addr2; + // If the second mapping happens to be adjacent to the first mapping, reserve another mapping and release the second mapping; for + // this test, we want to see two disjunct mappings. + if (addr2 == addr1 + reserveSize) { + long tmp = wb.NMTReserveMemory(reserveSize); + wb.NMTReleaseMemory(addr2, reserveSize); + addr2 = tmp; + } - output = new OutputAnalyzer(pb.start()); - output.shouldContain("Test (reserved=256KB, committed=128KB)"); - output.shouldMatch("\\[0x[0]*" + Long.toHexString(addr) + " - 0x[0]*" + Long.toHexString(addr + commitSize) + "\\] committed 128KB"); + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output, 512, 0); + output.shouldMatch("\\[0x[0]*" + Long.toHexString(addr1) + " - 0x[0]*" + Long.toHexString(addr1 + reserveSize) + "\\] reserved 256KB for Test"); + output.shouldMatch("\\[0x[0]*" + Long.toHexString(addr2) + " - 0x[0]*" + Long.toHexString(addr2 + reserveSize) + "\\] reserved 256KB for Test"); - wb.NMTUncommitMemory(addr, commitSize); + // ------ + // Now commit the first mapping + wb.NMTCommitMemory(addr1, commitSize); + info = "commit 1"; + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output, 512, 128); + output.shouldMatch("\\[0x[0]*" + Long.toHexString(addr1) + " - 0x[0]*" + Long.toHexString(addr1 + reserveSize) + "\\] reserved 256KB for Test"); + output.shouldMatch("\\[0x[0]*" + Long.toHexString(addr1) + " - 0x[0]*" + Long.toHexString(addr1 + commitSize) + "\\] committed 128KB"); + output.shouldMatch("\\[0x[0]*" + Long.toHexString(addr2) + " - 0x[0]*" + Long.toHexString(addr2 + reserveSize) + "\\] reserved 256KB for Test"); - output = new OutputAnalyzer(pb.start()); - output.shouldContain("Test (reserved=256KB, committed=0KB)"); - output.shouldNotMatch("\\[0x[0]*" + Long.toHexString(addr) + " - 0x[0]*" + Long.toHexString(addr + commitSize) + "\\] committed"); + // ------ + // Now commit the second mapping + wb.NMTCommitMemory(addr2, commitSize); + info = "commit 2"; - wb.NMTReleaseMemory(addr, reserveSize); + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output, 512, 256); + output.shouldMatch("\\[0x[0]*" + Long.toHexString(addr1) + " - 0x[0]*" + Long.toHexString(addr1 + reserveSize) + "\\] reserved 256KB for Test"); + output.shouldMatch("\\[0x[0]*" + Long.toHexString(addr1) + " - 0x[0]*" + Long.toHexString(addr1 + commitSize) + "\\] committed 128KB"); + output.shouldMatch("\\[0x[0]*" + Long.toHexString(addr2) + " - 0x[0]*" + Long.toHexString(addr2 + reserveSize) + "\\] reserved 256KB for Test"); + output.shouldMatch("\\[0x[0]*" + Long.toHexString(addr2) + " - 0x[0]*" + Long.toHexString(addr2 + commitSize) + "\\] committed 128KB"); - output = new OutputAnalyzer(pb.start()); - output.shouldNotContain("Test (reserved="); - output.shouldNotMatch("\\[0x[0]*" + Long.toHexString(addr) + " - 0x[0]*" + Long.toHexString(addr + reserveSize) + "\\] reserved"); + // ------ + // Now uncommit the second mapping + wb.NMTUncommitMemory(addr2, commitSize); + info = "uncommit 2"; + + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output, 512, 128); + output.shouldMatch("\\[0x[0]*" + Long.toHexString(addr1) + " - 0x[0]*" + Long.toHexString(addr1 + reserveSize) + "\\] reserved 256KB for Test"); + output.shouldMatch("\\[0x[0]*" + Long.toHexString(addr1) + " - 0x[0]*" + Long.toHexString(addr1 + commitSize) + "\\] committed 128KB"); + output.shouldMatch("\\[0x[0]*" + Long.toHexString(addr2) + " - 0x[0]*" + Long.toHexString(addr2 + reserveSize) + "\\] reserved 256KB for Test"); + output.shouldNotMatch("\\[0x[0]*" + Long.toHexString(addr2) + " - 0x[0]*" + Long.toHexString(addr2 + commitSize) + "\\] committed 128KB"); + + // ------ + // Now uncommit the first mapping + wb.NMTUncommitMemory(addr1, commitSize); + info = "uncommit 1"; + + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output, 512, 0); + output.shouldMatch("\\[0x[0]*" + Long.toHexString(addr1) + " - 0x[0]*" + Long.toHexString(addr1 + reserveSize) + "\\] reserved 256KB for Test"); + output.shouldNotMatch("\\[0x[0]*" + Long.toHexString(addr1) + " - 0x[0]*" + Long.toHexString(addr1 + commitSize) + "\\] committed 128KB"); + output.shouldMatch("\\[0x[0]*" + Long.toHexString(addr2) + " - 0x[0]*" + Long.toHexString(addr2 + reserveSize) + "\\] reserved 256KB for Test"); + output.shouldNotMatch("\\[0x[0]*" + Long.toHexString(addr2) + " - 0x[0]*" + Long.toHexString(addr2 + commitSize) + "\\] committed 128KB"); + + // ---------- + // Release second mapping + wb.NMTReleaseMemory(addr2, reserveSize); + info = "release 2"; + + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output, 256, 0); + output.shouldMatch("\\[0x[0]*" + Long.toHexString(addr1) + " - 0x[0]*" + Long.toHexString(addr1 + reserveSize) + "\\] reserved 256KB for Test"); + output.shouldNotMatch("\\[0x[0]*" + Long.toHexString(addr1) + " - 0x[0]*" + Long.toHexString(addr1 + commitSize) + "\\] committed 128KB"); + output.shouldNotMatch("\\[0x[0]*" + Long.toHexString(addr2) + " - 0x[0]*" + Long.toHexString(addr2 + reserveSize) + "\\] reserved 256KB for Test"); + output.shouldNotMatch("\\[0x[0]*" + Long.toHexString(addr2) + " - 0x[0]*" + Long.toHexString(addr2 + commitSize) + "\\] committed 128KB"); + + // ---------- + // Release first mapping + wb.NMTReleaseMemory(addr1, reserveSize); + info = "release 1"; + + output = NMTTestUtils.startJcmdVMNativeMemoryDetail(); + checkReservedCommittedSummary(output, 0, 0); + output.shouldNotMatch("\\[0x[0]*" + Long.toHexString(addr1) + " - 0x[0]*" + Long.toHexString(addr1 + reserveSize) + "\\] reserved 256KB for Test"); + output.shouldNotMatch("\\[0x[0]*" + Long.toHexString(addr1) + " - 0x[0]*" + Long.toHexString(addr1 + commitSize) + "\\] committed 128KB"); + output.shouldNotMatch("\\[0x[0]*" + Long.toHexString(addr2) + " - 0x[0]*" + Long.toHexString(addr2 + reserveSize) + "\\] reserved 256KB for Test"); + output.shouldNotMatch("\\[0x[0]*" + Long.toHexString(addr2) + " - 0x[0]*" + Long.toHexString(addr2 + commitSize) + "\\] committed 128KB"); + + } catch (Exception e) { + throw new RuntimeException(e.getMessage() + " (" + info + ")"); + } + } + + static long peakKB = 0; + + public static void checkReservedCommittedSummary(OutputAnalyzer output, long reservedKB, long committedKB) { + if (committedKB > peakKB) { + peakKB = committedKB; + } + NMTTestUtils.checkReservedCommittedSummary(output, reservedKB, committedKB, peakKB); } } diff --git a/test/lib/jdk/test/lib/process/OutputAnalyzer.java b/test/lib/jdk/test/lib/process/OutputAnalyzer.java index fab7b99196def..ae04d9d1bc4b4 100644 --- a/test/lib/jdk/test/lib/process/OutputAnalyzer.java +++ b/test/lib/jdk/test/lib/process/OutputAnalyzer.java @@ -621,6 +621,14 @@ public List asLines() { return asLines(getOutput()); } + public List stdoutAsLines() { + return asLines(getStdout()); + } + + public List stderrAsLines() { + return asLines(getStderr()); + } + private List asLines(String buffer) { return Arrays.asList(buffer.split("\\R")); } @@ -786,4 +794,72 @@ private int indexOf(List lines, String regexp, int fromIndex) { return -1; } + private void searchLinesForMultiLinePattern(String[] haystack, String[] needles, boolean verbose) { + + if (needles.length == 0) { + return; + } + + int firstNeedlePos = 0; + for (int i = 0; i < haystack.length; i++) { + if (verbose) { + System.out.println("" + i + ":" + haystack[i]); + } + if (haystack[i].contains(needles[0])) { + if (verbose) { + System.out.println("Matches pattern 0 (\"" + needles[0] + "\")"); + } + firstNeedlePos = i; + break; + } + } + + for (int i = 1; i < needles.length; i++) { + int haystackPos = firstNeedlePos + i; + if (haystackPos < haystack.length) { + if (verbose) { + System.out.println("" + haystackPos + ":" + haystack[haystackPos]); + } + if (haystack[haystackPos].contains(needles[i])) { + if (verbose) { + System.out.println("Matches pattern " + i + "(\"" + needles[i] + "\")"); + } + } else { + String err = "First unmatched pattern: " + i + " (\"" + needles[i] + "\")"; + if (!verbose) { // don't print twice + reportDiagnosticSummary(); + } + throw new RuntimeException(err); + } + } + } + } + + public void stdoutShouldContainMultiLinePattern(String[] needles, boolean verbose) { + String [] stdoutLines = stdoutAsLines().toArray(new String[0]); + searchLinesForMultiLinePattern(stdoutLines, needles, verbose); + } + + public void stdoutShouldContainMultiLinePattern(String... needles) { + stdoutShouldContainMultiLinePattern(needles, true); + } + + public void stderrShouldContainMultiLinePattern(String[] needles, boolean verbose) { + String [] stderrLines = stdoutAsLines().toArray(new String[0]); + searchLinesForMultiLinePattern(stderrLines, needles, verbose); + } + + public void stderrShouldContainMultiLinePattern(String... needles) { + stderrShouldContainMultiLinePattern(needles, true); + } + + public void shouldContainMultiLinePattern(String[] needles, boolean verbose) { + String [] lines = asLines().toArray(new String[0]); + searchLinesForMultiLinePattern(lines, needles, verbose); + } + + public void shouldContainMultiLinePattern(String... needles) { + shouldContainMultiLinePattern(needles, true); + } + } From 21d361e944a599e82e5ed93aa81ad485b4601843 Mon Sep 17 00:00:00 2001 From: Thomas Schatzl Date: Tue, 28 Nov 2023 20:55:27 +0000 Subject: [PATCH 094/250] 8320525: G1: G1UpdateRemSetTrackingBeforeRebuild::distribute_marked_bytes accesses partially unloaded klass Reviewed-by: ayang, iwalulya --- src/hotspot/share/gc/g1/g1ConcurrentMark.cpp | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/src/hotspot/share/gc/g1/g1ConcurrentMark.cpp b/src/hotspot/share/gc/g1/g1ConcurrentMark.cpp index d41fd381e2365..a9bafa4466479 100644 --- a/src/hotspot/share/gc/g1/g1ConcurrentMark.cpp +++ b/src/hotspot/share/gc/g1/g1ConcurrentMark.cpp @@ -1131,13 +1131,10 @@ class G1UpdateRemSetTrackingBeforeRebuildTask : public WorkerTask { // Distribute the given marked bytes across the humongous object starting // with hr and note end of marking for these regions. void distribute_marked_bytes(HeapRegion* hr, size_t marked_bytes) { - size_t const obj_size_in_words = cast_to_oop(hr->bottom())->size(); - - // "Distributing" zero words means that we only note end of marking for these - // regions. - assert(marked_bytes == 0 || obj_size_in_words * HeapWordSize == marked_bytes, + // Dead humongous objects (marked_bytes == 0) may have already been unloaded. + assert(marked_bytes == 0 || cast_to_oop(hr->bottom())->size() * HeapWordSize == marked_bytes, "Marked bytes should either be 0 or the same as humongous object (%zu) but is %zu", - obj_size_in_words * HeapWordSize, marked_bytes); + cast_to_oop(hr->bottom())->size() * HeapWordSize, marked_bytes); auto distribute_bytes = [&] (HeapRegion* r) { size_t const bytes_to_add = MIN2(HeapRegion::GrainBytes, marked_bytes); @@ -1148,10 +1145,6 @@ class G1UpdateRemSetTrackingBeforeRebuildTask : public WorkerTask { marked_bytes -= bytes_to_add; }; _g1h->humongous_obj_regions_iterate(hr, distribute_bytes); - - assert(marked_bytes == 0, - "%zu bytes left after distributing space across %zu regions", - marked_bytes, G1CollectedHeap::humongous_obj_size_in_regions(obj_size_in_words)); } void update_marked_bytes(HeapRegion* hr) { From ce4e6e2bd704a90abc8e8e1586325769076c208a Mon Sep 17 00:00:00 2001 From: Magnus Ihse Bursie Date: Tue, 28 Nov 2023 21:40:20 +0000 Subject: [PATCH 095/250] 8320915: Update copyright year in build files Reviewed-by: erikj, iris --- .github/actions/get-msys2/action.yml | 2 +- .github/workflows/build-cross-compile.yml | 2 +- make/CompileDemos.gmk | 2 +- make/CompileModuleTools.gmk | 2 +- make/Hsdis.gmk | 2 +- make/ReleaseFile.gmk | 2 +- make/RunTestsPrebuilt.gmk | 2 +- make/RunTestsPrebuiltSpec.gmk | 2 +- make/ToolsJdk.gmk | 2 +- make/autoconf/buildjdk-spec.gmk.in | 2 +- make/autoconf/flags-other.m4 | 2 +- make/autoconf/lib-ffi.m4 | 2 +- make/common/MakeIO.gmk | 2 +- make/common/Modules.gmk | 2 +- make/common/ProcessMarkdown.gmk | 2 +- make/data/ubsan/ubsan_default_options.c | 2 +- make/data/ubsan/ubsan_default_options.cpp | 2 +- make/devkit/createMacosxDevkit.sh | 2 +- make/hotspot/lib/CompileGtest.gmk | 2 +- make/hotspot/lib/JvmFeatures.gmk | 2 +- make/hotspot/lib/JvmFlags.gmk | 2 +- make/ide/eclipse/CreateWorkspace.gmk | 2 +- make/ide/idea/jdk/template/src/idea/JdkIdeaAntLogger.java | 2 +- .../langtools/template/src/idea/LangtoolsIdeaAntLogger.java | 2 +- make/ide/visualstudio/hotspot/CreateVSProject.gmk | 2 +- .../build/tools/projectcreator/WinGammaPlatformVC10.java | 2 +- .../build/tools/cldrconverter/ResourceBundleGenerator.java | 2 +- make/jdk/src/classes/build/tools/depend/Depend.java | 2 +- make/jdk/src/classes/build/tools/depend/DependTest.java | 2 +- .../jdk/src/classes/build/tools/generatecharacter/PropList.java | 2 +- make/langtools/tools/javacserver/client/Client.java | 2 +- make/modules/java.base/Java.gmk | 2 +- make/modules/java.base/gensrc/GensrcCharacterData.gmk | 2 +- make/modules/java.datatransfer/Java.gmk | 2 +- make/modules/java.desktop/Java.gmk | 2 +- make/modules/java.logging/Java.gmk | 2 +- make/modules/java.management/Java.gmk | 2 +- make/modules/java.naming/Java.gmk | 2 +- make/modules/java.rmi/Java.gmk | 2 +- make/modules/java.security.jgss/Java.gmk | 2 +- make/modules/java.sql.rowset/Java.gmk | 2 +- make/modules/java.sql/Java.gmk | 2 +- make/modules/java.xml.crypto/Java.gmk | 2 +- make/modules/java.xml/Java.gmk | 2 +- make/modules/jdk.charsets/Java.gmk | 2 +- make/modules/jdk.compiler/Java.gmk | 2 +- make/modules/jdk.hotspot.agent/Java.gmk | 2 +- make/modules/jdk.httpserver/Java.gmk | 2 +- make/modules/jdk.internal.jvmstat/Java.gmk | 2 +- make/modules/jdk.internal.le/Java.gmk | 2 +- make/modules/jdk.internal.le/Lib.gmk | 2 +- make/modules/jdk.internal.opt/Java.gmk | 2 +- make/modules/jdk.internal.vm.ci/Java.gmk | 2 +- make/modules/jdk.jartool/Java.gmk | 2 +- make/modules/jdk.javadoc/Java.gmk | 2 +- make/modules/jdk.jcmd/Java.gmk | 2 +- make/modules/jdk.jconsole/Java.gmk | 2 +- make/modules/jdk.jdeps/Gensrc.gmk | 2 +- make/modules/jdk.jdeps/Java.gmk | 2 +- make/modules/jdk.jdeps/Launcher.gmk | 2 +- make/modules/jdk.jdi/Java.gmk | 2 +- make/modules/jdk.jpackage/Java.gmk | 2 +- make/modules/jdk.jshell/Java.gmk | 2 +- make/modules/jdk.localedata/Java.gmk | 2 +- make/modules/jdk.sctp/Java.gmk | 2 +- make/scripts/compare_exceptions.sh.incl | 2 +- make/scripts/fixpath.sh | 2 +- make/test/BuildFailureHandler.gmk | 2 +- 68 files changed, 68 insertions(+), 68 deletions(-) diff --git a/.github/actions/get-msys2/action.yml b/.github/actions/get-msys2/action.yml index 7dac1538536c6..d36957e3b37e6 100644 --- a/.github/actions/get-msys2/action.yml +++ b/.github/actions/get-msys2/action.yml @@ -1,5 +1,5 @@ # -# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2022, 2023, 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 diff --git a/.github/workflows/build-cross-compile.yml b/.github/workflows/build-cross-compile.yml index 5db69f07d98c5..77620640f13bc 100644 --- a/.github/workflows/build-cross-compile.yml +++ b/.github/workflows/build-cross-compile.yml @@ -1,5 +1,5 @@ # -# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2022, 2023, 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 diff --git a/make/CompileDemos.gmk b/make/CompileDemos.gmk index c85bc102acbe7..4d8a9598da792 100644 --- a/make/CompileDemos.gmk +++ b/make/CompileDemos.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2011, 2020, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 2023, 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 diff --git a/make/CompileModuleTools.gmk b/make/CompileModuleTools.gmk index 59d651d2d9625..bb3948f377ede 100644 --- a/make/CompileModuleTools.gmk +++ b/make/CompileModuleTools.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2013, 2020, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2013, 2023, 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 diff --git a/make/Hsdis.gmk b/make/Hsdis.gmk index bcf01dbe1529a..7496a3a2cf1b4 100644 --- a/make/Hsdis.gmk +++ b/make/Hsdis.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, 2022, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2023, 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 diff --git a/make/ReleaseFile.gmk b/make/ReleaseFile.gmk index 5e8d123fac9c8..dc6f66a69a2af 100644 --- a/make/ReleaseFile.gmk +++ b/make/ReleaseFile.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2016, 2023, 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 diff --git a/make/RunTestsPrebuilt.gmk b/make/RunTestsPrebuilt.gmk index 93febe5ed31d9..eea325184f3d7 100644 --- a/make/RunTestsPrebuilt.gmk +++ b/make/RunTestsPrebuilt.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2017, 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2017, 2023, 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 diff --git a/make/RunTestsPrebuiltSpec.gmk b/make/RunTestsPrebuiltSpec.gmk index 7fcaf56ff527e..16a14fbd2a072 100644 --- a/make/RunTestsPrebuiltSpec.gmk +++ b/make/RunTestsPrebuiltSpec.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2017, 2023, 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 diff --git a/make/ToolsJdk.gmk b/make/ToolsJdk.gmk index b7310811f0299..e7cc3fc871128 100644 --- a/make/ToolsJdk.gmk +++ b/make/ToolsJdk.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2011, 2022, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 2023, 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 diff --git a/make/autoconf/buildjdk-spec.gmk.in b/make/autoconf/buildjdk-spec.gmk.in index 3e7c4a39f60a6..993ed50390210 100644 --- a/make/autoconf/buildjdk-spec.gmk.in +++ b/make/autoconf/buildjdk-spec.gmk.in @@ -1,5 +1,5 @@ # -# Copyright (c) 2015, 2020, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2015, 2023, 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 diff --git a/make/autoconf/flags-other.m4 b/make/autoconf/flags-other.m4 index 0af7c02cff6c2..7e2521ffef3b0 100644 --- a/make/autoconf/flags-other.m4 +++ b/make/autoconf/flags-other.m4 @@ -1,5 +1,5 @@ # -# Copyright (c) 2011, 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 2023, 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 diff --git a/make/autoconf/lib-ffi.m4 b/make/autoconf/lib-ffi.m4 index 3a11bec4a97d6..101065a1ecec1 100644 --- a/make/autoconf/lib-ffi.m4 +++ b/make/autoconf/lib-ffi.m4 @@ -1,5 +1,5 @@ # -# Copyright (c) 2015, 2020, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2015, 2023, 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 diff --git a/make/common/MakeIO.gmk b/make/common/MakeIO.gmk index 6075e034a19a5..75a387c34d947 100644 --- a/make/common/MakeIO.gmk +++ b/make/common/MakeIO.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 2023, 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 diff --git a/make/common/Modules.gmk b/make/common/Modules.gmk index bcbb6d1bab150..fa885dacb6da6 100644 --- a/make/common/Modules.gmk +++ b/make/common/Modules.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2014, 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2014, 2023, 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 diff --git a/make/common/ProcessMarkdown.gmk b/make/common/ProcessMarkdown.gmk index b5dc020be2c94..e78c026a89c37 100644 --- a/make/common/ProcessMarkdown.gmk +++ b/make/common/ProcessMarkdown.gmk @@ -1,4 +1,4 @@ -# Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2017, 2023, 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 diff --git a/make/data/ubsan/ubsan_default_options.c b/make/data/ubsan/ubsan_default_options.c index ee426ebbc39fe..011d1a675a90f 100644 --- a/make/data/ubsan/ubsan_default_options.c +++ b/make/data/ubsan/ubsan_default_options.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2023, 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 diff --git a/make/data/ubsan/ubsan_default_options.cpp b/make/data/ubsan/ubsan_default_options.cpp index dbebb5b2977e0..b0eb8eea0e2a5 100644 --- a/make/data/ubsan/ubsan_default_options.cpp +++ b/make/data/ubsan/ubsan_default_options.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2023, 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 diff --git a/make/devkit/createMacosxDevkit.sh b/make/devkit/createMacosxDevkit.sh index 0c15ebfaa1fc1..414773194d9ca 100644 --- a/make/devkit/createMacosxDevkit.sh +++ b/make/devkit/createMacosxDevkit.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright (c) 2015, 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2015, 2023, 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 diff --git a/make/hotspot/lib/CompileGtest.gmk b/make/hotspot/lib/CompileGtest.gmk index bba3ce15bb152..0d17f7a3be562 100644 --- a/make/hotspot/lib/CompileGtest.gmk +++ b/make/hotspot/lib/CompileGtest.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2016, 2022, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2016, 2023, 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 diff --git a/make/hotspot/lib/JvmFeatures.gmk b/make/hotspot/lib/JvmFeatures.gmk index cbe60fde20522..8eb57d76536a8 100644 --- a/make/hotspot/lib/JvmFeatures.gmk +++ b/make/hotspot/lib/JvmFeatures.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2013, 2022, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2013, 2023, 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 diff --git a/make/hotspot/lib/JvmFlags.gmk b/make/hotspot/lib/JvmFlags.gmk index 1fadd5331aa38..e5929ab994ba0 100644 --- a/make/hotspot/lib/JvmFlags.gmk +++ b/make/hotspot/lib/JvmFlags.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2013, 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2013, 2023, 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 diff --git a/make/ide/eclipse/CreateWorkspace.gmk b/make/ide/eclipse/CreateWorkspace.gmk index 51257d65ae298..a7937a33d9e7e 100644 --- a/make/ide/eclipse/CreateWorkspace.gmk +++ b/make/ide/eclipse/CreateWorkspace.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2016, 2022, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2016, 2023, 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 diff --git a/make/ide/idea/jdk/template/src/idea/JdkIdeaAntLogger.java b/make/ide/idea/jdk/template/src/idea/JdkIdeaAntLogger.java index 9634fb9d388d4..dd640bd95a09a 100644 --- a/make/ide/idea/jdk/template/src/idea/JdkIdeaAntLogger.java +++ b/make/ide/idea/jdk/template/src/idea/JdkIdeaAntLogger.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2023, 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 diff --git a/make/ide/idea/langtools/template/src/idea/LangtoolsIdeaAntLogger.java b/make/ide/idea/langtools/template/src/idea/LangtoolsIdeaAntLogger.java index 8eb5313fb8407..5ff0f116ce0f5 100644 --- a/make/ide/idea/langtools/template/src/idea/LangtoolsIdeaAntLogger.java +++ b/make/ide/idea/langtools/template/src/idea/LangtoolsIdeaAntLogger.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2023, 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 diff --git a/make/ide/visualstudio/hotspot/CreateVSProject.gmk b/make/ide/visualstudio/hotspot/CreateVSProject.gmk index 17051fd03d0bb..cd093d3c6de85 100644 --- a/make/ide/visualstudio/hotspot/CreateVSProject.gmk +++ b/make/ide/visualstudio/hotspot/CreateVSProject.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2016, 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2016, 2023, 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 diff --git a/make/ide/visualstudio/hotspot/src/classes/build/tools/projectcreator/WinGammaPlatformVC10.java b/make/ide/visualstudio/hotspot/src/classes/build/tools/projectcreator/WinGammaPlatformVC10.java index ed085dae09562..3a2a0242e5a1c 100644 --- a/make/ide/visualstudio/hotspot/src/classes/build/tools/projectcreator/WinGammaPlatformVC10.java +++ b/make/ide/visualstudio/hotspot/src/classes/build/tools/projectcreator/WinGammaPlatformVC10.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2023, 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 diff --git a/make/jdk/src/classes/build/tools/cldrconverter/ResourceBundleGenerator.java b/make/jdk/src/classes/build/tools/cldrconverter/ResourceBundleGenerator.java index 90c70f75cb9c1..49c74544be66e 100644 --- a/make/jdk/src/classes/build/tools/cldrconverter/ResourceBundleGenerator.java +++ b/make/jdk/src/classes/build/tools/cldrconverter/ResourceBundleGenerator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2023, 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 diff --git a/make/jdk/src/classes/build/tools/depend/Depend.java b/make/jdk/src/classes/build/tools/depend/Depend.java index 4dcf130411f3d..def3265b213b7 100644 --- a/make/jdk/src/classes/build/tools/depend/Depend.java +++ b/make/jdk/src/classes/build/tools/depend/Depend.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 2023, 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 diff --git a/make/jdk/src/classes/build/tools/depend/DependTest.java b/make/jdk/src/classes/build/tools/depend/DependTest.java index 810397b62d88e..614b91bc0379d 100644 --- a/make/jdk/src/classes/build/tools/depend/DependTest.java +++ b/make/jdk/src/classes/build/tools/depend/DependTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 2023, 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 diff --git a/make/jdk/src/classes/build/tools/generatecharacter/PropList.java b/make/jdk/src/classes/build/tools/generatecharacter/PropList.java index 8d354ab4d5fd6..7af57da4b9e46 100644 --- a/make/jdk/src/classes/build/tools/generatecharacter/PropList.java +++ b/make/jdk/src/classes/build/tools/generatecharacter/PropList.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2023, 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 diff --git a/make/langtools/tools/javacserver/client/Client.java b/make/langtools/tools/javacserver/client/Client.java index 9576a9923a4e5..cc4ecca941ef4 100644 --- a/make/langtools/tools/javacserver/client/Client.java +++ b/make/langtools/tools/javacserver/client/Client.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2023, 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 diff --git a/make/modules/java.base/Java.gmk b/make/modules/java.base/Java.gmk index 729f7b19f6d07..9d960402f76c5 100644 --- a/make/modules/java.base/Java.gmk +++ b/make/modules/java.base/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2023, 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 diff --git a/make/modules/java.base/gensrc/GensrcCharacterData.gmk b/make/modules/java.base/gensrc/GensrcCharacterData.gmk index 23544c6a4cf70..beee18000f149 100644 --- a/make/modules/java.base/gensrc/GensrcCharacterData.gmk +++ b/make/modules/java.base/gensrc/GensrcCharacterData.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2011, 2022, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 2023, 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 diff --git a/make/modules/java.datatransfer/Java.gmk b/make/modules/java.datatransfer/Java.gmk index 12eb67cff5153..6c5332f645737 100644 --- a/make/modules/java.datatransfer/Java.gmk +++ b/make/modules/java.datatransfer/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2023, 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 diff --git a/make/modules/java.desktop/Java.gmk b/make/modules/java.desktop/Java.gmk index 3b43862dd8049..66ef88dcf14d6 100644 --- a/make/modules/java.desktop/Java.gmk +++ b/make/modules/java.desktop/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2023, 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 diff --git a/make/modules/java.logging/Java.gmk b/make/modules/java.logging/Java.gmk index 04409a6f33173..781370b2e1879 100644 --- a/make/modules/java.logging/Java.gmk +++ b/make/modules/java.logging/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2023, 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 diff --git a/make/modules/java.management/Java.gmk b/make/modules/java.management/Java.gmk index 04409a6f33173..781370b2e1879 100644 --- a/make/modules/java.management/Java.gmk +++ b/make/modules/java.management/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2023, 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 diff --git a/make/modules/java.naming/Java.gmk b/make/modules/java.naming/Java.gmk index 519156b578e7b..a7ade637af579 100644 --- a/make/modules/java.naming/Java.gmk +++ b/make/modules/java.naming/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2023, 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 diff --git a/make/modules/java.rmi/Java.gmk b/make/modules/java.rmi/Java.gmk index caab120444132..6c607bd0572f2 100644 --- a/make/modules/java.rmi/Java.gmk +++ b/make/modules/java.rmi/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2023, 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 diff --git a/make/modules/java.security.jgss/Java.gmk b/make/modules/java.security.jgss/Java.gmk index 837cdd0809619..781370b2e1879 100644 --- a/make/modules/java.security.jgss/Java.gmk +++ b/make/modules/java.security.jgss/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2023, 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 diff --git a/make/modules/java.sql.rowset/Java.gmk b/make/modules/java.sql.rowset/Java.gmk index bfb6f8f034e47..6548dd46cae54 100644 --- a/make/modules/java.sql.rowset/Java.gmk +++ b/make/modules/java.sql.rowset/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2023, 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 diff --git a/make/modules/java.sql/Java.gmk b/make/modules/java.sql/Java.gmk index 837cdd0809619..781370b2e1879 100644 --- a/make/modules/java.sql/Java.gmk +++ b/make/modules/java.sql/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2023, 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 diff --git a/make/modules/java.xml.crypto/Java.gmk b/make/modules/java.xml.crypto/Java.gmk index ce9bb131d3c94..53e282aca272b 100644 --- a/make/modules/java.xml.crypto/Java.gmk +++ b/make/modules/java.xml.crypto/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2023, 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 diff --git a/make/modules/java.xml/Java.gmk b/make/modules/java.xml/Java.gmk index 70ae760066305..cf6f1753f1c3d 100644 --- a/make/modules/java.xml/Java.gmk +++ b/make/modules/java.xml/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2023, 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 diff --git a/make/modules/jdk.charsets/Java.gmk b/make/modules/jdk.charsets/Java.gmk index 7198efd9fcf51..fad05cc29f147 100644 --- a/make/modules/jdk.charsets/Java.gmk +++ b/make/modules/jdk.charsets/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2023, 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 diff --git a/make/modules/jdk.compiler/Java.gmk b/make/modules/jdk.compiler/Java.gmk index 49572b6efb907..7e6793fc6379b 100644 --- a/make/modules/jdk.compiler/Java.gmk +++ b/make/modules/jdk.compiler/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2023, 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 diff --git a/make/modules/jdk.hotspot.agent/Java.gmk b/make/modules/jdk.hotspot.agent/Java.gmk index 2819813b4f484..52cb0c8d91a65 100644 --- a/make/modules/jdk.hotspot.agent/Java.gmk +++ b/make/modules/jdk.hotspot.agent/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2023, 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 diff --git a/make/modules/jdk.httpserver/Java.gmk b/make/modules/jdk.httpserver/Java.gmk index c1b5a0d6d0ca9..d7b2b2f70ca21 100644 --- a/make/modules/jdk.httpserver/Java.gmk +++ b/make/modules/jdk.httpserver/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2023, 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 diff --git a/make/modules/jdk.internal.jvmstat/Java.gmk b/make/modules/jdk.internal.jvmstat/Java.gmk index 697171c156bef..4376b7e348494 100644 --- a/make/modules/jdk.internal.jvmstat/Java.gmk +++ b/make/modules/jdk.internal.jvmstat/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2023, 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 diff --git a/make/modules/jdk.internal.le/Java.gmk b/make/modules/jdk.internal.le/Java.gmk index 17e7cdf71b4a3..75d99b8d2bb72 100644 --- a/make/modules/jdk.internal.le/Java.gmk +++ b/make/modules/jdk.internal.le/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2023, 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 diff --git a/make/modules/jdk.internal.le/Lib.gmk b/make/modules/jdk.internal.le/Lib.gmk index 42a2010527abf..75a2446cc5a18 100644 --- a/make/modules/jdk.internal.le/Lib.gmk +++ b/make/modules/jdk.internal.le/Lib.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2015, 2023, 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 diff --git a/make/modules/jdk.internal.opt/Java.gmk b/make/modules/jdk.internal.opt/Java.gmk index 4299496b1fc02..0c65d9ad94ee8 100644 --- a/make/modules/jdk.internal.opt/Java.gmk +++ b/make/modules/jdk.internal.opt/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2023, 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 diff --git a/make/modules/jdk.internal.vm.ci/Java.gmk b/make/modules/jdk.internal.vm.ci/Java.gmk index 7b846bc1bd9cd..0dd5af1f3ea72 100644 --- a/make/modules/jdk.internal.vm.ci/Java.gmk +++ b/make/modules/jdk.internal.vm.ci/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2023, 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 diff --git a/make/modules/jdk.jartool/Java.gmk b/make/modules/jdk.jartool/Java.gmk index 1cf56a317e7cb..f9b4538838f3b 100644 --- a/make/modules/jdk.jartool/Java.gmk +++ b/make/modules/jdk.jartool/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2023, 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 diff --git a/make/modules/jdk.javadoc/Java.gmk b/make/modules/jdk.javadoc/Java.gmk index 92bbec738a036..3035864ecbacb 100644 --- a/make/modules/jdk.javadoc/Java.gmk +++ b/make/modules/jdk.javadoc/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2023, 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 diff --git a/make/modules/jdk.jcmd/Java.gmk b/make/modules/jdk.jcmd/Java.gmk index 287bcbc6945c7..08209e9353821 100644 --- a/make/modules/jdk.jcmd/Java.gmk +++ b/make/modules/jdk.jcmd/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2023, 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 diff --git a/make/modules/jdk.jconsole/Java.gmk b/make/modules/jdk.jconsole/Java.gmk index 7688f7f6b5c0b..9166d6a7c1187 100644 --- a/make/modules/jdk.jconsole/Java.gmk +++ b/make/modules/jdk.jconsole/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2023, 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 diff --git a/make/modules/jdk.jdeps/Gensrc.gmk b/make/modules/jdk.jdeps/Gensrc.gmk index a5a72c543c72f..640143b1b56d7 100644 --- a/make/modules/jdk.jdeps/Gensrc.gmk +++ b/make/modules/jdk.jdeps/Gensrc.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2014, 2022, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2014, 2023, 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 diff --git a/make/modules/jdk.jdeps/Java.gmk b/make/modules/jdk.jdeps/Java.gmk index 914b0c6658709..69c7ae0433fc7 100644 --- a/make/modules/jdk.jdeps/Java.gmk +++ b/make/modules/jdk.jdeps/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2023, 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 diff --git a/make/modules/jdk.jdeps/Launcher.gmk b/make/modules/jdk.jdeps/Launcher.gmk index 4a5b5f408d554..9d7d3515fc2a7 100644 --- a/make/modules/jdk.jdeps/Launcher.gmk +++ b/make/modules/jdk.jdeps/Launcher.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2015, 2023, 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 diff --git a/make/modules/jdk.jdi/Java.gmk b/make/modules/jdk.jdi/Java.gmk index 49e35d9c95105..76d05b06df48b 100644 --- a/make/modules/jdk.jdi/Java.gmk +++ b/make/modules/jdk.jdi/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2023, 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 diff --git a/make/modules/jdk.jpackage/Java.gmk b/make/modules/jdk.jpackage/Java.gmk index 04cef0d52853b..60fe53475c939 100644 --- a/make/modules/jdk.jpackage/Java.gmk +++ b/make/modules/jdk.jpackage/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2023, 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 diff --git a/make/modules/jdk.jshell/Java.gmk b/make/modules/jdk.jshell/Java.gmk index a9db351c333ad..744c85d960a94 100644 --- a/make/modules/jdk.jshell/Java.gmk +++ b/make/modules/jdk.jshell/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2023, 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 diff --git a/make/modules/jdk.localedata/Java.gmk b/make/modules/jdk.localedata/Java.gmk index 9f8ee95addd9b..d794dde2124ea 100644 --- a/make/modules/jdk.localedata/Java.gmk +++ b/make/modules/jdk.localedata/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2023, 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 diff --git a/make/modules/jdk.sctp/Java.gmk b/make/modules/jdk.sctp/Java.gmk index 08cd8fca1ce6e..9fc531689ee42 100644 --- a/make/modules/jdk.sctp/Java.gmk +++ b/make/modules/jdk.sctp/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2023, 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 diff --git a/make/scripts/compare_exceptions.sh.incl b/make/scripts/compare_exceptions.sh.incl index d5043637145b2..cfbfeeb5be4f9 100644 --- a/make/scripts/compare_exceptions.sh.incl +++ b/make/scripts/compare_exceptions.sh.incl @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright (c) 2012, 2022, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2012, 2023, 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 diff --git a/make/scripts/fixpath.sh b/make/scripts/fixpath.sh index 9c8db7383f2de..3a886fee07c47 100644 --- a/make/scripts/fixpath.sh +++ b/make/scripts/fixpath.sh @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright (c) 2020, 2022, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2023, 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 diff --git a/make/test/BuildFailureHandler.gmk b/make/test/BuildFailureHandler.gmk index ac133dc6a68e6..78eb3692e8a74 100644 --- a/make/test/BuildFailureHandler.gmk +++ b/make/test/BuildFailureHandler.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2016, 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2016, 2023, 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 From f93b18f39cce34fca79b688cee3324d1db2eef62 Mon Sep 17 00:00:00 2001 From: Erik Joelsson Date: Tue, 28 Nov 2023 23:32:18 +0000 Subject: [PATCH 096/250] 8320932: [BACKOUT] dsymutil command leaves around temporary directories Reviewed-by: mikael --- make/common/NativeCompilation.gmk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/make/common/NativeCompilation.gmk b/make/common/NativeCompilation.gmk index c8cd4b8ea64ae..68d1dba27ffcc 100644 --- a/make/common/NativeCompilation.gmk +++ b/make/common/NativeCompilation.gmk @@ -1105,7 +1105,7 @@ define SetupNativeCompilationBody $$($1_SYMBOLS_DIR)/$$($1_BASENAME).dSYM/Contents/Info.plist \ $$($1_SYMBOLS_DIR)/$$($1_BASENAME).dSYM/Contents/Resources/DWARF/$$($1_BASENAME) $1_CREATE_DEBUGINFO_CMDS := \ - $(DSYMUTIL) --reproducer Off --out $$($1_SYMBOLS_DIR)/$$($1_BASENAME).dSYM $$($1_TARGET) + $(DSYMUTIL) --out $$($1_SYMBOLS_DIR)/$$($1_BASENAME).dSYM $$($1_TARGET) endif # Since the link rule creates more than one file that we want to track, From 2c4c6c9ba3f4682e3696ecdd9aea1905443785fa Mon Sep 17 00:00:00 2001 From: John Jiang Date: Tue, 28 Nov 2023 23:52:22 +0000 Subject: [PATCH 097/250] 8320049: PKCS10 would not discard the cause when throw SignatureException on invalid key Reviewed-by: mullan --- src/java.base/share/classes/sun/security/pkcs10/PKCS10.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/java.base/share/classes/sun/security/pkcs10/PKCS10.java b/src/java.base/share/classes/sun/security/pkcs10/PKCS10.java index 943af4d2333aa..4b615ca9af111 100644 --- a/src/java.base/share/classes/sun/security/pkcs10/PKCS10.java +++ b/src/java.base/share/classes/sun/security/pkcs10/PKCS10.java @@ -23,7 +23,6 @@ * questions. */ - package sun.security.pkcs10; import java.io.PrintStream; @@ -174,7 +173,7 @@ public PKCS10(byte[] data) throw new SignatureException("Invalid PKCS #10 signature"); } } catch (InvalidKeyException e) { - throw new SignatureException("Invalid key"); + throw new SignatureException("Invalid key", e); } catch (InvalidAlgorithmParameterException e) { throw new SignatureException("Invalid signature parameters", e); } catch (ProviderException e) { From 3ccd02f14211a3384f27fba1633f9d8421378c9a Mon Sep 17 00:00:00 2001 From: Fei Gao Date: Wed, 29 Nov 2023 01:41:20 +0000 Subject: [PATCH 098/250] 8320379: C2: Sort spilling/unspilling sequence for better ld/st merging into ldp/stp on AArch64 Reviewed-by: aph, kvn --- src/hotspot/share/opto/output.cpp | 43 ++++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/src/hotspot/share/opto/output.cpp b/src/hotspot/share/opto/output.cpp index 9778c289167de..64d98f27ff614 100644 --- a/src/hotspot/share/opto/output.cpp +++ b/src/hotspot/share/opto/output.cpp @@ -169,6 +169,11 @@ class Scheduling { // Add a node to the current bundle void AddNodeToBundle(Node *n, const Block *bb); + // Return an integer less than, equal to, or greater than zero + // if the stack offset of the first argument is respectively + // less than, equal to, or greater than the second. + int compare_two_spill_nodes(Node* first, Node* second); + // Add a node to the list of available nodes void AddNodeToAvailableList(Node *n); @@ -2271,6 +2276,29 @@ Node * Scheduling::ChooseNodeToBundle() { return _available[0]; } +int Scheduling::compare_two_spill_nodes(Node* first, Node* second) { + assert(first->is_MachSpillCopy() && second->is_MachSpillCopy(), ""); + + OptoReg::Name first_src_lo = _regalloc->get_reg_first(first->in(1)); + OptoReg::Name first_dst_lo = _regalloc->get_reg_first(first); + OptoReg::Name second_src_lo = _regalloc->get_reg_first(second->in(1)); + OptoReg::Name second_dst_lo = _regalloc->get_reg_first(second); + + // Comparison between stack -> reg and stack -> reg + if (OptoReg::is_stack(first_src_lo) && OptoReg::is_stack(second_src_lo) && + OptoReg::is_reg(first_dst_lo) && OptoReg::is_reg(second_dst_lo)) { + return _regalloc->reg2offset(first_src_lo) - _regalloc->reg2offset(second_src_lo); + } + + // Comparison between reg -> stack and reg -> stack + if (OptoReg::is_stack(first_dst_lo) && OptoReg::is_stack(second_dst_lo) && + OptoReg::is_reg(first_src_lo) && OptoReg::is_reg(second_src_lo)) { + return _regalloc->reg2offset(first_dst_lo) - _regalloc->reg2offset(second_dst_lo); + } + + return 0; // Not comparable +} + void Scheduling::AddNodeToAvailableList(Node *n) { assert( !n->is_Proj(), "projections never directly made available" ); #ifndef PRODUCT @@ -2282,11 +2310,20 @@ void Scheduling::AddNodeToAvailableList(Node *n) { int latency = _current_latency[n->_idx]; - // Insert in latency order (insertion sort) + // Insert in latency order (insertion sort). If two MachSpillCopyNodes + // for stack spilling or unspilling have the same latency, we sort + // them in the order of stack offset. Some ports (e.g. aarch64) may also + // have more opportunities to do ld/st merging uint i; - for ( i=0; i < _available.size(); i++ ) - if (_current_latency[_available[i]->_idx] > latency) + for (i = 0; i < _available.size(); i++) { + if (_current_latency[_available[i]->_idx] > latency) { break; + } else if (_current_latency[_available[i]->_idx] == latency && + n->is_MachSpillCopy() && _available[i]->is_MachSpillCopy() && + compare_two_spill_nodes(n, _available[i]) > 0) { + break; + } + } // Special Check for compares following branches if( n->is_Mach() && _scheduled.size() > 0 ) { From a657aa38a56056211a9d2773b30e8fe1a89c128e Mon Sep 17 00:00:00 2001 From: Alexander Matveev Date: Wed, 29 Nov 2023 01:41:38 +0000 Subject: [PATCH 099/250] 8320681: [macos] Test tools/jpackage/macosx/MacAppStoreJlinkOptionsTest.java timed out on macOS Reviewed-by: asemenyuk --- .../tools/jpackage/macosx/MacAppStoreJlinkOptionsTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/jdk/tools/jpackage/macosx/MacAppStoreJlinkOptionsTest.java b/test/jdk/tools/jpackage/macosx/MacAppStoreJlinkOptionsTest.java index b3cefa7d38fe2..8b1cec04ab9c7 100644 --- a/test/jdk/tools/jpackage/macosx/MacAppStoreJlinkOptionsTest.java +++ b/test/jdk/tools/jpackage/macosx/MacAppStoreJlinkOptionsTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2023, 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 @@ -39,7 +39,7 @@ * @build MacAppStoreJLinkOptionsTest * @modules jdk.jpackage/jdk.jpackage.internal * @requires (os.family == "mac") - * @run main/othervm -Xmx512m jdk.jpackage.test.Main + * @run main/othervm/timeout=540 -Xmx512m jdk.jpackage.test.Main * --jpt-run=MacAppStoreJLinkOptionsTest */ public class MacAppStoreJLinkOptionsTest { From 5e1b771a19962042a0020a9148e94e14d63025ee Mon Sep 17 00:00:00 2001 From: Dean Long Date: Wed, 29 Nov 2023 03:06:32 +0000 Subject: [PATCH 100/250] 8316422: TestIntegerUnsignedDivMod.java triggers "invalid layout" assert in FrameValues::validate Reviewed-by: thartmann, never --- src/hotspot/share/c1/c1_GraphBuilder.cpp | 28 ++++---- src/hotspot/share/c1/c1_LIRGenerator.cpp | 16 ++++- src/hotspot/share/c1/c1_LinearScan.cpp | 16 ++--- src/hotspot/share/c1/c1_ValueStack.cpp | 50 ++++++++++---- src/hotspot/share/c1/c1_ValueStack.hpp | 33 ++++++--- .../exceptions/TestDeoptExceptionState.java | 68 +++++++++++++++++++ 6 files changed, 166 insertions(+), 45 deletions(-) create mode 100644 test/hotspot/jtreg/compiler/exceptions/TestDeoptExceptionState.java diff --git a/src/hotspot/share/c1/c1_GraphBuilder.cpp b/src/hotspot/share/c1/c1_GraphBuilder.cpp index 82c48ab171f04..edf6f29478c4d 100644 --- a/src/hotspot/share/c1/c1_GraphBuilder.cpp +++ b/src/hotspot/share/c1/c1_GraphBuilder.cpp @@ -2517,6 +2517,8 @@ XHandlers* GraphBuilder::handle_exception(Instruction* instruction) { // xhandler start with an empty expression stack if (cur_state->stack_size() != 0) { + // locals are preserved + // stack will be truncated cur_state = cur_state->copy(ValueStack::ExceptionState, cur_state->bci()); } if (instruction->exception_state() == nullptr) { @@ -2566,15 +2568,19 @@ XHandlers* GraphBuilder::handle_exception(Instruction* instruction) { // This scope and all callees do not handle exceptions, so the local // variables of this scope are not needed. However, the scope itself is // required for a correct exception stack trace -> clear out the locals. - if (_compilation->env()->should_retain_local_variables()) { - cur_state = cur_state->copy(ValueStack::ExceptionState, cur_state->bci()); - } else { - cur_state = cur_state->copy(ValueStack::EmptyExceptionState, cur_state->bci()); - } + // Stack and locals are invalidated but not truncated in caller state. if (prev_state != nullptr) { + assert(instruction->exception_state() != nullptr, "missed set?"); + ValueStack::Kind exc_kind = ValueStack::empty_exception_kind(true /* caller */); + cur_state = cur_state->copy(exc_kind, cur_state->bci()); + // reset caller exception state prev_state->set_caller_state(cur_state); - } - if (instruction->exception_state() == nullptr) { + } else { + assert(instruction->exception_state() == nullptr, "already set"); + // set instruction exception state + // truncate stack + ValueStack::Kind exc_kind = ValueStack::empty_exception_kind(); + cur_state = cur_state->copy(exc_kind, cur_state->bci()); instruction->set_exception_state(cur_state); } } @@ -3487,11 +3493,9 @@ ValueStack* GraphBuilder::copy_state_exhandling_with_bci(int bci) { ValueStack* GraphBuilder::copy_state_for_exception_with_bci(int bci) { ValueStack* s = copy_state_exhandling_with_bci(bci); if (s == nullptr) { - if (_compilation->env()->should_retain_local_variables()) { - s = state()->copy(ValueStack::ExceptionState, bci); - } else { - s = state()->copy(ValueStack::EmptyExceptionState, bci); - } + // no handler, no need to retain locals + ValueStack::Kind exc_kind = ValueStack::empty_exception_kind(); + s = state()->copy(exc_kind, bci); } return s; } diff --git a/src/hotspot/share/c1/c1_LIRGenerator.cpp b/src/hotspot/share/c1/c1_LIRGenerator.cpp index afa36bde3d3a8..b17bed7e3f200 100644 --- a/src/hotspot/share/c1/c1_LIRGenerator.cpp +++ b/src/hotspot/share/c1/c1_LIRGenerator.cpp @@ -403,8 +403,20 @@ CodeEmitInfo* LIRGenerator::state_for(Instruction* x, ValueStack* state, bool ig ValueStack* s = state; for_each_state(s) { - if (s->kind() == ValueStack::EmptyExceptionState) { - assert(s->stack_size() == 0 && s->locals_size() == 0 && (s->locks_size() == 0 || s->locks_size() == 1), "state must be empty"); + if (s->kind() == ValueStack::EmptyExceptionState || + s->kind() == ValueStack::CallerEmptyExceptionState) + { +#ifdef ASSERT + int index; + Value value; + for_each_stack_value(s, index, value) { + fatal("state must be empty"); + } + for_each_local_value(s, index, value) { + fatal("state must be empty"); + } +#endif + assert(s->locks_size() == 0 || s->locks_size() == 1, "state must be empty"); continue; } diff --git a/src/hotspot/share/c1/c1_LinearScan.cpp b/src/hotspot/share/c1/c1_LinearScan.cpp index 0634d970c26f7..7e46f9d56034b 100644 --- a/src/hotspot/share/c1/c1_LinearScan.cpp +++ b/src/hotspot/share/c1/c1_LinearScan.cpp @@ -2921,16 +2921,10 @@ IRScopeDebugInfo* LinearScan::compute_debug_info_for_scope(int op_id, IRScope* c assert(locals->length() == pos, "must match"); } - assert(locals->length() == cur_scope->method()->max_locals(), "wrong number of locals"); - assert(locals->length() == cur_state->locals_size(), "wrong number of locals"); - } else if (cur_scope->method()->max_locals() > 0) { - assert(cur_state->kind() == ValueStack::EmptyExceptionState, "should be"); - nof_locals = cur_scope->method()->max_locals(); - locals = new GrowableArray(nof_locals); - for(int i = 0; i < nof_locals; i++) { - locals->append(_illegal_value); - } + assert(locals->length() == nof_locals, "wrong number of locals"); } + assert(nof_locals == cur_scope->method()->max_locals(), "wrong number of locals"); + assert(nof_locals == cur_state->locals_size(), "wrong number of locals"); // describe expression stack int nof_stack = cur_state->stack_size(); @@ -2939,8 +2933,8 @@ IRScopeDebugInfo* LinearScan::compute_debug_info_for_scope(int op_id, IRScope* c int pos = 0; while (pos < nof_stack) { - Value expression = cur_state->stack_at_inc(pos); - append_scope_value(op_id, expression, expressions); + Value expression = cur_state->stack_at(pos); + pos += append_scope_value(op_id, expression, expressions); assert(expressions->length() == pos, "must match"); } diff --git a/src/hotspot/share/c1/c1_ValueStack.cpp b/src/hotspot/share/c1/c1_ValueStack.cpp index 58dc947764a79..e7bf714a3674d 100644 --- a/src/hotspot/share/c1/c1_ValueStack.cpp +++ b/src/hotspot/share/c1/c1_ValueStack.cpp @@ -51,12 +51,32 @@ ValueStack::ValueStack(ValueStack* copy_from, Kind kind, int bci) , _stack(copy_from->stack_size_for_copy(kind)) , _locks(copy_from->locks_size() == 0 ? nullptr : new Values(copy_from->locks_size())) { - assert(kind != EmptyExceptionState || !Compilation::current()->env()->should_retain_local_variables(), "need locals"); - if (kind != EmptyExceptionState) { + switch (kind) { + case EmptyExceptionState: + case CallerEmptyExceptionState: + assert(!Compilation::current()->env()->should_retain_local_variables(), "need locals"); + // set to all nulls, like clear_locals() + for (int i = 0; i < copy_from->locals_size(); ++i) { + _locals.append(nullptr); + } + break; + default: _locals.appendAll(©_from->_locals); } - if (kind != ExceptionState && kind != EmptyExceptionState) { + switch (kind) { + case ExceptionState: + case EmptyExceptionState: + assert(stack_size() == 0, "fix stack_size_for_copy"); + break; + case CallerExceptionState: + case CallerEmptyExceptionState: + // set to all nulls + for (int i = 0; i < copy_from->stack_size(); ++i) { + _stack.append(nullptr); + } + break; + default: _stack.appendAll(©_from->_stack); } @@ -68,10 +88,7 @@ ValueStack::ValueStack(ValueStack* copy_from, Kind kind, int bci) } int ValueStack::locals_size_for_copy(Kind kind) const { - if (kind != EmptyExceptionState) { - return locals_size(); - } - return 0; + return locals_size(); } int ValueStack::stack_size_for_copy(Kind kind) const { @@ -221,10 +238,15 @@ void ValueStack::print() { } else { InstructionPrinter ip; for (int i = 0; i < stack_size();) { + tty->print("stack %d ", i); Value t = stack_at_inc(i); - tty->print("%2d ", i); - tty->print("%c%d ", t->type()->tchar(), t->id()); - ip.print_instr(t); + if (t == nullptr) { + tty->print("null"); + } else { + tty->print("%2d ", i); + tty->print("%c%d ", t->type()->tchar(), t->id()); + ip.print_instr(t); + } tty->cr(); } } @@ -284,7 +306,9 @@ void ValueStack::verify() { int i; for (i = 0; i < stack_size(); i++) { Value v = _stack.at(i); - if (v == nullptr) { + if (kind() == empty_exception_kind(true /* caller */)) { + assert(v == nullptr, "should be empty"); + } else if (v == nullptr) { assert(_stack.at(i - 1)->type()->is_double_word(), "only hi-words are null on stack"); } else if (v->type()->is_double_word()) { assert(_stack.at(i + 1) == nullptr, "hi-word must be null"); @@ -293,7 +317,9 @@ void ValueStack::verify() { for (i = 0; i < locals_size(); i++) { Value v = _locals.at(i); - if (v != nullptr && v->type()->is_double_word()) { + if (kind() == EmptyExceptionState) { + assert(v == nullptr, "should be empty"); + } else if (v != nullptr && v->type()->is_double_word()) { assert(_locals.at(i + 1) == nullptr, "hi-word must be null"); } } diff --git a/src/hotspot/share/c1/c1_ValueStack.hpp b/src/hotspot/share/c1/c1_ValueStack.hpp index b1622b79622b8..74d5c2e3f3c65 100644 --- a/src/hotspot/share/c1/c1_ValueStack.hpp +++ b/src/hotspot/share/c1/c1_ValueStack.hpp @@ -34,8 +34,18 @@ class ValueStack: public CompilationResourceObj { CallerState, // Caller state when inlining StateBefore, // Before before execution of instruction StateAfter, // After execution of instruction - ExceptionState, // Exception handling of instruction - EmptyExceptionState, // Exception handling of instructions not covered by an xhandler + // Exception states for an instruction. + // Dead stack items or locals may be invalidated or cleared/removed. + // Locals are retained if needed for JVMTI. + // "empty" exception states are used when there is no handler, + // and invalidate the locals. + // "leaf" exception states clear the stack. + // "caller" exception states are used for the parent/caller, + // and invalidate the stack. + ExceptionState, // Exception state for leaf with handler, stack cleared + EmptyExceptionState, // Exception state for leaf w/o handler, stack cleared, locals invalidated + CallerExceptionState, // Exception state for parent with handler, stack invalidated + CallerEmptyExceptionState, // Exception state for parent w/o handler, stack+locals invalidated BlockBeginState // State of BlockBegin instruction with phi functions of this block }; @@ -75,10 +85,16 @@ class ValueStack: public CompilationResourceObj { ValueStack* copy(Kind new_kind, int new_bci) { return new ValueStack(this, new_kind, new_bci); } ValueStack* copy_for_parsing() { return new ValueStack(this, Parsing, -99); } + // Used when no exception handler is found + static Kind empty_exception_kind(bool caller = false) { + return Compilation::current()->env()->should_retain_local_variables() ? + (caller ? CallerExceptionState : ExceptionState) : // retain locals + (caller ? CallerEmptyExceptionState : EmptyExceptionState); // clear locals + } + void set_caller_state(ValueStack* s) { - assert(kind() == EmptyExceptionState || - (Compilation::current()->env()->should_retain_local_variables() && kind() == ExceptionState), - "only EmptyExceptionStates can be modified"); + assert(kind() == empty_exception_kind(false) || kind() == empty_exception_kind(true), + "only empty exception states can be modified"); _caller_state = s; } @@ -133,14 +149,14 @@ class ValueStack: public CompilationResourceObj { // stack access Value stack_at(int i) const { Value x = _stack.at(i); - assert(!x->type()->is_double_word() || + assert(x == nullptr || !x->type()->is_double_word() || _stack.at(i + 1) == nullptr, "hi-word of doubleword value must be null"); return x; } Value stack_at_inc(int& i) const { Value x = stack_at(i); - i += x->type()->size(); + i += ((x == nullptr) ? 1 : x->type()->size()); return x; } @@ -260,7 +276,8 @@ class ValueStack: public CompilationResourceObj { int temp_var = state->stack_size(); \ for (index = 0; \ index < temp_var && (value = state->stack_at(index), true); \ - index += value->type()->size()) + index += (value == nullptr ? 1 : value->type()->size())) \ + if (value != nullptr) #define for_each_lock_value(state, index, value) \ diff --git a/test/hotspot/jtreg/compiler/exceptions/TestDeoptExceptionState.java b/test/hotspot/jtreg/compiler/exceptions/TestDeoptExceptionState.java new file mode 100644 index 0000000000000..3e8d450e29975 --- /dev/null +++ b/test/hotspot/jtreg/compiler/exceptions/TestDeoptExceptionState.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** +* @test +* @bug 8316422 +* @summary Test exception state used for deoptimization. +* @run main/othervm -XX:+IgnoreUnrecognizedVMOptions -XX:+VerifyStack -XX:+DeoptimizeALot +* -Xcomp -XX:TieredStopAtLevel=1 -XX:CompileOnly=compiler.exceptions.TestDeoptExceptionState::test +* compiler.exceptions.TestDeoptExceptionState +*/ + +package compiler.exceptions; + +public class TestDeoptExceptionState { + private static int res = 0; + + public static void main(String args[]) { + int x = 42; + int y = 1 + test(); + System.out.println("Foo " + x + " " + y); + } + + public static int test() { + int x = 42; + int y = 1 + test1(); + return x + y; + } + + public static int test1() { + for (int i = 0; i < 100; i++) { + try { + divZero(); + } catch (ArithmeticException ea) { + // Expected + } + } + return 1; + } + + public static void divZero() { + res += div(0, 0); + } + + public static long div(long dividend, long divisor) { + return dividend / divisor; + } +} From 9a6ca233c7e91ffa2ce9451568b3be88ccd04504 Mon Sep 17 00:00:00 2001 From: Joe Wang Date: Wed, 29 Nov 2023 04:33:28 +0000 Subject: [PATCH 101/250] 8320918: Fix errors in the built-in Catalog implementation Reviewed-by: lancea, naoto, iris --- .../jdk/xml/internal/JdkConstants.java | 2 +- src/java.xml/share/conf/jaxp.properties | 26 ++++++++++++++++--- .../common/catalog/CatalogTestBase.java | 2 +- .../common/config/files/catalog2.properties | 2 +- .../common/config/files/jaxp.properties | 21 ++++++++++++--- .../jaxp/unittest/common/util/TestBase.java | 17 +++++++----- 6 files changed, 52 insertions(+), 18 deletions(-) diff --git a/src/java.xml/share/classes/jdk/xml/internal/JdkConstants.java b/src/java.xml/share/classes/jdk/xml/internal/JdkConstants.java index 26f163878ea6d..412eddb5ab0a2 100644 --- a/src/java.xml/share/classes/jdk/xml/internal/JdkConstants.java +++ b/src/java.xml/share/classes/jdk/xml/internal/JdkConstants.java @@ -304,7 +304,7 @@ public final class JdkConstants { * System Property for the JDKCatalog' RESOLVE property * @since 22 */ - public static final String JDKCATALOG_RESOLVE = "jdk.xml.jdkCatalog.resolve"; + public static final String JDKCATALOG_RESOLVE = "jdk.xml.jdkcatalog.resolve"; // Catalog Resolve Integer mappings for String values public static final int CONTINUE = 0; diff --git a/src/java.xml/share/conf/jaxp.properties b/src/java.xml/share/conf/jaxp.properties index b43b5a3e8d178..53074816cb977 100644 --- a/src/java.xml/share/conf/jaxp.properties +++ b/src/java.xml/share/conf/jaxp.properties @@ -47,11 +47,11 @@ # the default property values. The format is: # system-property-name=value # -# For example, the FILES property in CatalogFeatures has an associated system -# property called javax.xml.catalog.files. An entry for the FILES property in the -# configuration file would therefore use javax.xml.catalog.files as the key, that +# For example, the RESOLVE property in CatalogFeatures has an associated system +# property called javax.xml.catalog.resolve. An entry for the RESOLVE property in the +# configuration file would therefore use javax.xml.catalog.resolve as the key, that # is: -# javax.xml.catalog.files=strict +# javax.xml.catalog.resolve=strict # # # Extension Functions: @@ -128,6 +128,24 @@ jdk.xml.overrideDefaultParser=false # # javax.xml.useCatalog=true # +# Implementation Specific Properties - jdkcatalog.resolve +# +# This property instructs the JDK default CatalogResolver to act in accordance with +# the setting when unable to resolve an external reference with the built-in Catalog. +# The options are: +# continue -- indicates that the processing should continue +# ignore -- indicates that the reference is skipped +# strict -- indicates that the resolver should throw a CatalogException +# +# The following setting would cause the resolve to throw a CatalogException when +# unable to resolve an external reference: +# jdk.xml.jdkcatalog.resolve=strict +# +# Implementation Specific Properties - DTD +# +# This property instructs the parsers to: deny, ignore or allow DTD processing. +# The following setting would cause the parser to reject DTD by throwing an exception. +# jdk.xml.dtd.support=deny # # Implementation Specific Properties - Limits # diff --git a/test/jaxp/javax/xml/jaxp/unittest/common/catalog/CatalogTestBase.java b/test/jaxp/javax/xml/jaxp/unittest/common/catalog/CatalogTestBase.java index 17141fb474e4c..f3f1209ce8244 100644 --- a/test/jaxp/javax/xml/jaxp/unittest/common/catalog/CatalogTestBase.java +++ b/test/jaxp/javax/xml/jaxp/unittest/common/catalog/CatalogTestBase.java @@ -57,7 +57,7 @@ public Object[][] getConfigs(Processor processor) { // error (not from catalog) is expect when CATALOG=continue boolean isErrExpected = true; - String expected1 = "invalid.site.com"; + String expected1 = UNKNOWN_HOST; // expected when reference is resolved by Catalog String expected3 = "", expected4 = ""; diff --git a/test/jaxp/javax/xml/jaxp/unittest/common/config/files/catalog2.properties b/test/jaxp/javax/xml/jaxp/unittest/common/config/files/catalog2.properties index 16cf13c1a9603..06c25c3ba816c 100644 --- a/test/jaxp/javax/xml/jaxp/unittest/common/config/files/catalog2.properties +++ b/test/jaxp/javax/xml/jaxp/unittest/common/config/files/catalog2.properties @@ -13,7 +13,7 @@ # ---- Config File: for testing the CATALOG property ---- # # strict: report error if not resolved by the JDK Catalog -jdk.xml.jdkCatalog.resolve=strict +jdk.xml.jdkcatalog.resolve=strict # Enable Extension Functions jdk.xml.enableExtensionFunctions=true # Disallow overriding the default parser diff --git a/test/jaxp/javax/xml/jaxp/unittest/common/config/files/jaxp.properties b/test/jaxp/javax/xml/jaxp/unittest/common/config/files/jaxp.properties index 7f1a48e7c1cfd..53074816cb977 100644 --- a/test/jaxp/javax/xml/jaxp/unittest/common/config/files/jaxp.properties +++ b/test/jaxp/javax/xml/jaxp/unittest/common/config/files/jaxp.properties @@ -47,11 +47,11 @@ # the default property values. The format is: # system-property-name=value # -# For example, the FILES property in CatalogFeatures has an associated system -# property called javax.xml.catalog.files. An entry for the FILES property in the -# configuration file would therefore use javax.xml.catalog.files as the key, that +# For example, the RESOLVE property in CatalogFeatures has an associated system +# property called javax.xml.catalog.resolve. An entry for the RESOLVE property in the +# configuration file would therefore use javax.xml.catalog.resolve as the key, that # is: -# javax.xml.catalog.files=strict +# javax.xml.catalog.resolve=strict # # # Extension Functions: @@ -128,6 +128,19 @@ jdk.xml.overrideDefaultParser=false # # javax.xml.useCatalog=true # +# Implementation Specific Properties - jdkcatalog.resolve +# +# This property instructs the JDK default CatalogResolver to act in accordance with +# the setting when unable to resolve an external reference with the built-in Catalog. +# The options are: +# continue -- indicates that the processing should continue +# ignore -- indicates that the reference is skipped +# strict -- indicates that the resolver should throw a CatalogException +# +# The following setting would cause the resolve to throw a CatalogException when +# unable to resolve an external reference: +# jdk.xml.jdkcatalog.resolve=strict +# # Implementation Specific Properties - DTD # # This property instructs the parsers to: deny, ignore or allow DTD processing. diff --git a/test/jaxp/javax/xml/jaxp/unittest/common/util/TestBase.java b/test/jaxp/javax/xml/jaxp/unittest/common/util/TestBase.java index fa7d32fe4e4e6..6be967d8dd5a2 100644 --- a/test/jaxp/javax/xml/jaxp/unittest/common/util/TestBase.java +++ b/test/jaxp/javax/xml/jaxp/unittest/common/util/TestBase.java @@ -102,7 +102,7 @@ public class TestBase { // Impl Specific Properties public static final String SP_DTD = "jdk.xml.dtd.support"; - public static final String SP_CATALOG = "jdk.xml.jdkCatalog.resolve"; + public static final String SP_CATALOG = "jdk.xml.jdkcatalog.resolve"; public static final String OVERRIDE_PARSER = "jdk.xml.overrideDefaultParser"; // DTD/CATALOG constants @@ -121,6 +121,7 @@ public class TestBase { // CATALOG=strict public static final String CONFIG_CATALOG_STRICT = "catalog2.properties"; + public static final String UNKNOWN_HOST = "invalid.site.com"; String xmlExternalEntity, xmlExternalEntityId; String xmlGE_Expansion, xmlGE_ExpansionId; @@ -334,15 +335,17 @@ protected void validate(String filename, SchemaFactory sf, boolean expectError, protected void processError(boolean expectError, String error, Exception e) throws Exception { - //e.printStackTrace(); String str = e.getMessage(); -// System.out.println("Exp Msg: " + str); - //e.printStackTrace(); if (!expectError) { - Assert.assertTrue(false, "Expected pass, but Exception is thrown " + - str); + Assert.assertTrue(false, "Expected pass, but Exception is thrown " + str); } else { - Assert.assertTrue((str != null) && str.contains(error)); + // This check is necessary since errors other than UnknownHostException + // can contain the host name in the System ID + if (UNKNOWN_HOST.equals(error)) { + Assert.assertTrue((str != null) && str.equals(error)); + } else { + Assert.assertTrue((str != null) && str.contains(error)); + } } } From 78b6c2b40885529adb2627e004317466b2c03868 Mon Sep 17 00:00:00 2001 From: Matthias Baesken Date: Wed, 29 Nov 2023 07:44:02 +0000 Subject: [PATCH 102/250] 8320898: exclude compiler/vectorapi/reshape/TestVectorReinterpret.java on ppc64(le) platforms Reviewed-by: clanger --- test/hotspot/jtreg/ProblemList.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/test/hotspot/jtreg/ProblemList.txt b/test/hotspot/jtreg/ProblemList.txt index e5395c0837241..9e3a36cf4801c 100644 --- a/test/hotspot/jtreg/ProblemList.txt +++ b/test/hotspot/jtreg/ProblemList.txt @@ -67,6 +67,7 @@ compiler/c2/Test8004741.java 8235801 generic-all compiler/codecache/jmx/PoolsIndependenceTest.java 8264632 macosx-all +compiler/vectorapi/reshape/TestVectorReinterpret.java 8320897 aix-ppc64,linux-ppc64le compiler/vectorapi/VectorLogicalOpIdentityTest.java 8302459 linux-x64,windows-x64 compiler/jvmci/TestUncaughtErrorInCompileMethod.java 8309073 generic-all From 5dcf3a56cb425c3419273636729d2d83603be0d2 Mon Sep 17 00:00:00 2001 From: Hamlin Li Date: Wed, 29 Nov 2023 08:01:40 +0000 Subject: [PATCH 103/250] 8320715: Improve the tests of test/hotspot/jtreg/compiler/intrinsics/float16 Reviewed-by: kvn --- .../float16/Binary16Conversion.java | 10 ++++-- .../float16/TestAllFloat16ToFloat.java | 32 +++++++++++++------ .../float16/TestConstFloat16ToFloat.java | 18 ++++++++--- 3 files changed, 44 insertions(+), 16 deletions(-) diff --git a/test/hotspot/jtreg/compiler/intrinsics/float16/Binary16Conversion.java b/test/hotspot/jtreg/compiler/intrinsics/float16/Binary16Conversion.java index eeba614de4f55..0541121c127c4 100644 --- a/test/hotspot/jtreg/compiler/intrinsics/float16/Binary16Conversion.java +++ b/test/hotspot/jtreg/compiler/intrinsics/float16/Binary16Conversion.java @@ -309,7 +309,8 @@ private static int testRoundFloatToBinary16FullBinade() { f_prime_diff > f_prime_up_diff) { errors++; System.out.println("Round-to-nearest violation on converting " + - Float.toHexString(f) + "/" + Integer.toHexString(i) + " to binary16 and back: " + Integer.toHexString(0xffff & f_as_bin16) + " f_prime: " + Float.toHexString(f_prime)); + Float.toHexString(f) + "/" + Integer.toHexString(i) + " to binary16 and back: " + + Integer.toHexString(0xffff & f_as_bin16) + " f_prime: " + Float.toHexString(f_prime)); } } return errors; @@ -326,11 +327,14 @@ private static int testAlternativeImplementation() { ell++) { float f = Float.intBitsToFloat((int)ell); short s1 = Float.floatToFloat16(f); - short s2 = testAltFloatToFloat16(f); + short s2 = testAltFloatToFloat16(f); if (s1 != s2) { errors++; - System.out.println("Different conversion of float value " + Float.toHexString(f)); + System.out.println("Different conversion of float value (" + f + "/" + + Integer.toHexString(Float.floatToRawIntBits(f)) + "): " + + Integer.toHexString(s1 & 0xffff) + "(" + s1 + ")" + " != " + + Integer.toHexString(s2 & 0xffff) + "(" + s2 + ")"); } } diff --git a/test/hotspot/jtreg/compiler/intrinsics/float16/TestAllFloat16ToFloat.java b/test/hotspot/jtreg/compiler/intrinsics/float16/TestAllFloat16ToFloat.java index 4afda12070935..492901f0046f0 100644 --- a/test/hotspot/jtreg/compiler/intrinsics/float16/TestAllFloat16ToFloat.java +++ b/test/hotspot/jtreg/compiler/intrinsics/float16/TestAllFloat16ToFloat.java @@ -53,45 +53,59 @@ public static short testRoundTrip(short s) { return Float.floatToFloat16(Float.float16ToFloat(s)); } - public static void verify(short sVal, float fVal, short sRes) { + public static int verify(short sVal, float fVal, short sRes, String prefix) { + int errors = 0; if (sRes != sVal) { if (!Float.isNaN(fVal) || ((sRes & ~0x0200) != (sVal & ~0x0200)) ) { + errors++; String fVal_hex = Integer.toHexString(Float.floatToRawIntBits(fVal)); String sRes_hex = Integer.toHexString(sRes & 0xffff); String sVal_hex = Integer.toHexString(sVal & 0xffff); - throw new RuntimeException("Inconsistent result for Float.floatToFloat16(" + fVal + "/" + fVal_hex + "): " + sRes_hex + " != " + sVal_hex); + System.out.println(prefix + "Inconsistent result for Float.floatToFloat16(" + fVal + "/" + fVal_hex + "): " + + sRes_hex + "(" + sRes + ")" + " != " + sVal_hex + "(" + sVal + ")"); } } + return errors; } - public static void run() { + public static int run() { + int errors = 0; // Testing all float16 values. for (short sVal = Short.MIN_VALUE; sVal < Short.MAX_VALUE; ++sVal) { float fVal = Float.float16ToFloat(sVal); short sRes = testFloatToFloat16(fVal); - verify(sVal, fVal, sRes); + errors += verify(sVal, fVal, sRes, "testFloatToFloat16: "); float fRes = testFloat16ToFloat(sVal); if (!Float.isNaN(fRes) && fRes != fVal) { + errors++; String sVal_hex = Integer.toHexString(sVal & 0xffff); String fRes_hex = Integer.toHexString(Float.floatToRawIntBits(fRes)); String fVal_hex = Integer.toHexString(Float.floatToRawIntBits(fVal)); - throw new RuntimeException("Inconsistent result for Float.float16ToFloat(" + sVal_hex + "): " + fRes + "/" + fRes_hex + " != " + fVal + "/" + fVal_hex); + System.out.println("Non-NaN res: " + "Inconsistent result for Float.float16ToFloat(" + sVal_hex + "): " + + fRes + "/" + fRes_hex + " != " + fVal + "/" + fVal_hex); } sRes = testRoundTrip(sVal); - verify(sVal, fVal, sRes); + errors += verify(sVal, fVal, sRes, "testRoundTrip: "); if (Float.floatToFloat16(fRes) != Float.floatToFloat16(fVal)) { + errors++; String sVal_hex = Integer.toHexString(sVal & 0xffff); String sfRes_hex = Integer.toHexString(Float.floatToFloat16(fRes) & 0xffff); - String sfVal_hex = Integer.toHexString(Float.floatToFloat16(fVal)& 0xffff); - throw new RuntimeException("Inconsistent result for Float.float16ToFloat(" + sVal_hex + "): " + sfRes_hex + " != " + sfVal_hex); + String sfVal_hex = Integer.toHexString(Float.floatToFloat16(fVal) & 0xffff); + System.out.println("Float16 not equal: " + "Inconsistent result for Float.float16ToFloat(" + sVal_hex + "): " + + sfRes_hex + " != " + sfVal_hex); } } + return errors; } public static void main(String[] args) { + int errors = 0; // Run twice to trigger compilation for (int i = 0; i < 2; i++) { - run(); + errors += run(); + } + if (errors > 0) { + throw new RuntimeException(errors + " errors"); } } } diff --git a/test/hotspot/jtreg/compiler/intrinsics/float16/TestConstFloat16ToFloat.java b/test/hotspot/jtreg/compiler/intrinsics/float16/TestConstFloat16ToFloat.java index 062e680489777..b4ba578c9f260 100644 --- a/test/hotspot/jtreg/compiler/intrinsics/float16/TestConstFloat16ToFloat.java +++ b/test/hotspot/jtreg/compiler/intrinsics/float16/TestConstFloat16ToFloat.java @@ -127,7 +127,8 @@ public static void testFloatConst(short[] sRes) { sRes[13] = Float.floatToFloat16(BinaryF16.POSITIVE_INFINITY); } - public static void run() { + public static int run() { + int errors = 0; short s = Float.floatToFloat16(0.0f); // Load Float class // Testing constant float16 values. float[] fRes = new float[sCon.length]; @@ -135,10 +136,12 @@ public static void run() { for (int i = 0; i < sCon.length; i++) { float fVal = Float.float16ToFloat(sCon[i]); if (Float.floatToRawIntBits(fRes[i]) != Float.floatToRawIntBits(fVal)) { + errors++; String cVal_hex = Integer.toHexString(sCon[i] & 0xffff); String fRes_hex = Integer.toHexString(Float.floatToRawIntBits(fRes[i])); String fVal_hex = Integer.toHexString(Float.floatToRawIntBits(fVal)); - throw new RuntimeException("Inconsistent result for Float.float16ToFloat(" + cVal_hex + "): " + fRes[i] + "/" + fRes_hex + " != " + fVal + "/" + fVal_hex); + System.out.println("Inconsistent result for Float.float16ToFloat(" + cVal_hex + "): " + + fRes[i] + "/" + fRes_hex + " != " + fVal + "/" + fVal_hex); } } @@ -148,19 +151,26 @@ public static void run() { for (int i = 0; i < fCon.length; i++) { short sVal = Float.floatToFloat16(fCon[i]); if (sRes[i] != sVal) { + errors++; String cVal_hex = Integer.toHexString(Float.floatToRawIntBits(fCon[i])); String sRes_hex = Integer.toHexString(sRes[i] & 0xffff); String sVal_hex = Integer.toHexString(sVal & 0xffff); - throw new RuntimeException("Inconsistent result for Float.floatToFloat16(" + fCon[i] + "/" + cVal_hex + "): " + sRes_hex + " != " + sVal_hex); + System.out.println("Inconsistent result for Float.floatToFloat16(" + fCon[i] + "/" + cVal_hex + "): " + + sRes_hex + "(" + sRes + ")" + " != " + sVal_hex + "(" + sVal + ")"); } } + return errors; } public static void main(String[] args) { + int errors = 0; // Run twice to trigger compilation for (int i = 0; i < 2; i++) { - run(); + errors += run(); + } + if (errors > 0) { + throw new RuntimeException(errors + " errors"); } } } From e44d4b24ed794957c47c140ab6f15544efa2b278 Mon Sep 17 00:00:00 2001 From: Alan Bateman Date: Wed, 29 Nov 2023 09:12:58 +0000 Subject: [PATCH 104/250] 8320858: Move jpackage tests to tier3 Reviewed-by: mchung, asemenyuk, almatvee --- test/jdk/TEST.groups | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/test/jdk/TEST.groups b/test/jdk/TEST.groups index ce127ca579b57..4b332b94ca357 100644 --- a/test/jdk/TEST.groups +++ b/test/jdk/TEST.groups @@ -75,11 +75,12 @@ tier2_part3 = \ tier3 = \ :build \ :jdk_vector \ + -:jdk_vector_sanity \ :jdk_rmi \ :jdk_svc \ - -:jdk_svc_sanity \ - -:jdk_vector_sanity \ - -:svc_tools + -:jdk_svc_sanity \ + -:svc_tools \ + :jdk_jpackage # Everything not in other tiers tier4 = \ @@ -284,10 +285,11 @@ jdk_loom = \ jdk/jfr/threading # -# Tool (and tool API) tests are split into core and svc groups +# Tool (and tool API) tests are mostly split into core and svc groups # core_tools = \ tools \ + -tools/jpackage \ jdk/internal/jrtfs \ sun/tools/jrunscript @@ -299,11 +301,15 @@ svc_tools = \ jdk_tools = \ :core_tools \ - :svc_tools + :svc_tools \ + :jdk_jpackage jdk_jfr = \ jdk/jfr +jdk_jpackage = \ + tools/jpackage + # # Catch-all for other areas with a small number of tests # From 38cfb220ddadbb401cc15f313aadb8234f626210 Mon Sep 17 00:00:00 2001 From: Thomas Schatzl Date: Wed, 29 Nov 2023 10:03:32 +0000 Subject: [PATCH 105/250] 8318706: Implement JEP 423: Region Pinning for G1 Reviewed-by: ayang, iwalulya, sjohanss --- src/hotspot/share/gc/g1/g1CollectedHeap.cpp | 184 +++------- src/hotspot/share/gc/g1/g1CollectedHeap.hpp | 8 +- .../share/gc/g1/g1CollectedHeap.inline.hpp | 20 ++ src/hotspot/share/gc/g1/g1CollectionSet.cpp | 57 ++- src/hotspot/share/gc/g1/g1CollectionSet.hpp | 10 +- .../share/gc/g1/g1CollectionSetCandidates.cpp | 16 +- .../share/gc/g1/g1CollectionSetCandidates.hpp | 42 ++- .../g1/g1CollectionSetCandidates.inline.hpp | 4 +- .../share/gc/g1/g1CollectionSetChooser.cpp | 2 +- src/hotspot/share/gc/g1/g1ConcurrentMark.cpp | 5 +- .../share/gc/g1/g1EvacFailureRegions.cpp | 32 +- .../share/gc/g1/g1EvacFailureRegions.hpp | 47 ++- .../gc/g1/g1EvacFailureRegions.inline.hpp | 51 ++- src/hotspot/share/gc/g1/g1FullCollector.cpp | 16 +- .../share/gc/g1/g1FullGCCompactTask.cpp | 1 + .../share/gc/g1/g1FullGCCompactionPoint.cpp | 8 +- .../share/gc/g1/g1FullGCCompactionPoint.hpp | 2 +- .../gc/g1/g1FullGCPrepareTask.inline.hpp | 46 ++- .../share/gc/g1/g1FullGCResetMetadataTask.cpp | 7 +- src/hotspot/share/gc/g1/g1GCPhaseTimes.cpp | 9 +- src/hotspot/share/gc/g1/g1GCPhaseTimes.hpp | 9 +- src/hotspot/share/gc/g1/g1HeapRegionAttr.hpp | 29 +- .../share/gc/g1/g1MonitoringSupport.cpp | 9 +- .../share/gc/g1/g1ParScanThreadState.cpp | 17 +- .../share/gc/g1/g1ParScanThreadState.hpp | 4 +- src/hotspot/share/gc/g1/g1Policy.cpp | 121 ++++--- src/hotspot/share/gc/g1/g1Policy.hpp | 18 +- src/hotspot/share/gc/g1/g1VMOperations.cpp | 56 +-- src/hotspot/share/gc/g1/g1YoungCollector.cpp | 36 +- src/hotspot/share/gc/g1/g1YoungCollector.hpp | 6 +- .../gc/g1/g1YoungGCPostEvacuateTasks.cpp | 48 +-- .../gc/g1/g1YoungGCPostEvacuateTasks.hpp | 4 +- src/hotspot/share/gc/g1/g1_globals.hpp | 4 + src/hotspot/share/gc/g1/heapRegion.cpp | 21 +- src/hotspot/share/gc/g1/heapRegion.hpp | 9 + src/hotspot/share/gc/g1/heapRegion.inline.hpp | 8 + src/hotspot/share/gc/g1/vmStructs_g1.hpp | 1 + src/hotspot/share/gc/shared/collectedHeap.hpp | 4 +- src/hotspot/share/prims/whitebox.cpp | 30 +- src/hotspot/share/runtime/vmStructs.cpp | 1 + .../share/classes/sun/jvm/hotspot/HSDB.java | 3 + .../sun/jvm/hotspot/gc/g1/HeapRegion.java | 10 +- test/hotspot/jtreg/ProblemList.txt | 4 +- .../jtreg/gc/g1/TestEvacuationFailure.java | 4 +- .../jtreg/gc/g1/TestGCLogMessages.java | 5 +- .../TestPinnedHumongousFragmentation.java | 128 +++++++ .../pinnedobjs/TestPinnedObjectContents.java | 90 +++++ .../g1/pinnedobjs/TestPinnedObjectTypes.java | 86 +++++ .../TestPinnedObjectsEvacuation.java | 131 +++++++ .../TestPinnedOldObjectsEvacuation.java | 337 ++++++++++++++++++ .../gc/g1/plab/TestPLABEvacuationFailure.java | 4 +- .../TestJNIBlockFullGC.java | 191 ---------- .../libTestJNIBlockFullGC.c | 47 --- .../TestExcessGCLockerCollections.java | 4 +- .../gc/collection/TestG1ParallelPhases.java | 2 +- .../TestGCCauseWithG1ConcurrentMark.java | 2 +- .../TestGCCauseWithG1FullCollection.java | 2 +- .../event/gc/detailed/TestGCLockerEvent.java | 5 +- test/lib/jdk/test/whitebox/WhiteBox.java | 4 + 59 files changed, 1388 insertions(+), 673 deletions(-) create mode 100644 test/hotspot/jtreg/gc/g1/pinnedobjs/TestPinnedHumongousFragmentation.java create mode 100644 test/hotspot/jtreg/gc/g1/pinnedobjs/TestPinnedObjectContents.java create mode 100644 test/hotspot/jtreg/gc/g1/pinnedobjs/TestPinnedObjectTypes.java create mode 100644 test/hotspot/jtreg/gc/g1/pinnedobjs/TestPinnedObjectsEvacuation.java create mode 100644 test/hotspot/jtreg/gc/g1/pinnedobjs/TestPinnedOldObjectsEvacuation.java delete mode 100644 test/hotspot/jtreg/gc/stress/TestJNIBlockFullGC/TestJNIBlockFullGC.java delete mode 100644 test/hotspot/jtreg/gc/stress/TestJNIBlockFullGC/libTestJNIBlockFullGC.c diff --git a/src/hotspot/share/gc/g1/g1CollectedHeap.cpp b/src/hotspot/share/gc/g1/g1CollectedHeap.cpp index 6b2adcc8ff888..e9032d915a212 100644 --- a/src/hotspot/share/gc/g1/g1CollectedHeap.cpp +++ b/src/hotspot/share/gc/g1/g1CollectedHeap.cpp @@ -78,7 +78,6 @@ #include "gc/shared/gcBehaviours.hpp" #include "gc/shared/gcHeapSummary.hpp" #include "gc/shared/gcId.hpp" -#include "gc/shared/gcLocker.inline.hpp" #include "gc/shared/gcTimer.hpp" #include "gc/shared/gcTraceTime.inline.hpp" #include "gc/shared/isGCActiveMark.hpp" @@ -411,13 +410,11 @@ HeapWord* G1CollectedHeap::attempt_allocation_slow(size_t word_size) { // We should only get here after the first-level allocation attempt // (attempt_allocation()) failed to allocate. - // We will loop until a) we manage to successfully perform the - // allocation or b) we successfully schedule a collection which - // fails to perform the allocation. b) is the only case when we'll - // return null. + // We will loop until a) we manage to successfully perform the allocation or b) + // successfully schedule a collection which fails to perform the allocation. + // Case b) is the only case when we'll return null. HeapWord* result = nullptr; - for (uint try_count = 1, gclocker_retry_count = 0; /* we'll return */; try_count += 1) { - bool should_try_gc; + for (uint try_count = 1; /* we'll return */; try_count++) { uint gc_count_before; { @@ -430,67 +427,26 @@ HeapWord* G1CollectedHeap::attempt_allocation_slow(size_t word_size) { return result; } - // If the GCLocker is active and we are bound for a GC, try expanding young gen. - // This is different to when only GCLocker::needs_gc() is set: try to avoid - // waiting because the GCLocker is active to not wait too long. - if (GCLocker::is_active_and_needs_gc() && policy()->can_expand_young_list()) { - // No need for an ergo message here, can_expand_young_list() does this when - // it returns true. - result = _allocator->attempt_allocation_force(word_size); - if (result != nullptr) { - return result; - } - } - - // Only try a GC if the GCLocker does not signal the need for a GC. Wait until - // the GCLocker initiated GC has been performed and then retry. This includes - // the case when the GC Locker is not active but has not been performed. - should_try_gc = !GCLocker::needs_gc(); // Read the GC count while still holding the Heap_lock. gc_count_before = total_collections(); } - if (should_try_gc) { - bool succeeded; - result = do_collection_pause(word_size, gc_count_before, &succeeded, GCCause::_g1_inc_collection_pause); - if (result != nullptr) { - assert(succeeded, "only way to get back a non-null result"); - log_trace(gc, alloc)("%s: Successfully scheduled collection returning " PTR_FORMAT, - Thread::current()->name(), p2i(result)); - return result; - } - - if (succeeded) { - // We successfully scheduled a collection which failed to allocate. No - // point in trying to allocate further. We'll just return null. - log_trace(gc, alloc)("%s: Successfully scheduled collection failing to allocate " - SIZE_FORMAT " words", Thread::current()->name(), word_size); - return nullptr; - } - log_trace(gc, alloc)("%s: Unsuccessfully scheduled collection allocating " SIZE_FORMAT " words", - Thread::current()->name(), word_size); - } else { - // Failed to schedule a collection. - if (gclocker_retry_count > GCLockerRetryAllocationCount) { - log_warning(gc, alloc)("%s: Retried waiting for GCLocker too often allocating " - SIZE_FORMAT " words", Thread::current()->name(), word_size); - return nullptr; - } - log_trace(gc, alloc)("%s: Stall until clear", Thread::current()->name()); - // The GCLocker is either active or the GCLocker initiated - // GC has not yet been performed. Stall until it is and - // then retry the allocation. - GCLocker::stall_until_clear(); - gclocker_retry_count += 1; + bool succeeded; + result = do_collection_pause(word_size, gc_count_before, &succeeded, GCCause::_g1_inc_collection_pause); + if (succeeded) { + log_trace(gc, alloc)("%s: Successfully scheduled collection returning " PTR_FORMAT, + Thread::current()->name(), p2i(result)); + return result; } - // We can reach here if we were unsuccessful in scheduling a - // collection (because another thread beat us to it) or if we were - // stalled due to the GC locker. In either can we should retry the - // allocation attempt in case another thread successfully - // performed a collection and reclaimed enough space. We do the - // first attempt (without holding the Heap_lock) here and the - // follow-on attempt will be at the start of the next loop + log_trace(gc, alloc)("%s: Unsuccessfully scheduled collection allocating " SIZE_FORMAT " words", + Thread::current()->name(), word_size); + + // We can reach here if we were unsuccessful in scheduling a collection (because + // another thread beat us to it). In this case immeditealy retry the allocation + // attempt because another thread successfully performed a collection and possibly + // reclaimed enough space. The first attempt (without holding the Heap_lock) is + // here and the follow-on attempt will be at the start of the next loop // iteration (after taking the Heap_lock). size_t dummy = 0; result = _allocator->attempt_allocation(word_size, word_size, &dummy); @@ -673,13 +629,11 @@ HeapWord* G1CollectedHeap::attempt_allocation_humongous(size_t word_size) { collect(GCCause::_g1_humongous_allocation); } - // We will loop until a) we manage to successfully perform the - // allocation or b) we successfully schedule a collection which - // fails to perform the allocation. b) is the only case when we'll - // return null. + // We will loop until a) we manage to successfully perform the allocation or b) + // successfully schedule a collection which fails to perform the allocation. + // Case b) is the only case when we'll return null. HeapWord* result = nullptr; - for (uint try_count = 1, gclocker_retry_count = 0; /* we'll return */; try_count += 1) { - bool should_try_gc; + for (uint try_count = 1; /* we'll return */; try_count++) { uint gc_count_before; @@ -697,64 +651,35 @@ HeapWord* G1CollectedHeap::attempt_allocation_humongous(size_t word_size) { return result; } - // Only try a GC if the GCLocker does not signal the need for a GC. Wait until - // the GCLocker initiated GC has been performed and then retry. This includes - // the case when the GC Locker is not active but has not been performed. - should_try_gc = !GCLocker::needs_gc(); // Read the GC count while still holding the Heap_lock. gc_count_before = total_collections(); } - if (should_try_gc) { - bool succeeded; - result = do_collection_pause(word_size, gc_count_before, &succeeded, GCCause::_g1_humongous_allocation); + bool succeeded; + result = do_collection_pause(word_size, gc_count_before, &succeeded, GCCause::_g1_humongous_allocation); + if (succeeded) { + log_trace(gc, alloc)("%s: Successfully scheduled collection returning " PTR_FORMAT, + Thread::current()->name(), p2i(result)); if (result != nullptr) { - assert(succeeded, "only way to get back a non-null result"); - log_trace(gc, alloc)("%s: Successfully scheduled collection returning " PTR_FORMAT, - Thread::current()->name(), p2i(result)); size_t size_in_regions = humongous_obj_size_in_regions(word_size); policy()->old_gen_alloc_tracker()-> record_collection_pause_humongous_allocation(size_in_regions * HeapRegion::GrainBytes); - return result; - } - - if (succeeded) { - // We successfully scheduled a collection which failed to allocate. No - // point in trying to allocate further. We'll just return null. - log_trace(gc, alloc)("%s: Successfully scheduled collection failing to allocate " - SIZE_FORMAT " words", Thread::current()->name(), word_size); - return nullptr; - } - log_trace(gc, alloc)("%s: Unsuccessfully scheduled collection allocating " SIZE_FORMAT "", - Thread::current()->name(), word_size); - } else { - // Failed to schedule a collection. - if (gclocker_retry_count > GCLockerRetryAllocationCount) { - log_warning(gc, alloc)("%s: Retried waiting for GCLocker too often allocating " - SIZE_FORMAT " words", Thread::current()->name(), word_size); - return nullptr; } - log_trace(gc, alloc)("%s: Stall until clear", Thread::current()->name()); - // The GCLocker is either active or the GCLocker initiated - // GC has not yet been performed. Stall until it is and - // then retry the allocation. - GCLocker::stall_until_clear(); - gclocker_retry_count += 1; + return result; } + log_trace(gc, alloc)("%s: Unsuccessfully scheduled collection allocating " SIZE_FORMAT "", + Thread::current()->name(), word_size); - // We can reach here if we were unsuccessful in scheduling a - // collection (because another thread beat us to it) or if we were - // stalled due to the GC locker. In either can we should retry the - // allocation attempt in case another thread successfully - // performed a collection and reclaimed enough space. + // We can reach here if we were unsuccessful in scheduling a collection (because + // another thread beat us to it). // Humongous object allocation always needs a lock, so we wait for the retry // in the next iteration of the loop, unlike for the regular iteration case. // Give a warning if we seem to be looping forever. if ((QueuedAllocationWarningCount > 0) && (try_count % QueuedAllocationWarningCount == 0)) { - log_warning(gc, alloc)("%s: Retried allocation %u times for " SIZE_FORMAT " words", + log_warning(gc, alloc)("%s: Retried allocation %u times for %zu words", Thread::current()->name(), try_count, word_size); } } @@ -908,11 +833,6 @@ bool G1CollectedHeap::do_full_collection(bool clear_all_soft_refs, bool do_maximal_compaction) { assert_at_safepoint_on_vm_thread(); - if (GCLocker::check_active_before_gc()) { - // Full GC was not completed. - return false; - } - const bool do_clear_all_soft_refs = clear_all_soft_refs || soft_ref_policy()->should_clear_all_soft_refs(); @@ -1269,9 +1189,11 @@ G1CollectedHeap::G1CollectedHeap() : _humongous_object_threshold_in_words = humongous_threshold_for(HeapRegion::GrainWords); - // Override the default _filler_array_max_size so that no humongous filler - // objects are created. - _filler_array_max_size = _humongous_object_threshold_in_words; + // Since filler arrays are never referenced, we can make them region sized. + // This simplifies filling up the region in case we have some potentially + // unreferenced (by Java code, but still in use by native code) pinned objects + // in there. + _filler_array_max_size = HeapRegion::GrainWords; // Override the default _stack_chunk_max_size so that no humongous stack chunks are created _stack_chunk_max_size = _humongous_object_threshold_in_words; @@ -1904,12 +1826,6 @@ bool G1CollectedHeap::try_collect_concurrently(GCCause::Cause cause, // Collection failed and should be retried. assert(op.transient_failure(), "invariant"); - if (GCLocker::is_active_and_needs_gc()) { - // If GCLocker is active, wait until clear before retrying. - LOG_COLLECT_CONCURRENTLY(cause, "gc-locker stall"); - GCLocker::stall_until_clear(); - } - LOG_COLLECT_CONCURRENTLY(cause, "retry"); } } @@ -1935,11 +1851,6 @@ bool G1CollectedHeap::try_collect_fullgc(GCCause::Cause cause, return true; } } - - if (GCLocker::is_active_and_needs_gc()) { - // If GCLocker is active, wait until clear before retrying. - GCLocker::stall_until_clear(); - } } } @@ -1949,11 +1860,6 @@ bool G1CollectedHeap::try_collect(GCCause::Cause cause, return try_collect_concurrently(cause, counters_before.total_collections(), counters_before.old_marking_cycles_started()); - } else if (GCLocker::should_discard(cause, counters_before.total_collections())) { - // Indicate failure to be consistent with VMOp failure due to - // another collection slipping in after our gc_count but before - // our request is processed. - return false; } else if (cause == GCCause::_gc_locker || cause == GCCause::_wb_young_gc DEBUG_ONLY(|| cause == GCCause::_scavenge_alot)) { @@ -2179,14 +2085,6 @@ bool G1CollectedHeap::is_obj_dead_cond(const oop obj, return false; // keep some compilers happy } -void G1CollectedHeap::pin_object(JavaThread* thread, oop obj) { - GCLocker::lock_critical(thread); -} - -void G1CollectedHeap::unpin_object(JavaThread* thread, oop obj) { - GCLocker::unlock_critical(thread); -} - void G1CollectedHeap::print_heap_regions() const { LogTarget(Trace, gc, heap, region) lt; if (lt.is_enabled()) { @@ -2489,10 +2387,6 @@ bool G1CollectedHeap::do_collection_pause_at_safepoint() { assert_at_safepoint_on_vm_thread(); guarantee(!is_gc_active(), "collection is not reentrant"); - if (GCLocker::check_active_before_gc()) { - return false; - } - do_collection_pause_at_safepoint_helper(); return true; } @@ -2647,6 +2541,8 @@ void G1CollectedHeap::free_region(HeapRegion* hr, FreeRegionList* free_list) { assert(!hr->is_free(), "the region should not be free"); assert(!hr->is_empty(), "the region should not be empty"); assert(_hrm.is_available(hr->hrm_index()), "region should be committed"); + assert(!hr->has_pinned_objects(), + "must not free a region which contains pinned objects"); // Reset region metadata to allow reuse. hr->hr_clear(true /* clear_space */); diff --git a/src/hotspot/share/gc/g1/g1CollectedHeap.hpp b/src/hotspot/share/gc/g1/g1CollectedHeap.hpp index 96cb75777a6dd..d8b0f6cc8d910 100644 --- a/src/hotspot/share/gc/g1/g1CollectedHeap.hpp +++ b/src/hotspot/share/gc/g1/g1CollectedHeap.hpp @@ -560,6 +560,9 @@ class G1CollectedHeap : public CollectedHeap { return _monitoring_support; } + void pin_object(JavaThread* thread, oop obj) override; + void unpin_object(JavaThread* thread, oop obj) override; + void resize_heap_if_necessary(); // Check if there is memory to uncommit and if so schedule a task to do it. @@ -613,7 +616,7 @@ class G1CollectedHeap : public CollectedHeap { // We register a region with the fast "in collection set" test. We // simply set to true the array slot corresponding to this region. void register_young_region_with_region_attr(HeapRegion* r) { - _region_attr.set_in_young(r->hrm_index()); + _region_attr.set_in_young(r->hrm_index(), r->has_pinned_objects()); } inline void register_new_survivor_region_with_region_attr(HeapRegion* r); inline void register_region_with_region_attr(HeapRegion* r); @@ -1292,9 +1295,6 @@ class G1CollectedHeap : public CollectedHeap { G1HeapSummary create_g1_heap_summary(); G1EvacSummary create_g1_evac_summary(G1EvacStats* stats); - void pin_object(JavaThread* thread, oop obj) override; - void unpin_object(JavaThread* thread, oop obj) override; - // Printing private: void print_heap_regions() const; diff --git a/src/hotspot/share/gc/g1/g1CollectedHeap.inline.hpp b/src/hotspot/share/gc/g1/g1CollectedHeap.inline.hpp index 05d3a65fd59ef..7b81a93abe177 100644 --- a/src/hotspot/share/gc/g1/g1CollectedHeap.inline.hpp +++ b/src/hotspot/share/gc/g1/g1CollectedHeap.inline.hpp @@ -209,6 +209,8 @@ G1HeapRegionAttr G1CollectedHeap::region_attr(uint idx) const { } void G1CollectedHeap::register_humongous_candidate_region_with_region_attr(uint index) { + assert(!region_at(index)->has_pinned_objects(), "must be"); + assert(region_at(index)->rem_set()->is_complete(), "must be"); _region_attr.set_humongous_candidate(index); } @@ -218,9 +220,12 @@ void G1CollectedHeap::register_new_survivor_region_with_region_attr(HeapRegion* void G1CollectedHeap::register_region_with_region_attr(HeapRegion* r) { _region_attr.set_remset_is_tracked(r->hrm_index(), r->rem_set()->is_tracked()); + _region_attr.set_is_pinned(r->hrm_index(), r->has_pinned_objects()); } void G1CollectedHeap::register_old_region_with_region_attr(HeapRegion* r) { + assert(!r->has_pinned_objects(), "must be"); + assert(r->rem_set()->is_complete(), "must be"); _region_attr.set_in_old(r->hrm_index(), r->rem_set()->is_tracked()); _rem_set->exclude_region_from_scan(r->hrm_index()); } @@ -257,6 +262,21 @@ inline bool G1CollectedHeap::is_obj_dead(const oop obj, const HeapRegion* hr) co } } +inline void G1CollectedHeap::pin_object(JavaThread* thread, oop obj) { + assert(obj != nullptr, "obj must not be null"); + assert(!is_gc_active(), "must not pin objects during a GC"); + assert(obj->is_typeArray(), "must be typeArray"); + HeapRegion *r = heap_region_containing(obj); + r->increment_pinned_object_count(); +} + +inline void G1CollectedHeap::unpin_object(JavaThread* thread, oop obj) { + assert(obj != nullptr, "obj must not be null"); + assert(!is_gc_active(), "must not unpin objects during a GC"); + HeapRegion *r = heap_region_containing(obj); + r->decrement_pinned_object_count(); +} + inline bool G1CollectedHeap::is_obj_dead(const oop obj) const { assert(obj != nullptr, "precondition"); diff --git a/src/hotspot/share/gc/g1/g1CollectionSet.cpp b/src/hotspot/share/gc/g1/g1CollectionSet.cpp index 3c43d6ec10016..30787adbe543b 100644 --- a/src/hotspot/share/gc/g1/g1CollectionSet.cpp +++ b/src/hotspot/share/gc/g1/g1CollectionSet.cpp @@ -270,6 +270,9 @@ void G1CollectionSet::print(outputStream* st) { } #endif // !PRODUCT +// Always evacuate out pinned regions (apart from object types that can actually be +// pinned by JNI) to allow faster future evacuation. We already "paid" for this work +// when sizing the young generation. double G1CollectionSet::finalize_young_part(double target_pause_time_ms, G1SurvivorRegions* survivors) { Ticks start_time = Ticks::now(); @@ -317,6 +320,19 @@ static int compare_region_idx(const uint a, const uint b) { return static_cast(a-b); } +// The current mechanism skips evacuation of pinned old regions like g1 does for +// young regions: +// * evacuating pinned marking collection set candidate regions (available during mixed +// gc) like young regions would not result in any memory gain but only take additional +// time away from processing regions that would actually result in memory being freed. +// To advance mixed gc progress (we committed to evacuate all marking collection set +// candidate regions within the maximum number of mixed gcs in the phase), move them +// to the optional collection set candidates to reclaim them asap as time permits. +// * evacuating out retained collection set candidates would also just take up time with +// no actual space freed in old gen. Better to concentrate on others. +// Retained collection set candidates are aged out, ie. made to regular old regions +// without remembered sets after a few attempts to save computation costs of keeping +// them candidates for very long living pinned regions. void G1CollectionSet::finalize_old_part(double time_remaining_ms) { double non_young_start_time_sec = os::elapsedTime(); @@ -325,12 +341,15 @@ void G1CollectionSet::finalize_old_part(double time_remaining_ms) { G1CollectionCandidateRegionList initial_old_regions; assert(_optional_old_regions.length() == 0, "must be"); + G1CollectionCandidateRegionList pinned_marking_regions; + G1CollectionCandidateRegionList pinned_retained_regions; if (collector_state()->in_mixed_phase()) { time_remaining_ms = _policy->select_candidates_from_marking(&candidates()->marking_regions(), time_remaining_ms, &initial_old_regions, - &_optional_old_regions); + &_optional_old_regions, + &pinned_marking_regions); } else { log_debug(gc, ergo, cset)("Do not add marking candidates to collection set due to pause type."); } @@ -338,12 +357,20 @@ void G1CollectionSet::finalize_old_part(double time_remaining_ms) { _policy->select_candidates_from_retained(&candidates()->retained_regions(), time_remaining_ms, &initial_old_regions, - &_optional_old_regions); + &_optional_old_regions, + &pinned_retained_regions); // Move initially selected old regions to collection set directly. move_candidates_to_collection_set(&initial_old_regions); // Only prepare selected optional regions for now. prepare_optional_regions(&_optional_old_regions); + // Move pinned marking regions we came across to retained candidates so that + // there is progress in the mixed gc phase. + move_pinned_marking_to_retained(&pinned_marking_regions); + // Drop pinned retained regions to make progress with retained regions. Regions + // in that list must have been pinned for at least G1NumCollectionsKeepPinned + // GCs and hence are considered "long lived". + drop_pinned_retained_regions(&pinned_retained_regions); candidates()->verify(); } else { @@ -378,6 +405,32 @@ void G1CollectionSet::prepare_optional_regions(G1CollectionCandidateRegionList* } } +void G1CollectionSet::move_pinned_marking_to_retained(G1CollectionCandidateRegionList* regions) { + if (regions->length() == 0) { + return; + } + candidates()->remove(regions); + + for (HeapRegion* r : *regions) { + assert(r->has_pinned_objects(), "must be pinned"); + assert(r->rem_set()->is_complete(), "must be complete"); + candidates()->add_retained_region_unsorted(r); + } + candidates()->sort_by_efficiency(); +} + +void G1CollectionSet::drop_pinned_retained_regions(G1CollectionCandidateRegionList* regions) { + if (regions->length() == 0) { + return; + } + candidates()->remove(regions); + + // We can now drop these region's remembered sets. + for (HeapRegion* r : *regions) { + r->rem_set()->clear(true /* only_cardset */); + } +} + void G1CollectionSet::finalize_initial_collection_set(double target_pause_time_ms, G1SurvivorRegions* survivor) { double time_remaining_ms = finalize_young_part(target_pause_time_ms, survivor); finalize_old_part(time_remaining_ms); diff --git a/src/hotspot/share/gc/g1/g1CollectionSet.hpp b/src/hotspot/share/gc/g1/g1CollectionSet.hpp index 133246a52081d..fba166e9c75b0 100644 --- a/src/hotspot/share/gc/g1/g1CollectionSet.hpp +++ b/src/hotspot/share/gc/g1/g1CollectionSet.hpp @@ -177,6 +177,12 @@ class G1CollectionSet { // Prepares old regions in the given set for optional collection later. Does not // add the region to collection set yet. void prepare_optional_regions(G1CollectionCandidateRegionList* regions); + // Moves given old regions from the marking candidates to the retained candidates. + // This makes sure that marking candidates will not remain there to unnecessarily + // prolong the mixed phase. + void move_pinned_marking_to_retained(G1CollectionCandidateRegionList* regions); + // Removes the given list of regions from the retained candidates. + void drop_pinned_retained_regions(G1CollectionCandidateRegionList* regions); // Finalize the young part of the initial collection set. Relabel survivor regions // as Eden and calculate a prediction on how long the evacuation of all young regions @@ -186,8 +192,8 @@ class G1CollectionSet { // can use them. void finalize_incremental_building(); - // Select the old regions of the initial collection set and determine how many optional - // regions we might be able to evacuate in this pause. + // Select the regions comprising the initial and optional collection set from marking + // and retained collection set candidates. void finalize_old_part(double time_remaining_ms); // Iterate the part of the collection set given by the offset and length applying the given diff --git a/src/hotspot/share/gc/g1/g1CollectionSetCandidates.cpp b/src/hotspot/share/gc/g1/g1CollectionSetCandidates.cpp index 426e96ea779ba..9f903bc924f1e 100644 --- a/src/hotspot/share/gc/g1/g1CollectionSetCandidates.cpp +++ b/src/hotspot/share/gc/g1/g1CollectionSetCandidates.cpp @@ -31,15 +31,15 @@ G1CollectionCandidateList::G1CollectionCandidateList() : _candidates(2, mtGC) { } -void G1CollectionCandidateList::set(G1CollectionCandidateList::CandidateInfo* candidate_infos, uint num_infos) { +void G1CollectionCandidateList::set(G1CollectionSetCandidateInfo* candidate_infos, uint num_infos) { assert(_candidates.is_empty(), "must be"); - GrowableArrayFromArray a(candidate_infos, (int)num_infos); + GrowableArrayFromArray a(candidate_infos, (int)num_infos); _candidates.appendAll(&a); } void G1CollectionCandidateList::append_unsorted(HeapRegion* r) { - CandidateInfo c(r, r->calc_gc_efficiency()); + G1CollectionSetCandidateInfo c(r, r->calc_gc_efficiency()); _candidates.append(c); } @@ -58,7 +58,7 @@ void G1CollectionCandidateList::remove(G1CollectionCandidateRegionList* other) { // Create a list from scratch, copying over the elements from the candidate // list not in the other list. Finally deallocate and overwrite the old list. int new_length = _candidates.length() - other->length(); - GrowableArray new_list(new_length, mtGC); + GrowableArray new_list(new_length, mtGC); uint other_idx = 0; @@ -81,10 +81,10 @@ void G1CollectionCandidateList::clear() { #ifndef PRODUCT void G1CollectionCandidateList::verify() { - CandidateInfo* prev = nullptr; + G1CollectionSetCandidateInfo* prev = nullptr; for (uint i = 0; i < (uint)_candidates.length(); i++) { - CandidateInfo& ci = _candidates.at(i); + G1CollectionSetCandidateInfo& ci = _candidates.at(i); assert(prev == nullptr || prev->_gc_efficiency >= ci._gc_efficiency, "Stored gc efficiency must be descending from region %u to %u", prev->_r->hrm_index(), ci._r->hrm_index()); @@ -94,7 +94,7 @@ void G1CollectionCandidateList::verify() { } #endif -int G1CollectionCandidateList::compare(CandidateInfo* ci1, CandidateInfo* ci2) { +int G1CollectionCandidateList::compare(G1CollectionSetCandidateInfo* ci1, G1CollectionSetCandidateInfo* ci2) { // Make sure that null entries are moved to the end. if (ci1->_r == nullptr) { if (ci2->_r == nullptr) { @@ -182,7 +182,7 @@ void G1CollectionSetCandidates::clear() { _last_marking_candidates_length = 0; } -void G1CollectionSetCandidates::set_candidates_from_marking(G1CollectionCandidateList::CandidateInfo* candidate_infos, +void G1CollectionSetCandidates::set_candidates_from_marking(G1CollectionSetCandidateInfo* candidate_infos, uint num_infos) { assert(_marking_regions.length() == 0, "must be empty before adding new ones"); diff --git a/src/hotspot/share/gc/g1/g1CollectionSetCandidates.hpp b/src/hotspot/share/gc/g1/g1CollectionSetCandidates.hpp index 4b0ec643aa9a9..4eb5523d0399e 100644 --- a/src/hotspot/share/gc/g1/g1CollectionSetCandidates.hpp +++ b/src/hotspot/share/gc/g1/g1CollectionSetCandidates.hpp @@ -26,6 +26,8 @@ #define SHARE_GC_G1_G1COLLECTIONSETCANDIDATES_HPP #include "gc/g1/g1CollectionSetCandidates.hpp" +#include "gc/g1/g1_globals.hpp" +#include "gc/shared/gc_globals.hpp" #include "gc/shared/workerThread.hpp" #include "memory/allocation.hpp" #include "runtime/globals.hpp" @@ -64,6 +66,20 @@ class G1CollectionCandidateRegionList { G1CollectionCandidateRegionListIterator end() const { return _regions.end(); } }; +struct G1CollectionSetCandidateInfo { + HeapRegion* _r; + double _gc_efficiency; + uint _num_unreclaimed; // Number of GCs this region has been found unreclaimable. + + G1CollectionSetCandidateInfo() : G1CollectionSetCandidateInfo(nullptr, 0.0) { } + G1CollectionSetCandidateInfo(HeapRegion* r, double gc_efficiency) : _r(r), _gc_efficiency(gc_efficiency), _num_unreclaimed(0) { } + + bool update_num_unreclaimed() { + ++_num_unreclaimed; + return _num_unreclaimed < G1NumCollectionsKeepPinned; + } +}; + class G1CollectionCandidateListIterator : public StackObj { G1CollectionCandidateList* _which; uint _position; @@ -72,7 +88,7 @@ class G1CollectionCandidateListIterator : public StackObj { G1CollectionCandidateListIterator(G1CollectionCandidateList* which, uint position); G1CollectionCandidateListIterator& operator++(); - HeapRegion* operator*(); + G1CollectionSetCandidateInfo* operator*(); bool operator==(const G1CollectionCandidateListIterator& rhs); bool operator!=(const G1CollectionCandidateListIterator& rhs); @@ -83,23 +99,13 @@ class G1CollectionCandidateListIterator : public StackObj { class G1CollectionCandidateList : public CHeapObj { friend class G1CollectionCandidateListIterator; -public: - struct CandidateInfo { - HeapRegion* _r; - double _gc_efficiency; - - CandidateInfo() : CandidateInfo(nullptr, 0.0) { } - CandidateInfo(HeapRegion* r, double gc_efficiency) : _r(r), _gc_efficiency(gc_efficiency) { } - }; - -private: - GrowableArray _candidates; + GrowableArray _candidates; public: G1CollectionCandidateList(); // Put the given set of candidates into this list, preserving the efficiency ordering. - void set(CandidateInfo* candidate_infos, uint num_infos); + void set(G1CollectionSetCandidateInfo* candidate_infos, uint num_infos); // Add the given HeapRegion to this list at the end, (potentially) making the list unsorted. void append_unsorted(HeapRegion* r); // Restore sorting order by decreasing gc efficiency, using the existing efficiency @@ -114,7 +120,7 @@ class G1CollectionCandidateList : public CHeapObj { void clear(); - CandidateInfo& at(uint position) { return _candidates.at(position); } + G1CollectionSetCandidateInfo& at(uint position) { return _candidates.at(position); } uint length() const { return (uint)_candidates.length(); } @@ -123,7 +129,7 @@ class G1CollectionCandidateList : public CHeapObj { // Comparison function to order regions in decreasing GC efficiency order. This // will cause regions with a lot of live objects and large remembered sets to end // up at the end of the list. - static int compare(CandidateInfo* ci1, CandidateInfo* ci2); + static int compare(G1CollectionSetCandidateInfo* ci1, G1CollectionSetCandidateInfo* ci2); G1CollectionCandidateListIterator begin() { return G1CollectionCandidateListIterator(this, 0); @@ -138,9 +144,9 @@ class G1CollectionCandidateList : public CHeapObj { // of the regions returned. class G1CollectionSetCandidatesIterator : public StackObj { G1CollectionSetCandidates* _which; - uint _position; + uint _position; -public: + public: G1CollectionSetCandidatesIterator(G1CollectionSetCandidates* which, uint position); G1CollectionSetCandidatesIterator& operator++(); @@ -198,7 +204,7 @@ class G1CollectionSetCandidates : public CHeapObj { // Merge collection set candidates from marking into the current marking list // (which needs to be empty). - void set_candidates_from_marking(G1CollectionCandidateList::CandidateInfo* candidate_infos, + void set_candidates_from_marking(G1CollectionSetCandidateInfo* candidate_infos, uint num_infos); // The most recent length of the list that had been merged last via // set_candidates_from_marking(). Used for calculating minimum collection set diff --git a/src/hotspot/share/gc/g1/g1CollectionSetCandidates.inline.hpp b/src/hotspot/share/gc/g1/g1CollectionSetCandidates.inline.hpp index 0d391e6bebf70..638a50b474535 100644 --- a/src/hotspot/share/gc/g1/g1CollectionSetCandidates.inline.hpp +++ b/src/hotspot/share/gc/g1/g1CollectionSetCandidates.inline.hpp @@ -38,8 +38,8 @@ inline G1CollectionCandidateListIterator& G1CollectionCandidateListIterator::ope return *this; } -inline HeapRegion* G1CollectionCandidateListIterator::operator*() { - return _which->_candidates.at(_position)._r; +inline G1CollectionSetCandidateInfo* G1CollectionCandidateListIterator::operator*() { + return &_which->_candidates.at(_position); } inline bool G1CollectionCandidateListIterator::operator==(const G1CollectionCandidateListIterator& rhs) { diff --git a/src/hotspot/share/gc/g1/g1CollectionSetChooser.cpp b/src/hotspot/share/gc/g1/g1CollectionSetChooser.cpp index 28132ea172b1a..f19488a49a8ae 100644 --- a/src/hotspot/share/gc/g1/g1CollectionSetChooser.cpp +++ b/src/hotspot/share/gc/g1/g1CollectionSetChooser.cpp @@ -39,7 +39,7 @@ // moved to the destination. class G1BuildCandidateRegionsTask : public WorkerTask { - using CandidateInfo = G1CollectionCandidateList::CandidateInfo; + using CandidateInfo = G1CollectionSetCandidateInfo; // Work area for building the set of collection set candidates. Contains references // to heap regions with their GC efficiencies calculated. To reduce contention diff --git a/src/hotspot/share/gc/g1/g1ConcurrentMark.cpp b/src/hotspot/share/gc/g1/g1ConcurrentMark.cpp index a9bafa4466479..fb99e028c624f 100644 --- a/src/hotspot/share/gc/g1/g1ConcurrentMark.cpp +++ b/src/hotspot/share/gc/g1/g1ConcurrentMark.cpp @@ -1363,7 +1363,10 @@ class G1ReclaimEmptyRegionsTask : public WorkerTask { uint humongous_regions_removed() { return _humongous_regions_removed; } bool do_heap_region(HeapRegion *hr) { - if (hr->used() > 0 && hr->live_bytes() == 0 && !hr->is_young()) { + bool can_reclaim = hr->used() > 0 && hr->live_bytes() == 0 && + !hr->is_young() && !hr->has_pinned_objects(); + + if (can_reclaim) { log_trace(gc, marking)("Reclaimed empty old gen region %u (%s) bot " PTR_FORMAT, hr->hrm_index(), hr->get_short_type_str(), p2i(hr->bottom())); _freed_bytes += hr->used(); diff --git a/src/hotspot/share/gc/g1/g1EvacFailureRegions.cpp b/src/hotspot/share/gc/g1/g1EvacFailureRegions.cpp index 6964028d1f87d..a308fe7a3934a 100644 --- a/src/hotspot/share/gc/g1/g1EvacFailureRegions.cpp +++ b/src/hotspot/share/gc/g1/g1EvacFailureRegions.cpp @@ -33,29 +33,35 @@ #include "utilities/bitMap.inline.hpp" G1EvacFailureRegions::G1EvacFailureRegions() : - _regions_failed_evacuation(mtGC), - _evac_failure_regions(nullptr), - _evac_failure_regions_cur_length(0) { } + _regions_evac_failed(mtGC), + _regions_pinned(mtGC), + _regions_alloc_failed(mtGC), + _evac_failed_regions(nullptr), + _num_regions_evac_failed(0) { } G1EvacFailureRegions::~G1EvacFailureRegions() { - assert(_evac_failure_regions == nullptr, "not cleaned up"); + assert(_evac_failed_regions == nullptr, "not cleaned up"); } void G1EvacFailureRegions::pre_collection(uint max_regions) { - Atomic::store(&_evac_failure_regions_cur_length, 0u); - _regions_failed_evacuation.resize(max_regions); - _evac_failure_regions = NEW_C_HEAP_ARRAY(uint, max_regions, mtGC); + Atomic::store(&_num_regions_evac_failed, 0u); + _regions_evac_failed.resize(max_regions); + _regions_pinned.resize(max_regions); + _regions_alloc_failed.resize(max_regions); + _evac_failed_regions = NEW_C_HEAP_ARRAY(uint, max_regions, mtGC); } void G1EvacFailureRegions::post_collection() { - _regions_failed_evacuation.resize(0); + _regions_evac_failed.resize(0); + _regions_pinned.resize(0); + _regions_alloc_failed.resize(0); - FREE_C_HEAP_ARRAY(uint, _evac_failure_regions); - _evac_failure_regions = nullptr; + FREE_C_HEAP_ARRAY(uint, _evac_failed_regions); + _evac_failed_regions = nullptr; } bool G1EvacFailureRegions::contains(uint region_idx) const { - return _regions_failed_evacuation.par_at(region_idx, memory_order_relaxed); + return _regions_evac_failed.par_at(region_idx, memory_order_relaxed); } void G1EvacFailureRegions::par_iterate(HeapRegionClosure* closure, @@ -63,7 +69,7 @@ void G1EvacFailureRegions::par_iterate(HeapRegionClosure* closure, uint worker_id) const { G1CollectedHeap::heap()->par_iterate_regions_array(closure, hrclaimer, - _evac_failure_regions, - Atomic::load(&_evac_failure_regions_cur_length), + _evac_failed_regions, + Atomic::load(&_num_regions_evac_failed), worker_id); } diff --git a/src/hotspot/share/gc/g1/g1EvacFailureRegions.hpp b/src/hotspot/share/gc/g1/g1EvacFailureRegions.hpp index 043d69ff143ba..b8f9ea8003884 100644 --- a/src/hotspot/share/gc/g1/g1EvacFailureRegions.hpp +++ b/src/hotspot/share/gc/g1/g1EvacFailureRegions.hpp @@ -25,32 +25,43 @@ #ifndef SHARE_GC_G1_G1EVACFAILUREREGIONS_HPP #define SHARE_GC_G1_G1EVACFAILUREREGIONS_HPP -#include "runtime/atomic.hpp" #include "utilities/bitMap.hpp" class G1AbstractSubTask; -class G1HeapRegionChunkClosure; class HeapRegionClosure; class HeapRegionClaimer; -// This class records for every region on the heap whether evacuation failed for it, -// and records for every evacuation failure region to speed up iteration of these -// regions in post evacuation phase. +// This class records for every region on the heap whether it had experienced an +// evacuation failure. +// An evacuation failure may occur due to pinning or due to allocation failure +// (not enough to-space). For every such occurrence the class records region +// information to speed up iteration of these regions in various gc phases. +// +// Pinned regions may experience an allocation failure at the same time as G1 +// tries to evacuate anything but objects that are possible to be pinned. So +// +// _num_regions_pinned + _num_regions_alloc_failed >= _num_regions_evac_failed +// class G1EvacFailureRegions { - // Records for every region on the heap whether evacuation failed for it. - CHeapBitMap _regions_failed_evacuation; - // Regions (index) of evacuation failed in the current collection. - uint* _evac_failure_regions; + // Records for every region on the heap whether the region has experienced an + // evacuation failure. + CHeapBitMap _regions_evac_failed; + // Records for every region on the heap whether the evacuation failure cause + // has been allocation failure or region pinning. + CHeapBitMap _regions_pinned; + CHeapBitMap _regions_alloc_failed; + // Evacuation failed regions (indexes) in the current collection. + uint* _evac_failed_regions; // Number of regions evacuation failed in the current collection. - volatile uint _evac_failure_regions_cur_length; + volatile uint _num_regions_evac_failed; public: G1EvacFailureRegions(); ~G1EvacFailureRegions(); uint get_region_idx(uint idx) const { - assert(idx < _evac_failure_regions_cur_length, "precondition"); - return _evac_failure_regions[idx]; + assert(idx < _num_regions_evac_failed, "precondition"); + return _evac_failed_regions[idx]; } // Sets up the bitmap and failed regions array for addition. @@ -66,18 +77,16 @@ class G1EvacFailureRegions { // Return a G1AbstractSubTask which does necessary preparation for evacuation failed regions G1AbstractSubTask* create_prepare_regions_task(); - uint num_regions_failed_evacuation() const { - return Atomic::load(&_evac_failure_regions_cur_length); - } + inline uint num_regions_evac_failed() const; - bool evacuation_failed() const { - return num_regions_failed_evacuation() > 0; - } + inline bool has_regions_evac_failed() const; + inline bool has_regions_evac_pinned() const; + inline bool has_regions_alloc_failed() const; // Record that the garbage collection encountered an evacuation failure in the // given region. Returns whether this has been the first occurrence of an evacuation // failure in that region. - inline bool record(uint region_idx); + inline bool record(uint worker_id, uint region_idx, bool cause_pinned); }; #endif //SHARE_GC_G1_G1EVACFAILUREREGIONS_HPP diff --git a/src/hotspot/share/gc/g1/g1EvacFailureRegions.inline.hpp b/src/hotspot/share/gc/g1/g1EvacFailureRegions.inline.hpp index 48d9eb6deaac8..28be8562b523f 100644 --- a/src/hotspot/share/gc/g1/g1EvacFailureRegions.inline.hpp +++ b/src/hotspot/share/gc/g1/g1EvacFailureRegions.inline.hpp @@ -27,19 +27,60 @@ #include "gc/g1/g1CollectedHeap.inline.hpp" #include "gc/g1/g1EvacFailureRegions.hpp" +#include "gc/g1/g1GCPhaseTimes.hpp" #include "runtime/atomic.hpp" -bool G1EvacFailureRegions::record(uint region_idx) { - bool success = _regions_failed_evacuation.par_set_bit(region_idx, - memory_order_relaxed); +uint G1EvacFailureRegions::num_regions_evac_failed() const { + return Atomic::load(&_num_regions_evac_failed); +} + +bool G1EvacFailureRegions::has_regions_evac_failed() const { + return num_regions_evac_failed() > 0; +} + +bool G1EvacFailureRegions::has_regions_evac_pinned() const { + G1GCPhaseTimes* p = G1CollectedHeap::heap()->phase_times(); + size_t count = p->sum_thread_work_items(G1GCPhaseTimes::RestoreEvacuationFailedRegions, + G1GCPhaseTimes::RestoreEvacFailureRegionsPinnedNum); + return count != 0; +} + +bool G1EvacFailureRegions::has_regions_alloc_failed() const { + G1GCPhaseTimes* p = G1CollectedHeap::heap()->phase_times(); + size_t count = p->sum_thread_work_items(G1GCPhaseTimes::RestoreEvacuationFailedRegions, + G1GCPhaseTimes::RestoreEvacFailureRegionsAllocFailedNum); + return count != 0; +} + +bool G1EvacFailureRegions::record(uint worker_id, uint region_idx, bool cause_pinned) { + bool success = _regions_evac_failed.par_set_bit(region_idx, + memory_order_relaxed); if (success) { - size_t offset = Atomic::fetch_then_add(&_evac_failure_regions_cur_length, 1u); - _evac_failure_regions[offset] = region_idx; + size_t offset = Atomic::fetch_then_add(&_num_regions_evac_failed, 1u); + _evac_failed_regions[offset] = region_idx; G1CollectedHeap* g1h = G1CollectedHeap::heap(); HeapRegion* hr = g1h->region_at(region_idx); hr->note_evacuation_failure(); } + + if (cause_pinned) { + if (_regions_pinned.par_set_bit(region_idx, memory_order_relaxed)) { + G1GCPhaseTimes* p = G1CollectedHeap::heap()->phase_times(); + p->record_or_add_thread_work_item(G1GCPhaseTimes::RestoreEvacuationFailedRegions, + worker_id, + 1, + G1GCPhaseTimes::RestoreEvacFailureRegionsPinnedNum); + } + } else { + if (_regions_alloc_failed.par_set_bit(region_idx, memory_order_relaxed)) { + G1GCPhaseTimes* p = G1CollectedHeap::heap()->phase_times(); + p->record_or_add_thread_work_item(G1GCPhaseTimes::RestoreEvacuationFailedRegions, + worker_id, + 1, + G1GCPhaseTimes::RestoreEvacFailureRegionsAllocFailedNum); + } + } return success; } diff --git a/src/hotspot/share/gc/g1/g1FullCollector.cpp b/src/hotspot/share/gc/g1/g1FullCollector.cpp index 62e7cdfabd4fc..e4abb69caceec 100644 --- a/src/hotspot/share/gc/g1/g1FullCollector.cpp +++ b/src/hotspot/share/gc/g1/g1FullCollector.cpp @@ -257,9 +257,9 @@ void G1FullCollector::complete_collection() { void G1FullCollector::before_marking_update_attribute_table(HeapRegion* hr) { if (hr->is_free()) { _region_attr_table.set_free(hr->hrm_index()); - } else if (hr->is_humongous()) { - // Humongous objects will never be moved in the "main" compaction phase, but - // afterwards in a special phase if needed. + } else if (hr->is_humongous() || hr->has_pinned_objects()) { + // Humongous objects or pinned regions will never be moved in the "main" + // compaction phase, but non-pinned regions might afterwards in a special phase. _region_attr_table.set_skip_compacting(hr->hrm_index()); } else { // Everything else should be compacted. @@ -454,10 +454,16 @@ void G1FullCollector::phase2d_prepare_humongous_compaction() { region_index++; continue; } else if (hr->is_starts_humongous()) { - uint num_regions = humongous_cp->forward_humongous(hr); - region_index += num_regions; // Skip over the continues humongous regions. + size_t obj_size = cast_to_oop(hr->bottom())->size(); + uint num_regions = (uint)G1CollectedHeap::humongous_obj_size_in_regions(obj_size); + // Even during last-ditch compaction we should not move pinned humongous objects. + if (!hr->has_pinned_objects()) { + humongous_cp->forward_humongous(hr); + } + region_index += num_regions; // Advance over all humongous regions. continue; } else if (is_compaction_target(region_index)) { + assert(!hr->has_pinned_objects(), "pinned regions should not be compaction targets"); // Add the region to the humongous compaction point. humongous_cp->add(hr); } diff --git a/src/hotspot/share/gc/g1/g1FullGCCompactTask.cpp b/src/hotspot/share/gc/g1/g1FullGCCompactTask.cpp index 8c4fa4eb2e030..2ed6ccd4735fb 100644 --- a/src/hotspot/share/gc/g1/g1FullGCCompactTask.cpp +++ b/src/hotspot/share/gc/g1/g1FullGCCompactTask.cpp @@ -67,6 +67,7 @@ void G1FullGCCompactTask::copy_object_to_new_location(oop obj) { } void G1FullGCCompactTask::compact_region(HeapRegion* hr) { + assert(!hr->has_pinned_objects(), "Should be no region with pinned objects in compaction queue"); assert(!hr->is_humongous(), "Should be no humongous regions in compaction queue"); if (!collector()->is_free(hr->hrm_index())) { diff --git a/src/hotspot/share/gc/g1/g1FullGCCompactionPoint.cpp b/src/hotspot/share/gc/g1/g1FullGCCompactionPoint.cpp index dabff2bc9fb5a..7669771eb6c3c 100644 --- a/src/hotspot/share/gc/g1/g1FullGCCompactionPoint.cpp +++ b/src/hotspot/share/gc/g1/g1FullGCCompactionPoint.cpp @@ -145,7 +145,7 @@ void G1FullGCCompactionPoint::add_humongous(HeapRegion* hr) { }); } -uint G1FullGCCompactionPoint::forward_humongous(HeapRegion* hr) { +void G1FullGCCompactionPoint::forward_humongous(HeapRegion* hr) { assert(hr->is_starts_humongous(), "Sanity!"); oop obj = cast_to_oop(hr->bottom()); @@ -153,7 +153,7 @@ uint G1FullGCCompactionPoint::forward_humongous(HeapRegion* hr) { uint num_regions = (uint)G1CollectedHeap::humongous_obj_size_in_regions(obj_size); if (!has_regions()) { - return num_regions; + return; } // Find contiguous compaction target regions for the humongous object. @@ -161,7 +161,7 @@ uint G1FullGCCompactionPoint::forward_humongous(HeapRegion* hr) { if (range_begin == UINT_MAX) { // No contiguous compaction target regions found, so the object cannot be moved. - return num_regions; + return; } // Preserve the mark for the humongous object as the region was initially not compacting. @@ -177,7 +177,7 @@ uint G1FullGCCompactionPoint::forward_humongous(HeapRegion* hr) { // Remove covered regions from compaction target candidates. _compaction_regions->remove_range(range_begin, (range_begin + num_regions)); - return num_regions; + return; } uint G1FullGCCompactionPoint::find_contiguous_before(HeapRegion* hr, uint num_regions) { diff --git a/src/hotspot/share/gc/g1/g1FullGCCompactionPoint.hpp b/src/hotspot/share/gc/g1/g1FullGCCompactionPoint.hpp index ea8351f1299f8..ca76f7e6b9408 100644 --- a/src/hotspot/share/gc/g1/g1FullGCCompactionPoint.hpp +++ b/src/hotspot/share/gc/g1/g1FullGCCompactionPoint.hpp @@ -55,7 +55,7 @@ class G1FullGCCompactionPoint : public CHeapObj { void initialize(HeapRegion* hr); void update(); void forward(oop object, size_t size); - uint forward_humongous(HeapRegion* hr); + void forward_humongous(HeapRegion* hr); void add(HeapRegion* hr); void add_humongous(HeapRegion* hr); diff --git a/src/hotspot/share/gc/g1/g1FullGCPrepareTask.inline.hpp b/src/hotspot/share/gc/g1/g1FullGCPrepareTask.inline.hpp index 76a647a3da373..2a2add76f48c6 100644 --- a/src/hotspot/share/gc/g1/g1FullGCPrepareTask.inline.hpp +++ b/src/hotspot/share/gc/g1/g1FullGCPrepareTask.inline.hpp @@ -42,7 +42,7 @@ void G1DetermineCompactionQueueClosure::free_empty_humongous_region(HeapRegion* inline bool G1DetermineCompactionQueueClosure::should_compact(HeapRegion* hr) const { // There is no need to iterate and forward objects in non-movable regions ie. // prepare them for compaction. - if (hr->is_humongous()) { + if (hr->is_humongous() || hr->has_pinned_objects()) { return false; } size_t live_words = _collector->live_words(hr->hrm_index()); @@ -73,29 +73,41 @@ inline void G1DetermineCompactionQueueClosure::add_to_compaction_queue(HeapRegio cp->add(hr); } +static bool has_pinned_objects(HeapRegion* hr) { + return hr->has_pinned_objects() || + (hr->is_humongous() && hr->humongous_start_region()->has_pinned_objects()); +} + inline bool G1DetermineCompactionQueueClosure::do_heap_region(HeapRegion* hr) { if (should_compact(hr)) { assert(!hr->is_humongous(), "moving humongous objects not supported."); add_to_compaction_queue(hr); - } else { - assert(hr->containing_set() == nullptr, "already cleared by PrepareRegionsClosure"); - if (hr->is_humongous()) { - oop obj = cast_to_oop(hr->humongous_start_region()->bottom()); - bool is_empty = !_collector->mark_bitmap()->is_marked(obj); - if (is_empty) { - free_empty_humongous_region(hr); - } else { - _collector->set_has_humongous(); - } + return false; + } + + assert(hr->containing_set() == nullptr, "already cleared by PrepareRegionsClosure"); + if (has_pinned_objects(hr)) { + // First check regions with pinned objects: they need to be skipped regardless + // of region type and never be considered for reclamation. + assert(_collector->is_skip_compacting(hr->hrm_index()), "pinned region %u must be skip_compacting", hr->hrm_index()); + log_trace(gc, phases)("Phase 2: skip compaction region index: %u (%s), has pinned objects", + hr->hrm_index(), hr->get_short_type_str()); + } else if (hr->is_humongous()) { + oop obj = cast_to_oop(hr->humongous_start_region()->bottom()); + bool is_empty = !_collector->mark_bitmap()->is_marked(obj); + if (is_empty) { + free_empty_humongous_region(hr); } else { - assert(MarkSweepDeadRatio > 0, - "only skip compaction for other regions when MarkSweepDeadRatio > 0"); + _collector->set_has_humongous(); + } + } else { + assert(MarkSweepDeadRatio > 0, + "only skip compaction for other regions when MarkSweepDeadRatio > 0"); - // Too many live objects in the region; skip compacting it. - _collector->update_from_compacting_to_skip_compacting(hr->hrm_index()); - log_trace(gc, phases)("Phase 2: skip compaction region index: %u, live words: " SIZE_FORMAT, + // Too many live objects in the region; skip compacting it. + _collector->update_from_compacting_to_skip_compacting(hr->hrm_index()); + log_trace(gc, phases)("Phase 2: skip compaction region index: %u, live words: " SIZE_FORMAT, hr->hrm_index(), _collector->live_words(hr->hrm_index())); - } } return false; diff --git a/src/hotspot/share/gc/g1/g1FullGCResetMetadataTask.cpp b/src/hotspot/share/gc/g1/g1FullGCResetMetadataTask.cpp index 003cc2b3f2b89..ddbaaa0b75ef2 100644 --- a/src/hotspot/share/gc/g1/g1FullGCResetMetadataTask.cpp +++ b/src/hotspot/share/gc/g1/g1FullGCResetMetadataTask.cpp @@ -89,10 +89,11 @@ void G1FullGCResetMetadataTask::G1ResetMetadataClosure::reset_skip_compacting(He if (hr->is_humongous()) { oop obj = cast_to_oop(hr->humongous_start_region()->bottom()); - assert(_collector->mark_bitmap()->is_marked(obj), "must be live"); + assert(hr->humongous_start_region()->has_pinned_objects() || + _collector->mark_bitmap()->is_marked(obj), "must be live"); } else { - assert(_collector->live_words(region_index) > _collector->scope()->region_compaction_threshold(), - "should be quite full"); + assert(hr->has_pinned_objects() || _collector->live_words(region_index) > _collector->scope()->region_compaction_threshold(), + "should be quite full or pinned %u", region_index); } assert(_collector->compaction_top(hr) == nullptr, diff --git a/src/hotspot/share/gc/g1/g1GCPhaseTimes.cpp b/src/hotspot/share/gc/g1/g1GCPhaseTimes.cpp index 83824c486562d..43b582b7dd901 100644 --- a/src/hotspot/share/gc/g1/g1GCPhaseTimes.cpp +++ b/src/hotspot/share/gc/g1/g1GCPhaseTimes.cpp @@ -97,7 +97,7 @@ G1GCPhaseTimes::G1GCPhaseTimes(STWGCTimer* gc_timer, uint max_gc_threads) : _gc_par_phases[GCWorkerEnd] = new WorkerDataArray("GCWorkerEnd", "GC Worker End (ms):", max_gc_threads); _gc_par_phases[Other] = new WorkerDataArray("Other", "GC Worker Other (ms):", max_gc_threads); _gc_par_phases[MergePSS] = new WorkerDataArray("MergePSS", "Merge Per-Thread State (ms):", max_gc_threads); - _gc_par_phases[RestoreRetainedRegions] = new WorkerDataArray("RestoreRetainedRegions", "Restore Retained Regions (ms):", max_gc_threads); + _gc_par_phases[RestoreEvacuationFailedRegions] = new WorkerDataArray("RestoreEvacuationFailedRegions", "Restore Evacuation Failed Regions (ms):", max_gc_threads); _gc_par_phases[RemoveSelfForwards] = new WorkerDataArray("RemoveSelfForwards", "Remove Self Forwards (ms):", max_gc_threads); _gc_par_phases[ClearCardTable] = new WorkerDataArray("ClearLoggedCards", "Clear Logged Cards (ms):", max_gc_threads); _gc_par_phases[RecalculateUsed] = new WorkerDataArray("RecalculateUsed", "Recalculate Used Memory (ms):", max_gc_threads); @@ -132,8 +132,9 @@ G1GCPhaseTimes::G1GCPhaseTimes(STWGCTimer* gc_timer, uint max_gc_threads) : _gc_par_phases[MergePSS]->create_thread_work_items("LAB Undo Waste", MergePSSLABUndoWasteBytes); _gc_par_phases[MergePSS]->create_thread_work_items("Evac Fail Extra Cards", MergePSSEvacFailExtra); - _gc_par_phases[RestoreRetainedRegions]->create_thread_work_items("Evacuation Failed Regions:", RestoreRetainedRegionsFailedNum); - _gc_par_phases[RestoreRetainedRegions]->create_thread_work_items("New Retained Regions:", RestoreRetainedRegionsRetainedNum); + _gc_par_phases[RestoreEvacuationFailedRegions]->create_thread_work_items("Evacuation Failed Regions:", RestoreEvacFailureRegionsEvacFailedNum); + _gc_par_phases[RestoreEvacuationFailedRegions]->create_thread_work_items("Pinned Regions:", RestoreEvacFailureRegionsPinnedNum); + _gc_par_phases[RestoreEvacuationFailedRegions]->create_thread_work_items("Allocation Failed Regions:", RestoreEvacFailureRegionsAllocFailedNum); _gc_par_phases[RemoveSelfForwards]->create_thread_work_items("Forward Chunks:", RemoveSelfForwardChunksNum); _gc_par_phases[RemoveSelfForwards]->create_thread_work_items("Empty Forward Chunks:", RemoveSelfForwardEmptyChunksNum); @@ -502,7 +503,7 @@ double G1GCPhaseTimes::print_post_evacuate_collection_set(bool evacuation_failed debug_phase(_gc_par_phases[ClearCardTable], 1); debug_phase(_gc_par_phases[RecalculateUsed], 1); if (evacuation_failed) { - debug_phase(_gc_par_phases[RestoreRetainedRegions], 1); + debug_phase(_gc_par_phases[RestoreEvacuationFailedRegions], 1); debug_phase(_gc_par_phases[RemoveSelfForwards], 2); } diff --git a/src/hotspot/share/gc/g1/g1GCPhaseTimes.hpp b/src/hotspot/share/gc/g1/g1GCPhaseTimes.hpp index de03ecab99ff6..713b411bda110 100644 --- a/src/hotspot/share/gc/g1/g1GCPhaseTimes.hpp +++ b/src/hotspot/share/gc/g1/g1GCPhaseTimes.hpp @@ -79,7 +79,7 @@ class G1GCPhaseTimes : public CHeapObj { RebuildFreeList, SampleCollectionSetCandidates, MergePSS, - RestoreRetainedRegions, + RestoreEvacuationFailedRegions, RemoveSelfForwards, ClearCardTable, RecalculateUsed, @@ -146,9 +146,10 @@ class G1GCPhaseTimes : public CHeapObj { MergePSSEvacFailExtra }; - enum RestoreRetainedRegionsWorkItems { - RestoreRetainedRegionsFailedNum, - RestoreRetainedRegionsRetainedNum + enum RestoreEvacFailureRegionsWorkItems { + RestoreEvacFailureRegionsEvacFailedNum, // How many regions experienced an evacuation failure (pinned or allocation failure) + RestoreEvacFailureRegionsPinnedNum, // How many regions were found as pinned. + RestoreEvacFailureRegionsAllocFailedNum // How many regions were found experiencing an allocation failure. }; enum RemoveSelfForwardsWorkItems { diff --git a/src/hotspot/share/gc/g1/g1HeapRegionAttr.hpp b/src/hotspot/share/gc/g1/g1HeapRegionAttr.hpp index 7d2ab4f26ea5b..e5a10858ed126 100644 --- a/src/hotspot/share/gc/g1/g1HeapRegionAttr.hpp +++ b/src/hotspot/share/gc/g1/g1HeapRegionAttr.hpp @@ -36,10 +36,14 @@ struct G1HeapRegionAttr { // remset_is_tracked_t is essentially bool, but we need precise control // on the size, and sizeof(bool) is implementation specific. typedef uint8_t remset_is_tracked_t; + // _is_pinned_t is essentially bool, but we want precise control + // on the size, and sizeof(bool) is implementation specific. + typedef uint8_t is_pinned_t; private: remset_is_tracked_t _remset_is_tracked; region_type_t _type; + is_pinned_t _is_pinned; public: // Selection of the values for the _type field were driven to micro-optimize the @@ -59,9 +63,8 @@ struct G1HeapRegionAttr { static const region_type_t Old = 1; // The region is in the collection set and an old region. static const region_type_t Num = 2; - G1HeapRegionAttr(region_type_t type = NotInCSet, bool remset_is_tracked = false) : - _remset_is_tracked(remset_is_tracked), _type(type) { - + G1HeapRegionAttr(region_type_t type = NotInCSet, bool remset_is_tracked = false, bool is_pinned = false) : + _remset_is_tracked(remset_is_tracked ? 1 : 0), _type(type), _is_pinned(is_pinned ? 1 : 0) { assert(is_valid(), "Invalid type %d", _type); } @@ -82,12 +85,16 @@ struct G1HeapRegionAttr { bool remset_is_tracked() const { return _remset_is_tracked != 0; } void set_new_survivor() { _type = NewSurvivor; } + bool is_pinned() const { return _is_pinned != 0; } + void set_old() { _type = Old; } void clear_humongous_candidate() { assert(is_humongous_candidate() || !is_in_cset(), "must be"); _type = NotInCSet; } + void set_remset_is_tracked(bool value) { _remset_is_tracked = value ? 1 : 0; } + void set_is_pinned(bool value) { _is_pinned = value ? 1 : 0; } bool is_in_cset_or_humongous_candidate() const { return is_in_cset() || is_humongous_candidate(); } bool is_in_cset() const { return type() >= Young; } @@ -136,7 +143,9 @@ class G1HeapRegionAttrBiasedMappedArray : public G1BiasedMappedArrayset_remset_is_tracked(remset_is_tracked); } - void set_in_young(uintptr_t index) { + void set_is_pinned(uintptr_t index, bool is_pinned) { + get_ref_by_index(index)->set_is_pinned(is_pinned); + } + + void set_in_young(uintptr_t index, bool is_pinned) { assert(get_by_index(index).is_default(), "Region attributes at index " INTPTR_FORMAT " should be default but is %s", index, get_by_index(index).get_type_str()); - set_by_index(index, G1HeapRegionAttr(G1HeapRegionAttr::Young, true)); + set_by_index(index, G1HeapRegionAttr(G1HeapRegionAttr::Young, true, is_pinned)); } void set_in_old(uintptr_t index, bool remset_is_tracked) { assert(get_by_index(index).is_default(), "Region attributes at index " INTPTR_FORMAT " should be default but is %s", index, get_by_index(index).get_type_str()); - set_by_index(index, G1HeapRegionAttr(G1HeapRegionAttr::Old, remset_is_tracked)); + // We do not select regions with pinned objects into the collection set. + const bool region_is_pinned = false; + set_by_index(index, G1HeapRegionAttr(G1HeapRegionAttr::Old, remset_is_tracked, region_is_pinned)); } bool is_in_cset_or_humongous_candidate(HeapWord* addr) const { return at(addr).is_in_cset_or_humongous_candidate(); } diff --git a/src/hotspot/share/gc/g1/g1MonitoringSupport.cpp b/src/hotspot/share/gc/g1/g1MonitoringSupport.cpp index c4f2c1284032b..4e0a7dcfc3d6b 100644 --- a/src/hotspot/share/gc/g1/g1MonitoringSupport.cpp +++ b/src/hotspot/share/gc/g1/g1MonitoringSupport.cpp @@ -247,11 +247,10 @@ void G1MonitoringSupport::recalculate_sizes() { _old_gen_used = _overall_used - MIN2(_overall_used, _eden_space_used + _survivor_space_used); uint survivor_list_length = _g1h->survivor_regions_count(); - // Max length includes any potential extensions to the young gen - // we'll do when the GC locker is active. - uint young_list_max_length = _g1h->policy()->young_list_max_length(); - assert(young_list_max_length >= survivor_list_length, "invariant"); - uint eden_list_max_length = young_list_max_length - survivor_list_length; + + uint young_list_target_length = _g1h->policy()->young_list_target_length(); + assert(young_list_target_length >= survivor_list_length, "invariant"); + uint eden_list_max_length = young_list_target_length - survivor_list_length; // First calculate the committed sizes that can be calculated independently. _survivor_space_committed = survivor_list_length * HeapRegion::GrainBytes; diff --git a/src/hotspot/share/gc/g1/g1ParScanThreadState.cpp b/src/hotspot/share/gc/g1/g1ParScanThreadState.cpp index f9fc1fd019814..d011516fba146 100644 --- a/src/hotspot/share/gc/g1/g1ParScanThreadState.cpp +++ b/src/hotspot/share/gc/g1/g1ParScanThreadState.cpp @@ -428,7 +428,7 @@ HeapWord* G1ParScanThreadState::allocate_copy_slow(G1HeapRegionAttr* dest_attr, } #if EVAC_FAILURE_INJECTOR -bool G1ParScanThreadState::inject_evacuation_failure(uint region_idx) { +bool G1ParScanThreadState::inject_allocation_failure(uint region_idx) { return _g1h->evac_failure_injector()->evacuation_should_fail(_evac_failure_inject_counter, region_idx); } #endif @@ -461,6 +461,11 @@ oop G1ParScanThreadState::do_copy_to_survivor_space(G1HeapRegionAttr const regio Klass* klass = old->klass(); const size_t word_sz = old->size_given_klass(klass); + // JNI only allows pinning of typeArrays, so we only need to keep those in place. + if (region_attr.is_pinned() && klass->is_typeArray_klass()) { + return handle_evacuation_failure_par(old, old_mark, word_sz, true /* cause_pinned */); + } + uint age = 0; G1HeapRegionAttr dest_attr = next_region_attr(region_attr, old_mark, age); HeapRegion* const from_region = _g1h->heap_region_containing(old); @@ -475,7 +480,7 @@ oop G1ParScanThreadState::do_copy_to_survivor_space(G1HeapRegionAttr const regio if (obj_ptr == nullptr) { // This will either forward-to-self, or detect that someone else has // installed a forwarding pointer. - return handle_evacuation_failure_par(old, old_mark, word_sz); + return handle_evacuation_failure_par(old, old_mark, word_sz, false /* cause_pinned */); } } @@ -483,11 +488,11 @@ oop G1ParScanThreadState::do_copy_to_survivor_space(G1HeapRegionAttr const regio assert(_g1h->is_in_reserved(obj_ptr), "Allocated memory should be in the heap"); // Should this evacuation fail? - if (inject_evacuation_failure(from_region->hrm_index())) { + if (inject_allocation_failure(from_region->hrm_index())) { // Doing this after all the allocation attempts also tests the // undo_allocation() method too. undo_allocation(dest_attr, obj_ptr, word_sz, node_index); - return handle_evacuation_failure_par(old, old_mark, word_sz); + return handle_evacuation_failure_par(old, old_mark, word_sz, false /* cause_pinned */); } // We're going to allocate linearly, so might as well prefetch ahead. @@ -624,7 +629,7 @@ void G1ParScanThreadStateSet::record_unused_optional_region(HeapRegion* hr) { } NOINLINE -oop G1ParScanThreadState::handle_evacuation_failure_par(oop old, markWord m, size_t word_sz) { +oop G1ParScanThreadState::handle_evacuation_failure_par(oop old, markWord m, size_t word_sz, bool cause_pinned) { assert(_g1h->is_in_cset(old), "Object " PTR_FORMAT " should be in the CSet", p2i(old)); oop forward_ptr = old->forward_to_atomic(old, m, memory_order_relaxed); @@ -632,7 +637,7 @@ oop G1ParScanThreadState::handle_evacuation_failure_par(oop old, markWord m, siz // Forward-to-self succeeded. We are the "owner" of the object. HeapRegion* r = _g1h->heap_region_containing(old); - if (_evac_failure_regions->record(r->hrm_index())) { + if (_evac_failure_regions->record(_worker_id, r->hrm_index(), cause_pinned)) { _g1h->hr_printer()->evac_failure(r); } diff --git a/src/hotspot/share/gc/g1/g1ParScanThreadState.hpp b/src/hotspot/share/gc/g1/g1ParScanThreadState.hpp index d1e8c0cb6d676..5347b6341f885 100644 --- a/src/hotspot/share/gc/g1/g1ParScanThreadState.hpp +++ b/src/hotspot/share/gc/g1/g1ParScanThreadState.hpp @@ -120,7 +120,7 @@ class G1ParScanThreadState : public CHeapObj { // Enqueue the card of p into the (evacuation failed) region. template void enqueue_card_into_evac_fail_region(T* p, oop obj); - bool inject_evacuation_failure(uint region_idx) EVAC_FAILURE_INJECTOR_RETURN_( return false; ); + bool inject_allocation_failure(uint region_idx) EVAC_FAILURE_INJECTOR_RETURN_( return false; ); public: G1ParScanThreadState(G1CollectedHeap* g1h, @@ -231,7 +231,7 @@ class G1ParScanThreadState : public CHeapObj { void reset_trim_ticks(); // An attempt to evacuate "obj" has failed; take necessary steps. - oop handle_evacuation_failure_par(oop obj, markWord m, size_t word_sz); + oop handle_evacuation_failure_par(oop obj, markWord m, size_t word_sz, bool cause_pinned); template inline void remember_root_into_optional_region(T* p); diff --git a/src/hotspot/share/gc/g1/g1Policy.cpp b/src/hotspot/share/gc/g1/g1Policy.cpp index 1bc1d44691bbb..9e22acc73ca33 100644 --- a/src/hotspot/share/gc/g1/g1Policy.cpp +++ b/src/hotspot/share/gc/g1/g1Policy.cpp @@ -63,7 +63,6 @@ G1Policy::G1Policy(STWGCTimer* gc_timer) : _full_collection_start_sec(0.0), _young_list_desired_length(0), _young_list_target_length(0), - _young_list_max_length(0), _eden_surv_rate_group(new G1SurvRateGroup()), _survivor_surv_rate_group(new G1SurvRateGroup()), _reserve_factor((double) G1ReservePercent / 100.0), @@ -198,15 +197,13 @@ void G1Policy::update_young_length_bounds(size_t pending_cards, size_t card_rs_l uint new_young_list_desired_length = calculate_young_desired_length(pending_cards, card_rs_length, code_root_rs_length); uint new_young_list_target_length = calculate_young_target_length(new_young_list_desired_length); - uint new_young_list_max_length = calculate_young_max_length(new_young_list_target_length); - log_trace(gc, ergo, heap)("Young list length update: pending cards %zu card_rs_length %zu old target %u desired: %u target: %u max: %u", + log_trace(gc, ergo, heap)("Young list length update: pending cards %zu card_rs_length %zu old target %u desired: %u target: %u", pending_cards, card_rs_length, old_young_list_target_length, new_young_list_desired_length, - new_young_list_target_length, - new_young_list_max_length); + new_young_list_target_length); // Write back. This is not an attempt to control visibility order to other threads // here; all the revising of the young gen length are best effort to keep pause time. @@ -217,7 +214,6 @@ void G1Policy::update_young_length_bounds(size_t pending_cards, size_t card_rs_l // early or too late. Atomic::store(&_young_list_desired_length, new_young_list_desired_length); Atomic::store(&_young_list_target_length, new_young_list_target_length); - Atomic::store(&_young_list_max_length, new_young_list_max_length); } // Calculates desired young gen length. It is calculated from: @@ -321,8 +317,7 @@ uint G1Policy::calculate_young_target_length(uint desired_young_length) const { uint receiving_additional_eden; if (allocated_young_length >= desired_young_length) { // Already used up all we actually want (may happen as G1 revises the - // young list length concurrently, or caused by gclocker). Do not allow more, - // potentially resulting in GC. + // young list length concurrently). Do not allow more, potentially resulting in GC. receiving_additional_eden = 0; log_trace(gc, ergo, heap)("Young target length: Already used up desired young %u allocated %u", desired_young_length, @@ -496,11 +491,13 @@ uint G1Policy::calculate_desired_eden_length_before_mixed(double base_time_ms, uint min_marking_candidates = MIN2(calc_min_old_cset_length(candidates()->last_marking_candidates_length()), candidates()->marking_regions_length()); double predicted_region_evac_time_ms = base_time_ms; - for (HeapRegion* r : candidates()->marking_regions()) { + for (G1CollectionSetCandidateInfo* ci : candidates()->marking_regions()) { + // We optimistically assume that any of these marking candidate regions will + // not be pinned, so just consider them as normal. if (min_marking_candidates == 0) { break; } - predicted_region_evac_time_ms += predict_region_total_time_ms(r, false /* for_young_only_phase */); + predicted_region_evac_time_ms += predict_region_total_time_ms(ci->_r, false /* for_young_only_phase */); min_marking_candidates--; } @@ -523,13 +520,21 @@ double G1Policy::predict_survivor_regions_evac_time() const { double G1Policy::predict_retained_regions_evac_time() const { uint num_regions = 0; + uint num_pinned_regions = 0; + double result = 0.0; G1CollectionCandidateList& list = candidates()->retained_regions(); uint min_regions_left = MIN2(min_retained_old_cset_length(), list.length()); - for (HeapRegion* r : list) { + for (G1CollectionSetCandidateInfo* ci : list) { + HeapRegion* r = ci->_r; + // We optimistically assume that any of these marking candidate regions will + // be reclaimable the next gc, so just consider them as normal. + if (r->has_pinned_objects()) { + num_pinned_regions++; + } if (min_regions_left == 0) { // Minimum amount of regions considered. Exit. break; @@ -539,8 +544,8 @@ double G1Policy::predict_retained_regions_evac_time() const { num_regions++; } - log_trace(gc, ergo, heap)("Selected %u of %u retained candidates taking %1.3fms additional time", - num_regions, list.length(), result); + log_trace(gc, ergo, heap)("Selected %u of %u retained candidates (pinned %u) taking %1.3fms additional time", + num_regions, list.length(), num_pinned_regions, result); return result; } @@ -655,12 +660,14 @@ void G1Policy::record_concurrent_refinement_stats(size_t pending_cards, } bool G1Policy::should_retain_evac_failed_region(uint index) const { - size_t live_bytes= _g1h->region_at(index)->live_bytes(); + size_t live_bytes = _g1h->region_at(index)->live_bytes(); +#ifdef ASSERT + HeapRegion* r = _g1h->region_at(index); assert(live_bytes != 0, - "live bytes not set for %u used %zu garbage %zu cm-live %zu", - index, _g1h->region_at(index)->used(), _g1h->region_at(index)->garbage_bytes(), live_bytes); - + "live bytes not set for %u used %zu garbage %zu cm-live %zu pinned %d", + index, r->used(), r->garbage_bytes(), live_bytes, r->has_pinned_objects()); +#endif size_t threshold = G1RetainRegionLiveThresholdPercent * HeapRegion::GrainBytes / 100; return live_bytes < threshold; } @@ -784,7 +791,7 @@ double G1Policy::logged_cards_processing_time() const { // Anything below that is considered to be zero #define MIN_TIMER_GRANULARITY 0.0000001 -void G1Policy::record_young_collection_end(bool concurrent_operation_is_full_mark, bool evacuation_failure) { +void G1Policy::record_young_collection_end(bool concurrent_operation_is_full_mark, bool allocation_failure) { G1GCPhaseTimes* p = phase_times(); double start_time_sec = phase_times()->cur_collection_start_sec(); @@ -810,7 +817,7 @@ void G1Policy::record_young_collection_end(bool concurrent_operation_is_full_mar // Evacuation failures skew the timing too much to be considered for some statistics updates. // We make the assumption that these are rare. - bool update_stats = !evacuation_failure; + bool update_stats = !allocation_failure; if (update_stats) { // We maintain the invariant that all objects allocated by mutator @@ -826,7 +833,7 @@ void G1Policy::record_young_collection_end(bool concurrent_operation_is_full_mar _analytics->report_alloc_rate_ms(alloc_rate_ms); } - record_pause(this_pause, start_time_sec, end_time_sec, evacuation_failure); + record_pause(this_pause, start_time_sec, end_time_sec, allocation_failure); if (G1GCPauseTypeHelper::is_last_young_pause(this_pause)) { assert(!G1GCPauseTypeHelper::is_concurrent_start_pause(this_pause), @@ -1153,11 +1160,6 @@ bool G1Policy::should_allocate_mutator_region() const { return young_list_length < young_list_target_length(); } -bool G1Policy::can_expand_young_list() const { - uint young_list_length = _g1h->young_regions_count(); - return young_list_length < young_list_max_length(); -} - bool G1Policy::use_adaptive_young_list_length() const { return _young_gen_sizer.use_adaptive_young_list_length(); } @@ -1181,20 +1183,6 @@ void G1Policy::print_age_table() { _survivors_age_table.print_age_table(_tenuring_threshold); } -uint G1Policy::calculate_young_max_length(uint target_young_length) const { - uint expansion_region_num = 0; - if (GCLockerEdenExpansionPercent > 0) { - double perc = GCLockerEdenExpansionPercent / 100.0; - double expansion_region_num_d = perc * young_list_target_length(); - // We use ceiling so that if expansion_region_num_d is > 0.0 (but - // less than 1.0) we'll get 1. - expansion_region_num = (uint) ceil(expansion_region_num_d); - } - uint max_length = target_young_length + expansion_region_num; - assert(target_young_length <= max_length, "overflow"); - return max_length; -} - // Calculates survivor space parameters. void G1Policy::update_survivors_policy() { double max_survivor_regions_d = @@ -1377,13 +1365,13 @@ void G1Policy::update_gc_pause_time_ratios(G1GCPauseType gc_type, double start_t void G1Policy::record_pause(G1GCPauseType gc_type, double start, double end, - bool evacuation_failure) { + bool allocation_failure) { // Manage the MMU tracker. For some reason it ignores Full GCs. if (gc_type != G1GCPauseType::FullGC) { _mmu_tracker->add_pause(start, end); } - if (!evacuation_failure) { + if (!allocation_failure) { update_gc_pause_time_ratios(gc_type, start, end); } @@ -1477,13 +1465,15 @@ static void print_finish_message(const char* reason, bool from_marking) { double G1Policy::select_candidates_from_marking(G1CollectionCandidateList* marking_list, double time_remaining_ms, G1CollectionCandidateRegionList* initial_old_regions, - G1CollectionCandidateRegionList* optional_old_regions) { + G1CollectionCandidateRegionList* optional_old_regions, + G1CollectionCandidateRegionList* pinned_old_regions) { assert(marking_list != nullptr, "must be"); uint num_expensive_regions = 0; uint num_initial_regions_selected = 0; uint num_optional_regions_selected = 0; + uint num_pinned_regions = 0; double predicted_initial_time_ms = 0.0; double predicted_optional_time_ms = 0.0; @@ -1496,9 +1486,9 @@ double G1Policy::select_candidates_from_marking(G1CollectionCandidateList* marki bool check_time_remaining = use_adaptive_young_list_length(); log_debug(gc, ergo, cset)("Start adding marking candidates to collection set. " - "Min %u regions, max %u regions, " + "Min %u regions, max %u regions, available %u regions" "time remaining %1.2fms, optional threshold %1.2fms", - min_old_cset_length, max_old_cset_length, time_remaining_ms, optional_threshold_ms); + min_old_cset_length, max_old_cset_length, marking_list->length(), time_remaining_ms, optional_threshold_ms); G1CollectionCandidateListIterator iter = marking_list->begin(); for (; iter != marking_list->end(); ++iter) { @@ -1507,7 +1497,18 @@ double G1Policy::select_candidates_from_marking(G1CollectionCandidateList* marki print_finish_message("Maximum number of regions reached", true); break; } - HeapRegion* hr = *iter; + HeapRegion* hr = (*iter)->_r; + // Skip evacuating pinned marking regions because we are not getting any free + // space from them (and we expect to get free space from marking candidates). + // Also prepare to move them to retained regions to be evacuated optionally later + // to not impact the mixed phase too much. + if (hr->has_pinned_objects()) { + num_pinned_regions++; + (*iter)->update_num_unreclaimed(); + log_trace(gc, ergo, cset)("Marking candidate %u can not be reclaimed currently. Skipping.", hr->hrm_index()); + pinned_old_regions->append(hr); + continue; + } double predicted_time_ms = predict_region_total_time_ms(hr, false); time_remaining_ms = MAX2(time_remaining_ms - predicted_time_ms, 0.0); // Add regions to old set until we reach the minimum amount @@ -1551,9 +1552,9 @@ double G1Policy::select_candidates_from_marking(G1CollectionCandidateList* marki num_expensive_regions); } - log_debug(gc, ergo, cset)("Finish adding marking candidates to collection set. Initial: %u, optional: %u, " + log_debug(gc, ergo, cset)("Finish adding marking candidates to collection set. Initial: %u, optional: %u, pinned: %u, " "predicted initial time: %1.2fms, predicted optional time: %1.2fms, time remaining: %1.2fms", - num_initial_regions_selected, num_optional_regions_selected, + num_initial_regions_selected, num_optional_regions_selected, num_pinned_regions, predicted_initial_time_ms, predicted_optional_time_ms, time_remaining_ms); assert(initial_old_regions->length() == num_initial_regions_selected, "must be"); @@ -1564,13 +1565,15 @@ double G1Policy::select_candidates_from_marking(G1CollectionCandidateList* marki void G1Policy::select_candidates_from_retained(G1CollectionCandidateList* retained_list, double time_remaining_ms, G1CollectionCandidateRegionList* initial_old_regions, - G1CollectionCandidateRegionList* optional_old_regions) { + G1CollectionCandidateRegionList* optional_old_regions, + G1CollectionCandidateRegionList* pinned_old_regions) { uint const min_regions = min_retained_old_cset_length(); uint num_initial_regions_selected = 0; uint num_optional_regions_selected = 0; uint num_expensive_regions_selected = 0; + uint num_pinned_regions = 0; double predicted_initial_time_ms = 0.0; double predicted_optional_time_ms = 0.0; @@ -1584,13 +1587,25 @@ void G1Policy::select_candidates_from_retained(G1CollectionCandidateList* retain time_remaining_ms = MIN2(time_remaining_ms, optional_time_remaining_ms); log_debug(gc, ergo, cset)("Start adding retained candidates to collection set. " - "Min %u regions, " + "Min %u regions, available %u, " "time remaining %1.2fms, optional remaining %1.2fms", - min_regions, time_remaining_ms, optional_time_remaining_ms); + min_regions, retained_list->length(), time_remaining_ms, optional_time_remaining_ms); - for (HeapRegion* r : *retained_list) { + for (G1CollectionSetCandidateInfo* ci : *retained_list) { + HeapRegion* r = ci->_r; double predicted_time_ms = predict_region_total_time_ms(r, collector_state()->in_young_only_phase()); bool fits_in_remaining_time = predicted_time_ms <= time_remaining_ms; + // If we can't reclaim that region ignore it for now. + if (r->has_pinned_objects()) { + num_pinned_regions++; + if (ci->update_num_unreclaimed()) { + log_trace(gc, ergo, cset)("Retained candidate %u can not be reclaimed currently. Skipping.", r->hrm_index()); + } else { + log_trace(gc, ergo, cset)("Retained candidate %u can not be reclaimed currently. Dropping.", r->hrm_index()); + pinned_old_regions->append(r); + } + continue; + } if (fits_in_remaining_time || (num_expensive_regions_selected < min_regions)) { predicted_initial_time_ms += predicted_time_ms; @@ -1620,10 +1635,10 @@ void G1Policy::select_candidates_from_retained(G1CollectionCandidateList* retain num_expensive_regions_selected); } - log_debug(gc, ergo, cset)("Finish adding retained candidates to collection set. Initial: %u, optional: %u, " + log_debug(gc, ergo, cset)("Finish adding retained candidates to collection set. Initial: %u, optional: %u, pinned: %u, " "predicted initial time: %1.2fms, predicted optional time: %1.2fms, " "time remaining: %1.2fms optional time remaining %1.2fms", - num_initial_regions_selected, num_optional_regions_selected, + num_initial_regions_selected, num_optional_regions_selected, num_pinned_regions, predicted_initial_time_ms, predicted_optional_time_ms, time_remaining_ms, optional_time_remaining_ms); } diff --git a/src/hotspot/share/gc/g1/g1Policy.hpp b/src/hotspot/share/gc/g1/g1Policy.hpp index c5ab4e9e1de13..c951909788c2e 100644 --- a/src/hotspot/share/gc/g1/g1Policy.hpp +++ b/src/hotspot/share/gc/g1/g1Policy.hpp @@ -243,9 +243,6 @@ class G1Policy: public CHeapObj { uint calculate_young_desired_length(size_t pending_cards, size_t card_rs_length, size_t code_root_rs_length) const; // Limit the given desired young length to available free regions. uint calculate_young_target_length(uint desired_young_length) const; - // The GCLocker might cause us to need more regions than the target. Calculate - // the maximum number of regions to use in that case. - uint calculate_young_max_length(uint target_young_length) const; size_t predict_bytes_to_copy(HeapRegion* hr) const; double predict_survivor_regions_evac_time() const; @@ -275,7 +272,7 @@ class G1Policy: public CHeapObj { void record_pause(G1GCPauseType gc_type, double start, double end, - bool evacuation_failure = false); + bool allocation_failure = false); void update_gc_pause_time_ratios(G1GCPauseType gc_type, double start_sec, double end_sec); @@ -314,7 +311,7 @@ class G1Policy: public CHeapObj { // Record the start and end of the actual collection part of the evacuation pause. void record_young_collection_start(); - void record_young_collection_end(bool concurrent_operation_is_full_mark, bool evacuation_failure); + void record_young_collection_end(bool concurrent_operation_is_full_mark, bool allocation_failure); // Record the start and end of a full collection. void record_full_collection_start(); @@ -335,18 +332,20 @@ class G1Policy: public CHeapObj { // Amount of allowed waste in bytes in the collection set. size_t allowed_waste_in_collection_set() const; - // Calculate and fill in the initial and optional old gen candidate regions from + // Calculate and fill in the initial, optional and pinned old gen candidate regions from // the given candidate list and the remaining time. // Returns the remaining time. double select_candidates_from_marking(G1CollectionCandidateList* marking_list, double time_remaining_ms, G1CollectionCandidateRegionList* initial_old_regions, - G1CollectionCandidateRegionList* optional_old_regions); + G1CollectionCandidateRegionList* optional_old_regions, + G1CollectionCandidateRegionList* pinned_old_regions); void select_candidates_from_retained(G1CollectionCandidateList* retained_list, double time_remaining_ms, G1CollectionCandidateRegionList* initial_old_regions, - G1CollectionCandidateRegionList* optional_old_regions); + G1CollectionCandidateRegionList* optional_old_regions, + G1CollectionCandidateRegionList* pinned_old_regions); // Calculate the number of optional regions from the given collection set candidates, // the remaining time and the maximum number of these regions and return the number @@ -383,12 +382,9 @@ class G1Policy: public CHeapObj { uint young_list_desired_length() const { return Atomic::load(&_young_list_desired_length); } uint young_list_target_length() const { return Atomic::load(&_young_list_target_length); } - uint young_list_max_length() const { return Atomic::load(&_young_list_max_length); } bool should_allocate_mutator_region() const; - bool can_expand_young_list() const; - bool use_adaptive_young_list_length() const; // Return an estimate of the number of bytes used in young gen. diff --git a/src/hotspot/share/gc/g1/g1VMOperations.cpp b/src/hotspot/share/gc/g1/g1VMOperations.cpp index 7820c9abff716..c2254e4287f38 100644 --- a/src/hotspot/share/gc/g1/g1VMOperations.cpp +++ b/src/hotspot/share/gc/g1/g1VMOperations.cpp @@ -68,11 +68,9 @@ VM_G1TryInitiateConcMark::VM_G1TryInitiateConcMark(uint gc_count_before, bool VM_G1TryInitiateConcMark::doit_prologue() { bool result = VM_GC_Operation::doit_prologue(); // The prologue can fail for a couple of reasons. The first is that another GC - // got scheduled and prevented the scheduling of the concurrent start GC. The - // second is that the GC locker may be active and the heap can't be expanded. - // In both cases we want to retry the GC so that the concurrent start pause is - // actually scheduled. In the second case, however, we should stall until - // until the GC locker is no longer active and then retry the concurrent start GC. + // got scheduled and prevented the scheduling of the concurrent start GC. + // In this case we want to retry the GC so that the concurrent start pause is + // actually scheduled. if (!result) _transient_failure = true; return result; } @@ -103,16 +101,9 @@ void VM_G1TryInitiateConcMark::doit() { // request will be remembered for a later partial collection, even though // we've rejected this request. _whitebox_attached = true; - } else if (!g1h->do_collection_pause_at_safepoint()) { - // Failure to perform the collection at all occurs because GCLocker is - // active, and we have the bad luck to be the collection request that - // makes a later _gc_locker collection needed. (Else we would have hit - // the GCLocker check in the prologue.) - _transient_failure = true; - } else if (g1h->should_upgrade_to_full_gc()) { - _gc_succeeded = g1h->upgrade_to_full_collection(); } else { - _gc_succeeded = true; + _gc_succeeded = g1h->do_collection_pause_at_safepoint(); + assert(_gc_succeeded, "No reason to fail"); } } @@ -125,37 +116,20 @@ VM_G1CollectForAllocation::VM_G1CollectForAllocation(size_t word_size, void VM_G1CollectForAllocation::doit() { G1CollectedHeap* g1h = G1CollectedHeap::heap(); - if (_word_size > 0) { - // An allocation has been requested. So, try to do that first. - // During the execution of this VM operation, there may have been a concurrent active - // GCLocker, potentially leading to expansion of the Eden space by other mutators. - // If the Eden space were expanded, this allocation request might succeed without - // the need for triggering a garbage collection. - _result = g1h->attempt_allocation_at_safepoint(_word_size, - false /* expect_null_cur_alloc_region */); - if (_result != nullptr) { - // If we can successfully allocate before we actually do the - // pause then we will consider this pause successful. - _gc_succeeded = true; - return; - } - } - GCCauseSetter x(g1h, _gc_cause); // Try a partial collection of some kind. _gc_succeeded = g1h->do_collection_pause_at_safepoint(); + assert(_gc_succeeded, "no reason to fail"); - if (_gc_succeeded) { - if (_word_size > 0) { - // An allocation had been requested. Do it, eventually trying a stronger - // kind of GC. - _result = g1h->satisfy_failed_allocation(_word_size, &_gc_succeeded); - } else if (g1h->should_upgrade_to_full_gc()) { - // There has been a request to perform a GC to free some space. We have no - // information on how much memory has been asked for. In case there are - // absolutely no regions left to allocate into, do a full compaction. - _gc_succeeded = g1h->upgrade_to_full_collection(); - } + if (_word_size > 0) { + // An allocation had been requested. Do it, eventually trying a stronger + // kind of GC. + _result = g1h->satisfy_failed_allocation(_word_size, &_gc_succeeded); + } else if (g1h->should_upgrade_to_full_gc()) { + // There has been a request to perform a GC to free some space. We have no + // information on how much memory has been asked for. In case there are + // absolutely no regions left to allocate into, do a full compaction. + _gc_succeeded = g1h->upgrade_to_full_collection(); } } diff --git a/src/hotspot/share/gc/g1/g1YoungCollector.cpp b/src/hotspot/share/gc/g1/g1YoungCollector.cpp index 351ecd06efb79..81d46aa39790c 100644 --- a/src/hotspot/share/gc/g1/g1YoungCollector.cpp +++ b/src/hotspot/share/gc/g1/g1YoungCollector.cpp @@ -35,6 +35,7 @@ #include "gc/g1/g1ConcurrentMark.hpp" #include "gc/g1/g1GCPhaseTimes.hpp" #include "gc/g1/g1YoungGCEvacFailureInjector.hpp" +#include "gc/g1/g1EvacFailureRegions.inline.hpp" #include "gc/g1/g1EvacInfo.hpp" #include "gc/g1/g1HRPrinter.hpp" #include "gc/g1/g1MonitoringSupport.hpp" @@ -77,12 +78,23 @@ class G1YoungGCTraceTime { GCTraceTime(Info, gc) _tt; const char* update_young_gc_name() { + char evacuation_failed_string[48]; + evacuation_failed_string[0] = '\0'; + + if (_collector->evacuation_failed()) { + snprintf(evacuation_failed_string, + ARRAY_SIZE(evacuation_failed_string), + " (Evacuation Failure: %s%s%s)", + _collector->evacuation_alloc_failed() ? "Allocation" : "", + _collector->evacuation_alloc_failed() && _collector->evacuation_pinned() ? " / " : "", + _collector->evacuation_pinned() ? "Pinned" : ""); + } snprintf(_young_gc_name_data, MaxYoungGCNameLength, "Pause Young (%s) (%s)%s", G1GCPauseTypeHelper::to_string(_pause_type), GCCause::to_string(_pause_cause), - _collector->evacuation_failed() ? " (Evacuation Failure)" : ""); + evacuation_failed_string); return _young_gc_name_data; } @@ -314,6 +326,10 @@ class G1PrepareEvacuationTask : public WorkerTask { if (!region->rem_set()->is_complete()) { return false; } + // We also cannot collect the humongous object if it is pinned. + if (region->has_pinned_objects()) { + return false; + } // Candidate selection must satisfy the following constraints // while concurrent marking is in progress: // @@ -386,13 +402,15 @@ class G1PrepareEvacuationTask : public WorkerTask { } else { _g1h->register_region_with_region_attr(hr); } - log_debug(gc, humongous)("Humongous region %u (object size %zu @ " PTR_FORMAT ") remset %zu code roots %zu marked %d reclaim candidate %d type array %d", + log_debug(gc, humongous)("Humongous region %u (object size %zu @ " PTR_FORMAT ") remset %zu code roots %zu " + "marked %d pinned count %u reclaim candidate %d type array %d", index, cast_to_oop(hr->bottom())->size() * HeapWordSize, p2i(hr->bottom()), hr->rem_set()->occupied(), hr->rem_set()->code_roots_list_length(), _g1h->concurrent_mark()->mark_bitmap()->is_marked(hr->bottom()), + hr->pinned_count(), _g1h->is_humongous_reclaim_candidate(index), cast_to_oop(hr->bottom())->is_typeArray() ); @@ -759,7 +777,7 @@ void G1YoungCollector::evacuate_next_optional_regions(G1ParScanThreadStateSet* p void G1YoungCollector::evacuate_optional_collection_set(G1ParScanThreadStateSet* per_thread_states) { const double collection_start_time_ms = phase_times()->cur_collection_start_sec() * 1000.0; - while (!evacuation_failed() && collection_set()->optional_region_length() > 0) { + while (!evacuation_alloc_failed() && collection_set()->optional_region_length() > 0) { double time_used_ms = os::elapsedTime() * 1000.0 - collection_start_time_ms; double time_left_ms = MaxGCPauseMillis - time_used_ms; @@ -1010,7 +1028,15 @@ void G1YoungCollector::post_evacuate_collection_set(G1EvacInfo* evacuation_info, } bool G1YoungCollector::evacuation_failed() const { - return _evac_failure_regions.evacuation_failed(); + return _evac_failure_regions.has_regions_evac_failed(); +} + +bool G1YoungCollector::evacuation_pinned() const { + return _evac_failure_regions.has_regions_evac_pinned(); +} + +bool G1YoungCollector::evacuation_alloc_failed() const { + return _evac_failure_regions.has_regions_alloc_failed(); } G1YoungCollector::G1YoungCollector(GCCause::Cause gc_cause) : @@ -1083,7 +1109,7 @@ void G1YoungCollector::collect() { // modifies it to the next state. jtm.report_pause_type(collector_state()->young_gc_pause_type(_concurrent_operation_is_full_mark)); - policy()->record_young_collection_end(_concurrent_operation_is_full_mark, evacuation_failed()); + policy()->record_young_collection_end(_concurrent_operation_is_full_mark, evacuation_alloc_failed()); } TASKQUEUE_STATS_ONLY(_g1h->task_queues()->print_and_reset_taskqueue_stats("Oop Queue");) } diff --git a/src/hotspot/share/gc/g1/g1YoungCollector.hpp b/src/hotspot/share/gc/g1/g1YoungCollector.hpp index 4a81ee97ed7da..506021a1bef25 100644 --- a/src/hotspot/share/gc/g1/g1YoungCollector.hpp +++ b/src/hotspot/share/gc/g1/g1YoungCollector.hpp @@ -131,8 +131,12 @@ class G1YoungCollector { void post_evacuate_collection_set(G1EvacInfo* evacuation_info, G1ParScanThreadStateSet* per_thread_states); - // True iff an evacuation has failed in the most-recent collection. + // True iff an evacuation failure of any kind occurred in the most-recent collection. bool evacuation_failed() const; + // True iff an evacuation had pinned regions in the most-recent collection. + bool evacuation_pinned() const; + // True iff an evacuation had allocation failures in the most-recent collection. + bool evacuation_alloc_failed() const; public: G1YoungCollector(GCCause::Cause gc_cause); diff --git a/src/hotspot/share/gc/g1/g1YoungGCPostEvacuateTasks.cpp b/src/hotspot/share/gc/g1/g1YoungGCPostEvacuateTasks.cpp index d47f0e86c3035..637860c81321e 100644 --- a/src/hotspot/share/gc/g1/g1YoungGCPostEvacuateTasks.cpp +++ b/src/hotspot/share/gc/g1/g1YoungGCPostEvacuateTasks.cpp @@ -31,7 +31,7 @@ #include "gc/g1/g1CollectionSetCandidates.inline.hpp" #include "gc/g1/g1CollectorState.hpp" #include "gc/g1/g1ConcurrentMark.inline.hpp" -#include "gc/g1/g1EvacFailureRegions.hpp" +#include "gc/g1/g1EvacFailureRegions.inline.hpp" #include "gc/g1/g1EvacInfo.hpp" #include "gc/g1/g1EvacStats.inline.hpp" #include "gc/g1/g1OopClosures.inline.hpp" @@ -103,7 +103,7 @@ class G1PostEvacuateCollectionSetCleanupTask1::SampleCollectionSetCandidatesTask } }; -class G1PostEvacuateCollectionSetCleanupTask1::RestoreRetainedRegionsTask : public G1AbstractSubTask { +class G1PostEvacuateCollectionSetCleanupTask1::RestoreEvacFailureRegionsTask : public G1AbstractSubTask { G1CollectedHeap* _g1h; G1ConcurrentMark* _cm; @@ -265,14 +265,14 @@ class G1PostEvacuateCollectionSetCleanupTask1::RestoreRetainedRegionsTask : publ } public: - RestoreRetainedRegionsTask(G1EvacFailureRegions* evac_failure_regions) : - G1AbstractSubTask(G1GCPhaseTimes::RestoreRetainedRegions), + RestoreEvacFailureRegionsTask(G1EvacFailureRegions* evac_failure_regions) : + G1AbstractSubTask(G1GCPhaseTimes::RestoreEvacuationFailedRegions), _g1h(G1CollectedHeap::heap()), _cm(_g1h->concurrent_mark()), _evac_failure_regions(evac_failure_regions), _chunk_bitmap(mtGC) { - _num_evac_fail_regions = _evac_failure_regions->num_regions_failed_evacuation(); + _num_evac_fail_regions = _evac_failure_regions->num_regions_evac_failed(); _num_chunks_per_region = G1CollectedHeap::get_chunks_per_region(); _chunk_size = static_cast(HeapRegion::GrainWords / _num_chunks_per_region); @@ -284,10 +284,10 @@ class G1PostEvacuateCollectionSetCleanupTask1::RestoreRetainedRegionsTask : publ } double worker_cost() const override { - assert(_evac_failure_regions->evacuation_failed(), "Should not call this if not executed"); + assert(_evac_failure_regions->has_regions_evac_failed(), "Should not call this if there were no evacuation failures"); double workers_per_region = (double)G1CollectedHeap::get_chunks_per_region() / G1RestoreRetainedRegionChunksPerWorker; - return workers_per_region * _evac_failure_regions->num_regions_failed_evacuation(); + return workers_per_region * _evac_failure_regions->num_regions_evac_failed(); } void do_work(uint worker_id) override { @@ -308,16 +308,16 @@ G1PostEvacuateCollectionSetCleanupTask1::G1PostEvacuateCollectionSetCleanupTask1 G1EvacFailureRegions* evac_failure_regions) : G1BatchedTask("Post Evacuate Cleanup 1", G1CollectedHeap::heap()->phase_times()) { - bool evacuation_failed = evac_failure_regions->evacuation_failed(); + bool evac_failed = evac_failure_regions->has_regions_evac_failed(); add_serial_task(new MergePssTask(per_thread_states)); - add_serial_task(new RecalculateUsedTask(evacuation_failed)); + add_serial_task(new RecalculateUsedTask(evac_failed)); if (SampleCollectionSetCandidatesTask::should_execute()) { add_serial_task(new SampleCollectionSetCandidatesTask()); } add_parallel_task(G1CollectedHeap::heap()->rem_set()->create_cleanup_after_scan_heap_roots_task()); - if (evacuation_failed) { - add_parallel_task(new RestoreRetainedRegionsTask(evac_failure_regions)); + if (evac_failed) { + add_parallel_task(new RestoreEvacFailureRegionsTask(evac_failure_regions)); } } @@ -569,7 +569,7 @@ class G1PostEvacuateCollectionSetCleanupTask2::ProcessEvacuationFailedRegionsTas } double worker_cost() const override { - return _evac_failure_regions->num_regions_failed_evacuation(); + return _evac_failure_regions->num_regions_evac_failed(); } void do_work(uint worker_id) override { @@ -757,10 +757,10 @@ class FreeCSetClosure : public HeapRegionClosure { G1GCPhaseTimes* p = _g1h->phase_times(); assert(r->in_collection_set(), "Failed evacuation of region %u not in collection set", r->hrm_index()); - p->record_or_add_thread_work_item(G1GCPhaseTimes::RestoreRetainedRegions, + p->record_or_add_thread_work_item(G1GCPhaseTimes::RestoreEvacuationFailedRegions, _worker_id, 1, - G1GCPhaseTimes::RestoreRetainedRegionsFailedNum); + G1GCPhaseTimes::RestoreEvacFailureRegionsEvacFailedNum); bool retain_region = _g1h->policy()->should_retain_evac_failed_region(r); // Update the region state due to the failed evacuation. @@ -844,6 +844,7 @@ class G1PostEvacuateCollectionSetCleanupTask2::FreeCollectionSetTask : public G1 const size_t* _surviving_young_words; uint _active_workers; G1EvacFailureRegions* _evac_failure_regions; + volatile uint _num_retained_regions; FreeCSetStats* worker_stats(uint worker) { return &_worker_stats[worker]; @@ -869,7 +870,8 @@ class G1PostEvacuateCollectionSetCleanupTask2::FreeCollectionSetTask : public G1 _claimer(0), _surviving_young_words(surviving_young_words), _active_workers(0), - _evac_failure_regions(evac_failure_regions) { + _evac_failure_regions(evac_failure_regions), + _num_retained_regions(0) { _g1h->clear_eden(); } @@ -877,10 +879,7 @@ class G1PostEvacuateCollectionSetCleanupTask2::FreeCollectionSetTask : public G1 virtual ~FreeCollectionSetTask() { Ticks serial_time = Ticks::now(); - G1GCPhaseTimes* p = _g1h->phase_times(); - bool has_new_retained_regions = - p->sum_thread_work_items(G1GCPhaseTimes::RestoreRetainedRegions, G1GCPhaseTimes::RestoreRetainedRegionsRetainedNum) != 0; - + bool has_new_retained_regions = Atomic::load(&_num_retained_regions) != 0; if (has_new_retained_regions) { G1CollectionSetCandidates* candidates = _g1h->collection_set()->candidates(); candidates->sort_by_efficiency(); @@ -891,7 +890,10 @@ class G1PostEvacuateCollectionSetCleanupTask2::FreeCollectionSetTask : public G1 _worker_stats[worker].~FreeCSetStats(); } FREE_C_HEAP_ARRAY(FreeCSetStats, _worker_stats); + + G1GCPhaseTimes* p = _g1h->phase_times(); p->record_serial_free_cset_time_ms((Ticks::now() - serial_time).seconds() * 1000.0); + _g1h->clear_collection_set(); } @@ -911,10 +913,8 @@ class G1PostEvacuateCollectionSetCleanupTask2::FreeCollectionSetTask : public G1 _g1h->collection_set_par_iterate_all(&cl, &_claimer, worker_id); // Report per-region type timings. cl.report_timing(); - _g1h->phase_times()->record_or_add_thread_work_item(G1GCPhaseTimes::RestoreRetainedRegions, - worker_id, - cl.num_retained_regions(), - G1GCPhaseTimes::RestoreRetainedRegionsRetainedNum); + + Atomic::add(&_num_retained_regions, cl.num_retained_regions(), memory_order_relaxed); } }; @@ -955,7 +955,7 @@ G1PostEvacuateCollectionSetCleanupTask2::G1PostEvacuateCollectionSetCleanupTask2 add_serial_task(new EagerlyReclaimHumongousObjectsTask()); } - if (evac_failure_regions->evacuation_failed()) { + if (evac_failure_regions->has_regions_evac_failed()) { add_parallel_task(new RestorePreservedMarksTask(per_thread_states->preserved_marks_set())); add_parallel_task(new ProcessEvacuationFailedRegionsTask(evac_failure_regions)); } diff --git a/src/hotspot/share/gc/g1/g1YoungGCPostEvacuateTasks.hpp b/src/hotspot/share/gc/g1/g1YoungGCPostEvacuateTasks.hpp index 511eb1b4afbe8..868ab788b534a 100644 --- a/src/hotspot/share/gc/g1/g1YoungGCPostEvacuateTasks.hpp +++ b/src/hotspot/share/gc/g1/g1YoungGCPostEvacuateTasks.hpp @@ -39,12 +39,12 @@ class G1ParScanThreadStateSet; // - Recalculate Used (s) // - Sample Collection Set Candidates (s) // - Clear Card Table -// - Restore retained regions (on evacuation failure) +// - Restore evac failure regions (on evacuation failure) class G1PostEvacuateCollectionSetCleanupTask1 : public G1BatchedTask { class MergePssTask; class RecalculateUsedTask; class SampleCollectionSetCandidatesTask; - class RestoreRetainedRegionsTask; + class RestoreEvacFailureRegionsTask; public: G1PostEvacuateCollectionSetCleanupTask1(G1ParScanThreadStateSet* per_thread_states, diff --git a/src/hotspot/share/gc/g1/g1_globals.hpp b/src/hotspot/share/gc/g1/g1_globals.hpp index 9ec0b45d22ae1..dc38047aa28f7 100644 --- a/src/hotspot/share/gc/g1/g1_globals.hpp +++ b/src/hotspot/share/gc/g1/g1_globals.hpp @@ -324,6 +324,10 @@ "retained region restore purposes.") \ range(1, 256) \ \ + product(uint, G1NumCollectionsKeepPinned, 8, DIAGNOSTIC, \ + "After how many GCs a region has been found pinned G1 should " \ + "give up reclaiming it.") \ + \ product(uint, G1NumCardsCostSampleThreshold, 1000, DIAGNOSTIC, \ "Threshold for the number of cards when reporting remembered set "\ "card cost related prediction samples. A sample must involve " \ diff --git a/src/hotspot/share/gc/g1/heapRegion.cpp b/src/hotspot/share/gc/g1/heapRegion.cpp index da11963317ef7..29fe5031a354a 100644 --- a/src/hotspot/share/gc/g1/heapRegion.cpp +++ b/src/hotspot/share/gc/g1/heapRegion.cpp @@ -232,7 +232,8 @@ HeapRegion::HeapRegion(uint hrm_index, _young_index_in_cset(-1), _surv_rate_group(nullptr), _age_index(G1SurvRateGroup::InvalidAgeIndex), - _node_index(G1NUMA::UnknownNodeIndex) + _node_index(G1NUMA::UnknownNodeIndex), + _pinned_object_count(0) { assert(Universe::on_page_boundary(mr.start()) && Universe::on_page_boundary(mr.end()), "invalid space boundaries"); @@ -423,6 +424,7 @@ void HeapRegion::print_on(outputStream* st) const { st->print("|-"); } } + st->print("|%3u", Atomic::load(&_pinned_object_count)); st->print_cr(""); } @@ -726,9 +728,20 @@ void HeapRegion::fill_with_dummy_object(HeapWord* address, size_t word_size, boo void HeapRegion::fill_range_with_dead_objects(HeapWord* start, HeapWord* end) { size_t range_size = pointer_delta(end, start); - // Fill the dead range with objects. G1 might need to create two objects if - // the range is larger than half a region, which is the max_fill_size(). - CollectedHeap::fill_with_objects(start, range_size); + // We must be a bit careful with regions that contain pinned objects. While the + // ranges passed in here corresponding to the space between live objects, it is + // possible that there is a pinned object that is not any more referenced by + // Java code (only by native). + // + // In this case we must not zap contents of such an array but we can overwrite + // the header; since only pinned typearrays are allowed, this fits nicely with + // putting filler arrays into the dead range as the object header sizes match and + // no user data is overwritten. + // + // In particular String Deduplication might change the reference to the character + // array of the j.l.String after native code obtained a raw reference to it (via + // GetStringCritical()). + CollectedHeap::fill_with_objects(start, range_size, !has_pinned_objects()); HeapWord* current = start; do { // Update the BOT if the a threshold is crossed. diff --git a/src/hotspot/share/gc/g1/heapRegion.hpp b/src/hotspot/share/gc/g1/heapRegion.hpp index 45d39924abaf2..2706b814000a5 100644 --- a/src/hotspot/share/gc/g1/heapRegion.hpp +++ b/src/hotspot/share/gc/g1/heapRegion.hpp @@ -256,6 +256,9 @@ class HeapRegion : public CHeapObj { // NUMA node. uint _node_index; + // Number of objects in this region that are currently pinned. + volatile uint _pinned_object_count; + void report_region_type_change(G1HeapRegionTraceType::Type to); template @@ -299,6 +302,9 @@ class HeapRegion : public CHeapObj { static uint LogOfHRGrainBytes; static uint LogCardsPerRegion; + inline void increment_pinned_object_count(); + inline void decrement_pinned_object_count(); + static size_t GrainBytes; static size_t GrainWords; static size_t CardsPerRegion; @@ -402,6 +408,9 @@ class HeapRegion : public CHeapObj { bool is_old_or_humongous() const { return _type.is_old_or_humongous(); } + uint pinned_count() const { return Atomic::load(&_pinned_object_count); } + bool has_pinned_objects() const { return pinned_count() > 0; } + void set_free(); void set_eden(); diff --git a/src/hotspot/share/gc/g1/heapRegion.inline.hpp b/src/hotspot/share/gc/g1/heapRegion.inline.hpp index e7e10ea5ffe6c..ec68407b546bd 100644 --- a/src/hotspot/share/gc/g1/heapRegion.inline.hpp +++ b/src/hotspot/share/gc/g1/heapRegion.inline.hpp @@ -553,4 +553,12 @@ inline void HeapRegion::record_surv_words_in_group(size_t words_survived) { _surv_rate_group->record_surviving_words(age, words_survived); } +inline void HeapRegion::increment_pinned_object_count() { + Atomic::add(&_pinned_object_count, 1u, memory_order_relaxed); +} + +inline void HeapRegion::decrement_pinned_object_count() { + Atomic::sub(&_pinned_object_count, 1u, memory_order_relaxed); +} + #endif // SHARE_GC_G1_HEAPREGION_INLINE_HPP diff --git a/src/hotspot/share/gc/g1/vmStructs_g1.hpp b/src/hotspot/share/gc/g1/vmStructs_g1.hpp index e7df5277e862a..94ade0f387c00 100644 --- a/src/hotspot/share/gc/g1/vmStructs_g1.hpp +++ b/src/hotspot/share/gc/g1/vmStructs_g1.hpp @@ -41,6 +41,7 @@ nonstatic_field(HeapRegion, _bottom, HeapWord* const) \ nonstatic_field(HeapRegion, _top, HeapWord* volatile) \ nonstatic_field(HeapRegion, _end, HeapWord* const) \ + nonstatic_field(HeapRegion, _pinned_object_count, volatile uint) \ \ nonstatic_field(HeapRegionType, _tag, HeapRegionType::Tag volatile) \ \ diff --git a/src/hotspot/share/gc/shared/collectedHeap.hpp b/src/hotspot/share/gc/shared/collectedHeap.hpp index 19923ca9bc413..cccc7b168832a 100644 --- a/src/hotspot/share/gc/shared/collectedHeap.hpp +++ b/src/hotspot/share/gc/shared/collectedHeap.hpp @@ -165,8 +165,10 @@ class CollectedHeap : public CHeapObj { // Filler object utilities. static inline size_t filler_array_hdr_size(); - static inline size_t filler_array_min_size(); + static size_t filler_array_min_size(); + +protected: static inline void zap_filler_array_with(HeapWord* start, size_t words, juint value); DEBUG_ONLY(static void fill_args_check(HeapWord* start, size_t words);) DEBUG_ONLY(static void zap_filler_array(HeapWord* start, size_t words, bool zap = true);) diff --git a/src/hotspot/share/prims/whitebox.cpp b/src/hotspot/share/prims/whitebox.cpp index c15686dc87c1b..4e77bf0db3f19 100644 --- a/src/hotspot/share/prims/whitebox.cpp +++ b/src/hotspot/share/prims/whitebox.cpp @@ -401,7 +401,7 @@ WB_ENTRY(jboolean, WB_isObjectInOldGen(JNIEnv* env, jobject o, jobject obj)) if (UseG1GC) { G1CollectedHeap* g1h = G1CollectedHeap::heap(); const HeapRegion* hr = g1h->heap_region_containing(p); - return !(hr->is_young()); + return hr->is_old_or_humongous(); } #endif #if INCLUDE_PARALLELGC @@ -2593,6 +2593,32 @@ WB_ENTRY(void, WB_UnlockCritical(JNIEnv* env, jobject wb)) GCLocker::unlock_critical(thread); WB_END +WB_ENTRY(void, WB_PinObject(JNIEnv* env, jobject wb, jobject o)) +#if INCLUDE_G1GC + if (!UseG1GC) { + ShouldNotReachHere(); + return; + } + oop obj = JNIHandles::resolve(o); + G1CollectedHeap::heap()->pin_object(thread, obj); +#else + ShouldNotReachHere(); +#endif // INCLUDE_G1GC +WB_END + +WB_ENTRY(void, WB_UnpinObject(JNIEnv* env, jobject wb, jobject o)) +#if INCLUDE_G1GC + if (!UseG1GC) { + ShouldNotReachHere(); + return; + } + oop obj = JNIHandles::resolve(o); + G1CollectedHeap::heap()->unpin_object(thread, obj); +#else + ShouldNotReachHere(); +#endif // INCLUDE_G1GC +WB_END + WB_ENTRY(jboolean, WB_SetVirtualThreadsNotifyJvmtiMode(JNIEnv* env, jobject wb, jboolean enable)) if (!Continuations::enabled()) { tty->print_cr("WB error: must be Continuations::enabled()!"); @@ -2899,6 +2925,8 @@ static JNINativeMethod methods[] = { {CC"lockCritical", CC"()V", (void*)&WB_LockCritical}, {CC"unlockCritical", CC"()V", (void*)&WB_UnlockCritical}, + {CC"pinObject", CC"(Ljava/lang/Object;)V", (void*)&WB_PinObject}, + {CC"unpinObject", CC"(Ljava/lang/Object;)V", (void*)&WB_UnpinObject}, {CC"setVirtualThreadsNotifyJvmtiMode", CC"(Z)Z", (void*)&WB_SetVirtualThreadsNotifyJvmtiMode}, {CC"preTouchMemory", CC"(JJ)V", (void*)&WB_PreTouchMemory}, }; diff --git a/src/hotspot/share/runtime/vmStructs.cpp b/src/hotspot/share/runtime/vmStructs.cpp index afba3e2258c7d..54d591ff14125 100644 --- a/src/hotspot/share/runtime/vmStructs.cpp +++ b/src/hotspot/share/runtime/vmStructs.cpp @@ -1108,6 +1108,7 @@ declare_unsigned_integer_type(u_char) \ declare_unsigned_integer_type(unsigned int) \ declare_unsigned_integer_type(uint) \ + declare_unsigned_integer_type(volatile uint) \ declare_unsigned_integer_type(unsigned short) \ declare_unsigned_integer_type(jushort) \ declare_unsigned_integer_type(unsigned long) \ diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/HSDB.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/HSDB.java index dd813197bc05f..d54cc7fb56e27 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/HSDB.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/HSDB.java @@ -1111,6 +1111,9 @@ public void addAnnotation(Address addr, OopHandle handle) { anno = "Old "; bad = false; } + if (!bad && region.isPinned()) { + anno += "Pinned "; + } } else if (collHeap instanceof ParallelScavengeHeap) { ParallelScavengeHeap heap = (ParallelScavengeHeap) collHeap; if (heap.youngGen().isIn(handle)) { diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/g1/HeapRegion.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/g1/HeapRegion.java index b681330e5a7f2..580a4b1c3978f 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/g1/HeapRegion.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/g1/HeapRegion.java @@ -50,6 +50,8 @@ public class HeapRegion extends ContiguousSpace implements LiveRegionsProvider { private static AddressField endField; private static CIntegerField grainBytesField; + private static CIntegerField pinnedCountField; + private static long typeFieldOffset; private static long pointerSize; @@ -71,6 +73,8 @@ private static synchronized void initialize(TypeDataBase db) { endField = type.getAddressField("_end"); grainBytesField = type.getCIntegerField("GrainBytes"); + pinnedCountField = type.getCIntegerField("_pinned_object_count"); + typeFieldOffset = type.getField("_type").getOffset(); pointerSize = db.lookupType("HeapRegion*").getSize(); @@ -124,6 +128,10 @@ public boolean isHumongous() { return type.isHumongous(); } + public boolean isPinned() { + return pinnedCountField.getValue(addr) != 0; + } + public boolean isOld() { return type.isOld(); } @@ -134,6 +142,6 @@ public static long getPointerSize() { public void printOn(PrintStream tty) { tty.print("Region: " + bottom() + "," + top() + "," + end()); - tty.println(":" + type.typeAnnotation()); + tty.println(":" + type.typeAnnotation() + (isPinned() ? " Pinned" : "")); } } diff --git a/test/hotspot/jtreg/ProblemList.txt b/test/hotspot/jtreg/ProblemList.txt index 9e3a36cf4801c..726c78528a3f7 100644 --- a/test/hotspot/jtreg/ProblemList.txt +++ b/test/hotspot/jtreg/ProblemList.txt @@ -87,8 +87,8 @@ gc/g1/logging/TestG1LoggingFailure.java 8169634 generic-all gc/g1/humongousObjects/TestHeapCounters.java 8178918 generic-all gc/stress/gclocker/TestExcessGCLockerCollections.java 8229120 generic-all gc/stress/gclocker/TestGCLockerWithParallel.java 8180622 generic-all -gc/stress/gclocker/TestGCLockerWithG1.java 8180622 generic-all -gc/stress/TestJNIBlockFullGC/TestJNIBlockFullGC.java 8192647 generic-all +gc/stress/gclocker/TestGCLockerWithSerial.java 8180622 generic-all +gc/stress/gclocker/TestGCLockerWithShenandoah.java 8180622 generic-all gc/stress/TestStressG1Humongous.java 8286554 windows-x64 ############################################################################# diff --git a/test/hotspot/jtreg/gc/g1/TestEvacuationFailure.java b/test/hotspot/jtreg/gc/g1/TestEvacuationFailure.java index bbd7fee046704..fd4a509475764 100644 --- a/test/hotspot/jtreg/gc/g1/TestEvacuationFailure.java +++ b/test/hotspot/jtreg/gc/g1/TestEvacuationFailure.java @@ -25,7 +25,7 @@ /* * @test TestEvacuationFailure - * @summary Ensure the output for a minor GC with G1 that has evacuation failure contains the correct strings. + * @summary Ensure the output for a minor GC with G1 that has allocation failure contains the correct strings. * @requires vm.gc.G1 * @requires vm.debug * @library /test/lib @@ -55,7 +55,7 @@ public static void main(String[] args) throws Exception { OutputAnalyzer output = new OutputAnalyzer(pb.start()); System.out.println(output.getStdout()); - output.shouldContain("(Evacuation Failure)"); + output.shouldContain("(Evacuation Failure:"); output.shouldHaveExitValue(0); } diff --git a/test/hotspot/jtreg/gc/g1/TestGCLogMessages.java b/test/hotspot/jtreg/gc/g1/TestGCLogMessages.java index 6b249d69ab90d..6a024bb3ba2ff 100644 --- a/test/hotspot/jtreg/gc/g1/TestGCLogMessages.java +++ b/test/hotspot/jtreg/gc/g1/TestGCLogMessages.java @@ -264,10 +264,11 @@ private void testConcurrentRefinementLogs() throws Exception { LogMessageWithLevel exhFailureMessages[] = new LogMessageWithLevel[] { new LogMessageWithLevel("Recalculate Used Memory", Level.DEBUG), new LogMessageWithLevel("Restore Preserved Marks", Level.DEBUG), - new LogMessageWithLevel("Restore Retained Regions", Level.DEBUG), + new LogMessageWithLevel("Restore Evacuation Failed Regions", Level.DEBUG), new LogMessageWithLevel("Process Evacuation Failed Regions", Level.DEBUG), new LogMessageWithLevel("Evacuation Failed Regions", Level.DEBUG), - new LogMessageWithLevel("New Retained Regions", Level.DEBUG), + new LogMessageWithLevel("Pinned Regions", Level.DEBUG), + new LogMessageWithLevel("Allocation Failed Regions", Level.DEBUG), }; private void testWithEvacuationFailureLogs() throws Exception { diff --git a/test/hotspot/jtreg/gc/g1/pinnedobjs/TestPinnedHumongousFragmentation.java b/test/hotspot/jtreg/gc/g1/pinnedobjs/TestPinnedHumongousFragmentation.java new file mode 100644 index 0000000000000..fad01ab002206 --- /dev/null +++ b/test/hotspot/jtreg/gc/g1/pinnedobjs/TestPinnedHumongousFragmentation.java @@ -0,0 +1,128 @@ +/* + + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2018, Red Hat, Inc. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + + /* + * @test id=g1 + * @summary Make sure G1 can handle humongous allocation fragmentation with region pinning in the mix, + * i.e. moving humongous objects around other pinned humongous objects even in a last resort + * full gc. + * Adapted from gc/TestAllocHumongousFragment.java + * @key randomness + * @requires vm.gc.G1 + * @library /test/lib + * @build jdk.test.whitebox.WhiteBox + * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox + * @run main/othervm -Xlog:gc+region=trace -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions -Xmx1g -Xms1g + * -XX:VerifyGCType=full -XX:+VerifyDuringGC -XX:+VerifyAfterGC -XX:+WhiteBoxAPI -Xbootclasspath/a:. + * gc.g1.pinnedobjs.TestPinnedHumongousFragmentation + */ + +package gc.g1.pinnedobjs; + +import java.util.*; + +import jdk.test.lib.Asserts; +import jdk.test.lib.Utils; + +import jdk.test.whitebox.WhiteBox; + +public class TestPinnedHumongousFragmentation { + + private static final WhiteBox wb = WhiteBox.getWhiteBox(); + + static final long TARGET_MB = 30_000; // 30 Gb allocations + static final long LIVE_MB = 700; // 700 Mb alive + static final int PINNED_PERCENT = 5; // 5% of objects pinned + + static volatile Object sink; + + class PinInformation { + int[] object; + long address; + + PinInformation(int[] object) { + this.object = object; + wb.pinObject(object); + this.address = wb.getObjectAddress(object); + } + + void release() { + long newAddress = wb.getObjectAddress(object); + if (address != newAddress) { + Asserts.fail("Object at " + address + " moved to " + newAddress); + } + wb.unpinObject(object); + object = null; + } + } + + static List objects; + static List pinnedObjects; + + public static void main(String[] args) throws Exception { + (new TestPinnedHumongousFragmentation()).run(); + } + + void run() throws Exception { + final int min = 128 * 1024; + final int max = 16 * 1024 * 1024; + final long count = TARGET_MB * 1024 * 1024 / (16 + 4 * (min + (max - min) / 2)); + + objects = new ArrayList(); + pinnedObjects = new ArrayList(); + long current = 0; + + Random rng = Utils.getRandomInstance(); + for (long c = 0; c < count; c++) { + while (current > LIVE_MB * 1024 * 1024) { + int idx = rng.nextInt(objects.size()); + int[] remove = objects.remove(idx); + current -= remove.length * 4 + 16; + } + + // Pin random objects before the allocation that is (likely) going to + // cause full gcs. Remember them for unpinning. + for (int i = 0; i < objects.size() * PINNED_PERCENT / 100; i++) { + int[] target = objects.get(rng.nextInt(objects.size())); + pinnedObjects.add(new PinInformation(target)); + } + + int[] newObj = new int[min + rng.nextInt(max - min)]; + current += newObj.length * 4 + 16; + objects.add(newObj); + sink = new Object(); + + // Unpin and clear remembered objects afterwards. + for (int i = 0; i < pinnedObjects.size(); i++) { + pinnedObjects.get(i).release(); + } + pinnedObjects.clear(); + + System.out.println("Allocated: " + (current / 1024 / 1024) + " Mb"); + } + } + +} diff --git a/test/hotspot/jtreg/gc/g1/pinnedobjs/TestPinnedObjectContents.java b/test/hotspot/jtreg/gc/g1/pinnedobjs/TestPinnedObjectContents.java new file mode 100644 index 0000000000000..e0fdc88e2a1ca --- /dev/null +++ b/test/hotspot/jtreg/gc/g1/pinnedobjs/TestPinnedObjectContents.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + * @summary Test that pinned objects we lost all Java references to keep + * the region and contents alive. + * This test simulates this behavior using Whitebox/Unsafe methods + * and not real native code for simplicity. + * @requires vm.gc.G1 + * @requires vm.debug + * @library /test/lib + * @modules java.base/jdk.internal.misc:+open + * java.management + * @build jdk.test.whitebox.WhiteBox + * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox + * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xbootclasspath/a:. -XX:+ZapUnusedHeapArea -Xlog:gc,gc+ergo+cset=trace gc.g1.pinnedobjs.TestPinnedObjectContents + */ + +package gc.g1.pinnedobjs; + +import jdk.internal.misc.Unsafe; + +import jdk.test.lib.Asserts; +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; +import jdk.test.whitebox.WhiteBox; + +public class TestPinnedObjectContents { + + private static final jdk.internal.misc.Unsafe unsafe = Unsafe.getUnsafe(); + private static final WhiteBox wb = WhiteBox.getWhiteBox(); + + public static long pinAndGetAddress(Object o) { + wb.pinObject(o); + return wb.getObjectAddress(o); + } + + public static void main(String[] args) throws Exception { + // Remove garbage from VM initialization. + wb.fullGC(); + + // Allocate to-be pinned object and fill with "random" data. + final int ArraySize = 100; + int[] o = new int[ArraySize]; + for (int i = 0; i < o.length; i++) { + o[i] = i; + } + + Asserts.assertTrue(!wb.isObjectInOldGen(o), "should not be in old gen already"); + + // Remember memory offsets. + long baseOffset = unsafe.arrayBaseOffset(o.getClass()); + long indexScale = unsafe.arrayIndexScale(o.getClass()); + long address = pinAndGetAddress(o); + + o = null; // And forget the (Java) reference to the int array. + + // Do garbage collections to zap the data surrounding the "dead" object. + wb.youngGC(); + wb.youngGC(); + + for (int i = 0; i < ArraySize; i++) { + int actual = unsafe.getInt(null, address + baseOffset + i * indexScale); + if (actual != i) { + Asserts.fail("Pinned array at offset " + i + " should contain the value " + i + " but is " + actual); + } + } + } +} + diff --git a/test/hotspot/jtreg/gc/g1/pinnedobjs/TestPinnedObjectTypes.java b/test/hotspot/jtreg/gc/g1/pinnedobjs/TestPinnedObjectTypes.java new file mode 100644 index 0000000000000..ff730a30106f5 --- /dev/null +++ b/test/hotspot/jtreg/gc/g1/pinnedobjs/TestPinnedObjectTypes.java @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + * @summary Test whether different object type can be pinned or not. + * @requires vm.gc.G1 + * @requires vm.debug + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * @build jdk.test.whitebox.WhiteBox + * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox + * @run driver gc.g1.pinnedobjs.TestPinnedObjectTypes + */ + +package gc.g1.pinnedobjs; + +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; +import jdk.test.whitebox.WhiteBox; + +public class TestPinnedObjectTypes { + + public static void main(String[] args) throws Exception { + testPinning("Object", false); + testPinning("TypeArray", true); + testPinning("ObjArray", false); + } + + private static void testPinning(String type, boolean shouldSucceed) throws Exception { + ProcessBuilder pb = ProcessTools.createLimitedTestJavaProcessBuilder("-XX:+UseG1GC", + "-XX:+UnlockDiagnosticVMOptions", + "-XX:+WhiteBoxAPI", + "-Xbootclasspath/a:.", + "-Xmx32M", + "-Xmn16M", + "-Xlog:gc", + TestObjectPin.class.getName(), + type); + + OutputAnalyzer output = new OutputAnalyzer(pb.start()); + System.out.println(output.getStdout()); + if (shouldSucceed) { + output.shouldHaveExitValue(0); + } else { + output.shouldNotHaveExitValue(0); + } + } + +} + +class TestObjectPin { + + private static final WhiteBox wb = WhiteBox.getWhiteBox(); + + public static void main(String[] args) { + Object o = switch (args[0]) { + case "Object" -> new Object(); + case "TypeArray" -> new int[100]; + case "ObjArray" -> new Object[100]; + default -> null; + }; + wb.pinObject(o); + } +} + diff --git a/test/hotspot/jtreg/gc/g1/pinnedobjs/TestPinnedObjectsEvacuation.java b/test/hotspot/jtreg/gc/g1/pinnedobjs/TestPinnedObjectsEvacuation.java new file mode 100644 index 0000000000000..7ffd9432eb582 --- /dev/null +++ b/test/hotspot/jtreg/gc/g1/pinnedobjs/TestPinnedObjectsEvacuation.java @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + * @summary Test pinned objects lifecycle from young gen to eventual reclamation. + * @requires vm.gc.G1 + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * @build jdk.test.whitebox.WhiteBox + * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox + * @run driver gc.g1.pinnedobjs.TestPinnedObjectsEvacuation + */ + +package gc.g1.pinnedobjs; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import jdk.test.lib.Asserts; +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; +import jdk.test.whitebox.WhiteBox; + +public class TestPinnedObjectsEvacuation { + + public static void main(String[] args) throws Exception { + testPinnedEvacuation(0, 0, 0, 1); + testPinnedEvacuation(1, 1, 0, 1); + testPinnedEvacuation(2, 1, 1, 0); + testPinnedEvacuation(3, 1, 1, 0); + } + + private static int numMatches(String stringToMatch, String pattern) { + Pattern r = Pattern.compile(pattern); + Matcher m = r.matcher(stringToMatch); + return (int)m.results().count(); + } + + private static void assertMatches(int expected, int actual, String what) { + if (expected != actual) { + Asserts.fail("Expected " + expected + " " + what + " events but got " + actual); + } + } + + private static void testPinnedEvacuation(int younGCsBeforeUnpin, int expectedSkipEvents, int expectedDropEvents, int expectedReclaimEvents) throws Exception { + ProcessBuilder pb = ProcessTools.createLimitedTestJavaProcessBuilder("-XX:+UseG1GC", + "-XX:+UnlockDiagnosticVMOptions", + "-XX:+WhiteBoxAPI", + "-Xbootclasspath/a:.", + "-Xmx32M", + "-Xmn16M", + "-XX:G1NumCollectionsKeepPinned=2", + "-XX:+VerifyAfterGC", + "-Xlog:gc,gc+ergo+cset=trace", + TestObjectPin.class.getName(), + String.valueOf(younGCsBeforeUnpin)); + + OutputAnalyzer output = new OutputAnalyzer(pb.start()); + System.out.println(output.getStdout()); + output.shouldHaveExitValue(0); + + assertMatches(expectedSkipEvents, numMatches(output.getStdout(), ".*Retained candidate \\d+ can not be reclaimed currently. Skipping.*"), "skip"); + assertMatches(expectedDropEvents, numMatches(output.getStdout(), ".*Retained candidate \\d+ can not be reclaimed currently. Dropping.*"), "drop"); + assertMatches(expectedReclaimEvents, numMatches(output.getStdout(), ".*Finish adding retained candidates to collection set. Initial: 1,.*"), "reclaim"); + } + +} + +class TestObjectPin { + + private static final WhiteBox wb = WhiteBox.getWhiteBox(); + + public static long pinAndGetAddress(Object o) { + wb.pinObject(o); + return wb.getObjectAddress(o); + } + + public static void unpinAndCompareAddress(Object o, long expectedAddress) { + Asserts.assertEQ(expectedAddress, wb.getObjectAddress(o), "Object has moved during pinning."); + wb.unpinObject(o); + } + + public static void main(String[] args) { + + int youngGCBeforeUnpin = Integer.parseInt(args[0]); + + // Remove garbage from VM initialization. + wb.fullGC(); + + Object o = new int[100]; + Asserts.assertTrue(!wb.isObjectInOldGen(o), "should not be pinned in old gen"); + + long address = pinAndGetAddress(o); + + // First young GC: should move the object into old gen. + wb.youngGC(); + Asserts.assertTrue(wb.isObjectInOldGen(o), "Pinned object not in old gen after young GC"); + + // The object is (still) pinned. Do some configurable young gcs that fail to add it to the + // collection set candidates. + for (int i = 0; i < youngGCBeforeUnpin; i++) { + wb.youngGC(); + } + unpinAndCompareAddress(o, address); + + // Unpinned the object. This next gc should take the region if not dropped. + wb.youngGC(); + } +} + diff --git a/test/hotspot/jtreg/gc/g1/pinnedobjs/TestPinnedOldObjectsEvacuation.java b/test/hotspot/jtreg/gc/g1/pinnedobjs/TestPinnedOldObjectsEvacuation.java new file mode 100644 index 0000000000000..86f7a62ef7042 --- /dev/null +++ b/test/hotspot/jtreg/gc/g1/pinnedobjs/TestPinnedOldObjectsEvacuation.java @@ -0,0 +1,337 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + * @summary Test pinned objects lifecycle from old gen to eventual reclamation. + * @requires vm.gc.G1 + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * @build jdk.test.whitebox.WhiteBox + * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox + * @run driver gc.g1.pinnedobjs.TestPinnedOldObjectsEvacuation + */ + +package gc.g1.pinnedobjs; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import jdk.test.lib.Asserts; +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; +import jdk.test.whitebox.WhiteBox; + +class TestResultTracker { + private int trackedRegion = -1; + private int curGC = -1; + private String stdout; + private int expectedMarkingSkipEvents; // How many times has the region from the "marking" collection set candidate set been "skipped". + private int expectedRetainedSkipEvents; // How many times has the region from the "retained" collection set candidate set been "skipped". + private int expectedDropEvents; // How many times has the region from the "retained" collection set candidate set been "dropped". + private int expectedMarkingReclaimEvents; // How many times has the region from the "marking" collection set candidate set been put into the collection set. + private int expectedRetainedReclaimEvents; // How many times has the region from the "marking" collection set candidate set been put into the collection set. + + TestResultTracker(String stdout, + int expectedMarkingSkipEvents, + int expectedRetainedSkipEvents, + int expectedDropEvents, + int expectedMarkingReclaimEvents, + int expectedRetainedReclaimEvents) { + this.stdout = stdout; + this.expectedMarkingSkipEvents = expectedMarkingSkipEvents; + this.expectedRetainedSkipEvents = expectedRetainedSkipEvents; + this.expectedDropEvents = expectedDropEvents; + this.expectedMarkingReclaimEvents = expectedMarkingReclaimEvents; + this.expectedRetainedReclaimEvents = expectedRetainedReclaimEvents; + } + + private void updateOrCompareCurRegion(String phase, int curRegion) { + if (trackedRegion == -1) { + trackedRegion = curRegion; + } else { + if (trackedRegion != curRegion) { + Asserts.fail("Expected region " + trackedRegion + " to be used but is " + curRegion); + } + } + } + + private void expectMoreMatches(Matcher matcher, String event) { + if (!matcher.find()) { + Asserts.fail("Expected one more " + event); + } + } + + private int expectIncreasingGC(Matcher matcher) { + int nextGC = Integer.parseInt(matcher.group(1)); + if (nextGC <= curGC) { + Asserts.fail("Non-increasing GC number from " + curGC + " to " + nextGC); + } + return nextGC; + } + + // Verify log messages based on expected events. + // + // There are two log messages printed with -Xlog:ergo+cset=trace that report about success or failure to + // evacuate particular regions (in this case) due to pinning: + // + // 1) GC() Marking/Retained candidate can not be reclaimed currently. Skipping/Dropping. + // + // and + // + // 2) GC() Finish adding retained/marking candidates to collection set. Initial: ... pinned: + // + // 1) reports about whether the given region has been added to the collection set or not. The last word indicates whether the + // region has been removed from the collection set candidates completely ("Dropping"), or just skipped for this collection + // ("Skipping") + // + // This message is printed for every such region, however since the test only pins a single object/region and can only be + // in one of the collection set candidate sets, there will be only one message per GC. + // + // 2) reports statistics about how many regions were added to the initial collection set, optional collection set (not shown + // here) and the amount of pinned regions for every kind of collection set candidate sets ("marking" or "retained"). + // + // There are two such messages per GC. + // + // The code below tracks that single pinned region through the various stages as defined by the policy. + // + public void verify() throws Exception { + final String skipDropEvents = "GC\\((\\d+)\\).*(Marking|Retained) candidate (\\d+) can not be reclaimed currently\\. (Skipping|Dropping)"; + final String reclaimEvents = "GC\\((\\d+)\\) Finish adding (retained|marking) candidates to collection set\\. Initial: (\\d+).*pinned: (\\d+)"; + + Matcher skipDropMatcher = Pattern.compile(skipDropEvents, Pattern.MULTILINE).matcher(stdout); + Matcher reclaimMatcher = Pattern.compile(reclaimEvents, Pattern.MULTILINE).matcher(stdout); + + for (int i = 0; i < expectedMarkingSkipEvents; i++) { + expectMoreMatches(skipDropMatcher, "expectedMarkingSkipEvents"); + curGC = expectIncreasingGC(skipDropMatcher); + + Asserts.assertEQ("Marking", skipDropMatcher.group(2), "Expected \"Marking\" tag for GC " + curGC + " but got \"" + skipDropMatcher.group(2) + "\""); + updateOrCompareCurRegion("MarkingSkip", Integer.parseInt(skipDropMatcher.group(3))); + Asserts.assertEQ("Skipping", skipDropMatcher.group(4), "Expected \"Skipping\" tag for GC " + curGC + " but got \"" + skipDropMatcher.group(4) + "\""); + + while (true) { + if (!reclaimMatcher.find()) { + Asserts.fail("Could not find \"Finish adding * candidates\" line for GC " + curGC); + } + if (reclaimMatcher.group(2).equals("retained")) { + continue; + } + if (Integer.parseInt(reclaimMatcher.group(1)) == curGC) { + int actual = Integer.parseInt(reclaimMatcher.group(4)); + Asserts.assertEQ(actual, 1, "Expected number of pinned to be 1 after marking skip but is " + actual); + break; + } + } + } + + for (int i = 0; i < expectedRetainedSkipEvents; i++) { + expectMoreMatches(skipDropMatcher, "expectedRetainedSkipEvents"); + curGC = expectIncreasingGC(skipDropMatcher); + + Asserts.assertEQ("Retained", skipDropMatcher.group(2), "Expected \"Retained\" tag for GC " + curGC + " but got \"" + skipDropMatcher.group(2) + "\""); + updateOrCompareCurRegion("RetainedSkip", Integer.parseInt(skipDropMatcher.group(3))); + Asserts.assertEQ("Skipping", skipDropMatcher.group(4), "Expected \"Skipping\" tag for GC " + curGC + " but got \"" + skipDropMatcher.group(4) + "\""); + + while (true) { + if (!reclaimMatcher.find()) { + Asserts.fail("Could not find \"Finish adding * candidates\" line for GC " + curGC); + } + if (reclaimMatcher.group(2).equals("marking")) { + continue; + } + if (Integer.parseInt(reclaimMatcher.group(1)) == curGC) { + int actual = Integer.parseInt(reclaimMatcher.group(4)); + Asserts.assertEQ(actual, 1, "Expected number of pinned to be 1 after retained skip but is " + actual); + break; + } + } + } + + for (int i = 0; i < expectedDropEvents; i++) { + expectMoreMatches(skipDropMatcher, "expectedDropEvents"); + curGC = expectIncreasingGC(skipDropMatcher); + + Asserts.assertEQ("Retained", skipDropMatcher.group(2), "Expected \"Retained\" tag for GC " + curGC + " but got \"" + skipDropMatcher.group(2) + "\""); + updateOrCompareCurRegion("RetainedDrop", Integer.parseInt(skipDropMatcher.group(3))); + Asserts.assertEQ("Dropping", skipDropMatcher.group(4), "Expected \"Dropping\" tag for GC " + curGC + " but got \"" + skipDropMatcher.group(4) + "\""); + + while (true) { + if (!reclaimMatcher.find()) { + Asserts.fail("Could not find \"Finish adding * candidates\" line for GC " + curGC); + } + if (reclaimMatcher.group(2).equals("marking")) { + continue; + } + if (Integer.parseInt(reclaimMatcher.group(1)) == curGC) { + int actual = Integer.parseInt(reclaimMatcher.group(4)); + if (actual != 1) { + Asserts.fail("Expected number of pinned to be 1 after dropping but is " + actual); + } + break; + } + } + } + + for (int i = 0; i < expectedMarkingReclaimEvents; i++) { + expectMoreMatches(reclaimMatcher, "\"Finish adding * candidates\" line for GC " + curGC); + + int nextGC = Integer.parseInt(reclaimMatcher.group(1)); + curGC = nextGC; + if (reclaimMatcher.group(2).equals("retained")) { + continue; + } + + if (Integer.parseInt(reclaimMatcher.group(1)) == nextGC) { + int actual = Integer.parseInt(reclaimMatcher.group(4)); + if (actual != 0) { + Asserts.fail("Expected number of pinned to be 0 after marking reclaim but is " + actual); + } + } + } + + for (int i = 0; i < expectedRetainedReclaimEvents; i++) { + expectMoreMatches(reclaimMatcher, "\"Finish adding * candidates\" line for GC " + curGC); + + int nextGC = Integer.parseInt(reclaimMatcher.group(1)); + curGC = nextGC; + if (reclaimMatcher.group(2).equals("marking")) { + continue; + } + + if (Integer.parseInt(reclaimMatcher.group(1)) == nextGC) { + int actual = Integer.parseInt(reclaimMatcher.group(4)); + if (actual != 0) { + Asserts.fail("Expected number of pinned to be 0 after retained reclaim but is " + actual); + } + } + } + } +} + +public class TestPinnedOldObjectsEvacuation { + + public static void main(String[] args) throws Exception { + // younGCsBeforeUnpin, expectedMarkingSkipEvents, expectedRetainedSkipEvents, expectedDropEvents, expectedMarkingReclaimEvents, expectedRetainedReclaimEvents + testPinnedEvacuation(1, 1, 0, 0, 0, 1); + testPinnedEvacuation(2, 1, 1, 0, 0, 1); + testPinnedEvacuation(3, 1, 2, 0, 0, 1); + testPinnedEvacuation(4, 1, 2, 1, 0, 0); + } + + private static int numMatches(String stringToMatch, String pattern) { + Pattern r = Pattern.compile(pattern); + Matcher m = r.matcher(stringToMatch); + return (int)m.results().count(); + } + + private static void assertMatches(int expected, int actual, String what) { + if (expected != actual) { + Asserts.fail("Expected " + expected + " " + what + " events but got " + actual); + } + } + + private static void testPinnedEvacuation(int youngGCsBeforeUnpin, + int expectedMarkingSkipEvents, + int expectedRetainedSkipEvents, + int expectedDropEvents, + int expectedMarkingReclaimEvents, + int expectedRetainedReclaimEvents) throws Exception { + ProcessBuilder pb = ProcessTools.createLimitedTestJavaProcessBuilder("-XX:+UseG1GC", + "-XX:+UnlockDiagnosticVMOptions", + "-XX:+WhiteBoxAPI", + "-Xbootclasspath/a:.", + "-Xmx32M", + "-Xmn16M", + "-XX:MarkSweepDeadRatio=0", + "-XX:G1NumCollectionsKeepPinned=3", + "-XX:+UnlockExperimentalVMOptions", + // Take all old regions to make sure that the pinned one is included in the collection set. + "-XX:G1MixedGCLiveThresholdPercent=100", + "-XX:G1HeapWastePercent=0", + "-XX:+VerifyAfterGC", + "-Xlog:gc,gc+ergo+cset=trace", + TestObjectPin.class.getName(), + String.valueOf(youngGCsBeforeUnpin)); + + OutputAnalyzer output = new OutputAnalyzer(pb.start()); + System.out.println(output.getStdout()); + output.shouldHaveExitValue(0); + + TestResultTracker t = new TestResultTracker(output.getStdout(), + expectedMarkingSkipEvents, + expectedRetainedSkipEvents, + expectedDropEvents, + expectedMarkingReclaimEvents, + expectedRetainedReclaimEvents); + t.verify(); + } + +} + +class TestObjectPin { + + private static final WhiteBox wb = WhiteBox.getWhiteBox(); + + public static long pinAndGetAddress(Object o) { + wb.pinObject(o); + return wb.getObjectAddress(o); + } + + public static void unpinAndCompareAddress(Object o, long expectedAddress) { + Asserts.assertEQ(expectedAddress, wb.getObjectAddress(o), "Object has moved during pinning."); + wb.unpinObject(o); + } + + public static void main(String[] args) { + + int youngGCBeforeUnpin = Integer.parseInt(args[0]); + // Remove garbage from VM initialization + wb.fullGC(); + + Object o = new int[100]; + Asserts.assertTrue(!wb.isObjectInOldGen(o), "should not be pinned in old gen"); + + long address = pinAndGetAddress(o); + + // Move pinned object into old gen. That region containing it should be almost completely empty, + // so it will be picked up as collection set candidate. + wb.fullGC(); + Asserts.assertTrue(wb.isObjectInOldGen(o), "Pinned object not in old gen after young GC"); + + // Do a concurrent cycle to move the region into the marking candidates. + wb.g1RunConcurrentGC(); + // Perform the "Prepare Mixed" GC. + wb.youngGC(); + // The object is (still) pinned. Do some configurable young gcs that fail to add it to the + // collection set candidates. + for (int i = 0; i < youngGCBeforeUnpin; i++) { + wb.youngGC(); + } + unpinAndCompareAddress(o, address); + + // Unpinned the object. This next gc should take the region if not dropped. + wb.youngGC(); + } +} + diff --git a/test/hotspot/jtreg/gc/g1/plab/TestPLABEvacuationFailure.java b/test/hotspot/jtreg/gc/g1/plab/TestPLABEvacuationFailure.java index e4ca3f9ea85c1..ecceca21f2b81 100644 --- a/test/hotspot/jtreg/gc/g1/plab/TestPLABEvacuationFailure.java +++ b/test/hotspot/jtreg/gc/g1/plab/TestPLABEvacuationFailure.java @@ -24,7 +24,7 @@ /* * @test TestPLABEvacuationFailure * @bug 8148376 - * @summary Checks PLAB statistics on evacuation failure + * @summary Checks PLAB statistics on evacuation/allocation failure * @requires vm.gc.G1 * @library /test/lib / * @modules java.base/jdk.internal.misc @@ -196,7 +196,7 @@ private static Map getEvacFailureOldStats() { private static List getGcIdPlabEvacFailures(OutputAnalyzer out) { return out.asLines().stream() - .filter(line -> line.contains("(Evacuation Failure)")) + .filter(line -> line.contains("(Evacuation Failure")) .map(line -> LogParser.getGcIdFromLine(line, GC_ID_PATTERN)) .collect(Collectors.toList()); } diff --git a/test/hotspot/jtreg/gc/stress/TestJNIBlockFullGC/TestJNIBlockFullGC.java b/test/hotspot/jtreg/gc/stress/TestJNIBlockFullGC/TestJNIBlockFullGC.java deleted file mode 100644 index 6a336e7b9f158..0000000000000 --- a/test/hotspot/jtreg/gc/stress/TestJNIBlockFullGC/TestJNIBlockFullGC.java +++ /dev/null @@ -1,191 +0,0 @@ -/* - * Copyright (c) 2017, 2023, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2017 SAP SE 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. - */ - -package gc.stress.TestJNIBlockFullGC; - -/* - * @test TestJNIBlockFullGC - * @summary Check that in G1 a Full GC to reclaim space can not be blocked out by the GC locker. - * @key randomness - * @requires vm.gc.G1 - * @library /test/lib - * @run main/othervm/native -Xmx64m -XX:+UseG1GC -Xlog:gc=info,gc+alloc=trace -XX:MaxGCPauseMillis=10 gc.stress.TestJNIBlockFullGC.TestJNIBlockFullGC 10 10000 10000 10000 30000 10000 0.7 - */ - -import java.lang.ref.SoftReference; -import java.util.Random; -import jdk.test.lib.Utils; - -public class TestJNIBlockFullGC { - private static final Random rng = Utils.getRandomInstance(); - - static { - System.loadLibrary("TestJNIBlockFullGC"); - } - - public static volatile Object tmp; - - public static volatile boolean hadError = false; - - private static native int TestCriticalArray0(int[] x); - - public static class Node { - public SoftReference next; - long payload1; - long payload2; - long payload3; - long payload4; - - public Node(int load) { - payload1 = payload2 = payload3 = payload4 = load; - } - } - - public static void warmUp(long warmupEndTimeNanos, int size, long seed) { - Random r = new Random(seed); - // First let the GC assume most of our objects will die. - Node[] roots = new Node[size]; - - while (System.nanoTime() - warmupEndTimeNanos < 0) { - int index = (int) (r.nextDouble() * roots.length); - roots[index] = new Node(1); - } - - // Make sure the young generation is empty. - for (int i = 0; i < roots.length; ++i) { - roots[i] = null; - } - } - - public static void runTest(long endTimeNanos, int size, double alive, long seed) { - Random r = new Random(seed); - final int length = 10000; - int[] array1 = new int[length]; - for (int x = 1; x < length; x++) { - array1[x] = x; - } - - Node[] roots = new Node[size]; - try { - int index = 0; - roots[0] = new Node(0); - - while (!hadError && (System.nanoTime() - endTimeNanos < 0)) { - int test_val1 = TestCriticalArray0(array1); - - if (r.nextDouble() > alive) { - tmp = new Node(test_val1); - } else { - index = (int) (r.nextDouble() * roots.length); - - if (roots[index] != null) { - Node node = new Node(test_val1); - node.next = new SoftReference(roots[index]); - roots[index] = node; - } else { - roots[index] = new Node(test_val1); - } - } - } - } catch (OutOfMemoryError e) { - hadError = true; - e.printStackTrace(); - } - } - - private static void joinThreads(Thread[] threads) throws Exception { - for (int i = 0; i < threads.length; i++) { - try { - if (threads[i] != null) { - threads[i].join(); - } - } catch (InterruptedException e) { - e.printStackTrace(); - throw e; - } - } - } - - public static void main(String[] args) throws Exception { - if (args.length < 7){ - System.out.println("Usage: java TestJNIBlockFullGC "); - System.exit(0); - } - - int warmupThreads = Integer.parseInt(args[0]); - System.out.println("# Warmup Threads = " + warmupThreads); - - long warmupDurationNanos = 1_000_000L * Integer.parseInt(args[1]); - System.out.println("WarmUp Duration Millis = " + args[1]); - int warmupIterations = Integer.parseInt(args[2]); - System.out.println("# Warmup Iterations = "+ warmupIterations); - - int mainThreads = Integer.parseInt(args[3]); - System.out.println("# Main Threads = " + mainThreads); - long mainDurationNanos = 1_000_000L * Integer.parseInt(args[4]); - System.out.println("Main Duration Millis = " + args[4]); - int mainIterations = Integer.parseInt(args[5]); - System.out.println("# Main Iterations = " + mainIterations); - - double liveFrac = Double.parseDouble(args[6]); - System.out.println("Live Fraction = " + liveFrac); - - Thread threads[] = new Thread[Math.max(warmupThreads, mainThreads)]; - - System.out.println("Start warm-up threads!"); - long warmupStartTimeNanos = System.nanoTime(); - for (int i = 0; i < warmupThreads; i++) { - long seed = rng.nextLong(); - threads[i] = new Thread() { - public void run() { - warmUp(warmupStartTimeNanos + warmupDurationNanos, warmupIterations, seed); - }; - }; - threads[i].start(); - } - - joinThreads(threads); - - System.gc(); - System.out.println("Keep alive a lot"); - - long startTimeNanos = System.nanoTime(); - for (int i = 0; i < mainThreads; i++) { - long seed = rng.nextLong(); - threads[i] = new Thread() { - public void run() { - runTest(startTimeNanos + mainDurationNanos, mainIterations, liveFrac, seed); - }; - }; - threads[i].start(); - } - System.out.println("All threads started"); - - joinThreads(threads); - - if (hadError) { - throw new RuntimeException("Experienced an OoME during execution."); - } - } -} diff --git a/test/hotspot/jtreg/gc/stress/TestJNIBlockFullGC/libTestJNIBlockFullGC.c b/test/hotspot/jtreg/gc/stress/TestJNIBlockFullGC/libTestJNIBlockFullGC.c deleted file mode 100644 index 76448c825d83e..0000000000000 --- a/test/hotspot/jtreg/gc/stress/TestJNIBlockFullGC/libTestJNIBlockFullGC.c +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) 2018, 2020, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2017 SAP SE 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. - */ - -#include "jni.h" - -JNIEXPORT jint JNICALL -Java_gc_stress_TestJNIBlockFullGC_TestJNIBlockFullGC_TestCriticalArray0(JNIEnv *env, jclass jCls, jintArray jIn) { - jint *bufIn = NULL; - jint jInLen = (*env)->GetArrayLength(env, jIn); - jint result = 0; - jint i; - - if (jInLen != 0) { - bufIn = (jint*)(*env)->GetPrimitiveArrayCritical(env, jIn, 0); - } - - for (i = 0; i < jInLen; ++i) { - result += bufIn[i]; // result = sum of all array elements - } - - if (bufIn != NULL) { - (*env)->ReleasePrimitiveArrayCritical(env, jIn, bufIn, 0); - } - - return result; -} diff --git a/test/hotspot/jtreg/gc/stress/gclocker/TestExcessGCLockerCollections.java b/test/hotspot/jtreg/gc/stress/gclocker/TestExcessGCLockerCollections.java index deaf08748a636..d18548abdfe18 100644 --- a/test/hotspot/jtreg/gc/stress/gclocker/TestExcessGCLockerCollections.java +++ b/test/hotspot/jtreg/gc/stress/gclocker/TestExcessGCLockerCollections.java @@ -31,6 +31,8 @@ * @requires vm.gc != "Z" * @requires vm.gc != "Epsilon" * @requires vm.gc != "Shenandoah" + * @requires vm.gc != "G1" + * @requires vm.gc != null * @library /test/lib * @modules java.base/jdk.internal.misc * @run driver/timeout=1000 gc.stress.gclocker.TestExcessGCLockerCollections 300 4 2 @@ -151,7 +153,7 @@ public class TestExcessGCLockerCollections { private static final String BAD_LOCKER = locker + " [1-9][0-9]?M"; private static final String[] COMMON_OPTIONS = new String[] { - "-Xmx1G", "-Xms1G", "-Xmn256M", "-Xlog:gc" }; + "-Xmx1G", "-Xms1G", "-Xmn256M", "-Xlog:gc,gc+ergo*=debug,gc+ergo+cset=trace:x.log", "-XX:+UnlockDiagnosticVMOptions", "-XX:+VerifyAfterGC"}; public static void main(String args[]) throws Exception { if (args.length < 3) { diff --git a/test/jdk/jdk/jfr/event/gc/collection/TestG1ParallelPhases.java b/test/jdk/jdk/jfr/event/gc/collection/TestG1ParallelPhases.java index 3d378712c422e..1e64a0bb4e44e 100644 --- a/test/jdk/jdk/jfr/event/gc/collection/TestG1ParallelPhases.java +++ b/test/jdk/jdk/jfr/event/gc/collection/TestG1ParallelPhases.java @@ -125,7 +125,7 @@ public static void main(String[] args) throws IOException { // since we can not reliably guarantee that they occur (or not). Set optPhases = of( // The following phases only occur on evacuation failure. - "RestoreRetainedRegions", + "RestoreEvacuationFailedRegions", "RemoveSelfForwards", "RestorePreservedMarks", "ProcessEvacuationFailedRegions", diff --git a/test/jdk/jdk/jfr/event/gc/collection/TestGCCauseWithG1ConcurrentMark.java b/test/jdk/jdk/jfr/event/gc/collection/TestGCCauseWithG1ConcurrentMark.java index 5ec810b11c861..bd3a7f63a8a99 100644 --- a/test/jdk/jdk/jfr/event/gc/collection/TestGCCauseWithG1ConcurrentMark.java +++ b/test/jdk/jdk/jfr/event/gc/collection/TestGCCauseWithG1ConcurrentMark.java @@ -40,7 +40,7 @@ public static void main(String[] args) throws Exception { String testID = "G1ConcurrentMark"; String[] vmFlags = {"-XX:+UseG1GC", "-XX:+ExplicitGCInvokesConcurrent"}; String[] gcNames = {GCHelper.gcG1New, GCHelper.gcG1Old, GCHelper.gcG1Full}; - String[] gcCauses = {"Metadata GC Threshold", "GCLocker Initiated GC", "G1 Evacuation Pause", "G1 Preventive Collection", + String[] gcCauses = {"Metadata GC Threshold", "G1 Evacuation Pause", "G1 Preventive Collection", "G1 Compaction Pause", "System.gc()"}; GCGarbageCollectionUtil.test(testID, vmFlags, gcNames, gcCauses); } diff --git a/test/jdk/jdk/jfr/event/gc/collection/TestGCCauseWithG1FullCollection.java b/test/jdk/jdk/jfr/event/gc/collection/TestGCCauseWithG1FullCollection.java index a83e0ba6d6f70..072c3905baf59 100644 --- a/test/jdk/jdk/jfr/event/gc/collection/TestGCCauseWithG1FullCollection.java +++ b/test/jdk/jdk/jfr/event/gc/collection/TestGCCauseWithG1FullCollection.java @@ -40,7 +40,7 @@ public static void main(String[] args) throws Exception { String testID = "G1FullCollection"; String[] vmFlags = {"-XX:+UseG1GC"}; String[] gcNames = {GCHelper.gcG1New, GCHelper.gcG1Old, GCHelper.gcG1Full}; - String[] gcCauses = {"Metadata GC Threshold", "GCLocker Initiated GC", "G1 Evacuation Pause", "G1 Preventive Collection", + String[] gcCauses = {"Metadata GC Threshold", "G1 Evacuation Pause", "G1 Preventive Collection", "G1 Compaction Pause", "System.gc()"}; GCGarbageCollectionUtil.test(testID, vmFlags, gcNames, gcCauses); } diff --git a/test/jdk/jdk/jfr/event/gc/detailed/TestGCLockerEvent.java b/test/jdk/jdk/jfr/event/gc/detailed/TestGCLockerEvent.java index f0d9fa3f35a69..596af47de39bc 100644 --- a/test/jdk/jdk/jfr/event/gc/detailed/TestGCLockerEvent.java +++ b/test/jdk/jdk/jfr/event/gc/detailed/TestGCLockerEvent.java @@ -26,11 +26,12 @@ * @test TestGCLockerEvent * @key jfr * @requires vm.hasJFR - * @requires vm.gc.G1 + * @requires vm.gc.Serial | vm.gc.Parallel + * @requires vm.gc != null * @library /test/lib * @build jdk.test.whitebox.WhiteBox * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox - * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xmx32m -Xms32m -Xmn12m -XX:+UseG1GC jdk.jfr.event.gc.detailed.TestGCLockerEvent + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -Xmx32m -Xms32m -Xmn12m jdk.jfr.event.gc.detailed.TestGCLockerEvent */ package jdk.jfr.event.gc.detailed; diff --git a/test/lib/jdk/test/whitebox/WhiteBox.java b/test/lib/jdk/test/whitebox/WhiteBox.java index 3743aa506ff94..4023d97e696f5 100644 --- a/test/lib/jdk/test/whitebox/WhiteBox.java +++ b/test/lib/jdk/test/whitebox/WhiteBox.java @@ -785,6 +785,10 @@ public native int validateCgroup(String procCgroups, public native void unlockCritical(); + public native void pinObject(Object o); + + public native void unpinObject(Object o); + public native boolean setVirtualThreadsNotifyJvmtiMode(boolean enabled); public native void preTouchMemory(long addr, long size); From 77d604a29f486b62db53be3d56b921be46e56fd9 Mon Sep 17 00:00:00 2001 From: Albert Mingkun Yang Date: Wed, 29 Nov 2023 10:27:16 +0000 Subject: [PATCH 106/250] 8319373: Serial: Refactor dirty cards scanning during Young GC Reviewed-by: kbarrett, tschatzl --- src/hotspot/share/gc/serial/cardTableRS.cpp | 447 +++++++----------- src/hotspot/share/gc/serial/cardTableRS.hpp | 25 +- .../share/gc/serial/tenuredGeneration.cpp | 8 +- src/hotspot/share/gc/shared/cardTable.hpp | 5 +- 4 files changed, 201 insertions(+), 284 deletions(-) diff --git a/src/hotspot/share/gc/serial/cardTableRS.cpp b/src/hotspot/share/gc/serial/cardTableRS.cpp index e6682854b10af..375860c9a1f01 100644 --- a/src/hotspot/share/gc/serial/cardTableRS.cpp +++ b/src/hotspot/share/gc/serial/cardTableRS.cpp @@ -28,273 +28,17 @@ #include "gc/serial/generation.hpp" #include "gc/serial/serialHeap.hpp" #include "gc/shared/space.inline.hpp" -#include "memory/allocation.inline.hpp" #include "memory/iterator.inline.hpp" -#include "oops/access.inline.hpp" -#include "oops/oop.inline.hpp" -#include "runtime/atomic.hpp" -#include "runtime/java.hpp" -#include "runtime/os.hpp" -#include "utilities/macros.hpp" - -// A dirty card to oop closure for contiguous spaces (ContiguousSpace and -// sub-classes). It knows how to filter out objects that are outside of the -// _boundary. -// (Note that because of the imprecise nature of the write barrier, this may -// iterate over oops beyond the region.) -// -// Assumptions: -// 1. That the actual top of any area in a memory region -// contained by the space is bounded by the end of the contiguous -// region of the space. -// 2. That the space is really made up of objects and not just -// blocks. - -class DirtyCardToOopClosure: public MemRegionClosure { -protected: - OopIterateClosure* _cl; - TenuredSpace* _sp; - HeapWord* _min_done; // Need a downwards traversal to compensate - // imprecise write barrier; this is the - // lowest location already done (or, - // alternatively, the lowest address that - // shouldn't be done again. null means infinity.) - NOT_PRODUCT(HeapWord* _last_bottom;) - - // Get the actual top of the area on which the closure will - // operate, given where the top is assumed to be (the end of the - // memory region passed to do_MemRegion) and where the object - // at the top is assumed to start. For example, an object may - // start at the top but actually extend past the assumed top, - // in which case the top becomes the end of the object. - HeapWord* get_actual_top(HeapWord* top, HeapWord* top_obj); - - // Walk the given memory region from bottom to (actual) top - // looking for objects and applying the oop closure (_cl) to - // them. The base implementation of this treats the area as - // blocks, where a block may or may not be an object. Sub- - // classes should override this to provide more accurate - // or possibly more efficient walking. - void walk_mem_region(MemRegion mr, HeapWord* bottom, HeapWord* top); - - // Walk the given memory region, from bottom to top, applying - // the given oop closure to (possibly) all objects found. The - // given oop closure may or may not be the same as the oop - // closure with which this closure was created, as it may - // be a filtering closure which makes use of the _boundary. - // We offer two signatures, so the FilteringClosure static type is - // apparent. - void walk_mem_region_with_cl(MemRegion mr, - HeapWord* bottom, HeapWord* top, - OopIterateClosure* cl); -public: - DirtyCardToOopClosure(TenuredSpace* sp, OopIterateClosure* cl) : - _cl(cl), _sp(sp), _min_done(nullptr) { - NOT_PRODUCT(_last_bottom = nullptr); - } - - void do_MemRegion(MemRegion mr) override; -}; - -HeapWord* DirtyCardToOopClosure::get_actual_top(HeapWord* top, - HeapWord* top_obj) { - if (top_obj != nullptr && top_obj < _sp->top()) { - if (cast_to_oop(top_obj)->is_objArray() || cast_to_oop(top_obj)->is_typeArray()) { - // An arrayOop is starting on the dirty card - since we do exact - // store checks for objArrays we are done. - } else { - // Otherwise, it is possible that the object starting on the dirty - // card spans the entire card, and that the store happened on a - // later card. Figure out where the object ends. - top = top_obj + cast_to_oop(top_obj)->size(); - } - } else { - top = _sp->top(); - } - return top; -} - -void DirtyCardToOopClosure::walk_mem_region(MemRegion mr, - HeapWord* bottom, - HeapWord* top) { - // Note that this assumption won't hold if we have a concurrent - // collector in this space, which may have freed up objects after - // they were dirtied and before the stop-the-world GC that is - // examining cards here. - assert(bottom < top, "ought to be at least one obj on a dirty card."); - - walk_mem_region_with_cl(mr, bottom, top, _cl); -} - -// We get called with "mr" representing the dirty region -// that we want to process. Because of imprecise marking, -// we may need to extend the incoming "mr" to the right, -// and scan more. However, because we may already have -// scanned some of that extended region, we may need to -// trim its right-end back some so we do not scan what -// we (or another worker thread) may already have scanned -// or planning to scan. -void DirtyCardToOopClosure::do_MemRegion(MemRegion mr) { - HeapWord* bottom = mr.start(); - HeapWord* last = mr.last(); - HeapWord* top = mr.end(); - HeapWord* bottom_obj; - HeapWord* top_obj; - - assert(_last_bottom == nullptr || top <= _last_bottom, - "Not decreasing"); - NOT_PRODUCT(_last_bottom = mr.start()); - - bottom_obj = _sp->block_start(bottom); - top_obj = _sp->block_start(last); - - assert(bottom_obj <= bottom, "just checking"); - assert(top_obj <= top, "just checking"); - - // Given what we think is the top of the memory region and - // the start of the object at the top, get the actual - // value of the top. - top = get_actual_top(top, top_obj); - - // If the previous call did some part of this region, don't redo. - if (_min_done != nullptr && _min_done < top) { - top = _min_done; - } - - // Top may have been reset, and in fact may be below bottom, - // e.g. the dirty card region is entirely in a now free object - // -- something that could happen with a concurrent sweeper. - bottom = MIN2(bottom, top); - MemRegion extended_mr = MemRegion(bottom, top); - assert(bottom <= top && - (_min_done == nullptr || top <= _min_done), - "overlap!"); - - // Walk the region if it is not empty; otherwise there is nothing to do. - if (!extended_mr.is_empty()) { - walk_mem_region(extended_mr, bottom_obj, top); - } - - _min_done = bottom; -} - -void DirtyCardToOopClosure::walk_mem_region_with_cl(MemRegion mr, - HeapWord* bottom, - HeapWord* top, - OopIterateClosure* cl) { - bottom += cast_to_oop(bottom)->oop_iterate_size(cl, mr); - if (bottom < top) { - HeapWord* next_obj = bottom + cast_to_oop(bottom)->size(); - while (next_obj < top) { - /* Bottom lies entirely below top, so we can call the */ - /* non-memRegion version of oop_iterate below. */ - cast_to_oop(bottom)->oop_iterate(cl); - bottom = next_obj; - next_obj = bottom + cast_to_oop(bottom)->size(); - } - /* Last object. */ - cast_to_oop(bottom)->oop_iterate(cl, mr); - } -} - -class ClearNoncleanCardWrapper: public MemRegionClosure { - DirtyCardToOopClosure* _dirty_card_closure; - CardTableRS* _ct; - -public: - - typedef CardTable::CardValue CardValue; -private: - // Clears the given card, return true if the corresponding card should be - // processed. - inline bool clear_card(CardValue* entry); - // check alignment of pointer - bool is_word_aligned(CardValue* entry); - -public: - ClearNoncleanCardWrapper(DirtyCardToOopClosure* dirty_card_closure, CardTableRS* ct); - void do_MemRegion(MemRegion mr) override; -}; - -inline bool ClearNoncleanCardWrapper::clear_card(CardValue* entry) { - assert(*entry == CardTableRS::dirty_card_val(), "Only look at dirty cards."); - *entry = CardTableRS::clean_card_val(); - return true; -} - -ClearNoncleanCardWrapper::ClearNoncleanCardWrapper( - DirtyCardToOopClosure* dirty_card_closure, CardTableRS* ct) : - _dirty_card_closure(dirty_card_closure), _ct(ct) { -} - -bool ClearNoncleanCardWrapper::is_word_aligned(CardTable::CardValue* entry) { - return (((intptr_t)entry) & (BytesPerWord-1)) == 0; -} - -// The regions are visited in *decreasing* address order. -// This order aids with imprecise card marking, where a dirty -// card may cause scanning, and summarization marking, of objects -// that extend onto subsequent cards. -void ClearNoncleanCardWrapper::do_MemRegion(MemRegion mr) { - assert(mr.word_size() > 0, "Error"); - assert(_ct->is_aligned(mr.start()), "mr.start() should be card aligned"); - // mr.end() may not necessarily be card aligned. - CardValue* cur_entry = _ct->byte_for(mr.last()); - const CardValue* limit = _ct->byte_for(mr.start()); - HeapWord* end_of_non_clean = mr.end(); - HeapWord* start_of_non_clean = end_of_non_clean; - while (cur_entry >= limit) { - HeapWord* cur_hw = _ct->addr_for(cur_entry); - if ((*cur_entry != CardTableRS::clean_card_val()) && clear_card(cur_entry)) { - // Continue the dirty range by opening the - // dirty window one card to the left. - start_of_non_clean = cur_hw; - } else { - // We hit a "clean" card; process any non-empty - // "dirty" range accumulated so far. - if (start_of_non_clean < end_of_non_clean) { - const MemRegion mrd(start_of_non_clean, end_of_non_clean); - _dirty_card_closure->do_MemRegion(mrd); - } - - // fast forward through potential continuous whole-word range of clean cards beginning at a word-boundary - if (is_word_aligned(cur_entry)) { - CardValue* cur_row = cur_entry - BytesPerWord; - while (cur_row >= limit && *((intptr_t*)cur_row) == CardTableRS::clean_card_row_val()) { - cur_row -= BytesPerWord; - } - cur_entry = cur_row + BytesPerWord; - cur_hw = _ct->addr_for(cur_entry); - } - - // Reset the dirty window, while continuing to look - // for the next dirty card that will start a - // new dirty window. - end_of_non_clean = cur_hw; - start_of_non_clean = cur_hw; - } - // Note that "cur_entry" leads "start_of_non_clean" in - // its leftward excursion after this point - // in the loop and, when we hit the left end of "mr", - // will point off of the left end of the card-table - // for "mr". - cur_entry--; - } - // If the first card of "mr" was dirty, we will have - // been left with a dirty window, co-initial with "mr", - // which we now process. - if (start_of_non_clean < end_of_non_clean) { - const MemRegion mrd(start_of_non_clean, end_of_non_clean); - _dirty_card_closure->do_MemRegion(mrd); - } -} +#include "utilities/align.hpp" void CardTableRS::younger_refs_in_space_iterate(TenuredSpace* sp, OopIterateClosure* cl) { verify_used_region_at_save_marks(sp); const MemRegion urasm = sp->used_region_at_save_marks(); - non_clean_card_iterate(sp, urasm, cl, this); + if (!urasm.is_empty()) { + non_clean_card_iterate(sp, urasm, cl, this); + } } #ifdef ASSERT @@ -601,20 +345,185 @@ void CardTableRS::verify() { CardTableRS::CardTableRS(MemRegion whole_heap) : CardTable(whole_heap) { } +// Implemented word-iteration to skip long consecutive clean cards. +CardTable::CardValue* CardTableRS::find_first_dirty_card(CardValue* const start_card, + CardValue* const end_card) { + using Word = uintptr_t; + + CardValue* current_card = start_card; + + while (!is_aligned(current_card, sizeof(Word))) { + if (current_card >= end_card) { + return end_card; + } + if (is_dirty(current_card)) { + return current_card; + } + ++current_card; + } + + // Word comparison + while (current_card + sizeof(Word) <= end_card) { + Word* current_word = reinterpret_cast(current_card); + if (*current_word != (Word)clean_card_row_val()) { + // Found a dirty card in this word; fall back to per-CardValue comparison. + break; + } + current_card += sizeof(Word); + } + + // Per-CardValue comparison. + for (/* empty */; current_card < end_card; ++current_card) { + if (is_dirty(current_card)) { + return current_card; + } + } + + return end_card; +} + +// Because non-objArray objs can be imprecisely-marked (only obj-start card is +// dirty instead of the part containing old-to-young pointers), if the +// obj-start of a non-objArray is dirty, all cards that obj completely resides +// on are considered as dirty, since that obj will be iterated (scanned for +// old-to-young pointers) as a whole. +template +CardTable::CardValue* CardTableRS::find_first_clean_card(CardValue* const start_card, + CardValue* const end_card, + CardTableRS* ct, + Func& object_start) { + for (CardValue* current_card = start_card; current_card < end_card; /* empty */) { + if (is_dirty(current_card)) { + current_card++; + continue; + } + + // A potential candidate. + HeapWord* addr = ct->addr_for(current_card); + HeapWord* obj_start_addr = object_start(addr); + + if (obj_start_addr == addr) { + return current_card; + } + + // Final obj in dirty-chunk crosses card-boundary. + oop obj = cast_to_oop(obj_start_addr); + if (obj->is_objArray()) { + // ObjArrays are always precisely-marked so we are not allowed to jump to + // the end of the current object. + return current_card; + } + + // Card occupied by next obj. + CardValue* next_obj_card = ct->byte_for(obj_start_addr + obj->size()); + if (is_clean(next_obj_card)) { + return next_obj_card; + } + + // Continue the search after this known-dirty card... + current_card = next_obj_card + 1; + } + + return end_card; +} + +void CardTableRS::clear_cards(CardValue* start, CardValue* end) { + size_t num_cards = pointer_delta(end, start, sizeof(CardValue)); + memset(start, clean_card_val(), num_cards); +} + +static void prefetch_write(void *p) { + if (PrefetchScanIntervalInBytes >= 0) { + Prefetch::write(p, PrefetchScanIntervalInBytes); + } +} + +static void scan_obj_with_limit(oop obj, + OopIterateClosure* cl, + HeapWord* start, + HeapWord* end) { + if (!obj->is_typeArray()) { + prefetch_write(start); + obj->oop_iterate(cl, MemRegion(start, end)); + } +} + void CardTableRS::non_clean_card_iterate(TenuredSpace* sp, MemRegion mr, OopIterateClosure* cl, - CardTableRS* ct) -{ - if (mr.is_empty()) { - return; - } - // clear_cl finds contiguous dirty ranges of cards to process and clear. + CardTableRS* ct) { + struct { + HeapWord* start_addr; + HeapWord* end_addr; + } cached_obj { nullptr, mr.start() }; + + auto object_start = [&] (const HeapWord* const addr) { + if (addr < cached_obj.end_addr) { + assert(cached_obj.start_addr != nullptr, "inv"); + return cached_obj.start_addr; + } + HeapWord* result = sp->block_start_const(addr); + + cached_obj.start_addr = result; + cached_obj.end_addr = result + cast_to_oop(result)->size(); + + return result; + }; + + CardValue* const start_card = ct->byte_for(mr.start()); + CardValue* const end_card = ct->byte_for(mr.last()) + 1; + + // if mr.end() is not card-aligned, that final card should not be cleared + // because it can be annotated dirty due to old-to-young pointers in + // newly-promoted objs on that card. + CardValue* const clear_limit_card = is_card_aligned(mr.end()) ? end_card - 1 + : end_card - 2; + + for (CardValue* current_card = start_card; current_card < end_card; /* empty */) { + CardValue* const dirty_l = find_first_dirty_card(current_card, end_card); - DirtyCardToOopClosure dcto_cl{sp, cl}; - ClearNoncleanCardWrapper clear_cl(&dcto_cl, ct); + if (dirty_l == end_card) { + // No dirty cards to iterate. + return; + } + + HeapWord* const addr_l = ct->addr_for(dirty_l); + HeapWord* obj_addr = object_start(addr_l); + + CardValue* const dirty_r = find_first_clean_card(dirty_l + 1, + end_card, + ct, + object_start); + assert(dirty_l < dirty_r, "inv"); + HeapWord* const addr_r = dirty_r == end_card ? mr.end() + : ct->addr_for(dirty_r); + + clear_cards(MIN2(dirty_l, clear_limit_card), + MIN2(dirty_r, clear_limit_card)); + + while (true) { + assert(obj_addr < addr_r, "inv"); + + oop obj = cast_to_oop(obj_addr); + const bool is_obj_array = obj->is_objArray(); + HeapWord* const obj_end_addr = obj_addr + obj->size(); - clear_cl.do_MemRegion(mr); + if (is_obj_array) { + // ObjArrays are always precise-marked. + scan_obj_with_limit(obj, cl, addr_l, addr_r); + } else { + scan_obj_with_limit(obj, cl, addr_l, obj_end_addr); + } + + if (obj_end_addr >= addr_r) { + current_card = dirty_r + 1; + break; + } + + // Move to next obj inside this dirty chunk. + obj_addr = obj_end_addr; + } + } } bool CardTableRS::is_in_young(const void* p) const { diff --git a/src/hotspot/share/gc/serial/cardTableRS.hpp b/src/hotspot/share/gc/serial/cardTableRS.hpp index 822914fcf79f6..a4f333803a0ce 100644 --- a/src/hotspot/share/gc/serial/cardTableRS.hpp +++ b/src/hotspot/share/gc/serial/cardTableRS.hpp @@ -29,7 +29,6 @@ #include "memory/memRegion.hpp" #include "oops/oop.hpp" -class DirtyCardToOopClosure; class Generation; class Space; class TenuredSpace; @@ -41,10 +40,28 @@ class CardTableRS : public CardTable { friend class VMStructs; // Below are private classes used in impl. friend class VerifyCTSpaceClosure; - friend class ClearNoncleanCardWrapper; void verify_space(Space* s, HeapWord* gen_start); + static bool is_dirty(const CardValue* const v) { + return !is_clean(v); + } + + static bool is_clean(const CardValue* const v) { + return *v == clean_card_val(); + } + + static void clear_cards(CardValue* start, CardValue* end); + + static CardValue* find_first_dirty_card(CardValue* start_card, + CardValue* end_card); + + template + CardValue* find_first_clean_card(CardValue* start_card, + CardValue* end_card, + CardTableRS* ct, + Func& object_start); + public: CardTableRS(MemRegion whole_heap); @@ -57,10 +74,6 @@ class CardTableRS : public CardTable { *byte = dirty_card_val(); } - bool is_aligned(HeapWord* addr) { - return is_card_aligned(addr); - } - void verify(); // Update old gen cards to maintain old-to-young-pointer invariant: Clear diff --git a/src/hotspot/share/gc/serial/tenuredGeneration.cpp b/src/hotspot/share/gc/serial/tenuredGeneration.cpp index 7ab95e1229d5e..981322eb14140 100644 --- a/src/hotspot/share/gc/serial/tenuredGeneration.cpp +++ b/src/hotspot/share/gc/serial/tenuredGeneration.cpp @@ -303,12 +303,8 @@ TenuredGeneration::TenuredGeneration(ReservedSpace rs, // If this wasn't true, a single card could span more than on generation, // which would cause problems when we commit/uncommit memory, and when we // clear and dirty cards. - guarantee(_rs->is_aligned(reserved_mr.start()), "generation must be card aligned"); - if (reserved_mr.end() != SerialHeap::heap()->reserved_region().end()) { - // Don't check at the very end of the heap as we'll assert that we're probing off - // the end if we try. - guarantee(_rs->is_aligned(reserved_mr.end()), "generation must be card aligned"); - } + guarantee(_rs->is_card_aligned(reserved_mr.start()), "generation must be card aligned"); + guarantee(_rs->is_card_aligned(reserved_mr.end()), "generation must be card aligned"); _min_heap_delta_bytes = MinHeapDeltaBytes; _capacity_at_prologue = initial_byte_size; _used_at_prologue = 0; diff --git a/src/hotspot/share/gc/shared/cardTable.hpp b/src/hotspot/share/gc/shared/cardTable.hpp index f66c5b7c5087d..dfa2fe39ccb77 100644 --- a/src/hotspot/share/gc/shared/cardTable.hpp +++ b/src/hotspot/share/gc/shared/cardTable.hpp @@ -112,8 +112,7 @@ class CardTable: public CHeapObj { // Return true if "p" is at the start of a card. bool is_card_aligned(HeapWord* p) { - CardValue* pcard = byte_for(p); - return (addr_for(pcard) == p); + return is_aligned(p, card_size()); } // Mapping from address to card marking array entry @@ -196,7 +195,7 @@ class CardTable: public CHeapObj { static constexpr CardValue clean_card_val() { return clean_card; } static constexpr CardValue dirty_card_val() { return dirty_card; } - static intptr_t clean_card_row_val() { return clean_card_row; } + static constexpr intptr_t clean_card_row_val() { return clean_card_row; } // Initialize card size static void initialize_card_size(); From 335f5dbf628c308fa997fae96e6b1a1e652e05b7 Mon Sep 17 00:00:00 2001 From: Hamlin Li Date: Wed, 29 Nov 2023 11:18:58 +0000 Subject: [PATCH 107/250] 8320911: RISC-V: Enable hotspot/jtreg/compiler/intrinsics/chacha/TestChaCha20.java Reviewed-by: fyang --- .../intrinsics/chacha/TestChaCha20.java | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/test/hotspot/jtreg/compiler/intrinsics/chacha/TestChaCha20.java b/test/hotspot/jtreg/compiler/intrinsics/chacha/TestChaCha20.java index c2275f6563e09..55f8375332d5b 100644 --- a/test/hotspot/jtreg/compiler/intrinsics/chacha/TestChaCha20.java +++ b/test/hotspot/jtreg/compiler/intrinsics/chacha/TestChaCha20.java @@ -36,6 +36,9 @@ * @bug 8247645 * @summary ChaCha20 Intrinsics * @library /test/lib + * @requires (vm.cpu.features ~= ".*avx512.*" | vm.cpu.features ~= ".*avx2.*" | vm.cpu.features ~= ".*avx.*") | + * (os.arch=="aarch64" & vm.cpu.features ~= ".*simd.*") | + * (os.arch == "riscv64" & vm.cpu.features ~= ".*v,.*") * @build compiler.intrinsics.chacha.ExerciseChaCha20 * jdk.test.whitebox.WhiteBox * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox @@ -57,9 +60,13 @@ private static List mix(List o, String... mix) { return n; } - private static boolean containsFuzzy(List list, String sub) { + private static boolean containsFuzzy(List list, String sub, Boolean matchExactly) { for (String s : list) { - if (s.contains(sub)) return true; + if (matchExactly) { + if (s.equals(sub)) return true; + } else { + if (s.contains(sub)) return true; + } } return false; } @@ -79,26 +86,32 @@ public static void main(String... args) throws Exception { } // Otherwise, select the tests that make sense on current platform. - if (containsFuzzy(cpuFeatures, "avx512")) { + if (containsFuzzy(cpuFeatures, "avx512", false)) { System.out.println("Setting up AVX512 worker"); configs.add(List.of("-XX:UseAVX=3")); } - if (containsFuzzy(cpuFeatures, "avx2")) { + if (containsFuzzy(cpuFeatures, "avx2", false)) { System.out.println("Setting up AVX2 worker"); configs.add(List.of("-XX:UseAVX=2")); } - if (containsFuzzy(cpuFeatures, "avx")) { + if (containsFuzzy(cpuFeatures, "avx", false)) { System.out.println("Setting up AVX worker"); configs.add(List.of("-XX:UseAVX=1")); } } else if (Platform.isAArch64()) { // AArch64 intrinsics require the advanced simd instructions - if (containsFuzzy(cpuFeatures, "simd")) { + if (containsFuzzy(cpuFeatures, "simd", false)) { System.out.println("Setting up ASIMD worker"); configs.add(new ArrayList()); } + } else if (Platform.isRISCV64()) { + // Riscv64 intrinsics require the vector instructions + if (containsFuzzy(cpuFeatures, "v", true)) { + System.out.println("Setting up vector worker"); + configs.add(List.of("-XX:+UseRVV")); + } } else { - // We only have ChaCha20 intrinsics on x64 and aarch64 + // We only have ChaCha20 intrinsics on x64, aarch64 and riscv64 // currently. If the platform is neither of these then // the ChaCha20 known answer tests in // com/sun/crypto/provider/Cipher are sufficient. From 65dfcae6d6c11e8dcb807a2559278fb082e095b9 Mon Sep 17 00:00:00 2001 From: Jan Lahoda Date: Wed, 29 Nov 2023 12:27:54 +0000 Subject: [PATCH 108/250] 8308399: Recommend --release when -source and -target are misused Reviewed-by: vromero --- .../com/sun/tools/javac/main/Arguments.java | 26 ++++++++++-- .../tools/javac/resources/compiler.properties | 42 ++++++++++++++----- .../javac/T8222035/MinContextOpTest_A.out | 2 +- .../tools/javac/diags/examples.not-yet.txt | 4 +- .../diags/examples/EnumsMustBeStatic.java | 5 +-- .../tools/javac/diags/examples/Expected3.java | 5 +-- .../examples/InnerClassCantHaveStatic.java | 5 +-- .../diags/examples/InterfaceNotAllowed.java | 5 +-- .../tools/javac/diags/examples/LocalEnum.java | 5 +-- .../examples/ObsoleteSourceAndTarget.java | 3 +- .../diags/examples/OptionRemovedSource.java | 3 +- .../diags/examples/OptionRemovedTarget.java | 3 +- .../tools/javac/diags/examples/Records.java | 5 +-- .../javac/diags/examples/SealedTypes.java | 5 +-- .../diags/examples/SourceNoBootclasspath.java | 3 +- .../examples/SourceNoSystemModulesPath.java | 3 +- .../SourceNoSystemModulesPathWithTarget.java | 28 +++++++++++++ .../javac/diags/examples/TextBlockSource.java | 5 +-- .../UnderscoreInLambdaExpression.java | 5 +-- .../options/BCPOrSystemNotSpecified.java | 4 +- .../tools/javac/options/T6900037.out | 2 +- .../options/smokeTests/OptionSmokeTest.java | 4 +- .../VarInImplicitLambdaNegTest01_source10.out | 2 +- 23 files changed, 119 insertions(+), 55 deletions(-) create mode 100644 test/langtools/tools/javac/diags/examples/SourceNoSystemModulesPathWithTarget.java diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/main/Arguments.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/main/Arguments.java index 240e6ad2a54c0..2af50832f96fc 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/main/Arguments.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/main/Arguments.java @@ -62,10 +62,12 @@ import com.sun.tools.javac.platform.PlatformDescription; import com.sun.tools.javac.platform.PlatformUtils; import com.sun.tools.javac.resources.CompilerProperties.Errors; +import com.sun.tools.javac.resources.CompilerProperties.Fragments; import com.sun.tools.javac.resources.CompilerProperties.Warnings; import com.sun.tools.javac.util.Context; import com.sun.tools.javac.util.JCDiagnostic; import com.sun.tools.javac.util.JCDiagnostic.DiagnosticInfo; +import com.sun.tools.javac.util.JCDiagnostic.Fragment; import com.sun.tools.javac.util.List; import com.sun.tools.javac.util.ListBuffer; import com.sun.tools.javac.util.Log; @@ -521,9 +523,9 @@ public boolean validate() { if (target.compareTo(source.requiredTarget()) < 0) { if (targetString != null) { if (sourceString == null) { - reportDiag(Warnings.TargetDefaultSourceConflict(targetString, source.requiredTarget())); + reportDiag(Errors.TargetDefaultSourceConflict(source.name, targetString)); } else { - reportDiag(Warnings.SourceTargetConflict(sourceString, source.requiredTarget())); + reportDiag(Errors.SourceTargetConflict(sourceString, targetString)); } return false; } else { @@ -569,10 +571,10 @@ public boolean validate() { if (fm instanceof BaseFileManager baseFileManager) { if (source.compareTo(Source.JDK8) <= 0) { if (baseFileManager.isDefaultBootClassPath()) - log.warning(LintCategory.OPTIONS, Warnings.SourceNoBootclasspath(source.name)); + log.warning(LintCategory.OPTIONS, Warnings.SourceNoBootclasspath(source.name, releaseNote(source, targetString))); } else { if (baseFileManager.isDefaultSystemModulesPath()) - log.warning(LintCategory.OPTIONS, Warnings.SourceNoSystemModulesPath(source.name)); + log.warning(LintCategory.OPTIONS, Warnings.SourceNoSystemModulesPath(source.name, releaseNote(source, targetString))); } } } @@ -640,6 +642,22 @@ public boolean validate() { return !errors && (log.nerrors == 0); } + private Fragment releaseNote(Source source, String targetString) { + if (source.compareTo(Source.JDK8) <= 0) { + if (targetString != null) { + return Fragments.SourceNoBootclasspathWithTarget(source.name, targetString); + } else { + return Fragments.SourceNoBootclasspath(source.name); + } + } else { + if (targetString != null) { + return Fragments.SourceNoSystemModulesPathWithTarget(source.name, targetString); + } else { + return Fragments.SourceNoSystemModulesPath(source.name); + } + } + } + private void validateAddExports(SourceVersion sv) { String addExports = options.get(Option.ADD_EXPORTS); if (addExports != null) { diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties index 57e31441632a1..30756ef6fa6d7 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties @@ -2119,13 +2119,33 @@ compiler.warn.static.not.qualified.by.type=\ compiler.warn.static.not.qualified.by.type2=\ static {0} should not be used as a member of an anonymous class -# 0: string +# 0: string, 1: fragment compiler.warn.source.no.bootclasspath=\ - bootstrap class path not set in conjunction with -source {0} + bootstrap class path is not set in conjunction with -source {0}\n{1} -# 0: string +# 0: string, 1: fragment compiler.warn.source.no.system.modules.path=\ - system modules path not set in conjunction with -source {0} + location of system modules is not set in conjunction with -source {0}\n{1} + +# 0: string +compiler.misc.source.no.bootclasspath=\ + not setting the bootstrap class path may lead to class files that cannot run on JDK {0}\n\ + --release {0} is recommended instead of -source {0} because it sets the bootstrap class path automatically + +# 0: string +compiler.misc.source.no.system.modules.path=\ + not setting the location of system modules may lead to class files that cannot run on JDK {0}\n\ + --release {0} is recommended instead of -source {0} because it sets the location of system modules automatically + +# 0: string, 1: string +compiler.misc.source.no.bootclasspath.with.target=\ + not setting the bootstrap class path may lead to class files that cannot run on JDK 8\n\ + --release {0} is recommended instead of -source {0} -target {1} because it sets the bootstrap class path automatically + +# 0: string, 1: string +compiler.misc.source.no.system.modules.path.with.target=\ + not setting the location of system modules may lead to class files that cannot run on JDK {0}\n\ + --release {0} is recommended instead of -source {0} -target {1} because it sets the location of system modules automatically # 0: string compiler.warn.option.obsolete.source=\ @@ -3972,13 +3992,15 @@ compiler.err.error.writing.file=\ compiler.err.sourcepath.modulesourcepath.conflict=\ cannot specify both --source-path and --module-source-path -# 0: string, 1: target -compiler.warn.source.target.conflict=\ - source release {0} requires target release {1} +# 0: string, 1: string +compiler.err.source.target.conflict=\ + specified target release {1} is too old for the specified source release {0}\n\ + --release {1} is recommended when compiling code to run on JDK {1} -# 0: string, 1: target -compiler.warn.target.default.source.conflict=\ - target release {0} conflicts with default source release {1} +# 0: string, 1: string +compiler.err.target.default.source.conflict=\ + specified target release {1} is too old for the default source release {0}\n\ + --release {1} is recommended when compiling code to run on JDK {1} # 0: profile, 1: target compiler.warn.profile.target.conflict=\ diff --git a/test/langtools/tools/javac/T8222035/MinContextOpTest_A.out b/test/langtools/tools/javac/T8222035/MinContextOpTest_A.out index 2321b85909ddc..f5b2d806c472d 100644 --- a/test/langtools/tools/javac/T8222035/MinContextOpTest_A.out +++ b/test/langtools/tools/javac/T8222035/MinContextOpTest_A.out @@ -1,4 +1,4 @@ -- compiler.warn.source.no.system.modules.path: 15 +- compiler.warn.source.no.system.modules.path: 15, (compiler.misc.source.no.system.modules.path: 15) MinContextOpTest.java:16:25: compiler.err.mod.not.allowed.here: static MinContextOpTest.java:22:25: compiler.err.mod.not.allowed.here: static MinContextOpTest.java:28:34: compiler.err.prob.found.req: (compiler.misc.infer.no.conforming.assignment.exists: T,K,V,E, (compiler.misc.inconvertible.types: java.util.function.Function, java.util.function.Function>)) diff --git a/test/langtools/tools/javac/diags/examples.not-yet.txt b/test/langtools/tools/javac/diags/examples.not-yet.txt index 9d7d79eca165e..a9ba23fa3743d 100644 --- a/test/langtools/tools/javac/diags/examples.not-yet.txt +++ b/test/langtools/tools/javac/diags/examples.not-yet.txt @@ -206,8 +206,8 @@ compiler.err.two.class.loaders.2 compiler.err.unmatched.quote compiler.err.unsupported.release.version compiler.warn.profile.target.conflict -compiler.warn.source.target.conflict -compiler.warn.target.default.source.conflict +compiler.err.source.target.conflict +compiler.err.target.default.source.conflict compiler.err.preview.not.latest compiler.err.preview.without.source.or.release compiler.misc.illegal.signature # the compiler can now detect more non-denotable types before class writing diff --git a/test/langtools/tools/javac/diags/examples/EnumsMustBeStatic.java b/test/langtools/tools/javac/diags/examples/EnumsMustBeStatic.java index 222f2eb290364..6b9283827d41f 100644 --- a/test/langtools/tools/javac/diags/examples/EnumsMustBeStatic.java +++ b/test/langtools/tools/javac/diags/examples/EnumsMustBeStatic.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2020, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,7 @@ */ // key: compiler.err.static.declaration.not.allowed.in.inner.classes -// key: compiler.warn.source.no.system.modules.path -// options: -source 15 +// options: --release 15 class EnumsMustBeStatic { class Nested { diff --git a/test/langtools/tools/javac/diags/examples/Expected3.java b/test/langtools/tools/javac/diags/examples/Expected3.java index 2b1ec3256187d..1a527034ff3e9 100644 --- a/test/langtools/tools/javac/diags/examples/Expected3.java +++ b/test/langtools/tools/javac/diags/examples/Expected3.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,7 +22,6 @@ */ // key: compiler.err.expected3 -// key: compiler.warn.source.no.system.modules.path -// options: -source 15 +// options: --release 15 int Expected3; diff --git a/test/langtools/tools/javac/diags/examples/InnerClassCantHaveStatic.java b/test/langtools/tools/javac/diags/examples/InnerClassCantHaveStatic.java index b1eaad961db6d..abe95b8a23ddb 100644 --- a/test/langtools/tools/javac/diags/examples/InnerClassCantHaveStatic.java +++ b/test/langtools/tools/javac/diags/examples/InnerClassCantHaveStatic.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2020, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,7 @@ */ // key: compiler.err.icls.cant.have.static.decl -// key: compiler.warn.source.no.system.modules.path -// options: -source 15 +// options: --release 15 class InnerClassCantHaveStatic { class Inner { diff --git a/test/langtools/tools/javac/diags/examples/InterfaceNotAllowed.java b/test/langtools/tools/javac/diags/examples/InterfaceNotAllowed.java index a72e7ef12bd84..3c5d5602aa452 100644 --- a/test/langtools/tools/javac/diags/examples/InterfaceNotAllowed.java +++ b/test/langtools/tools/javac/diags/examples/InterfaceNotAllowed.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,7 @@ */ // key: compiler.err.intf.not.allowed.here -// key: compiler.warn.source.no.system.modules.path -// options: -source 15 +// options: --release 15 class InterfaceNotAllowed { void m() { diff --git a/test/langtools/tools/javac/diags/examples/LocalEnum.java b/test/langtools/tools/javac/diags/examples/LocalEnum.java index fdf875c969776..a7cc2b6dc0baf 100644 --- a/test/langtools/tools/javac/diags/examples/LocalEnum.java +++ b/test/langtools/tools/javac/diags/examples/LocalEnum.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,8 +22,7 @@ */ // key: compiler.err.local.enum -// key: compiler.warn.source.no.system.modules.path -// options: -source 15 +// options: --release 15 class LocalEnum { void m() { diff --git a/test/langtools/tools/javac/diags/examples/ObsoleteSourceAndTarget.java b/test/langtools/tools/javac/diags/examples/ObsoleteSourceAndTarget.java index 5cf52f2d76aeb..d4a94f032b0b4 100644 --- a/test/langtools/tools/javac/diags/examples/ObsoleteSourceAndTarget.java +++ b/test/langtools/tools/javac/diags/examples/ObsoleteSourceAndTarget.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,7 @@ // key: compiler.warn.option.obsolete.target // key: compiler.warn.option.obsolete.suppression // key: compiler.warn.source.no.bootclasspath +// key: compiler.misc.source.no.bootclasspath.with.target // options: -source 1.8 -target 1.8 class ObsoleteSourceAndTarget { diff --git a/test/langtools/tools/javac/diags/examples/OptionRemovedSource.java b/test/langtools/tools/javac/diags/examples/OptionRemovedSource.java index fadc5142f0c2b..f40ea3225e9e5 100644 --- a/test/langtools/tools/javac/diags/examples/OptionRemovedSource.java +++ b/test/langtools/tools/javac/diags/examples/OptionRemovedSource.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,6 +23,7 @@ // key: compiler.err.option.removed.source // key: compiler.warn.source.no.bootclasspath +// key: compiler.misc.source.no.bootclasspath // options: -source 1.5 class RemovedSourceAndTarget { diff --git a/test/langtools/tools/javac/diags/examples/OptionRemovedTarget.java b/test/langtools/tools/javac/diags/examples/OptionRemovedTarget.java index 81f6d8e0ee066..e38994ec532fd 100644 --- a/test/langtools/tools/javac/diags/examples/OptionRemovedTarget.java +++ b/test/langtools/tools/javac/diags/examples/OptionRemovedTarget.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2023, 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 @@ -24,6 +24,7 @@ // key: compiler.err.option.removed.source // key: compiler.err.option.removed.target // key: compiler.warn.source.no.bootclasspath +// key: compiler.misc.source.no.bootclasspath.with.target // options: -source 1.5 -target 1.5 class RemovedSourceAndTarget { diff --git a/test/langtools/tools/javac/diags/examples/Records.java b/test/langtools/tools/javac/diags/examples/Records.java index 9acc44d0f4393..f356ceed5998f 100644 --- a/test/langtools/tools/javac/diags/examples/Records.java +++ b/test/langtools/tools/javac/diags/examples/Records.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,7 +23,6 @@ // key: compiler.misc.feature.records // key: compiler.err.feature.not.supported.in.source.plural -// key: compiler.warn.source.no.system.modules.path -// options: -source 15 +// options: --release 15 record R() {} diff --git a/test/langtools/tools/javac/diags/examples/SealedTypes.java b/test/langtools/tools/javac/diags/examples/SealedTypes.java index 85aca18b2afa1..4bd55525554b7 100644 --- a/test/langtools/tools/javac/diags/examples/SealedTypes.java +++ b/test/langtools/tools/javac/diags/examples/SealedTypes.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,8 +23,7 @@ // key: compiler.misc.feature.sealed.classes // key: compiler.err.feature.not.supported.in.source.plural -// key: compiler.warn.source.no.system.modules.path -// options: -source 16 +// options: --release 16 sealed class Sealed {} diff --git a/test/langtools/tools/javac/diags/examples/SourceNoBootclasspath.java b/test/langtools/tools/javac/diags/examples/SourceNoBootclasspath.java index 2c30b9e1a3302..5f02a437dbe80 100644 --- a/test/langtools/tools/javac/diags/examples/SourceNoBootclasspath.java +++ b/test/langtools/tools/javac/diags/examples/SourceNoBootclasspath.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,6 +22,7 @@ */ // key: compiler.warn.source.no.bootclasspath +// key: compiler.misc.source.no.bootclasspath // key: compiler.warn.option.obsolete.source // key: compiler.warn.option.obsolete.suppression // options: -source 8 diff --git a/test/langtools/tools/javac/diags/examples/SourceNoSystemModulesPath.java b/test/langtools/tools/javac/diags/examples/SourceNoSystemModulesPath.java index 915d5600a6ffe..5967a9b65715d 100644 --- a/test/langtools/tools/javac/diags/examples/SourceNoSystemModulesPath.java +++ b/test/langtools/tools/javac/diags/examples/SourceNoSystemModulesPath.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,6 +22,7 @@ */ // key: compiler.warn.source.no.system.modules.path +// key: compiler.misc.source.no.system.modules.path // options: -source 9 class SourceNoSystemModulesPath { } diff --git a/test/langtools/tools/javac/diags/examples/SourceNoSystemModulesPathWithTarget.java b/test/langtools/tools/javac/diags/examples/SourceNoSystemModulesPathWithTarget.java new file mode 100644 index 0000000000000..6132c44db6872 --- /dev/null +++ b/test/langtools/tools/javac/diags/examples/SourceNoSystemModulesPathWithTarget.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2023, 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. + */ + +// key: compiler.warn.source.no.system.modules.path +// key: compiler.misc.source.no.system.modules.path.with.target +// options: -source 9 -target 9 + +class SourceNoSystemModulesPath { } diff --git a/test/langtools/tools/javac/diags/examples/TextBlockSource.java b/test/langtools/tools/javac/diags/examples/TextBlockSource.java index f805491cd42ad..9fa6ecca1b8ef 100644 --- a/test/langtools/tools/javac/diags/examples/TextBlockSource.java +++ b/test/langtools/tools/javac/diags/examples/TextBlockSource.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,8 +23,7 @@ // key: compiler.misc.feature.text.blocks // key: compiler.err.feature.not.supported.in.source.plural - // key: compiler.warn.source.no.system.modules.path - // options: -source 14 + // options: --release 14 class TextBlockSource { String m() { diff --git a/test/langtools/tools/javac/diags/examples/UnderscoreInLambdaExpression.java b/test/langtools/tools/javac/diags/examples/UnderscoreInLambdaExpression.java index dd68a2c212879..d88aa9bc1272e 100644 --- a/test/langtools/tools/javac/diags/examples/UnderscoreInLambdaExpression.java +++ b/test/langtools/tools/javac/diags/examples/UnderscoreInLambdaExpression.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,8 +23,7 @@ // key: compiler.err.feature.not.supported.in.source.plural // key: compiler.misc.feature.unnamed.variables -// key: compiler.warn.source.no.system.modules.path -// options: -source 21 +// options: --release 21 public class UnderscoreInLambdaExpression { java.util.function.Function f = _ -> "x"; diff --git a/test/langtools/tools/javac/options/BCPOrSystemNotSpecified.java b/test/langtools/tools/javac/options/BCPOrSystemNotSpecified.java index a4dea63ca364d..bfe1d9d11fd0f 100644 --- a/test/langtools/tools/javac/options/BCPOrSystemNotSpecified.java +++ b/test/langtools/tools/javac/options/BCPOrSystemNotSpecified.java @@ -78,7 +78,7 @@ public void testSource8(Path base) throws IOException { List log; List expected = Arrays.asList( - "- compiler.warn.source.no.bootclasspath: 8", + "- compiler.warn.source.no.bootclasspath: 8, (compiler.misc.source.no.bootclasspath: 8)", "- compiler.warn.option.obsolete.source: 8", "- compiler.warn.option.obsolete.suppression", "3 warnings" @@ -125,7 +125,7 @@ public void testSource9(Path base) throws IOException { List log; List expected = Arrays.asList( - "- compiler.warn.source.no.system.modules.path: 9", + "- compiler.warn.source.no.system.modules.path: 9, (compiler.misc.source.no.system.modules.path: 9)", "1 warning" ); diff --git a/test/langtools/tools/javac/options/T6900037.out b/test/langtools/tools/javac/options/T6900037.out index dd5352edc7c46..3e610c371c957 100644 --- a/test/langtools/tools/javac/options/T6900037.out +++ b/test/langtools/tools/javac/options/T6900037.out @@ -1,4 +1,4 @@ -- compiler.warn.source.no.bootclasspath: 8 +- compiler.warn.source.no.bootclasspath: 8, (compiler.misc.source.no.bootclasspath: 8) - compiler.warn.option.obsolete.source: 8 - compiler.warn.option.obsolete.suppression - compiler.err.warnings.and.werror diff --git a/test/langtools/tools/javac/options/smokeTests/OptionSmokeTest.java b/test/langtools/tools/javac/options/smokeTests/OptionSmokeTest.java index f128bf14f7fba..0fae2fab1f0ad 100644 --- a/test/langtools/tools/javac/options/smokeTests/OptionSmokeTest.java +++ b/test/langtools/tools/javac/options/smokeTests/OptionSmokeTest.java @@ -139,13 +139,13 @@ public void sourceAndModuleSourceCantBeTogether(Path base) throws Exception { @Test public void sourceAndTargetMismatch(Path base) throws Exception { - doTest(base, String.format("warning: source release %s requires target release %s", Source.DEFAULT.name, Source.DEFAULT.name), + doTest(base, String.format("error: specified target release %s is too old for the specified source release %s", Source.MIN.name, Source.DEFAULT.name), String.format("-source %s -target %s", Source.DEFAULT.name, Source.MIN.name)); } @Test public void targetConflictsWithDefaultSource(Path base) throws Exception { - doTest(base, String.format("warning: target release %s conflicts with default source release %s", Source.MIN.name, Source.DEFAULT.name), + doTest(base, String.format("error: specified target release %s is too old for the default source release %s", Source.MIN.name, Source.DEFAULT.name), String.format("-target %s", Source.MIN.name)); } diff --git a/test/langtools/tools/javac/var_implicit_lambda/VarInImplicitLambdaNegTest01_source10.out b/test/langtools/tools/javac/var_implicit_lambda/VarInImplicitLambdaNegTest01_source10.out index f424f013a957c..a7c5bae106bbc 100644 --- a/test/langtools/tools/javac/var_implicit_lambda/VarInImplicitLambdaNegTest01_source10.out +++ b/test/langtools/tools/javac/var_implicit_lambda/VarInImplicitLambdaNegTest01_source10.out @@ -1,4 +1,4 @@ -- compiler.warn.source.no.system.modules.path: 10 +- compiler.warn.source.no.system.modules.path: 10, (compiler.misc.source.no.system.modules.path: 10) VarInImplicitLambdaNegTest01.java:12:36: compiler.err.feature.not.supported.in.source.plural: (compiler.misc.feature.var.syntax.in.implicit.lambda), 10, 11 VarInImplicitLambdaNegTest01.java:15:28: compiler.err.invalid.lambda.parameter.declaration: (compiler.misc.implicit.and.explicit.not.allowed) VarInImplicitLambdaNegTest01.java:17:52: compiler.err.restricted.type.not.allowed.here: var From 159465324fc45325d0df438991032ebca9229ca2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20=C3=96sterlund?= Date: Wed, 29 Nov 2023 12:40:21 +0000 Subject: [PATCH 109/250] 8310644: Make panama memory segment close use async handshakes Reviewed-by: jvernee, mcimadamore, pchilanomate --- .../share/prims/scopedMemoryAccess.cpp | 144 +++++++++--------- src/hotspot/share/prims/unsafe.cpp | 81 +++++----- .../share/runtime/interfaceSupport.inline.hpp | 8 - src/hotspot/share/runtime/javaThread.hpp | 2 +- .../internal/foreign/MemorySessionImpl.java | 3 +- .../jdk/internal/foreign/SharedSession.java | 8 +- .../misc/X-ScopedMemoryAccess.java.template | 6 +- test/jdk/java/foreign/TestHandshake.java | 53 +++++-- 8 files changed, 159 insertions(+), 146 deletions(-) diff --git a/src/hotspot/share/prims/scopedMemoryAccess.cpp b/src/hotspot/share/prims/scopedMemoryAccess.cpp index 76bfd3a5a976d..62546c4fe51f6 100644 --- a/src/hotspot/share/prims/scopedMemoryAccess.cpp +++ b/src/hotspot/share/prims/scopedMemoryAccess.cpp @@ -35,54 +35,72 @@ #include "runtime/sharedRuntime.hpp" #include "runtime/vframe.inline.hpp" -class CloseScopedMemoryFindOopClosure : public OopClosure { - oop _deopt; - bool _found; - -public: - CloseScopedMemoryFindOopClosure(jobject deopt) : - _deopt(JNIHandles::resolve(deopt)), - _found(false) {} - - template - void do_oop_work(T* p) { - if (_found) { - return; +static bool is_in_scoped_access(JavaThread* jt, oop session) { + const int max_critical_stack_depth = 10; + int depth = 0; + for (vframeStream stream(jt); !stream.at_end(); stream.next()) { + Method* m = stream.method(); + if (m->is_scoped()) { + StackValueCollection* locals = stream.asJavaVFrame()->locals(); + for (int i = 0; i < locals->size(); i++) { + StackValue* var = locals->at(i); + if (var->type() == T_OBJECT) { + if (var->get_obj() == session) { + assert(depth < max_critical_stack_depth, "can't have more than %d critical frames", max_critical_stack_depth); + return true; + } + } + } + break; } - if (RawAccess<>::oop_load(p) == _deopt) { - _found = true; + depth++; +#ifndef ASSERT + if (depth >= max_critical_stack_depth) { + break; } +#endif } - virtual void do_oop(oop* p) { - do_oop_work(p); - } + return false; +} + +class ScopedAsyncExceptionHandshake : public AsyncExceptionHandshake { + OopHandle _session; - virtual void do_oop(narrowOop* p) { - do_oop_work(p); +public: + ScopedAsyncExceptionHandshake(OopHandle& session, OopHandle& error) + : AsyncExceptionHandshake(error), + _session(session) {} + + ~ScopedAsyncExceptionHandshake() { + _session.release(Universe::vm_global()); } - bool found() { - return _found; + virtual void do_thread(Thread* thread) { + JavaThread* jt = JavaThread::cast(thread); + ResourceMark rm; + if (is_in_scoped_access(jt, _session.resolve())) { + // Throw exception to unwind out from the scoped access + AsyncExceptionHandshake::do_thread(thread); + } } }; class CloseScopedMemoryClosure : public HandshakeClosure { - jobject _deopt; + jobject _session; + jobject _error; public: - jboolean _found; - - CloseScopedMemoryClosure(jobject deopt, jobject exception) + CloseScopedMemoryClosure(jobject session, jobject error) : HandshakeClosure("CloseScopedMemory") - , _deopt(deopt) - , _found(false) {} + , _session(session) + , _error(error) {} void do_thread(Thread* thread) { - JavaThread* jt = JavaThread::cast(thread); if (!jt->has_last_Java_frame()) { + // No frames; not in a scoped memory access return; } @@ -97,44 +115,27 @@ class CloseScopedMemoryClosure : public HandshakeClosure { } ResourceMark rm; - if (_deopt != nullptr && last_frame.is_compiled_frame() && last_frame.can_be_deoptimized()) { - CloseScopedMemoryFindOopClosure cl(_deopt); - CompiledMethod* cm = last_frame.cb()->as_compiled_method(); - - /* FIXME: this doesn't work if reachability fences are violated by C2 - last_frame.oops_do(&cl, nullptr, ®ister_map); - if (cl.found()) { - //Found the deopt oop in a compiled method; deoptimize. - Deoptimization::deoptimize(jt, last_frame); - } - so... we unconditionally deoptimize, for now: */ + if (last_frame.is_compiled_frame() && last_frame.can_be_deoptimized()) { + // FIXME: we would like to conditionally deoptimize only if the corresponding + // _session is reachable from the frame, but reachabilityFence doesn't currently + // work the way it should. Therefore we deopt unconditionally for now. Deoptimization::deoptimize(jt, last_frame); } - const int max_critical_stack_depth = 10; - int depth = 0; - for (vframeStream stream(jt); !stream.at_end(); stream.next()) { - Method* m = stream.method(); - if (m->is_scoped()) { - StackValueCollection* locals = stream.asJavaVFrame()->locals(); - for (int i = 0; i < locals->size(); i++) { - StackValue* var = locals->at(i); - if (var->type() == T_OBJECT) { - if (var->get_obj() == JNIHandles::resolve(_deopt)) { - assert(depth < max_critical_stack_depth, "can't have more than %d critical frames", max_critical_stack_depth); - _found = true; - return; - } - } - } - break; - } - depth++; -#ifndef ASSERT - if (depth >= max_critical_stack_depth) { - break; - } -#endif + if (jt->has_async_exception_condition()) { + // Target thread just about to throw an async exception using async handshakes, + // we will then unwind out from the scoped memory access. + return; + } + + if (is_in_scoped_access(jt, JNIHandles::resolve(_session))) { + // We have found that the target thread is inside of a scoped access. + // An asynchronous handshake is sent to the target thread, telling it + // to throw an exception, which will unwind the target thread out from + // the scoped access. + OopHandle session(Universe::vm_global(), JNIHandles::resolve(_session)); + OopHandle error(Universe::vm_global(), JNIHandles::resolve(_error)); + jt->install_async_exception(new ScopedAsyncExceptionHandshake(session, error)); } } }; @@ -146,10 +147,9 @@ class CloseScopedMemoryClosure : public HandshakeClosure { * class annotated with the '@Scoped' annotation), and whose local variables mention the session being * closed (deopt), this method returns false, signalling that the session cannot be closed safely. */ -JVM_ENTRY(jboolean, ScopedMemoryAccess_closeScope(JNIEnv *env, jobject receiver, jobject deopt, jobject exception)) - CloseScopedMemoryClosure cl(deopt, exception); +JVM_ENTRY(void, ScopedMemoryAccess_closeScope(JNIEnv *env, jobject receiver, jobject session, jobject error)) + CloseScopedMemoryClosure cl(session, error); Handshake::execute(&cl); - return !cl._found; JVM_END /// JVM_RegisterUnsafeMethods @@ -157,14 +157,14 @@ JVM_END #define PKG_MISC "Ljdk/internal/misc/" #define PKG_FOREIGN "Ljdk/internal/foreign/" -#define MEMACCESS "ScopedMemoryAccess" -#define SCOPE PKG_FOREIGN "MemorySessionImpl;" +#define SCOPED_SESSION PKG_FOREIGN "MemorySessionImpl;" +#define SCOPED_ERROR PKG_MISC "ScopedMemoryAccess$ScopedAccessError;" #define CC (char*) /*cast a literal from (const char*)*/ #define FN_PTR(f) CAST_FROM_FN_PTR(void*, &f) static JNINativeMethod jdk_internal_misc_ScopedMemoryAccess_methods[] = { - {CC "closeScope0", CC "(" SCOPE ")Z", FN_PTR(ScopedMemoryAccess_closeScope)}, + {CC "closeScope0", CC "(" SCOPED_SESSION SCOPED_ERROR ")V", FN_PTR(ScopedMemoryAccess_closeScope)}, }; #undef CC @@ -172,8 +172,8 @@ static JNINativeMethod jdk_internal_misc_ScopedMemoryAccess_methods[] = { #undef PKG_MISC #undef PKG_FOREIGN -#undef MEMACCESS -#undef SCOPE +#undef SCOPED_SESSION +#undef SCOPED_ERROR // This function is exported, used by NativeLookup. diff --git a/src/hotspot/share/prims/unsafe.cpp b/src/hotspot/share/prims/unsafe.cpp index 74c56f169d6f4..3d732f3292d66 100644 --- a/src/hotspot/share/prims/unsafe.cpp +++ b/src/hotspot/share/prims/unsafe.cpp @@ -70,13 +70,36 @@ ( arrayOopDesc::header_size(T_DOUBLE) * HeapWordSize \ + ((julong)max_jint * sizeof(double)) ) - #define UNSAFE_ENTRY(result_type, header) \ JVM_ENTRY(static result_type, header) #define UNSAFE_LEAF(result_type, header) \ JVM_LEAF(static result_type, header) +// Note that scoped accesses (cf. scopedMemoryAccess.cpp) can install +// an async handshake on the entry to an Unsafe method. When that happens, +// it is expected that we are not allowed to touch the underlying memory +// that might have gotten unmapped. Therefore, we check at the entry +// to unsafe functions, if we have such async exception conditions, +// and return immediately if that is the case. +// +// We also use NoSafepointVerifier to block potential safepoints. +// It would be problematic if an async exception handshake were installed later on +// during another safepoint in the function, but before the memory access happens, +// as the memory will be freed after the handshake is installed. We must notice +// the installed handshake and return early before doing the memory access to prevent +// accesses to freed memory. +// +// Note also that we MUST do a scoped memory access in the VM (or Java) thread +// state. Since we rely on a handshake to check for threads that are accessing +// scoped memory, and we need the handshaking thread to wait until we get to a +// safepoint, in order to make sure we are not in the middle of accessing memory +// that is about to be freed. (i.e. there can be no UNSAFE_LEAF_SCOPED) +#define UNSAFE_ENTRY_SCOPED(result_type, header) \ + JVM_ENTRY(static result_type, header) \ + if (thread->has_async_exception_condition()) {return (result_type)0;} \ + NoSafepointVerifier nsv; + #define UNSAFE_END JVM_END @@ -279,11 +302,11 @@ UNSAFE_ENTRY(jobject, Unsafe_GetUncompressedObject(JNIEnv *env, jobject unsafe, #define DEFINE_GETSETOOP(java_type, Type) \ \ -UNSAFE_ENTRY(java_type, Unsafe_Get##Type(JNIEnv *env, jobject unsafe, jobject obj, jlong offset)) { \ +UNSAFE_ENTRY_SCOPED(java_type, Unsafe_Get##Type(JNIEnv *env, jobject unsafe, jobject obj, jlong offset)) { \ return MemoryAccess(thread, obj, offset).get(); \ } UNSAFE_END \ \ -UNSAFE_ENTRY(void, Unsafe_Put##Type(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, java_type x)) { \ +UNSAFE_ENTRY_SCOPED(void, Unsafe_Put##Type(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, java_type x)) { \ MemoryAccess(thread, obj, offset).put(x); \ } UNSAFE_END \ \ @@ -302,11 +325,11 @@ DEFINE_GETSETOOP(jdouble, Double); #define DEFINE_GETSETOOP_VOLATILE(java_type, Type) \ \ -UNSAFE_ENTRY(java_type, Unsafe_Get##Type##Volatile(JNIEnv *env, jobject unsafe, jobject obj, jlong offset)) { \ +UNSAFE_ENTRY_SCOPED(java_type, Unsafe_Get##Type##Volatile(JNIEnv *env, jobject unsafe, jobject obj, jlong offset)) { \ return MemoryAccess(thread, obj, offset).get_volatile(); \ } UNSAFE_END \ \ -UNSAFE_ENTRY(void, Unsafe_Put##Type##Volatile(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, java_type x)) { \ +UNSAFE_ENTRY_SCOPED(void, Unsafe_Put##Type##Volatile(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, java_type x)) { \ MemoryAccess(thread, obj, offset).put_volatile(x); \ } UNSAFE_END \ \ @@ -362,7 +385,7 @@ UNSAFE_LEAF(void, Unsafe_FreeMemory0(JNIEnv *env, jobject unsafe, jlong addr)) { os::free(p); } UNSAFE_END -UNSAFE_ENTRY(void, Unsafe_SetMemory0(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jlong size, jbyte value)) { +UNSAFE_ENTRY_SCOPED(void, Unsafe_SetMemory0(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jlong size, jbyte value)) { size_t sz = (size_t)size; oop base = JNIHandles::resolve(obj); @@ -371,7 +394,7 @@ UNSAFE_ENTRY(void, Unsafe_SetMemory0(JNIEnv *env, jobject unsafe, jobject obj, j Copy::fill_to_memory_atomic(p, sz, value); } UNSAFE_END -UNSAFE_ENTRY(void, Unsafe_CopyMemory0(JNIEnv *env, jobject unsafe, jobject srcObj, jlong srcOffset, jobject dstObj, jlong dstOffset, jlong size)) { +UNSAFE_ENTRY_SCOPED(void, Unsafe_CopyMemory0(JNIEnv *env, jobject unsafe, jobject srcObj, jlong srcOffset, jobject dstObj, jlong dstOffset, jlong size)) { size_t sz = (size_t)size; oop srcp = JNIHandles::resolve(srcObj); @@ -390,39 +413,19 @@ UNSAFE_ENTRY(void, Unsafe_CopyMemory0(JNIEnv *env, jobject unsafe, jobject srcOb } } UNSAFE_END -// This function is a leaf since if the source and destination are both in native memory -// the copy may potentially be very large, and we don't want to disable GC if we can avoid it. -// If either source or destination (or both) are on the heap, the function will enter VM using -// JVM_ENTRY_FROM_LEAF -UNSAFE_LEAF(void, Unsafe_CopySwapMemory0(JNIEnv *env, jobject unsafe, jobject srcObj, jlong srcOffset, jobject dstObj, jlong dstOffset, jlong size, jlong elemSize)) { +UNSAFE_ENTRY_SCOPED(void, Unsafe_CopySwapMemory0(JNIEnv *env, jobject unsafe, jobject srcObj, jlong srcOffset, jobject dstObj, jlong dstOffset, jlong size, jlong elemSize)) { size_t sz = (size_t)size; size_t esz = (size_t)elemSize; - if (srcObj == nullptr && dstObj == nullptr) { - // Both src & dst are in native memory - address src = (address)srcOffset; - address dst = (address)dstOffset; - - { - JavaThread* thread = JavaThread::thread_from_jni_environment(env); - GuardUnsafeAccess guard(thread); - Copy::conjoint_swap(src, dst, sz, esz); - } - } else { - // At least one of src/dst are on heap, transition to VM to access raw pointers - - JVM_ENTRY_FROM_LEAF(env, void, Unsafe_CopySwapMemory0) { - oop srcp = JNIHandles::resolve(srcObj); - oop dstp = JNIHandles::resolve(dstObj); + oop srcp = JNIHandles::resolve(srcObj); + oop dstp = JNIHandles::resolve(dstObj); - address src = (address)index_oop_from_field_offset_long(srcp, srcOffset); - address dst = (address)index_oop_from_field_offset_long(dstp, dstOffset); + address src = (address)index_oop_from_field_offset_long(srcp, srcOffset); + address dst = (address)index_oop_from_field_offset_long(dstp, dstOffset); - { - GuardUnsafeAccess guard(thread); - Copy::conjoint_swap(src, dst, sz, esz); - } - } JVM_END + { + GuardUnsafeAccess guard(thread); + Copy::conjoint_swap(src, dst, sz, esz); } } UNSAFE_END @@ -718,13 +721,13 @@ UNSAFE_ENTRY(jobject, Unsafe_CompareAndExchangeReference(JNIEnv *env, jobject un return JNIHandles::make_local(THREAD, res); } UNSAFE_END -UNSAFE_ENTRY(jint, Unsafe_CompareAndExchangeInt(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jint e, jint x)) { +UNSAFE_ENTRY_SCOPED(jint, Unsafe_CompareAndExchangeInt(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jint e, jint x)) { oop p = JNIHandles::resolve(obj); volatile jint* addr = (volatile jint*)index_oop_from_field_offset_long(p, offset); return Atomic::cmpxchg(addr, e, x); } UNSAFE_END -UNSAFE_ENTRY(jlong, Unsafe_CompareAndExchangeLong(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jlong e, jlong x)) { +UNSAFE_ENTRY_SCOPED(jlong, Unsafe_CompareAndExchangeLong(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jlong e, jlong x)) { oop p = JNIHandles::resolve(obj); volatile jlong* addr = (volatile jlong*)index_oop_from_field_offset_long(p, offset); return Atomic::cmpxchg(addr, e, x); @@ -739,13 +742,13 @@ UNSAFE_ENTRY(jboolean, Unsafe_CompareAndSetReference(JNIEnv *env, jobject unsafe return ret == e; } UNSAFE_END -UNSAFE_ENTRY(jboolean, Unsafe_CompareAndSetInt(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jint e, jint x)) { +UNSAFE_ENTRY_SCOPED(jboolean, Unsafe_CompareAndSetInt(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jint e, jint x)) { oop p = JNIHandles::resolve(obj); volatile jint* addr = (volatile jint*)index_oop_from_field_offset_long(p, offset); return Atomic::cmpxchg(addr, e, x) == e; } UNSAFE_END -UNSAFE_ENTRY(jboolean, Unsafe_CompareAndSetLong(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jlong e, jlong x)) { +UNSAFE_ENTRY_SCOPED(jboolean, Unsafe_CompareAndSetLong(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jlong e, jlong x)) { oop p = JNIHandles::resolve(obj); volatile jlong* addr = (volatile jlong*)index_oop_from_field_offset_long(p, offset); return Atomic::cmpxchg(addr, e, x) == e; diff --git a/src/hotspot/share/runtime/interfaceSupport.inline.hpp b/src/hotspot/share/runtime/interfaceSupport.inline.hpp index 9de1f8126d100..403ff1d9ea292 100644 --- a/src/hotspot/share/runtime/interfaceSupport.inline.hpp +++ b/src/hotspot/share/runtime/interfaceSupport.inline.hpp @@ -406,14 +406,6 @@ extern "C" { \ VM_LEAF_BASE(result_type, header) -#define JVM_ENTRY_FROM_LEAF(env, result_type, header) \ - { { \ - JavaThread* thread=JavaThread::thread_from_jni_environment(env); \ - ThreadInVMfromNative __tiv(thread); \ - debug_only(VMNativeEntryWrapper __vew;) \ - VM_ENTRY_BASE_FROM_LEAF(result_type, header, thread) - - #define JVM_END } } #endif // SHARE_RUNTIME_INTERFACESUPPORT_INLINE_HPP diff --git a/src/hotspot/share/runtime/javaThread.hpp b/src/hotspot/share/runtime/javaThread.hpp index d7f6d7b3d03c6..71bf0cc1d49d3 100644 --- a/src/hotspot/share/runtime/javaThread.hpp +++ b/src/hotspot/share/runtime/javaThread.hpp @@ -225,9 +225,9 @@ class JavaThread: public Thread { friend class AsyncExceptionHandshake; friend class HandshakeState; - void install_async_exception(AsyncExceptionHandshake* aec = nullptr); void handle_async_exception(oop java_throwable); public: + void install_async_exception(AsyncExceptionHandshake* aec = nullptr); bool has_async_exception_condition(); inline void set_pending_unsafe_access_error(); static void send_async_exception(JavaThread* jt, oop java_throwable); diff --git a/src/java.base/share/classes/jdk/internal/foreign/MemorySessionImpl.java b/src/java.base/share/classes/jdk/internal/foreign/MemorySessionImpl.java index 7ac94ef6b93e2..aef62be815160 100644 --- a/src/java.base/share/classes/jdk/internal/foreign/MemorySessionImpl.java +++ b/src/java.base/share/classes/jdk/internal/foreign/MemorySessionImpl.java @@ -55,8 +55,7 @@ public abstract sealed class MemorySessionImpl implements Scope permits ConfinedSession, GlobalSession, SharedSession { static final int OPEN = 0; - static final int CLOSING = -1; - static final int CLOSED = -2; + static final int CLOSED = -1; static final VarHandle STATE; static final int MAX_FORKS = Integer.MAX_VALUE; diff --git a/src/java.base/share/classes/jdk/internal/foreign/SharedSession.java b/src/java.base/share/classes/jdk/internal/foreign/SharedSession.java index 8d54a1e2d8af4..1569589ef9b81 100644 --- a/src/java.base/share/classes/jdk/internal/foreign/SharedSession.java +++ b/src/java.base/share/classes/jdk/internal/foreign/SharedSession.java @@ -77,17 +77,13 @@ public void release0() { } void justClose() { - int prevState = (int) STATE.compareAndExchange(this, OPEN, CLOSING); + int prevState = (int) STATE.compareAndExchange(this, OPEN, CLOSED); if (prevState < 0) { throw alreadyClosed(); } else if (prevState != OPEN) { throw alreadyAcquired(prevState); } - boolean success = SCOPED_MEMORY_ACCESS.closeScope(this); - STATE.setVolatile(this, success ? CLOSED : OPEN); - if (!success) { - throw alreadyAcquired(1); - } + SCOPED_MEMORY_ACCESS.closeScope(this, ALREADY_CLOSED); } /** diff --git a/src/java.base/share/classes/jdk/internal/misc/X-ScopedMemoryAccess.java.template b/src/java.base/share/classes/jdk/internal/misc/X-ScopedMemoryAccess.java.template index 2c7f52352aaee..0147b3bacd86e 100644 --- a/src/java.base/share/classes/jdk/internal/misc/X-ScopedMemoryAccess.java.template +++ b/src/java.base/share/classes/jdk/internal/misc/X-ScopedMemoryAccess.java.template @@ -83,11 +83,11 @@ public class ScopedMemoryAccess { registerNatives(); } - public boolean closeScope(MemorySessionImpl session) { - return closeScope0(session); + public void closeScope(MemorySessionImpl session, ScopedAccessError error) { + closeScope0(session, error); } - native boolean closeScope0(MemorySessionImpl session); + native void closeScope0(MemorySessionImpl session, ScopedAccessError error); private ScopedMemoryAccess() {} diff --git a/test/jdk/java/foreign/TestHandshake.java b/test/jdk/java/foreign/TestHandshake.java index 4dc96ee9b3b25..79825ce4750b3 100644 --- a/test/jdk/java/foreign/TestHandshake.java +++ b/test/jdk/java/foreign/TestHandshake.java @@ -33,6 +33,7 @@ import java.lang.foreign.Arena; import java.lang.foreign.MemorySegment; +import java.lang.foreign.ValueLayout; import java.lang.invoke.MethodHandles; import java.lang.invoke.VarHandle; import java.nio.ByteBuffer; @@ -48,6 +49,7 @@ import org.testng.annotations.Test; import static java.lang.foreign.ValueLayout.JAVA_BYTE; +import static java.lang.foreign.ValueLayout.JAVA_INT; import static org.testng.Assert.*; public class TestHandshake { @@ -98,16 +100,19 @@ static abstract class AbstractSegmentAccessor implements Runnable { @Override public final void run() { start("\"Accessor #\" + id"); - outer: while (segment.scope().isAlive()) { + while (segment.scope().isAlive()) { try { doAccess(); } catch (IllegalStateException ex) { - long delay = System.currentTimeMillis() - start.get(); - System.out.println("Accessor #" + id + " suspending - elapsed (ms): " + delay); - backoff(); - delay = System.currentTimeMillis() - start.get(); - System.out.println("Accessor #" + id + " resuming - elapsed (ms): " + delay); - continue outer; + if (!failed.get()) { + // ignore - this means segment was alive, but was closed while we were accessing it + // next isAlive test should fail + assertFalse(segment.scope().isAlive()); + failed.set(true); + } else { + // rethrow! + throw ex; + } } } long delay = System.currentTimeMillis() - start.get(); @@ -174,6 +179,30 @@ public void doAccess() { } } + static class SegmentSwappyCopyAccessor extends AbstractSegmentAccessor { + + MemorySegment first, second; + ValueLayout sourceLayout, destLayout; + long count; + + + SegmentSwappyCopyAccessor(int id, MemorySegment segment, Arena _unused) { + super(id, segment); + long split = segment.byteSize() / 2; + first = segment.asSlice(0, split); + sourceLayout = JAVA_INT.withOrder(ByteOrder.LITTLE_ENDIAN); + second = segment.asSlice(split); + destLayout = JAVA_INT.withOrder(ByteOrder.BIG_ENDIAN); + count = Math.min(first.byteSize() / sourceLayout.byteSize(), + second.byteSize() / destLayout.byteSize()); + } + + @Override + public void doAccess() { + MemorySegment.copy(first, sourceLayout, 0L, second, destLayout, 0L, count); + } + } + static class SegmentFillAccessor extends AbstractSegmentAccessor { SegmentFillAccessor(int id, MemorySegment segment, Arena _unused) { @@ -246,14 +275,7 @@ static class Handshaker implements Runnable { @Override public void run() { start("Handshaker"); - while (true) { - try { - arena.close(); - break; - } catch (IllegalStateException ex) { - Thread.onSpinWait(); - } - } + arena.close(); // This should NOT throw long delay = System.currentTimeMillis() - start.get(); System.out.println("Segment closed - elapsed (ms): " + delay); } @@ -268,6 +290,7 @@ static Object[][] accessors() { return new Object[][] { { "SegmentAccessor", (AccessorFactory)SegmentAccessor::new }, { "SegmentCopyAccessor", (AccessorFactory)SegmentCopyAccessor::new }, + { "SegmentSwappyCopyAccessor", (AccessorFactory)SegmentSwappyCopyAccessor::new }, { "SegmentMismatchAccessor", (AccessorFactory)SegmentMismatchAccessor::new }, { "SegmentFillAccessor", (AccessorFactory)SegmentFillAccessor::new }, { "BufferAccessor", (AccessorFactory)BufferAccessor::new }, From 48960df7bcb307a3b3353a1d513ddd4b3c0284ce Mon Sep 17 00:00:00 2001 From: Darragh Clarke Date: Wed, 29 Nov 2023 12:59:19 +0000 Subject: [PATCH 110/250] 8316734: URLEncoder should specify that replacement bytes will be used in case of coding error Reviewed-by: dfuchs, alanb --- .../share/classes/java/net/URLDecoder.java | 20 +++++++++---------- .../share/classes/java/net/URLEncoder.java | 10 +++++++--- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/java.base/share/classes/java/net/URLDecoder.java b/src/java.base/share/classes/java/net/URLDecoder.java index 84d74a7be305b..e2070458e2b17 100644 --- a/src/java.base/share/classes/java/net/URLDecoder.java +++ b/src/java.base/share/classes/java/net/URLDecoder.java @@ -98,6 +98,8 @@ private URLDecoder() {} * default charset. Instead, use the decode(String,String) method * to specify the encoding. * @return the newly decoded {@code String} + * @throws IllegalArgumentException if the implementation encounters malformed + * escape sequences */ @Deprecated public static String decode(String s) { @@ -113,9 +115,6 @@ public static String decode(String s) { * except that it will {@linkplain Charset#forName look up the charset} * using the given encoding name. * - * @implNote This implementation will throw an {@link java.lang.IllegalArgumentException} - * when illegal strings are encountered. - * * @param s the {@code String} to decode * @param enc The name of a supported * character @@ -124,6 +123,8 @@ public static String decode(String s) { * @throws UnsupportedEncodingException * If character encoding needs to be consulted, but * named character encoding is not supported + * @throws IllegalArgumentException if the implementation encounters malformed + * escape sequences * @see URLEncoder#encode(java.lang.String, java.lang.String) * @since 1.4 */ @@ -144,8 +145,10 @@ public static String decode(String s, String enc) throws UnsupportedEncodingExce * Decodes an {@code application/x-www-form-urlencoded} string using * a specific {@linkplain Charset Charset}. * The supplied charset is used to determine - * what characters are represented by any consecutive sequences of the - * form "{@code %xy}". + * what characters are represented by any consecutive escape sequences of + * the form "{@code %xy}". Erroneous bytes are replaced with the + * supplied {@code Charset}'s {@linkplain java.nio.charset.CharsetDecoder##cae + * replacement value}. *

    * Note: The @@ -153,15 +156,12 @@ public static String decode(String s, String enc) throws UnsupportedEncodingExce * UTF-8 should be used. Not doing so may introduce * incompatibilities. * - * @implNote This implementation will throw an {@link java.lang.IllegalArgumentException} - * when illegal strings are encountered. - * * @param s the {@code String} to decode * @param charset the given charset * @return the newly decoded {@code String} * @throws NullPointerException if {@code s} or {@code charset} is {@code null} - * @throws IllegalArgumentException if the implementation encounters illegal - * characters + * @throws IllegalArgumentException if the implementation encounters malformed + * escape sequences * * @spec https://www.w3.org/TR/html4 HTML 4.01 Specification * @see URLEncoder#encode(java.lang.String, Charset) diff --git a/src/java.base/share/classes/java/net/URLEncoder.java b/src/java.base/share/classes/java/net/URLEncoder.java index f8fd79e6b5e3f..3c02dd50e6e9a 100644 --- a/src/java.base/share/classes/java/net/URLEncoder.java +++ b/src/java.base/share/classes/java/net/URLEncoder.java @@ -200,11 +200,15 @@ public static String encode(String s, String enc) * This method uses the supplied charset to obtain the bytes for unsafe * characters. *

    - * Note: The * World Wide Web Consortium Recommendation states that - * UTF-8 should be used. Not doing so may introduce incompatibilities. - * + * UTF-8 should be used. Not doing so may introduce incompatibilities. * @param s {@code String} to be translated. * @param charset the given charset * @return the translated {@code String}. From 033cced6e11bbe7862d9cdd279264b3098d294ba Mon Sep 17 00:00:00 2001 From: Thomas Stuefe Date: Wed, 29 Nov 2023 13:16:38 +0000 Subject: [PATCH 111/250] 8320368: Per-CPU optimization of Klass range reservation Reviewed-by: rkennke, rehn --- .../cpu/aarch64/compressedKlass_aarch64.cpp | 133 ++++++++++++++++++ src/hotspot/cpu/ppc/compressedKlass_ppc.cpp | 48 +++++++ .../cpu/riscv/compressedKlass_riscv.cpp | 76 ++++++++++ src/hotspot/cpu/s390/compressedKlass_s390.cpp | 52 +++++++ src/hotspot/cpu/x86/compressedKlass_x86.cpp | 49 +++++++ src/hotspot/os/posix/os_posix.cpp | 5 +- src/hotspot/os/windows/os_windows.cpp | 7 +- src/hotspot/share/cds/metaspaceShared.cpp | 6 +- src/hotspot/share/memory/metaspace.cpp | 52 ++----- src/hotspot/share/memory/metaspace.hpp | 2 +- src/hotspot/share/oops/compressedKlass.cpp | 100 +++++++------ src/hotspot/share/oops/compressedKlass.hpp | 17 ++- src/hotspot/share/runtime/globals.hpp | 4 + src/hotspot/share/runtime/os.cpp | 11 +- ...essedCPUSpecificClassSpaceReservation.java | 132 +++++++++++++++++ 15 files changed, 588 insertions(+), 106 deletions(-) create mode 100644 src/hotspot/cpu/aarch64/compressedKlass_aarch64.cpp create mode 100644 src/hotspot/cpu/ppc/compressedKlass_ppc.cpp create mode 100644 src/hotspot/cpu/riscv/compressedKlass_riscv.cpp create mode 100644 src/hotspot/cpu/s390/compressedKlass_s390.cpp create mode 100644 src/hotspot/cpu/x86/compressedKlass_x86.cpp create mode 100644 test/hotspot/jtreg/runtime/CompressedOops/CompressedCPUSpecificClassSpaceReservation.java diff --git a/src/hotspot/cpu/aarch64/compressedKlass_aarch64.cpp b/src/hotspot/cpu/aarch64/compressedKlass_aarch64.cpp new file mode 100644 index 0000000000000..d035ab21093da --- /dev/null +++ b/src/hotspot/cpu/aarch64/compressedKlass_aarch64.cpp @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2023, Red Hat, Inc. All rights reserved. + * Copyright (c) 2023, 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. + * + */ + +#include "precompiled.hpp" +#include "asm/assembler.hpp" +#include "logging/log.hpp" +#include "oops/compressedKlass.hpp" +#include "memory/metaspace.hpp" +#include "runtime/os.hpp" +#include "utilities/globalDefinitions.hpp" + +// Helper function; reserve at an address that is compatible with EOR +static char* reserve_at_eor_compatible_address(size_t size, bool aslr) { + char* result = nullptr; + + log_debug(metaspace, map)("Trying to reserve at an EOR-compatible address"); + + // We need immediates that are 32-bit aligned, since they should not intersect nKlass + // bits. They should not be larger than the addressable space either, but we still + // lack a good abstraction for that (see JDK-8320584), therefore we assume and hard-code + // 2^48 as a reasonable higher ceiling. + static const uint16_t immediates[] = { + 0x0001, 0x0002, 0x0003, 0x0004, 0x0006, 0x0007, 0x0008, 0x000c, 0x000e, + 0x000f, 0x0010, 0x0018, 0x001c, 0x001e, 0x001f, 0x0020, 0x0030, 0x0038, + 0x003c, 0x003e, 0x003f, 0x0040, 0x0060, 0x0070, 0x0078, 0x007c, 0x007e, + 0x007f, 0x0080, 0x00c0, 0x00e0, 0x00f0, 0x00f8, 0x00fc, 0x00fe, 0x00ff, + 0x0100, 0x0180, 0x01c0, 0x01e0, 0x01f0, 0x01f8, 0x01fc, 0x01fe, 0x01ff, + 0x0200, 0x0300, 0x0380, 0x03c0, 0x03e0, 0x03f0, 0x03f8, 0x03fc, 0x03fe, + 0x03ff, 0x0400, 0x0600, 0x0700, 0x0780, 0x07c0, 0x07e0, 0x07f0, 0x07f8, + 0x07fc, 0x07fe, 0x07ff, 0x0800, 0x0c00, 0x0e00, 0x0f00, 0x0f80, 0x0fc0, + 0x0fe0, 0x0ff0, 0x0ff8, 0x0ffc, 0x0ffe, 0x0fff, 0x1000, 0x1800, 0x1c00, + 0x1e00, 0x1f00, 0x1f80, 0x1fc0, 0x1fe0, 0x1ff0, 0x1ff8, 0x1ffc, 0x1ffe, + 0x1fff, 0x2000, 0x3000, 0x3800, 0x3c00, 0x3e00, 0x3f00, 0x3f80, 0x3fc0, + 0x3fe0, 0x3ff0, 0x3ff8, 0x3ffc, 0x3ffe, 0x3fff, 0x4000, 0x6000, 0x7000, + 0x7800, 0x7c00, 0x7e00, 0x7f00, 0x7f80, 0x7fc0, 0x7fe0, 0x7ff0, 0x7ff8, + 0x7ffc, 0x7ffe, 0x7fff + }; + static constexpr int num_immediates = sizeof(immediates) / sizeof(immediates[0]); + const int start_index = aslr ? os::random() : 0; + constexpr int max_tries = 64; + for (int ntry = 0; result == nullptr && ntry < max_tries; ntry ++) { + // As in os::attempt_reserve_memory_between, we alternate between higher and lower + // addresses; this maximizes the chance of early success if part of the address space + // is not accessible (e.g. 39-bit address space). + const int alt_index = (ntry & 1) ? 0 : num_immediates / 2; + const int index = (start_index + ntry + alt_index) % num_immediates; + const uint64_t immediate = ((uint64_t)immediates[index]) << 32; + assert(immediate > 0 && Assembler::operand_valid_for_logical_immediate(/*is32*/false, immediate), + "Invalid immediate %d " UINT64_FORMAT, index, immediate); + result = os::attempt_reserve_memory_at((char*)immediate, size, false); + if (result == nullptr) { + log_trace(metaspace, map)("Failed to attach at " UINT64_FORMAT_X, immediate); + } + } + if (result == nullptr) { + log_debug(metaspace, map)("Failed to reserve at any EOR-compatible address"); + } + return result; +} +char* CompressedKlassPointers::reserve_address_space_for_compressed_classes(size_t size, bool aslr, bool optimize_for_zero_base) { + + char* result = nullptr; + + // Optimize for base=0 shift=0 + if (optimize_for_zero_base) { + result = reserve_address_space_for_unscaled_encoding(size, aslr); + } + + // If this fails, we don't bother aiming for zero-based encoding (base=0 shift>0), since it has no + // advantages over EOR or movk mode. + + // EOR-compatible reservation + if (result == nullptr) { + result = reserve_at_eor_compatible_address(size, aslr); + } + + // Movk-compatible reservation via probing. + if (result == nullptr) { + result = reserve_address_space_for_16bit_move(size, aslr); + } + + // Movk-compatible reservation via overallocation. + // If that failed, attempt to allocate at any 4G-aligned address. Let the system decide where. For ASLR, + // we now rely on the system. + // Compared with the probing done above, this has two disadvantages: + // - on a kernel with 52-bit address space we may get an address that has bits set between [48, 52). + // In that case, we may need two movk moves (not yet implemented). + // - this technique leads to temporary over-reservation of address space; it will spike the vsize of + // the process. Therefore it may fail if a vsize limit is in place (e.g. ulimit -v). + if (result == nullptr) { + constexpr size_t alignment = nth_bit(32); + log_debug(metaspace, map)("Trying to reserve at a 32-bit-aligned address"); + result = os::reserve_memory_aligned(size, alignment, false); + } + + return result; +} + +void CompressedKlassPointers::initialize(address addr, size_t len) { + constexpr uintptr_t unscaled_max = nth_bit(32); + assert(len <= unscaled_max, "Klass range larger than 32 bits?"); + + // Shift is always 0 on aarch64. + _shift = 0; + + // On aarch64, we don't bother with zero-based encoding (base=0 shift>0). + address const end = addr + len; + _base = (end <= (address)unscaled_max) ? nullptr : addr; + + _range = end - _base; +} diff --git a/src/hotspot/cpu/ppc/compressedKlass_ppc.cpp b/src/hotspot/cpu/ppc/compressedKlass_ppc.cpp new file mode 100644 index 0000000000000..51012eef86594 --- /dev/null +++ b/src/hotspot/cpu/ppc/compressedKlass_ppc.cpp @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2023, Red Hat, Inc. All rights reserved. + * Copyright (c) 2023, 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. + * + */ + +#include "precompiled.hpp" +#include "oops/compressedKlass.hpp" +#include "utilities/globalDefinitions.hpp" + +char* CompressedKlassPointers::reserve_address_space_for_compressed_classes(size_t size, bool aslr, bool optimize_for_zero_base) { + + char* result = nullptr; + + // Optimize for base=0 shift=0; failing that, for base=0 shift>0 + if (optimize_for_zero_base) { + result = reserve_address_space_for_unscaled_encoding(size, aslr); + if (result == nullptr) { + result = reserve_address_space_for_zerobased_encoding(size, aslr); + } + } + + // Optimize for a single 16-bit move: a base that has only bits set in its third quadrant [32..48). + if (result == nullptr) { + result = reserve_address_space_for_16bit_move(size, aslr); + } + + return result; +} diff --git a/src/hotspot/cpu/riscv/compressedKlass_riscv.cpp b/src/hotspot/cpu/riscv/compressedKlass_riscv.cpp new file mode 100644 index 0000000000000..cffadb4189b1c --- /dev/null +++ b/src/hotspot/cpu/riscv/compressedKlass_riscv.cpp @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2023, Red Hat, Inc. All rights reserved. + * Copyright (c) 2023, 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. + * + */ + +#include "precompiled.hpp" +#include "oops/compressedKlass.hpp" +#include "utilities/globalDefinitions.hpp" + +char* CompressedKlassPointers::reserve_address_space_for_compressed_classes(size_t size, bool aslr, bool optimize_for_zero_base) { + + char* result = nullptr; + + // RiscV loads a 64-bit immediate in up to four separate steps, splitting it into four different sections + // (two 32-bit sections, each split into two subsections of 20/12 bits). + // + // 63 ....... 44 43 ... 32 31 ....... 12 11 ... 0 + // D C B A + // + // A "good" base is, in this order: + // 1) only bits in A; this would be an address < 4KB, which is unrealistic on normal Linux boxes since + // the typical default for vm.mmap_min_address is 64KB. We ignore that. + // 2) only bits in B: a 12-bit-aligned address below 4GB. 12 bit = 4KB, but since mmap reserves at + // page boundaries, we can ignore the alignment. + // 3) only bits in C: a 4GB-aligned address that is lower than 16TB. + // 4) only bits in D: a 16TB-aligned address. + + // First, attempt to allocate < 4GB. We do this unconditionally: + // - if can_optimize_for_zero_base, a <4GB mapping start would allow us to run unscaled (base = 0, shift = 0) + // - if !can_optimize_for_zero_base, a <4GB mapping start is still good, the resulting immediate can be encoded + // with one instruction (2) + result = reserve_address_space_for_unscaled_encoding(size, aslr); + + // Failing that, attempt to reserve for base=zero shift>0 + if (result == nullptr && optimize_for_zero_base) { + result = reserve_address_space_for_zerobased_encoding(size, aslr); + } + + // Failing that, optimize for case (3) - a base with only bits set between [33-44) + if (result == nullptr) { + const uintptr_t from = nth_bit(32 + (optimize_for_zero_base ? LogKlassAlignmentInBytes : 0)); + constexpr uintptr_t to = nth_bit(44); + constexpr size_t alignment = nth_bit(32); + result = reserve_address_space_X(from, to, size, alignment, aslr); + } + + // Failing that, optimize for case (4) - a base with only bits set between [44-64) + if (result == nullptr) { + constexpr uintptr_t from = nth_bit(44); + constexpr uintptr_t to = UINT64_MAX; + constexpr size_t alignment = nth_bit(44); + result = reserve_address_space_X(from, to, size, alignment, aslr); + } + + return result; +} diff --git a/src/hotspot/cpu/s390/compressedKlass_s390.cpp b/src/hotspot/cpu/s390/compressedKlass_s390.cpp new file mode 100644 index 0000000000000..868df0f02d7cb --- /dev/null +++ b/src/hotspot/cpu/s390/compressedKlass_s390.cpp @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2023, Red Hat, Inc. All rights reserved. + * Copyright (c) 2023, 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. + * + */ + +#include "precompiled.hpp" +#include "oops/compressedKlass.hpp" +#include "utilities/globalDefinitions.hpp" + +char* CompressedKlassPointers::reserve_address_space_for_compressed_classes(size_t size, bool aslr, bool optimize_for_zero_base) { + + char* result = nullptr; + + uintptr_t tried_below = 0; + + // First, attempt to allocate < 4GB. We do this unconditionally: + // - if optimize_for_zero_base, a <4GB mapping start allows us to use base=0 shift=0 + // - if !optimize_for_zero_base, a <4GB mapping start allows us to use algfi + result = reserve_address_space_for_unscaled_encoding(size, aslr); + + // Failing that, try optimized for base=0 shift>0 + if (result == nullptr && optimize_for_zero_base) { + result = reserve_address_space_for_zerobased_encoding(size, aslr); + } + + // Failing that, aim for a base that is 4G-aligned; such a base can be set with aih. + if (result == nullptr) { + result = reserve_address_space_for_16bit_move(size, aslr); + } + + return result; +} diff --git a/src/hotspot/cpu/x86/compressedKlass_x86.cpp b/src/hotspot/cpu/x86/compressedKlass_x86.cpp new file mode 100644 index 0000000000000..5b5a405bcef86 --- /dev/null +++ b/src/hotspot/cpu/x86/compressedKlass_x86.cpp @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2023, Red Hat, Inc. All rights reserved. + * Copyright (c) 2023, 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. + * + */ + +#include "precompiled.hpp" + +#ifdef _LP64 + +#include "oops/compressedKlass.hpp" +#include "utilities/globalDefinitions.hpp" + +char* CompressedKlassPointers::reserve_address_space_for_compressed_classes(size_t size, bool aslr, bool optimize_for_zero_base) { + + char* result = nullptr; + + // Optimize for unscaled encoding; failing that, for zero-based encoding: + if (optimize_for_zero_base) { + result = reserve_address_space_for_unscaled_encoding(size, aslr); + if (result == nullptr) { + result = reserve_address_space_for_zerobased_encoding(size, aslr); + } + } // end: low-address reservation + + // Nothing more to optimize for on x64. If base != 0, we will always emit the full 64-bit immediate. + return result; +} + +#endif // _LP64 diff --git a/src/hotspot/os/posix/os_posix.cpp b/src/hotspot/os/posix/os_posix.cpp index 1b75693b138a9..960fb465590cc 100644 --- a/src/hotspot/os/posix/os_posix.cpp +++ b/src/hotspot/os/posix/os_posix.cpp @@ -343,9 +343,10 @@ char* os::replace_existing_mapping_with_file_mapping(char* base, size_t size, in } static size_t calculate_aligned_extra_size(size_t size, size_t alignment) { - assert((alignment & (os::vm_allocation_granularity() - 1)) == 0, + assert(is_aligned(alignment, os::vm_allocation_granularity()), "Alignment must be a multiple of allocation granularity (page size)"); - assert((size & (alignment -1)) == 0, "size must be 'alignment' aligned"); + assert(is_aligned(size, os::vm_allocation_granularity()), + "Size must be a multiple of allocation granularity (page size)"); size_t extra_size = size + alignment; assert(extra_size >= size, "overflow, size is too large to allow alignment"); diff --git a/src/hotspot/os/windows/os_windows.cpp b/src/hotspot/os/windows/os_windows.cpp index 56301fe2e8792..223bc0bd13514 100644 --- a/src/hotspot/os/windows/os_windows.cpp +++ b/src/hotspot/os/windows/os_windows.cpp @@ -3331,9 +3331,10 @@ char* os::replace_existing_mapping_with_file_mapping(char* base, size_t size, in // virtual space to get requested alignment, like posix-like os's. // Windows prevents multiple thread from remapping over each other so this loop is thread-safe. static char* map_or_reserve_memory_aligned(size_t size, size_t alignment, int file_desc) { - assert((alignment & (os::vm_allocation_granularity() - 1)) == 0, - "Alignment must be a multiple of allocation granularity (page size)"); - assert((size & (alignment -1)) == 0, "size must be 'alignment' aligned"); + assert(is_aligned(alignment, os::vm_allocation_granularity()), + "Alignment must be a multiple of allocation granularity (page size)"); + assert(is_aligned(size, os::vm_allocation_granularity()), + "Size must be a multiple of allocation granularity (page size)"); size_t extra_size = size + alignment; assert(extra_size >= size, "overflow, size is too large to allow alignment"); diff --git a/src/hotspot/share/cds/metaspaceShared.cpp b/src/hotspot/share/cds/metaspaceShared.cpp index b73048a9bf58e..d85db121db34a 100644 --- a/src/hotspot/share/cds/metaspaceShared.cpp +++ b/src/hotspot/share/cds/metaspaceShared.cpp @@ -1331,11 +1331,11 @@ char* MetaspaceShared::reserve_address_space_for_archives(FileMapInfo* static_ma os::vm_page_size(), (char*) base_address); } else { // We did not manage to reserve at the preferred address, or were instructed to relocate. In that - // case we reserve whereever possible, but the start address needs to be encodable as narrow Klass - // encoding base since the archived heap objects contain nKlass IDs precalculated toward the start + // case we reserve wherever possible, but the start address needs to be encodable as narrow Klass + // encoding base since the archived heap objects contain nKlass IDs pre-calculated toward the start // of the shared Metaspace. That prevents us from using zero-based encoding and therefore we won't // try allocating in low-address regions. - total_space_rs = Metaspace::reserve_address_space_for_compressed_classes(total_range_size, false /* try_in_low_address_ranges */); + total_space_rs = Metaspace::reserve_address_space_for_compressed_classes(total_range_size, false /* optimize_for_zero_base */); } if (!total_space_rs.is_reserved()) { diff --git a/src/hotspot/share/memory/metaspace.cpp b/src/hotspot/share/memory/metaspace.cpp index 1aa0923ff9c9d..573df165d0dff 100644 --- a/src/hotspot/share/memory/metaspace.cpp +++ b/src/hotspot/share/memory/metaspace.cpp @@ -1,6 +1,7 @@ /* * Copyright (c) 2011, 2023, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2017, 2021 SAP SE. All rights reserved. + * Copyright (c) 2023, Red Hat, Inc. 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 @@ -578,54 +579,15 @@ bool Metaspace::class_space_is_initialized() { // Reserve a range of memory that is to contain narrow Klass IDs. If "try_in_low_address_ranges" // is true, we will attempt to reserve memory suitable for zero-based encoding. -ReservedSpace Metaspace::reserve_address_space_for_compressed_classes(size_t size, bool try_in_low_address_ranges) { - +ReservedSpace Metaspace::reserve_address_space_for_compressed_classes(size_t size, bool optimize_for_zero_base) { char* result = nullptr; - const bool randomize = RandomizeClassSpaceLocation; - - // First try to reserve in low address ranges. - if (try_in_low_address_ranges) { - constexpr uintptr_t unscaled_max = ((uintptr_t)UINT_MAX + 1); - log_debug(metaspace, map)("Trying below " SIZE_FORMAT_X " for unscaled narrow Klass encoding", unscaled_max); - result = os::attempt_reserve_memory_between(nullptr, (char*)unscaled_max, - size, Metaspace::reserve_alignment(), randomize); - if (result == nullptr) { - constexpr uintptr_t zerobased_max = unscaled_max << LogKlassAlignmentInBytes; - log_debug(metaspace, map)("Trying below " SIZE_FORMAT_X " for zero-based narrow Klass encoding", zerobased_max); - result = os::attempt_reserve_memory_between((char*)unscaled_max, (char*)zerobased_max, - size, Metaspace::reserve_alignment(), randomize); - } - } // end: low-address reservation -#if defined(AARCH64) || defined(PPC64) || defined(S390) - if (result == nullptr) { - // Failing zero-based allocation, or in strict_base mode, try to come up with - // an optimized start address that is amenable to JITs that use 16-bit moves to - // load the encoding base as a short immediate. - // Therefore we try here for an address that when right-shifted by - // LogKlassAlignmentInBytes has only 1s in the third 16-bit quadrant. - // - // Example: for shift=3, the address space searched would be - // [0x0080_0000_0000 - 0xFFF8_0000_0000]. - - // Number of least significant bits that should be zero - constexpr int lo_zero_bits = 32 + LogKlassAlignmentInBytes; - // Number of most significant bits that should be zero - constexpr int hi_zero_bits = 16; - - constexpr size_t alignment = nth_bit(lo_zero_bits); - assert(alignment >= Metaspace::reserve_alignment(), "Sanity"); - constexpr uint64_t min = alignment; - constexpr uint64_t max = nth_bit(64 - hi_zero_bits); - - log_debug(metaspace, map)("Trying between " UINT64_FORMAT_X " and " UINT64_FORMAT_X - " with " SIZE_FORMAT_X " alignment", min, max, alignment); - result = os::attempt_reserve_memory_between((char*)min, (char*)max, size, alignment, randomize); - } -#endif // defined(AARCH64) || defined(PPC64) || defined(S390) + NOT_ZERO(result = + (char*) CompressedKlassPointers::reserve_address_space_for_compressed_classes(size, RandomizeClassSpaceLocation, + optimize_for_zero_base)); if (result == nullptr) { - // Fallback: reserve anywhere and hope the resulting block is usable. + // Fallback: reserve anywhere log_debug(metaspace, map)("Trying anywhere..."); result = os::reserve_memory_aligned(size, Metaspace::reserve_alignment(), false); } @@ -633,10 +595,12 @@ ReservedSpace Metaspace::reserve_address_space_for_compressed_classes(size_t siz // Wrap resulting range in ReservedSpace ReservedSpace rs; if (result != nullptr) { + log_debug(metaspace, map)("Mapped at " PTR_FORMAT, p2i(result)); assert(is_aligned(result, Metaspace::reserve_alignment()), "Alignment too small for metaspace"); rs = ReservedSpace::space_for_range(result, size, Metaspace::reserve_alignment(), os::vm_page_size(), false, false); } else { + log_debug(metaspace, map)("Failed to map."); rs = ReservedSpace(); } return rs; diff --git a/src/hotspot/share/memory/metaspace.hpp b/src/hotspot/share/memory/metaspace.hpp index 652a2be35d9ad..a90ff77564763 100644 --- a/src/hotspot/share/memory/metaspace.hpp +++ b/src/hotspot/share/memory/metaspace.hpp @@ -76,7 +76,7 @@ class Metaspace : public AllStatic { // Reserve a range of memory that is to contain narrow Klass IDs. If "try_in_low_address_ranges" // is true, we will attempt to reserve memory suitable for zero-based encoding. - static ReservedSpace reserve_address_space_for_compressed_classes(size_t size, bool try_in_low_address_ranges); + static ReservedSpace reserve_address_space_for_compressed_classes(size_t size, bool optimize_for_zero_base); // Given a prereserved space, use that to set up the compressed class space list. static void initialize_class_space(ReservedSpace rs); diff --git a/src/hotspot/share/oops/compressedKlass.cpp b/src/hotspot/share/oops/compressedKlass.cpp index 40b4ae170114a..f9d0466dda4ec 100644 --- a/src/hotspot/share/oops/compressedKlass.cpp +++ b/src/hotspot/share/oops/compressedKlass.cpp @@ -23,8 +23,11 @@ */ #include "precompiled.hpp" +#include "logging/log.hpp" +#include "memory/metaspace.hpp" #include "oops/compressedKlass.hpp" #include "runtime/globals.hpp" +#include "runtime/os.hpp" #include "utilities/debug.hpp" #include "utilities/globalDefinitions.hpp" #include "utilities/ostream.hpp" @@ -35,6 +38,13 @@ size_t CompressedKlassPointers::_range = 0; #ifdef _LP64 +#ifdef ASSERT +void CompressedKlassPointers::assert_is_valid_encoding(address addr, size_t len, address base, int shift) { + assert(base + nth_bit(32 + shift) >= addr + len, "Encoding (base=" PTR_FORMAT ", shift=%d) does not " + "fully cover the class range " PTR_FORMAT "-" PTR_FORMAT, p2i(base), shift, p2i(addr), p2i(addr + len)); +} +#endif + // Given a klass range [addr, addr+len) and a given encoding scheme, assert that this scheme covers the range, then // set this encoding scheme. Used by CDS at runtime to re-instate the scheme used to pre-compute klass ids for // archived heap objects. @@ -50,45 +60,62 @@ void CompressedKlassPointers::initialize_for_given_encoding(address addr, size_t assert(requested_base == addr, "Invalid requested base"); assert(encoding_range_end >= end, "Encoding does not cover the full Klass range"); - set_base(requested_base); - set_shift(requested_shift); - set_range(encoding_range_size); + _base = requested_base; + _shift = requested_shift; + _range = encoding_range_size; + + DEBUG_ONLY(assert_is_valid_encoding(addr, len, _base, _shift);) } -// Given an address range [addr, addr+len) which the encoding is supposed to -// cover, choose base, shift and range. -// The address range is the expected range of uncompressed Klass pointers we -// will encounter (and the implicit promise that there will be no Klass -// structures outside this range). -void CompressedKlassPointers::initialize(address addr, size_t len) { - address const end = addr + len; +char* CompressedKlassPointers::reserve_address_space_X(uintptr_t from, uintptr_t to, size_t size, size_t alignment, bool aslr) { + alignment = MAX2(Metaspace::reserve_alignment(), alignment); + return os::attempt_reserve_memory_between((char*)from, (char*)to, size, alignment, aslr); +} - address base; - int shift; - size_t range; +char* CompressedKlassPointers::reserve_address_space_for_unscaled_encoding(size_t size, bool aslr) { + return reserve_address_space_X(0, nth_bit(32), size, Metaspace::reserve_alignment(), aslr); +} - // Attempt to run with encoding base == zero - if (end <= (address)KlassEncodingMetaspaceMax) { - base = 0; - } else { - base = addr; - } +char* CompressedKlassPointers::reserve_address_space_for_zerobased_encoding(size_t size, bool aslr) { + return reserve_address_space_X(nth_bit(32), nth_bit(32 + LogKlassAlignmentInBytes), size, Metaspace::reserve_alignment(), aslr); +} - // Highest offset a Klass* can ever have in relation to base. - range = end - base; +char* CompressedKlassPointers::reserve_address_space_for_16bit_move(size_t size, bool aslr) { + return reserve_address_space_X(nth_bit(32), nth_bit(48), size, nth_bit(32), aslr); +} - // We may not even need a shift if the range fits into 32bit: - const uint64_t UnscaledClassSpaceMax = (uint64_t(max_juint) + 1); - if (range <= UnscaledClassSpaceMax) { - shift = 0; +#ifndef AARCH64 +// On aarch64 we have an own version; all other platforms use the default version +void CompressedKlassPointers::initialize(address addr, size_t len) { + // The default version of this code tries, in order of preference: + // -unscaled (base=0 shift=0) + // -zero-based (base=0 shift>0) + // -nonzero-base (base>0 shift=0) + // Note that base>0 shift>0 should never be needed, since the klass range will + // never exceed 4GB. + constexpr uintptr_t unscaled_max = nth_bit(32); + assert(len <= unscaled_max, "Klass range larger than 32 bits?"); + + constexpr uintptr_t zerobased_max = nth_bit(32 + LogKlassAlignmentInBytes); + + address const end = addr + len; + if (end <= (address)unscaled_max) { + _base = nullptr; + _shift = 0; } else { - shift = LogKlassAlignmentInBytes; + if (end <= (address)zerobased_max) { + _base = nullptr; + _shift = LogKlassAlignmentInBytes; + } else { + _base = addr; + _shift = 0; + } } + _range = end - _base; - set_base(base); - set_shift(shift); - set_range(range); + DEBUG_ONLY(assert_is_valid_encoding(addr, len, _base, _shift);) } +#endif // !AARCH64 void CompressedKlassPointers::print_mode(outputStream* st) { st->print_cr("Narrow klass base: " PTR_FORMAT ", Narrow klass shift: %d, " @@ -96,19 +123,4 @@ void CompressedKlassPointers::print_mode(outputStream* st) { range()); } -void CompressedKlassPointers::set_base(address base) { - assert(UseCompressedClassPointers, "no compressed klass ptrs?"); - _base = base; -} - -void CompressedKlassPointers::set_shift(int shift) { - assert(shift == 0 || shift == LogKlassAlignmentInBytes, "invalid shift for klass ptrs"); - _shift = shift; -} - -void CompressedKlassPointers::set_range(size_t range) { - assert(UseCompressedClassPointers, "no compressed klass ptrs?"); - _range = range; -} - #endif // _LP64 diff --git a/src/hotspot/share/oops/compressedKlass.hpp b/src/hotspot/share/oops/compressedKlass.hpp index ac0bad9ea82e3..e871fe5bdcc0e 100644 --- a/src/hotspot/share/oops/compressedKlass.hpp +++ b/src/hotspot/share/oops/compressedKlass.hpp @@ -56,15 +56,24 @@ class CompressedKlassPointers : public AllStatic { // could use this info to optimize encoding. static size_t _range; - static void set_base(address base); - static void set_range(size_t range); - static void set_shift(int shift); + // Helper function for common cases. + static char* reserve_address_space_X(uintptr_t from, uintptr_t to, size_t size, size_t alignment, bool aslr); + static char* reserve_address_space_for_unscaled_encoding(size_t size, bool aslr); + static char* reserve_address_space_for_zerobased_encoding(size_t size, bool aslr); + static char* reserve_address_space_for_16bit_move(size_t size, bool aslr); + + DEBUG_ONLY(static void assert_is_valid_encoding(address addr, size_t len, address base, int shift);) public: + // Reserve a range of memory that is to contain Klass strucutures which are referenced by narrow Klass IDs. + // If optimize_for_zero_base is true, the implementation will attempt to reserve optimized for zero-based encoding. + static char* reserve_address_space_for_compressed_classes(size_t size, bool aslr, bool optimize_for_zero_base); + // Given a klass range [addr, addr+len) and a given encoding scheme, assert that this scheme covers the range, then // set this encoding scheme. Used by CDS at runtime to re-instate the scheme used to pre-compute klass ids for - // archived heap objects. + // archived heap objects. In this case, we don't have the freedom to choose base and shift; they are handed to + // us from CDS. static void initialize_for_given_encoding(address addr, size_t len, address requested_base, int requested_shift); // Given an address range [addr, addr+len) which the encoding is supposed to diff --git a/src/hotspot/share/runtime/globals.hpp b/src/hotspot/share/runtime/globals.hpp index 99d2488a593cb..dce90c78eb475 100644 --- a/src/hotspot/share/runtime/globals.hpp +++ b/src/hotspot/share/runtime/globals.hpp @@ -1999,6 +1999,10 @@ const int ObjectAlignmentInBytes = 8; "(default) disables native heap trimming.") \ range(0, UINT_MAX) \ \ + develop(bool, SimulateFullAddressSpace, false, \ + "Simulates a very populated, fragmented address space; no " \ + "targeted reservations will succeed.") \ + \ product(bool, ProfileExceptionHandlers, true, \ "Profile exception handlers") \ diff --git a/src/hotspot/share/runtime/os.cpp b/src/hotspot/share/runtime/os.cpp index cafc9b10cbb05..0eb4015a24659 100644 --- a/src/hotspot/share/runtime/os.cpp +++ b/src/hotspot/share/runtime/os.cpp @@ -1810,7 +1810,7 @@ char* os::reserve_memory(size_t bytes, bool executable, MEMFLAGS flags) { } char* os::attempt_reserve_memory_at(char* addr, size_t bytes, bool executable) { - char* result = pd_attempt_reserve_memory_at(addr, bytes, executable); + char* result = SimulateFullAddressSpace ? nullptr : pd_attempt_reserve_memory_at(addr, bytes, executable); if (result != nullptr) { MemTracker::record_virtual_memory_reserve((address)result, bytes, CALLER_PC); log_debug(os)("Reserved memory at " INTPTR_FORMAT " for " SIZE_FORMAT " bytes.", p2i(addr), bytes); @@ -1818,7 +1818,6 @@ char* os::attempt_reserve_memory_at(char* addr, size_t bytes, bool executable) { log_debug(os)("Attempt to reserve memory at " INTPTR_FORMAT " for " SIZE_FORMAT " bytes failed, errno %d", p2i(addr), bytes, get_last_error()); } - return result; } @@ -1874,10 +1873,10 @@ char* os::attempt_reserve_memory_between(char* min, char* max, size_t bytes, siz // we attempt to minimize fragmentation. constexpr unsigned total_shuffle_threshold = 1024; -#define ARGSFMT " range [" PTR_FORMAT "-" PTR_FORMAT "), size " SIZE_FORMAT_X ", alignment " SIZE_FORMAT_X ", randomize: %d" +#define ARGSFMT "range [" PTR_FORMAT "-" PTR_FORMAT "), size " SIZE_FORMAT_X ", alignment " SIZE_FORMAT_X ", randomize: %d" #define ARGSFMTARGS p2i(min), p2i(max), bytes, alignment, randomize - log_trace(os, map) ("reserve_between (" ARGSFMT ")", ARGSFMTARGS); + log_debug(os, map) ("reserve_between (" ARGSFMT ")", ARGSFMTARGS); assert(is_power_of_2(alignment), "alignment invalid (" ARGSFMT ")", ARGSFMTARGS); assert(alignment < SIZE_MAX / 2, "alignment too large (" ARGSFMT ")", ARGSFMTARGS); @@ -1987,7 +1986,7 @@ char* os::attempt_reserve_memory_between(char* min, char* max, size_t bytes, siz const unsigned candidate_offset = points[i]; char* const candidate = lo_att + candidate_offset * alignment_adjusted; assert(candidate <= hi_att, "Invalid offset %u (" ARGSFMT ")", candidate_offset, ARGSFMTARGS); - result = os::pd_attempt_reserve_memory_at(candidate, bytes, false); + result = SimulateFullAddressSpace ? nullptr : os::pd_attempt_reserve_memory_at(candidate, bytes, false); if (!result) { log_trace(os, map)("Failed to attach at " PTR_FORMAT, p2i(candidate)); } @@ -2005,6 +2004,8 @@ char* os::attempt_reserve_memory_between(char* min, char* max, size_t bytes, siz log_trace(os, map)(ERRFMT, ERRFMTARGS); log_debug(os, map)("successfully attached at " PTR_FORMAT, p2i(result)); MemTracker::record_virtual_memory_reserve((address)result, bytes, CALLER_PC); + } else { + log_debug(os, map)("failed to attach anywhere in [" PTR_FORMAT "-" PTR_FORMAT ")", p2i(min), p2i(max)); } return result; #undef ARGSFMT diff --git a/test/hotspot/jtreg/runtime/CompressedOops/CompressedCPUSpecificClassSpaceReservation.java b/test/hotspot/jtreg/runtime/CompressedOops/CompressedCPUSpecificClassSpaceReservation.java new file mode 100644 index 0000000000000..8a25b1eff88a5 --- /dev/null +++ b/test/hotspot/jtreg/runtime/CompressedOops/CompressedCPUSpecificClassSpaceReservation.java @@ -0,0 +1,132 @@ +/* + * Copyright (c) 2013, 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @summary Test the various CPU-specific reservation schemes + * @requires vm.bits == 64 & !vm.graal.enabled & vm.debug == true + * @requires vm.flagless + * @requires (os.family != "windows") & (os.family != "aix") + * @library /test/lib + * @modules java.base/jdk.internal.misc + * java.management + * @run driver CompressedCPUSpecificClassSpaceReservation + */ + +import jdk.test.lib.Platform; +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; +import jtreg.SkippedException; + +import java.io.IOException; + +public class CompressedCPUSpecificClassSpaceReservation { + // Note: windows: On windows, we currently have the issue that os::reserve_memory_aligned relies on + // os::attempt_reserve_memory_at because VirtualAlloc cannot be unmapped in parts; this precludes use of + // +SimulateFullAddressSpace (VM won't be able to reserve heap). Therefore we exclude the test for windows + // for now. + + private static void do_test(boolean CDS) throws IOException { + // We start the VM with -XX:+SimulateFullAdressSpace, which means the JVM will go through all motions + // of reserving the cds+class space, but never succeed. That means we see every single allocation attempt. + // We start with -Xlog options enabled. The expected output goes like this: + // [0.017s][debug][os,map] reserve_between (range [0x0000000000000000-0x0000000100000000), size 0x41000000, alignment 0x1000000, randomize: 1) + ProcessBuilder pb = ProcessTools.createLimitedTestJavaProcessBuilder( + "-Xshare:" + (CDS ? "on" : "off"), + "-Xmx128m", + "-XX:CompressedClassSpaceSize=128m", + "-Xlog:metaspace*", "-Xlog:metaspace+map=trace", "-Xlog:os+map=trace", + "-XX:+SimulateFullAddressSpace", // So that no resevation attempt will succeed + "-version"); + OutputAnalyzer output = new OutputAnalyzer(pb.start()); + + final String tryReserveForUnscaled = "reserve_between (range [0x0000000000000000-0x0000000100000000)"; + final String tryReserveForZeroBased = "reserve_between (range [0x0000000100000000-0x0000000800000000)"; + final String tryReserveFor16bitMoveIntoQ3 = "reserve_between (range [0x0000000100000000-0x0001000000000000)"; + if (Platform.isAArch64()) { + if (CDS) { + output.shouldNotContain(tryReserveForUnscaled); + } else { + output.shouldContain(tryReserveForUnscaled); + } + output.shouldContain("Trying to reserve at an EOR-compatible address"); + output.shouldNotContain(tryReserveForZeroBased); + output.shouldContain(tryReserveFor16bitMoveIntoQ3); + } else if (Platform.isPPC()) { + if (CDS) { + output.shouldNotContain(tryReserveForUnscaled); + output.shouldNotContain(tryReserveForZeroBased); + } else { + output.shouldContain(tryReserveForUnscaled); + output.shouldContain(tryReserveForZeroBased); + } + output.shouldContain(tryReserveFor16bitMoveIntoQ3); + } else if (Platform.isRISCV64()) { + output.shouldContain(tryReserveForUnscaled); // unconditionally + if (CDS) { + output.shouldNotContain(tryReserveForZeroBased); + // bits 32..44 + output.shouldContain("reserve_between (range [0x0000000100000000-0x0000100000000000)"); + } else { + output.shouldContain(tryReserveForZeroBased); + // bits 32..44, but not lower than zero-based limit + output.shouldContain("reserve_between (range [0x0000000800000000-0x0000100000000000)"); + } + // bits 44..64 + output.shouldContain("reserve_between (range [0x0000100000000000-0xffffffffffffffff)"); + } else if (Platform.isS390x()) { + output.shouldContain(tryReserveForUnscaled); // unconditionally + if (CDS) { + output.shouldNotContain(tryReserveForZeroBased); + } else { + output.shouldContain(tryReserveForZeroBased); + } + output.shouldContain(tryReserveFor16bitMoveIntoQ3); + } else if (Platform.isX64()) { + if (CDS) { + output.shouldNotContain(tryReserveForUnscaled); + output.shouldNotContain(tryReserveForZeroBased); + } else { + output.shouldContain(tryReserveForUnscaled); + output.shouldContain(tryReserveForZeroBased); + } + } else { + throw new RuntimeException("Unexpected platform"); + } + + // In all cases we should have managed to map successfully eventually + if (CDS) { + output.shouldContain("CDS archive(s) mapped at:"); + } else { + output.shouldContain("CDS archive(s) not mapped"); + } + output.shouldContain("Compressed class space mapped at:"); + } + + public static void main(String[] args) throws Exception { + System.out.println("Test with CDS"); + do_test(true); + System.out.println("Test without CDS"); + do_test(false); + } +} From abf2e4909733550c228bd66ccebe33a492269e7f Mon Sep 17 00:00:00 2001 From: Thomas Stuefe Date: Wed, 29 Nov 2023 13:18:31 +0000 Subject: [PATCH 112/250] 8320859: gtest high malloc footprint caused by BufferNodeAllocator stress test Reviewed-by: ayang, kbarrett --- .../gc/shared/test_bufferNodeAllocator.cpp | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/test/hotspot/gtest/gc/shared/test_bufferNodeAllocator.cpp b/test/hotspot/gtest/gc/shared/test_bufferNodeAllocator.cpp index 38e7b15202428..e07e073974fce 100644 --- a/test/hotspot/gtest/gc/shared/test_bufferNodeAllocator.cpp +++ b/test/hotspot/gtest/gc/shared/test_bufferNodeAllocator.cpp @@ -185,16 +185,21 @@ class BufferNode::TestSupport::ProcessorThread : public JavaTestThread { }; static void run_test(BufferNode::Allocator* allocator, CompletedList* cbl) { - const uint nthreads = 4; - const uint milliseconds_to_run = 1000; + + // deallocation is slower than allocation, so lets create + // more deallocation threads to prevent too large buildup of + // free nodes (footprint) + constexpr uint num_allocator_threads = 4; + constexpr uint num_processor_threads = 6; + constexpr uint milliseconds_to_run = 1000; Semaphore post; volatile size_t total_allocations = 0; volatile bool allocator_running = true; volatile bool processor_running = true; - ProcessorThread* proc_threads[nthreads] = {}; - for (uint i = 0; i < nthreads; ++i) { + ProcessorThread* proc_threads[num_processor_threads] = {}; + for (uint i = 0; i < num_processor_threads; ++i) { proc_threads[i] = new ProcessorThread(&post, allocator, cbl, @@ -202,8 +207,8 @@ static void run_test(BufferNode::Allocator* allocator, CompletedList* cbl) { proc_threads[i]->doit(); } - AllocatorThread* alloc_threads[nthreads] = {}; - for (uint i = 0; i < nthreads; ++i) { + AllocatorThread* alloc_threads[num_allocator_threads] = {}; + for (uint i = 0; i < num_allocator_threads; ++i) { alloc_threads[i] = new AllocatorThread(&post, allocator, cbl, @@ -219,12 +224,12 @@ static void run_test(BufferNode::Allocator* allocator, CompletedList* cbl) { this_thread->sleep(milliseconds_to_run); } Atomic::release_store(&allocator_running, false); - for (uint i = 0; i < nthreads; ++i) { + for (uint i = 0; i < num_allocator_threads; ++i) { ThreadInVMfromNative invm(this_thread); post.wait_with_safepoint_check(this_thread); } Atomic::release_store(&processor_running, false); - for (uint i = 0; i < nthreads; ++i) { + for (uint i = 0; i < num_processor_threads; ++i) { ThreadInVMfromNative invm(this_thread); post.wait_with_safepoint_check(this_thread); } @@ -234,7 +239,7 @@ static void run_test(BufferNode::Allocator* allocator, CompletedList* cbl) { } TEST_VM(BufferNodeAllocatorTest, stress_free_list_allocator) { - const size_t buffer_capacity = 1024; + const size_t buffer_capacity = DEFAULT_CACHE_LINE_SIZE / sizeof(void*); BufferNode::Allocator allocator("Test Allocator", buffer_capacity); CompletedList completed; run_test(&allocator, &completed); From a2c5f1fc914ef5c28d044b75598f895cf6097138 Mon Sep 17 00:00:00 2001 From: Michael McMahon Date: Wed, 29 Nov 2023 14:03:39 +0000 Subject: [PATCH 113/250] 8319417: (dc) DatagramChannel.connect undocumented behavior Reviewed-by: alanb --- .../share/classes/java/net/DatagramSocket.java | 12 ++++++++++++ .../classes/java/nio/channels/DatagramChannel.java | 7 +++++++ 2 files changed, 19 insertions(+) diff --git a/src/java.base/share/classes/java/net/DatagramSocket.java b/src/java.base/share/classes/java/net/DatagramSocket.java index 26220feac2c1a..9e94d1d8b6209 100644 --- a/src/java.base/share/classes/java/net/DatagramSocket.java +++ b/src/java.base/share/classes/java/net/DatagramSocket.java @@ -604,6 +604,12 @@ public SocketAddress getRemoteSocketAddress() { /** * Returns the address of the endpoint this socket is bound to. + *

    If the socket was initially bound to the wildcard address and + * is now {@link #isConnected connected}, then the address returned + * may be the local address selected as the source address for + * datagrams sent on this socket instead of the wildcard address. + * When {@link #disconnect()} is called, the bound address reverts + * to the wildcard address. * * @return a {@code SocketAddress} representing the local endpoint of this * socket, or {@code null} if it is closed or not bound yet. @@ -714,6 +720,12 @@ public void receive(DatagramPacket p) throws IOException { /** * Gets the local address to which the socket is bound. + *

    If the socket was initially bound to the wildcard address and + * is now {@link #isConnected connected}, then the address returned + * may be the local address selected as the source address for + * datagrams sent on the socket instead of the wildcard address. + * When {@link #disconnect()} is called, the bound address reverts + * to the wildcard address. * *

    If there is a security manager, its * {@code checkConnect} method is first called diff --git a/src/java.base/share/classes/java/nio/channels/DatagramChannel.java b/src/java.base/share/classes/java/nio/channels/DatagramChannel.java index 1d0a838f65d5c..1b0e7c0f35a50 100644 --- a/src/java.base/share/classes/java/nio/channels/DatagramChannel.java +++ b/src/java.base/share/classes/java/nio/channels/DatagramChannel.java @@ -645,6 +645,13 @@ public final long write(ByteBuffer[] srcs) throws IOException { /** * {@inheritDoc} *

    + * If the channel's socket was initially bound to the wildcard address and + * is now {@link #isConnected connected}, then the address returned + * may be the local address selected as the source address for + * datagrams sent via this channel instead of the wildcard address. + * When {@link #disconnect} is called, the bound address reverts + * to the wildcard address. + *

    * If there is a security manager set, its {@code checkConnect} method is * called with the local address and {@code -1} as its arguments to see * if the operation is allowed. If the operation is not allowed, From da7bcfcf6e45486a0427e0ceaba74d52acbd722f Mon Sep 17 00:00:00 2001 From: Jiangli Zhou Date: Wed, 29 Nov 2023 16:05:54 +0000 Subject: [PATCH 114/250] 8319935: Ensure only one JvmtiThreadState is created for one JavaThread associated with attached native thread Reviewed-by: manc, dholmes, sspitsyn --- src/hotspot/share/prims/jvmtiExport.cpp | 7 ++++++ .../share/prims/jvmtiThreadState.inline.hpp | 23 ++++++++++++++----- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/hotspot/share/prims/jvmtiExport.cpp b/src/hotspot/share/prims/jvmtiExport.cpp index 26b7abf68594f..eee5b2a70fa5d 100644 --- a/src/hotspot/share/prims/jvmtiExport.cpp +++ b/src/hotspot/share/prims/jvmtiExport.cpp @@ -3139,6 +3139,13 @@ bool JvmtiSampledObjectAllocEventCollector::object_alloc_is_safe_to_sample() { return false; } + // If the current thread is attaching from native and its Java thread object + // is being allocated, things are not ready for allocation sampling. + JavaThread* jt = JavaThread::cast(thread); + if (jt->is_attaching_via_jni() && jt->threadObj() == nullptr) { + return false; + } + if (MultiArray_lock->owner() == thread) { return false; } diff --git a/src/hotspot/share/prims/jvmtiThreadState.inline.hpp b/src/hotspot/share/prims/jvmtiThreadState.inline.hpp index 1737bfd6a9f4c..0df26a1b1c531 100644 --- a/src/hotspot/share/prims/jvmtiThreadState.inline.hpp +++ b/src/hotspot/share/prims/jvmtiThreadState.inline.hpp @@ -78,17 +78,27 @@ inline JvmtiThreadState* JvmtiThreadState::state_for_while_locked(JavaThread *th NoSafepointVerifier nsv; // oop is safe to use. - if (thread_oop == nullptr) { // Then thread should not be null (see assert above). - thread_oop = thread->jvmti_vthread() != nullptr ? thread->jvmti_vthread() : thread->threadObj(); - } - // In a case of unmounted virtual thread the thread can be null. JvmtiThreadState *state = thread == nullptr ? nullptr : thread->jvmti_thread_state(); - if (state == nullptr && thread != nullptr && thread->is_exiting()) { - // Don't add a JvmtiThreadState to a thread that is exiting. + if (state == nullptr && thread != nullptr && + (thread->is_exiting() || thread->is_attaching_via_jni())) { + // Don't add a JvmtiThreadState to a thread that is exiting or is attaching. + // When a thread is attaching, it may not have a Java level thread object + // created yet. return nullptr; } + + // Make sure we don't see an incomplete state. An incomplete state can cause + // a duplicate JvmtiThreadState being created below and bound to the 'thread' + // incorrectly, which leads to stale JavaThread* from the JvmtiThreadState + // after the thread exits. + assert(state == nullptr || state->get_thread_oop() != nullptr, + "incomplete state"); + + if (thread_oop == nullptr) { // Then thread should not be null (see assert above). + thread_oop = thread->jvmti_vthread() != nullptr ? thread->jvmti_vthread() : thread->threadObj(); + } if (state == nullptr || state->get_thread_oop() != thread_oop) { // Check if java_lang_Thread already has a link to the JvmtiThreadState. if (thread_oop != nullptr) { // thread_oop can be null during early VMStart. @@ -98,6 +108,7 @@ inline JvmtiThreadState* JvmtiThreadState::state_for_while_locked(JavaThread *th state = new JvmtiThreadState(thread, thread_oop); } } + assert(state != nullptr, "sanity check"); return state; } From 43c7f6a673c2fa0b4dbec232e92b621619a98246 Mon Sep 17 00:00:00 2001 From: Aleksey Shipilev Date: Wed, 29 Nov 2023 17:23:04 +0000 Subject: [PATCH 115/250] 8320907: Shenandoah: Remove ShenandoahSelfFixing flag Reviewed-by: wkemper, zgu, kdnilsen, rkennke --- src/hotspot/share/gc/shenandoah/c2/shenandoahSupport.cpp | 4 +--- .../share/gc/shenandoah/shenandoahBarrierSet.inline.hpp | 2 +- src/hotspot/share/gc/shenandoah/shenandoah_globals.hpp | 3 --- 3 files changed, 2 insertions(+), 7 deletions(-) diff --git a/src/hotspot/share/gc/shenandoah/c2/shenandoahSupport.cpp b/src/hotspot/share/gc/shenandoah/c2/shenandoahSupport.cpp index 4e041eaffe20c..07dd900d989fe 100644 --- a/src/hotspot/share/gc/shenandoah/c2/shenandoahSupport.cpp +++ b/src/hotspot/share/gc/shenandoah/c2/shenandoahSupport.cpp @@ -1392,11 +1392,9 @@ void ShenandoahBarrierC2Support::pin_and_expand(PhaseIdealLoop* phase) { Node* result_mem = nullptr; Node* addr; - if (ShenandoahSelfFixing) { + { VectorSet visited; addr = get_load_addr(phase, visited, lrb); - } else { - addr = phase->igvn().zerocon(T_OBJECT); } if (addr->Opcode() == Op_AddP) { Node* orig_base = addr->in(AddPNode::Base); diff --git a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp index 413dfe10faad9..b8da50dd6e109 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahBarrierSet.inline.hpp @@ -123,7 +123,7 @@ inline oop ShenandoahBarrierSet::load_reference_barrier(DecoratorSet decorators, } oop fwd = load_reference_barrier(obj); - if (ShenandoahSelfFixing && load_addr != nullptr && fwd != obj) { + if (load_addr != nullptr && fwd != obj) { // Since we are here and we know the load address, update the reference. ShenandoahHeap::atomic_update_oop(fwd, load_addr, obj); } diff --git a/src/hotspot/share/gc/shenandoah/shenandoah_globals.hpp b/src/hotspot/share/gc/shenandoah/shenandoah_globals.hpp index 1ac9047706dc3..11290eaaea925 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoah_globals.hpp +++ b/src/hotspot/share/gc/shenandoah/shenandoah_globals.hpp @@ -366,9 +366,6 @@ product(bool, ShenandoahLoopOptsAfterExpansion, true, DIAGNOSTIC, \ "Attempt more loop opts after barrier expansion.") \ \ - product(bool, ShenandoahSelfFixing, true, DIAGNOSTIC, \ - "Fix references with load reference barrier. Disabling this " \ - "might degrade performance.") // end of GC_SHENANDOAH_FLAGS From d783aa31a9c20f5ac2ee52c55bdc9be2388b1705 Mon Sep 17 00:00:00 2001 From: Joe Darcy Date: Wed, 29 Nov 2023 17:23:14 +0000 Subject: [PATCH 116/250] 8320940: Fix typo in java.lang.Double Reviewed-by: rriggs, iris, shade, lancea, bpb --- src/java.base/share/classes/java/lang/Double.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/java.base/share/classes/java/lang/Double.java b/src/java.base/share/classes/java/lang/Double.java index d7df6db3e16d9..580f8b26cab22 100644 --- a/src/java.base/share/classes/java/lang/Double.java +++ b/src/java.base/share/classes/java/lang/Double.java @@ -234,7 +234,7 @@ * equivalent of 15 to 17 digits of decimal precision. (The * equivalent precision varies according to the different relative * densities of binary and decimal values at different points along the - * real number line). + * real number line.) * *

    This representation hazard of decimal fractions is one reason to * use caution when storing monetary values as {@code float} or {@code From b68356b267ad8f2da0d4f84de82b3b0042b4acd0 Mon Sep 17 00:00:00 2001 From: Joe Darcy Date: Wed, 29 Nov 2023 17:25:26 +0000 Subject: [PATCH 117/250] 8320806: Augment test/langtools/tools/javac/versions/Versions.java for JDK 22 language changes Reviewed-by: jlahoda, vromero --- .../tools/javac/versions/Versions.java | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/test/langtools/tools/javac/versions/Versions.java b/test/langtools/tools/javac/versions/Versions.java index ee9e6f2be06f2..554d384948b67 100644 --- a/test/langtools/tools/javac/versions/Versions.java +++ b/test/langtools/tools/javac/versions/Versions.java @@ -25,7 +25,7 @@ * @test * @bug 4981566 5028634 5094412 6304984 7025786 7025789 8001112 8028545 * 8000961 8030610 8028546 8188870 8173382 8173382 8193290 8205619 8028563 - * 8245147 8245586 8257453 8286035 8306586 + * 8245147 8245586 8257453 8286035 8306586 8320806 * @summary Check interpretation of -target and -source options * @modules java.compiler * jdk.compiler @@ -272,8 +272,8 @@ protected void check(String major, List args) { * the uncommon program that is accepted in one version of the * language and rejected in a later version.) * - * When version of the language get a new, non-preview feature, a - * new source example enum constant should be added. + * When a version of the language gets a new, non-preview feature, + * a new source example enum constant should be added. */ enum SourceExample { BASE(7, "Base.java", "public class Base { }\n"), @@ -375,6 +375,20 @@ public static void main(String... args) { } """), + SOURCE_22(22, "New22.java", + // New feature in 22: Unnamed Variables & Patterns + """ + public class New22 { + public static void main(String... args) { + Object o = new Object(){}; + + System.out.println(switch (o) { + case Integer _ -> "Hello world."; + default -> o.toString(); + }); + } + } + """), ; // Reduce code churn when appending new constants private int sourceLevel; From b65ccff357e2e294b027f693ceb3d25410236a6b Mon Sep 17 00:00:00 2001 From: Aleksey Shipilev Date: Wed, 29 Nov 2023 17:25:40 +0000 Subject: [PATCH 118/250] 8320877: Shenandoah: Remove ShenandoahUnloadClassesFrequency support Reviewed-by: wkemper, kdnilsen, rkennke --- .../shenandoahAggressiveHeuristics.cpp | 8 +------ .../heuristics/shenandoahHeuristics.cpp | 22 ++----------------- .../heuristics/shenandoahHeuristics.hpp | 1 - .../gc/shenandoah/shenandoah_globals.hpp | 5 ----- .../shenandoah/oom/TestClassLoaderLeak.java | 4 ---- 5 files changed, 3 insertions(+), 37 deletions(-) diff --git a/src/hotspot/share/gc/shenandoah/heuristics/shenandoahAggressiveHeuristics.cpp b/src/hotspot/share/gc/shenandoah/heuristics/shenandoahAggressiveHeuristics.cpp index 396b6ee89666a..fa6b3e67fee82 100644 --- a/src/hotspot/share/gc/shenandoah/heuristics/shenandoahAggressiveHeuristics.cpp +++ b/src/hotspot/share/gc/shenandoah/heuristics/shenandoahAggressiveHeuristics.cpp @@ -38,12 +38,6 @@ ShenandoahAggressiveHeuristics::ShenandoahAggressiveHeuristics(ShenandoahSpaceIn // Aggressive evacuates everything, so it needs as much evac space as it can get SHENANDOAH_ERGO_ENABLE_FLAG(ShenandoahEvacReserveOverflow); - - // If class unloading is globally enabled, aggressive does unloading even with - // concurrent cycles. - if (ClassUnloading) { - SHENANDOAH_ERGO_OVERRIDE_DEFAULT(ShenandoahUnloadClassesFrequency, 1); - } } void ShenandoahAggressiveHeuristics::choose_collection_set_from_regiondata(ShenandoahCollectionSet* cset, @@ -63,7 +57,7 @@ bool ShenandoahAggressiveHeuristics::should_start_gc() { } bool ShenandoahAggressiveHeuristics::should_unload_classes() { - if (!can_unload_classes_normal()) return false; + if (!can_unload_classes()) return false; if (has_metaspace_oom()) return true; // Randomly unload classes with 50% chance. return (os::random() & 1) == 1; diff --git a/src/hotspot/share/gc/shenandoah/heuristics/shenandoahHeuristics.cpp b/src/hotspot/share/gc/shenandoah/heuristics/shenandoahHeuristics.cpp index 2a18ae95a7bfc..c2620a228115f 100644 --- a/src/hotspot/share/gc/shenandoah/heuristics/shenandoahHeuristics.cpp +++ b/src/hotspot/share/gc/shenandoah/heuristics/shenandoahHeuristics.cpp @@ -54,11 +54,6 @@ ShenandoahHeuristics::ShenandoahHeuristics(ShenandoahSpaceInfo* space_info) : _gc_time_history(new TruncatedSeq(10, ShenandoahAdaptiveDecayFactor)), _metaspace_oom() { - // No unloading during concurrent mark? Communicate that to heuristics - if (!ClassUnloadingWithConcurrentMark) { - FLAG_SET_DEFAULT(ShenandoahUnloadClassesFrequency, 0); - } - size_t num_regions = ShenandoahHeap::heap()->num_regions(); assert(num_regions > 0, "Sanity"); @@ -263,23 +258,10 @@ bool ShenandoahHeuristics::can_unload_classes() { return true; } -bool ShenandoahHeuristics::can_unload_classes_normal() { - if (!can_unload_classes()) return false; - if (has_metaspace_oom()) return true; - if (!ClassUnloadingWithConcurrentMark) return false; - if (ShenandoahUnloadClassesFrequency == 0) return false; - return true; -} - bool ShenandoahHeuristics::should_unload_classes() { - if (!can_unload_classes_normal()) return false; + if (!can_unload_classes()) return false; if (has_metaspace_oom()) return true; - size_t cycle = ShenandoahHeap::heap()->shenandoah_policy()->cycle_counter(); - // Unload classes every Nth GC cycle. - // This should not happen in the same cycle as process_references to amortize costs. - // Offsetting by one is enough to break the rendezvous when periods are equal. - // When periods are not equal, offsetting by one is just as good as any other guess. - return (cycle + 1) % ShenandoahUnloadClassesFrequency == 0; + return ClassUnloadingWithConcurrentMark; } void ShenandoahHeuristics::initialize() { diff --git a/src/hotspot/share/gc/shenandoah/heuristics/shenandoahHeuristics.hpp b/src/hotspot/share/gc/shenandoah/heuristics/shenandoahHeuristics.hpp index 4deb134a4b5fa..bc6d2dc40c54c 100644 --- a/src/hotspot/share/gc/shenandoah/heuristics/shenandoahHeuristics.hpp +++ b/src/hotspot/share/gc/shenandoah/heuristics/shenandoahHeuristics.hpp @@ -130,7 +130,6 @@ class ShenandoahHeuristics : public CHeapObj { virtual void choose_collection_set(ShenandoahCollectionSet* collection_set); virtual bool can_unload_classes(); - virtual bool can_unload_classes_normal(); virtual bool should_unload_classes(); virtual const char* name() = 0; diff --git a/src/hotspot/share/gc/shenandoah/shenandoah_globals.hpp b/src/hotspot/share/gc/shenandoah/shenandoah_globals.hpp index 11290eaaea925..d94200f401c3d 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoah_globals.hpp +++ b/src/hotspot/share/gc/shenandoah/shenandoah_globals.hpp @@ -76,11 +76,6 @@ " compact - run GC more frequently and with deeper targets to " \ "free up more memory.") \ \ - product(uintx, ShenandoahUnloadClassesFrequency, 1, EXPERIMENTAL, \ - "Unload the classes every Nth cycle. Normally affects concurrent "\ - "GC cycles, as degenerated and full GCs would try to unload " \ - "classes regardless. Set to zero to disable class unloading.") \ - \ product(uintx, ShenandoahGarbageThreshold, 25, EXPERIMENTAL, \ "How much garbage a region has to contain before it would be " \ "taken for collection. This a guideline only, as GC heuristics " \ diff --git a/test/hotspot/jtreg/gc/shenandoah/oom/TestClassLoaderLeak.java b/test/hotspot/jtreg/gc/shenandoah/oom/TestClassLoaderLeak.java index 080842c37f90f..beb57b0b40122 100644 --- a/test/hotspot/jtreg/gc/shenandoah/oom/TestClassLoaderLeak.java +++ b/test/hotspot/jtreg/gc/shenandoah/oom/TestClassLoaderLeak.java @@ -140,14 +140,10 @@ public static void main(String[] args) throws Exception { // Even when concurrent unloading is disabled, Full GC has to recover passWith("-XX:ShenandoahGCMode=" + mode, "-XX:ShenandoahGCHeuristics=" + h, "-XX:+ClassUnloading", "-XX:-ClassUnloadingWithConcurrentMark"); - passWith("-XX:ShenandoahGCMode=" + mode, "-XX:ShenandoahGCHeuristics=" + h, "-XX:+ClassUnloading", "-XX:-ClassUnloadingWithConcurrentMark", "-XX:ShenandoahUnloadClassesFrequency=0"); - passWith("-XX:ShenandoahGCMode=" + mode, "-XX:ShenandoahGCHeuristics=" + h, "-XX:+ClassUnloading", "-XX:+ClassUnloadingWithConcurrentMark", "-XX:ShenandoahUnloadClassesFrequency=0"); // Should OOME when unloading forcefully disabled, even if local flags try to enable it back failWith("-XX:ShenandoahGCMode=" + mode, "-XX:ShenandoahGCHeuristics=" + h, "-XX:-ClassUnloading"); failWith("-XX:ShenandoahGCMode=" + mode, "-XX:ShenandoahGCHeuristics=" + h, "-XX:-ClassUnloading", "-XX:+ClassUnloadingWithConcurrentMark"); - failWith("-XX:ShenandoahGCMode=" + mode, "-XX:ShenandoahGCHeuristics=" + h, "-XX:-ClassUnloading", "-XX:+ClassUnloadingWithConcurrentMark", "-XX:ShenandoahUnloadClassesFrequency=1"); - failWith("-XX:ShenandoahGCMode=" + mode, "-XX:ShenandoahGCHeuristics=" + h, "-XX:-ClassUnloading", "-XX:-ClassUnloadingWithConcurrentMark", "-XX:ShenandoahUnloadClassesFrequency=1"); } } } From cdd1a6e851bcaf4a25d4a405b8ee0b0d5b83a4a9 Mon Sep 17 00:00:00 2001 From: Jaroslav Bachorik Date: Wed, 29 Nov 2023 17:29:52 +0000 Subject: [PATCH 119/250] 8313816: Accessing jmethodID might lead to spurious crashes Reviewed-by: coleenp --- src/hotspot/share/oops/instanceKlass.cpp | 18 ++++ src/hotspot/share/oops/instanceKlass.hpp | 2 + src/hotspot/share/oops/method.cpp | 14 ++++ src/hotspot/share/oops/method.hpp | 1 + src/hotspot/share/prims/whitebox.cpp | 5 ++ .../GetStackTraceAndRetransformTest.java | 82 +++++++++++++++++++ .../libGetStackTraceAndRetransformTest.cpp | 82 +++++++++++++++++++ test/lib/jdk/test/whitebox/WhiteBox.java | 2 + 8 files changed, 206 insertions(+) create mode 100644 test/hotspot/jtreg/serviceability/jvmti/thread/GetStackTrace/GetStackTraceAndRetransformTest/GetStackTraceAndRetransformTest.java create mode 100644 test/hotspot/jtreg/serviceability/jvmti/thread/GetStackTrace/GetStackTraceAndRetransformTest/libGetStackTraceAndRetransformTest.cpp diff --git a/src/hotspot/share/oops/instanceKlass.cpp b/src/hotspot/share/oops/instanceKlass.cpp index fa595142c68f6..2178a506e5ceb 100644 --- a/src/hotspot/share/oops/instanceKlass.cpp +++ b/src/hotspot/share/oops/instanceKlass.cpp @@ -4225,6 +4225,23 @@ bool InstanceKlass::should_clean_previous_versions_and_reset() { return ret; } +// This nulls out jmethodIDs for all methods in 'klass' +// It needs to be called explicitly for all previous versions of a class because these may not be cleaned up +// during class unloading. +// We can not use the jmethodID cache associated with klass directly because the 'previous' versions +// do not have the jmethodID cache filled in. Instead, we need to lookup jmethodID for each method and this +// is expensive - O(n) for one jmethodID lookup. For all contained methods it is O(n^2). +// The reason for expensive jmethodID lookup for each method is that there is no direct link between method and jmethodID. +void InstanceKlass::clear_jmethod_ids(InstanceKlass* klass) { + Array* method_refs = klass->methods(); + for (int k = 0; k < method_refs->length(); k++) { + Method* method = method_refs->at(k); + if (method != nullptr && method->is_obsolete()) { + method->clear_jmethod_id(); + } + } +} + // Purge previous versions before adding new previous versions of the class and // during class unloading. void InstanceKlass::purge_previous_version_list() { @@ -4268,6 +4285,7 @@ void InstanceKlass::purge_previous_version_list() { // Unlink from previous version list. assert(pv_node->class_loader_data() == loader_data, "wrong loader_data"); InstanceKlass* next = pv_node->previous_versions(); + clear_jmethod_ids(pv_node); // jmethodID maintenance for the unloaded class pv_node->link_previous_versions(nullptr); // point next to null last->link_previous_versions(next); // Delete this node directly. Nothing is referring to it and we don't diff --git a/src/hotspot/share/oops/instanceKlass.hpp b/src/hotspot/share/oops/instanceKlass.hpp index 13cc080be5b06..62c861be89f47 100644 --- a/src/hotspot/share/oops/instanceKlass.hpp +++ b/src/hotspot/share/oops/instanceKlass.hpp @@ -1080,6 +1080,8 @@ class InstanceKlass: public Klass { bool idnum_can_increment() const { return has_been_redefined(); } inline jmethodID* methods_jmethod_ids_acquire() const; inline void release_set_methods_jmethod_ids(jmethodID* jmeths); + // This nulls out jmethodIDs for all methods in 'klass' + static void clear_jmethod_ids(InstanceKlass* klass); // Lock during initialization public: diff --git a/src/hotspot/share/oops/method.cpp b/src/hotspot/share/oops/method.cpp index 0e116161ccf4a..0922fc4eac773 100644 --- a/src/hotspot/share/oops/method.cpp +++ b/src/hotspot/share/oops/method.cpp @@ -2273,6 +2273,20 @@ void Method::clear_jmethod_ids(ClassLoaderData* loader_data) { loader_data->jmethod_ids()->clear_all_methods(); } +void Method::clear_jmethod_id() { + // Being at a safepoint prevents racing against other class redefinitions + assert(SafepointSynchronize::is_at_safepoint(), "should be at safepoint"); + // The jmethodID is not stored in the Method instance, we need to look it up first + jmethodID methodid = find_jmethod_id_or_null(); + // We need to make sure that jmethodID actually resolves to this method + // - multiple redefined versions may share jmethodID slots and if a method + // has already been rewired to a newer version we could be removing reference + // to a still existing method instance + if (methodid != nullptr && *((Method**)methodid) == this) { + *((Method**)methodid) = nullptr; + } +} + bool Method::has_method_vptr(const void* ptr) { Method m; // This assumes that the vtbl pointer is the first word of a C++ object. diff --git a/src/hotspot/share/oops/method.hpp b/src/hotspot/share/oops/method.hpp index c8b7dd1d91d0f..f05c54b992b1f 100644 --- a/src/hotspot/share/oops/method.hpp +++ b/src/hotspot/share/oops/method.hpp @@ -718,6 +718,7 @@ class Method : public Metadata { // Clear methods static void clear_jmethod_ids(ClassLoaderData* loader_data); + void clear_jmethod_id(); static void print_jmethod_ids_count(const ClassLoaderData* loader_data, outputStream* out) PRODUCT_RETURN; // Get this method's jmethodID -- allocate if it doesn't exist diff --git a/src/hotspot/share/prims/whitebox.cpp b/src/hotspot/share/prims/whitebox.cpp index 4e77bf0db3f19..230129ea2df31 100644 --- a/src/hotspot/share/prims/whitebox.cpp +++ b/src/hotspot/share/prims/whitebox.cpp @@ -2643,6 +2643,10 @@ WB_ENTRY(void, WB_PreTouchMemory(JNIEnv* env, jobject wb, jlong addr, jlong size } WB_END +WB_ENTRY(void, WB_CleanMetaspaces(JNIEnv* env, jobject target)) + ClassLoaderDataGraph::safepoint_and_clean_metaspaces(); +WB_END + #define CC (char*) static JNINativeMethod methods[] = { @@ -2929,6 +2933,7 @@ static JNINativeMethod methods[] = { {CC"unpinObject", CC"(Ljava/lang/Object;)V", (void*)&WB_UnpinObject}, {CC"setVirtualThreadsNotifyJvmtiMode", CC"(Z)Z", (void*)&WB_SetVirtualThreadsNotifyJvmtiMode}, {CC"preTouchMemory", CC"(JJ)V", (void*)&WB_PreTouchMemory}, + {CC"cleanMetaspaces", CC"()V", (void*)&WB_CleanMetaspaces}, }; diff --git a/test/hotspot/jtreg/serviceability/jvmti/thread/GetStackTrace/GetStackTraceAndRetransformTest/GetStackTraceAndRetransformTest.java b/test/hotspot/jtreg/serviceability/jvmti/thread/GetStackTrace/GetStackTraceAndRetransformTest/GetStackTraceAndRetransformTest.java new file mode 100644 index 0000000000000..eb7d30124cb75 --- /dev/null +++ b/test/hotspot/jtreg/serviceability/jvmti/thread/GetStackTrace/GetStackTraceAndRetransformTest/GetStackTraceAndRetransformTest.java @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2023, Datadog, Inc. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @bug 8313816 + * @summary Test that a sequence of method retransformation and stacktrace capture while the old method + * version is still on stack does not lead to a crash when that method's jmethodID is used as + * an argument for JVMTI functions. + * @requires vm.jvmti + * @requires vm.flagless + * @library /test/lib + * @build jdk.test.whitebox.WhiteBox + * @modules java.instrument + * java.compiler + * @compile GetStackTraceAndRetransformTest.java + * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox + * @run main RedefineClassHelper + * @run main/othervm/native -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -javaagent:redefineagent.jar -agentlib:GetStackTraceAndRetransformTest GetStackTraceAndRetransformTest + */ + +import jdk.test.whitebox.WhiteBox; + +class Transformable { + static final String newClass = """ + class Transformable { + static final String newClass = ""; + static void redefineAndStacktrace() throws Exception {} + static void stacktrace() throws Exception { + capture(Thread.currentThread()); + } + public static native void capture(Thread thread); + } + """; + static void redefineAndStacktrace() throws Exception { + // This call will cause the class to be retransformed. + // However, this method is still on stack so the subsequent attempt to capture the stacktrace + // will result into this frame being identified by the jmethodID of the previous method version. + RedefineClassHelper.redefineClass(Transformable.class, newClass); + capture(Thread.currentThread()); + } + + static void stacktrace() throws Exception { + } + + public static native void capture(Thread thread); +} + +public class GetStackTraceAndRetransformTest { + public static void main(String args[]) throws Throwable { + initialize(Transformable.class); + + Transformable.redefineAndStacktrace(); + Transformable.stacktrace(); + + WhiteBox.getWhiteBox().cleanMetaspaces(); + check(2); + } + + public static native void initialize(Class target); + public static native void check(int expected); +} diff --git a/test/hotspot/jtreg/serviceability/jvmti/thread/GetStackTrace/GetStackTraceAndRetransformTest/libGetStackTraceAndRetransformTest.cpp b/test/hotspot/jtreg/serviceability/jvmti/thread/GetStackTrace/GetStackTraceAndRetransformTest/libGetStackTraceAndRetransformTest.cpp new file mode 100644 index 0000000000000..3be6dcf824f86 --- /dev/null +++ b/test/hotspot/jtreg/serviceability/jvmti/thread/GetStackTrace/GetStackTraceAndRetransformTest/libGetStackTraceAndRetransformTest.cpp @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2023, Datadog, Inc. 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. + */ + +#include +#include +#include "jvmti.h" +#include "jvmti_common.h" +#include "../get_stack_trace.h" + + +extern "C" { + +static jvmtiEnv *jvmti = NULL; +static jmethodID* ids = NULL; +static int ids_size = 0; + +JNIEXPORT jint JNICALL +Agent_OnLoad(JavaVM *jvm, char *options, void *reserved) { + jint res = jvm->GetEnv((void **) &jvmti, JVMTI_VERSION_1_1); + if (res != JNI_OK || jvmti == NULL) { + printf("Wrong result of a valid call to GetEnv!\n"); + return JNI_ERR; + } + ids = (jmethodID*)malloc(sizeof(jmethodID) * 10); + return JNI_OK; +} + +JNIEXPORT void JNICALL +Java_GetStackTraceAndRetransformTest_initialize(JNIEnv *env, jclass cls, jclass tgt) { + // we need to force jmethodids to be created for the methods we are going to retransform + env->GetStaticMethodID(tgt, "redefineAndStacktrace", "()V"); + env->GetStaticMethodID(tgt, "stacktrace", "()V"); +} + +JNIEXPORT void JNICALL +Java_Transformable_capture(JNIEnv *env, jclass cls, jthread thread) { + jint count; + const int MAX_NUMBER_OF_FRAMES = 32; + jvmtiFrameInfo frames[MAX_NUMBER_OF_FRAMES]; + + jvmtiError err = jvmti->GetStackTrace(thread, 0, MAX_NUMBER_OF_FRAMES, frames, &count); + check_jvmti_status(env, err, "GetStackTrace failed."); + + ids[ids_size++] = frames[1].method; +} + +JNIEXPORT void JNICALL +Java_GetStackTraceAndRetransformTest_check(JNIEnv *jni, jclass cls, jint expected) { + if (ids_size != expected) { + fprintf(stderr, "Unexpected number methods captured: %d (expected %d)\n", ids_size, expected); + exit(2); + } + for (int i = 0; i < ids_size; i++) { + jclass rslt = NULL; + char* class_name = NULL; + jvmti->GetMethodDeclaringClass(ids[i], &rslt); + if (rslt != NULL) { + jvmti->GetClassSignature(rslt, &class_name, NULL); + } + } +} +} diff --git a/test/lib/jdk/test/whitebox/WhiteBox.java b/test/lib/jdk/test/whitebox/WhiteBox.java index 4023d97e696f5..2d33182331d4f 100644 --- a/test/lib/jdk/test/whitebox/WhiteBox.java +++ b/test/lib/jdk/test/whitebox/WhiteBox.java @@ -522,6 +522,8 @@ public void clearInlineCaches(boolean preserve_static_stubs) { public native long metaspaceCapacityUntilGC(); public native long metaspaceSharedRegionAlignment(); + public native void cleanMetaspaces(); + // Metaspace Arena Tests public native long createMetaspaceTestContext(long commit_limit, long reserve_limit); public native void destroyMetaspaceTestContext(long context); From 62418c681e56a297c7227b60db315cad01f9e88f Mon Sep 17 00:00:00 2001 From: Liam Miller-Cushon Date: Wed, 29 Nov 2023 17:49:30 +0000 Subject: [PATCH 120/250] 8319444: Unhelpful failure output in TestLegalNotices Reviewed-by: hannesw, jjg --- .../jdk/javadoc/doclet/testLegalNotices/TestLegalNotices.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/langtools/jdk/javadoc/doclet/testLegalNotices/TestLegalNotices.java b/test/langtools/jdk/javadoc/doclet/testLegalNotices/TestLegalNotices.java index 148accdbfd4af..29da4d989720a 100644 --- a/test/langtools/jdk/javadoc/doclet/testLegalNotices/TestLegalNotices.java +++ b/test/langtools/jdk/javadoc/doclet/testLegalNotices/TestLegalNotices.java @@ -111,6 +111,8 @@ void test(Path base, Path src, Path legal, OptionKind optionKind, IndexKind inde super.out.println(" Found: " + foundFiles); if (foundFiles.equals(expectFiles)) { passed("Found all expected files"); + } else { + failed("Did not find all expected files"); } // See JDK-8306980 @@ -168,4 +170,4 @@ Set listFiles(Path dir, Predicate filter) throws IOException { return files; } } -} \ No newline at end of file +} From eb44bafe7709b108acca06b083f306d6ab7a8050 Mon Sep 17 00:00:00 2001 From: Sergey Bylokhov Date: Wed, 29 Nov 2023 18:42:50 +0000 Subject: [PATCH 121/250] 8320937: support latest VS2022 MSC_VER in abstract_vm_version.cpp Reviewed-by: dholmes, shade --- src/hotspot/share/runtime/abstract_vm_version.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/hotspot/share/runtime/abstract_vm_version.cpp b/src/hotspot/share/runtime/abstract_vm_version.cpp index ac62523aed0eb..f1f8888653e4a 100644 --- a/src/hotspot/share/runtime/abstract_vm_version.cpp +++ b/src/hotspot/share/runtime/abstract_vm_version.cpp @@ -242,6 +242,16 @@ const char* Abstract_VM_Version::internal_vm_info_string() { #define HOTSPOT_BUILD_COMPILER "MS VC++ 17.2 (VS2022)" #elif _MSC_VER == 1933 #define HOTSPOT_BUILD_COMPILER "MS VC++ 17.3 (VS2022)" + #elif _MSC_VER == 1934 + #define HOTSPOT_BUILD_COMPILER "MS VC++ 17.4 (VS2022)" + #elif _MSC_VER == 1935 + #define HOTSPOT_BUILD_COMPILER "MS VC++ 17.5 (VS2022)" + #elif _MSC_VER == 1936 + #define HOTSPOT_BUILD_COMPILER "MS VC++ 17.6 (VS2022)" + #elif _MSC_VER == 1937 + #define HOTSPOT_BUILD_COMPILER "MS VC++ 17.7 (VS2022)" + #elif _MSC_VER == 1938 + #define HOTSPOT_BUILD_COMPILER "MS VC++ 17.8 (VS2022)" #else #define HOTSPOT_BUILD_COMPILER "unknown MS VC++:" XSTR(_MSC_VER) #endif From 454b11653c9e6718ee45233851e714a896013ec8 Mon Sep 17 00:00:00 2001 From: Mikael Vidstedt Date: Wed, 29 Nov 2023 19:02:25 +0000 Subject: [PATCH 122/250] 8320942: Only set openjdk-target when cross compiling linux-aarch64 Reviewed-by: ihse, erikj --- make/conf/jib-profiles.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/make/conf/jib-profiles.js b/make/conf/jib-profiles.js index c26c648ba3808..f8af10393624a 100644 --- a/make/conf/jib-profiles.js +++ b/make/conf/jib-profiles.js @@ -407,6 +407,8 @@ var getJibProfilesCommon = function (input, data) { * @returns {{}} Profiles part of the configuration */ var getJibProfilesProfiles = function (input, common, data) { + var cross_compiling = input.build_platform != input.target_platform; + // Main SE profiles var profiles = { @@ -484,14 +486,12 @@ var getJibProfilesProfiles = function (input, common, data) { "linux-aarch64": { target_os: "linux", target_cpu: "aarch64", - build_cpu: "x64", dependencies: ["devkit", "gtest", "build_devkit", "pandoc"], configure_args: [ - "--openjdk-target=aarch64-linux-gnu", "--with-zlib=system", "--disable-dtrace", "--enable-compatible-cds-alignment", - ], + ].concat(cross_compiling ? ["--openjdk-target=aarch64-linux-gnu"] : []), }, "linux-arm32": { From 2584bf87aef66744a8e586805735cded0d2f98f1 Mon Sep 17 00:00:00 2001 From: Justin Lu Date: Wed, 29 Nov 2023 19:11:34 +0000 Subject: [PATCH 123/250] 8210410: Refactor java.util.Currency:i18n shell tests to plain java tests Reviewed-by: naoto, lancea --- test/jdk/java/util/Currency/PropertiesTest.sh | 144 ---------------- .../java/util/Currency/PropertiesTestRun.java | 157 ++++++++++++++++++ 2 files changed, 157 insertions(+), 144 deletions(-) delete mode 100644 test/jdk/java/util/Currency/PropertiesTest.sh create mode 100644 test/jdk/java/util/Currency/PropertiesTestRun.java diff --git a/test/jdk/java/util/Currency/PropertiesTest.sh b/test/jdk/java/util/Currency/PropertiesTest.sh deleted file mode 100644 index f7825640480af..0000000000000 --- a/test/jdk/java/util/Currency/PropertiesTest.sh +++ /dev/null @@ -1,144 +0,0 @@ -#!/bin/sh - -# Copyright (c) 2007, 2023, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# @test -# @bug 6332666 6863624 7180362 8003846 8074350 8074351 8130246 8149735 7102969 -# 8157138 8190904 -# @summary tests the capability of replacing the currency data with user -# specified currency properties file -# @build PropertiesTest -# @run shell/timeout=600 PropertiesTest.sh - -if [ "${TESTSRC}" = "" ] -then - echo "TESTSRC not set. Test cannot execute. Failed." - exit 1 -fi -echo "TESTSRC=${TESTSRC}" -if [ "${TESTJAVA}" = "" ] -then - echo "TESTJAVA not set. Test cannot execute. Failed." - exit 1 -fi -echo "TESTJAVA=${TESTJAVA}" -if [ "${TESTCLASSES}" = "" ] -then - echo "TESTCLASSES not set. Test cannot execute. Failed." - exit 1 -fi -echo "TESTCLASSES=${TESTCLASSES}" -echo "CLASSPATH=${CLASSPATH}" - -# set platform-dependent variables -OS=`uname -s` -case "$OS" in - Linux | Darwin | AIX ) - PS=":" - FS="/" - ;; - Windows* ) - PS=";" - FS="/" - ;; - CYGWIN*|MSYS*|MINGW* ) - PS=";" - FS="/" - TESTJAVA=`cygpath -u ${TESTJAVA}` - ;; - * ) - echo "Unrecognized system!" - exit 1; - ;; -esac - -failures=0 - -run() { - echo '' - ${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} ${TESTJAVAOPTS} -cp ${TESTCLASSES} $* 2>&1 - if [ $? != 0 ]; then failures=`expr $failures + 1`; fi -} - -PROPS=${TESTSRC}${FS}currency.properties - - -# Dump built-in currency data - -run PropertiesTest -d dump1 -if [ ! -f dump1 ]; then echo "file dump1 not created. Test cannot execute. Failed."; exit 1; fi - -# Dump built-in currency data + overrides in properties file specified -# by system property. - -run -Djava.util.currency.data=${PROPS} PropertiesTest -d dump2 -if [ ! -f dump2 ]; then echo "file dump2 not created. Test cannot execute. Failed."; exit 1; fi -run PropertiesTest -c dump1 dump2 ${PROPS} - - -# Dump built-in currency data + overrides in properties file copied into -# JRE image. - -# Make a private copy of the jdk so we can write to the properties file location -# without disturbing other users, including concurrently executing tests. -WRITABLEJDK=.${FS}testjava -cp -H -R $TESTJAVA $WRITABLEJDK || exit 1 -PROPLOCATION=${WRITABLEJDK}${FS}lib -chmod -R u+w $WRITABLEJDK || exit 1 -cp ${PROPS} $PROPLOCATION || exit 1 -echo "Properties location: ${PROPLOCATION}" - -# run -echo '' -${WRITABLEJDK}${FS}bin${FS}java ${TESTVMOPTS} ${TESTJAVAOPTS} -cp ${TESTCLASSES} PropertiesTest -d dump3 -if [ $? != 0 ]; then failures=`expr $failures + 1`; fi -if [ ! -f dump3 ]; then echo "file dump3 not created. Test cannot execute. Failed."; exit 1; fi - -# run bug7102969 test -echo '' -${WRITABLEJDK}${FS}bin${FS}java ${TESTVMOPTS} ${TESTJAVAOPTS} -cp ${TESTCLASSES} PropertiesTest bug7102969 -if [ $? != 0 ]; then failures=`expr $failures + 1`; fi - -# run bug8157138 test -echo '' -${WRITABLEJDK}${FS}bin${FS}java ${TESTVMOPTS} ${TESTJAVAOPTS} -cp ${TESTCLASSES} PropertiesTest bug8157138 -if [ $? != 0 ]; then failures=`expr $failures + 1`; fi - -# run bug8190904 test -echo '' -${WRITABLEJDK}${FS}bin${FS}java ${TESTVMOPTS} ${TESTJAVAOPTS} -cp ${TESTCLASSES} PropertiesTest bug8190904 -if [ $? != 0 ]; then failures=`expr $failures + 1`; fi - -# Cleanup -rm -rf $WRITABLEJDK - -# compare the two dump files -run PropertiesTest -c dump1 dump3 ${PROPS} - - -# Results -echo '' -if [ $failures -gt 0 ]; - then echo "$failures tests failed"; - else echo "All tests passed"; fi -exit $failures diff --git a/test/jdk/java/util/Currency/PropertiesTestRun.java b/test/jdk/java/util/Currency/PropertiesTestRun.java new file mode 100644 index 0000000000000..6f2ea28a90d3a --- /dev/null +++ b/test/jdk/java/util/Currency/PropertiesTestRun.java @@ -0,0 +1,157 @@ +/* + * Copyright (c) 2007, 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 6332666 6863624 7180362 8003846 8074350 8074351 8130246 8149735 7102969 + * 8157138 8190904 8210410 + * @summary Tests the capability of replacing the currency data with a user + * specified currency properties file in lib directory (old way) or + * via the system property in the cmdline (new way). + * @library /test/lib + * @build PropertiesTest + * @run junit PropertiesTestRun + */ + +import jdk.test.lib.Utils; +import jdk.test.lib.process.ProcessTools; + +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; + +import java.util.Arrays; +import java.util.stream.Stream; + +import static org.junit.jupiter.api.Assertions.fail; + +public class PropertiesTestRun { + + // String paths used for the cmdline processes + private static final String TEST_JDK = Utils.TEST_JDK; + private static final String TEST_PROPS = + Utils.TEST_SRC+Utils.FILE_SEPARATOR+"currency.properties"; + private static final String WRITABLE_JDK = + "."+Utils.FILE_SEPARATOR+"WRITABLE_JDK"; + private static final String WRITABLE_JDK_LIB = + WRITABLE_JDK+Utils.FILE_SEPARATOR+"lib"; + private static final String WRITABLE_JDK_BIN = + WRITABLE_JDK+Utils.FILE_SEPARATOR+"bin"; + private static final String WRITABLE_JDK_JAVA_PATH = + WRITABLE_JDK_BIN + Utils.FILE_SEPARATOR + "java"; + + // Create a writable JDK and set up dumps 1-3 + @BeforeAll + static void setUp() throws Throwable { + // Create separate JDK to supersede currencies via lib directory + createWritableJDK(); + // Create dump without user defined prop file + executeTestJDKMethod("PropertiesTest", "-d", "dump1"); + // Create dump with user defined prop file (via system property) + executeTestJDKMethod("-Djava.util.currency.data="+TEST_PROPS, + "PropertiesTest", "-d", "dump2"); + // Create dump with user defined prop file (via lib) + executeWritableJDKMethod("PropertiesTest", "-d", "dump3"); + } + + // Need to create a separate JDK to insert the user defined properties file + // into the lib folder. Create separate JDK to not disturb current TEST JDK. + private static void createWritableJDK() throws Throwable { + // Copy Test JDK into a separate JDK folder + executeProcess(new String[]{"cp", "-H", "-R", TEST_JDK, WRITABLE_JDK}); + // Make the separate JDK writable + executeProcess(new String[]{"chmod", "-R", "u+w", WRITABLE_JDK_LIB}); + // Copy the properties file into the writable JDK lib folder + executeProcess(new String[]{"cp", TEST_PROPS, WRITABLE_JDK_LIB}); + } + + // Compares the dumped output is expected between the default currencies + // and the user-defined custom currencies + @Test + void compareDumps() throws Throwable { + // Compare dump (from sys prop) + executeTestJDKMethod("PropertiesTest", "-c", "dump1", "dump2", + TEST_PROPS); + // Compare dump (from lib) + executeTestJDKMethod("PropertiesTest", "-c", "dump1", "dump3", + TEST_PROPS); + } + + // Launch a test from PropertiesTest. See PropertiesTest.java for more + // detail regarding a specific test that was launched. + @ParameterizedTest + @MethodSource("PropertiesTestMethods") + void launchPropertiesTests(String methodName) throws Throwable { + // Test via both the lib and system property + executeWritableJDKMethod("PropertiesTest", methodName); + executeTestJDKMethod("-Djava.util.currency.data="+TEST_PROPS, + "PropertiesTest", methodName); + } + + private static Stream PropertiesTestMethods() { + return Stream.of("bug7102969", "bug8157138", "bug8190904"); + } + + // Launch a PropertiesTest method using the TEST JDK + private static void executeTestJDKMethod(String... params) throws Throwable { + int exitStatus = ProcessTools.executeTestJvm(params).getExitValue(); + if (exitStatus != 0) { + fail("Process started with: " + Arrays.toString(params) + " failed"); + } + } + + // Launch a PropertiesTest method using the WRITABLE JDK + private static void executeWritableJDKMethod(String... params) throws Throwable { + // Need to include WritableJDK javapath, TEST JDK classpath + String[] allParams = new String[3+params.length+Utils.getTestJavaOpts().length]; + // We don't use executeTestJvm() because we want to point to separate JDK java path + allParams[0] = WRITABLE_JDK_JAVA_PATH; + allParams[1] = "-cp"; + allParams[2] = System.getProperty("java.class.path"); + // Add test.vm.opts and test.java.opts + System.arraycopy(Utils.getTestJavaOpts(), 0, allParams, 3, + Utils.getTestJavaOpts().length); + // Add the rest of the actual arguments + System.arraycopy(params, 0, allParams, Utils.getTestJavaOpts().length+3, + params.length); + // Launch the actual test method with all parameters set + executeProcess(allParams); + } + + // Execute a process and fail if the command is not successful + private static void executeProcess(String[] params) throws Throwable { + System.out.println("Command line: " + Arrays.toString(params)); + int exitStatus = ProcessTools.executeProcess(params).getExitValue(); + if (exitStatus != 0) { + fail("Process started with: " + Arrays.toString(params) + " failed"); + } + } + + @AfterAll + static void tearDown() throws Throwable { + // Remove the copied writable JDK image from scratch folder + executeProcess(new String[]{"rm", "-rf", WRITABLE_JDK}); + } +} From ea6e92ed0d6dd3e8c312e523907d776f48293328 Mon Sep 17 00:00:00 2001 From: Mikhailo Seledtsov Date: Wed, 29 Nov 2023 19:20:34 +0000 Subject: [PATCH 124/250] 8320945: problemlist tests failing on latest Windows 11 update Reviewed-by: lmesnik --- test/jdk/ProblemList.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/jdk/ProblemList.txt b/test/jdk/ProblemList.txt index 598b00724e33b..a76ed37aced08 100644 --- a/test/jdk/ProblemList.txt +++ b/test/jdk/ProblemList.txt @@ -570,6 +570,7 @@ java/nio/channels/DatagramChannel/ManySourcesAndTargets.java 8264385 macosx-a java/nio/channels/DatagramChannel/Unref.java 8233437 generic-all java/nio/file/Path/ToRealPath.java 8315273 windows-all +java/nio/file/Files/probeContentType/Basic.java 8320943 windows-all jdk/nio/zipfs/TestLocOffsetFromZip64EF.java 8301183 linux-all @@ -660,6 +661,7 @@ javax/swing/JTree/DnD/LastNodeLowerHalfDrop.java 8159131 linux-all javax/swing/JTree/4633594/JTreeFocusTest.java 7105441 macosx-all javax/swing/AbstractButton/6711682/bug6711682.java 8060765 windows-all,macosx-all javax/swing/JFileChooser/6396844/TwentyThousandTest.java 8198003 generic-all +javax/swing/JFileChooser/8194044/FileSystemRootTest.java 8320944 windows-all javax/swing/JPopupMenu/6800513/bug6800513.java 7184956 macosx-all javax/swing/JTabbedPane/8007563/Test8007563.java 8051591 generic-all javax/swing/JTabbedPane/4624207/bug4624207.java 8064922 macosx-all From d1e73b1299b03a54ec0376ad0f747b4d7e64e40b Mon Sep 17 00:00:00 2001 From: Alex Menkov Date: Wed, 29 Nov 2023 20:10:27 +0000 Subject: [PATCH 125/250] 8318626: GetClassFields does not filter out ConstantPool.constantPoolOop field Reviewed-by: sspitsyn, lmesnik --- src/hotspot/share/runtime/reflectionUtils.hpp | 16 ++-- .../FilteredFields/FilteredFieldsTest.java | 60 ++++++++++++++ .../FilteredFields/libFilteredFieldsTest.cpp | 79 +++++++++++++++++++ 3 files changed, 150 insertions(+), 5 deletions(-) create mode 100644 test/hotspot/jtreg/serviceability/jvmti/GetClassFields/FilteredFields/FilteredFieldsTest.java create mode 100644 test/hotspot/jtreg/serviceability/jvmti/GetClassFields/FilteredFields/libFilteredFieldsTest.cpp diff --git a/src/hotspot/share/runtime/reflectionUtils.hpp b/src/hotspot/share/runtime/reflectionUtils.hpp index 04ff68c427100..93bb541467aa5 100644 --- a/src/hotspot/share/runtime/reflectionUtils.hpp +++ b/src/hotspot/share/runtime/reflectionUtils.hpp @@ -214,20 +214,26 @@ class FilteredFieldStream : public FieldStream { private: int _filtered_fields_count; bool has_filtered_field() { return (_filtered_fields_count > 0); } + void skip_filtered_fields() { + if (has_filtered_field()) { + while (_index >= 0 && FilteredFieldsMap::is_filtered_field((Klass*)_klass, offset())) { + _index -= 1; + } + } + } public: FilteredFieldStream(InstanceKlass* klass, bool local_only, bool classes_only) : FieldStream(klass, local_only, classes_only) { _filtered_fields_count = FilteredFieldsMap::filtered_fields_count(klass, local_only); + // skip filtered fields at the end + skip_filtered_fields(); + } int field_count(); void next() { _index -= 1; - if (has_filtered_field()) { - while (_index >=0 && FilteredFieldsMap::is_filtered_field((Klass*)_klass, offset())) { - _index -= 1; - } - } + skip_filtered_fields(); } }; diff --git a/test/hotspot/jtreg/serviceability/jvmti/GetClassFields/FilteredFields/FilteredFieldsTest.java b/test/hotspot/jtreg/serviceability/jvmti/GetClassFields/FilteredFields/FilteredFieldsTest.java new file mode 100644 index 0000000000000..3e77845e45735 --- /dev/null +++ b/test/hotspot/jtreg/serviceability/jvmti/GetClassFields/FilteredFields/FilteredFieldsTest.java @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8318626 + * @summary Verifies JVMTI GetClassFields function filters out fields + * the same way Class.getDeclaredFields() does. + * + * @run main/othervm/native -agentlib:FilteredFieldsTest FilteredFieldsTest + */ + +import java.lang.reflect.Field; + +public class FilteredFieldsTest { + + static { + System.loadLibrary("FilteredFieldsTest"); + } + + private native static int getJVMTIFieldCount(Class cls); + + private static int getDeclaredFieldsCount(Class cls) { + Field[] declaredFields = cls.getDeclaredFields(); + System.out.println("Class.getDeclaredFields reported " + declaredFields.length + " fields:"); + for (int i = 0; i < declaredFields.length; i++) { + System.out.println(" [" + i + "] : " + declaredFields[i]); + } + return declaredFields.length; + } + + public static void main(String args[]) throws Exception { + Class cls = Class.forName("jdk.internal.reflect.ConstantPool"); + int declaredCount = getDeclaredFieldsCount(cls); + int jvmtiCount = getJVMTIFieldCount(cls); + if (declaredCount != jvmtiCount) { + throw new Exception("declaredCount != jvmtiCount: " + declaredCount + " != " + jvmtiCount); + } + } +} diff --git a/test/hotspot/jtreg/serviceability/jvmti/GetClassFields/FilteredFields/libFilteredFieldsTest.cpp b/test/hotspot/jtreg/serviceability/jvmti/GetClassFields/FilteredFields/libFilteredFieldsTest.cpp new file mode 100644 index 0000000000000..521242a1c2965 --- /dev/null +++ b/test/hotspot/jtreg/serviceability/jvmti/GetClassFields/FilteredFields/libFilteredFieldsTest.cpp @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2023, 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. + */ + +#include +#include +#include "jvmti.h" +#include "jvmti_common.h" + +extern "C" { + +static jvmtiEnv *jvmti = NULL; + + +jint Agent_Initialize(JavaVM *jvm, char *options, void *reserved) { + jint res = jvm->GetEnv((void **)&jvmti, JVMTI_VERSION_1_1); + if (res != JNI_OK || jvmti == NULL) { + printf("Wrong result of a valid call to GetEnv!\n"); + fflush(0); + return JNI_ERR; + } + return JNI_OK; +} + +JNIEXPORT jint JNICALL Agent_OnLoad(JavaVM *jvm, char *options, void *reserved) { + return Agent_Initialize(jvm, options, reserved); +} +JNIEXPORT jint JNICALL Agent_OnAttach(JavaVM *jvm, char *options, void *reserved) { + return Agent_Initialize(jvm, options, reserved); +} + + +JNIEXPORT jint JNICALL +Java_FilteredFieldsTest_getJVMTIFieldCount(JNIEnv *env, jclass cls, jclass clazz) { + if (jvmti == NULL) { + env->FatalError("JVMTI agent was not properly loaded"); + } + + jint fcount = 0; + jfieldID *fields = nullptr; + + check_jvmti_status(env, jvmti->GetClassFields(clazz, &fcount, &fields), "GetClassFields failed"); + + printf("GetClassFields returned %d fields:\n", (int)fcount); + for (int i = 0; i < fcount; i++) { + char *name; + jvmtiError err = jvmti->GetFieldName(clazz, fields[i], &name, nullptr, nullptr); + if (err != JVMTI_ERROR_NONE) { + printf("GetFieldName(%d) returned error: %s (%d)\n", + i, TranslateError(err), err); + continue; + } + printf(" [%d]: %s\n", i, name); + jvmti->Deallocate((unsigned char *)name); + } + fflush(0); + return fcount; +} + +} From c86431767e6802317dc2be6221a5d0990b976ddc Mon Sep 17 00:00:00 2001 From: Aleksey Shipilev Date: Wed, 29 Nov 2023 20:15:44 +0000 Subject: [PATCH 126/250] 8320888: Shenandoah: Enable ShenandoahVerifyOptoBarriers in debug builds Reviewed-by: wkemper, kdnilsen, rkennke --- .../gc/shenandoah/shenandoah_globals.hpp | 2 +- .../gcbarriers/UnsafeIntrinsicsTest.java | 1 - .../gc/shenandoah/TestVerifyJCStress.java | 35 ------------------- .../options/TestSelectiveBarrierFlags.java | 3 +- 4 files changed, 2 insertions(+), 39 deletions(-) diff --git a/src/hotspot/share/gc/shenandoah/shenandoah_globals.hpp b/src/hotspot/share/gc/shenandoah/shenandoah_globals.hpp index d94200f401c3d..1b622946cba2c 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoah_globals.hpp +++ b/src/hotspot/share/gc/shenandoah/shenandoah_globals.hpp @@ -355,7 +355,7 @@ product(bool, ShenandoahStackWatermarkBarrier, true, DIAGNOSTIC, \ "Turn on/off stack watermark barriers in Shenandoah") \ \ - develop(bool, ShenandoahVerifyOptoBarriers, false, \ + develop(bool, ShenandoahVerifyOptoBarriers, trueInDebug, \ "Verify no missing barriers in C2.") \ \ product(bool, ShenandoahLoopOptsAfterExpansion, true, DIAGNOSTIC, \ diff --git a/test/hotspot/jtreg/compiler/gcbarriers/UnsafeIntrinsicsTest.java b/test/hotspot/jtreg/compiler/gcbarriers/UnsafeIntrinsicsTest.java index 06e43d2e08bc1..6a511fd60d96a 100644 --- a/test/hotspot/jtreg/compiler/gcbarriers/UnsafeIntrinsicsTest.java +++ b/test/hotspot/jtreg/compiler/gcbarriers/UnsafeIntrinsicsTest.java @@ -97,7 +97,6 @@ * -XX:+UnlockDiagnosticVMOptions * -XX:-CreateCoredumpOnCrash * -XX:+ShenandoahVerify - * -XX:+IgnoreUnrecognizedVMOptions -XX:+ShenandoahVerifyOptoBarriers * -XX:CompileCommand=dontinline,*::mergeImpl* * compiler.gcbarriers.UnsafeIntrinsicsTest */ diff --git a/test/hotspot/jtreg/gc/shenandoah/TestVerifyJCStress.java b/test/hotspot/jtreg/gc/shenandoah/TestVerifyJCStress.java index 435c4c25004ba..312ab964f5ee1 100644 --- a/test/hotspot/jtreg/gc/shenandoah/TestVerifyJCStress.java +++ b/test/hotspot/jtreg/gc/shenandoah/TestVerifyJCStress.java @@ -40,30 +40,10 @@ * TestVerifyJCStress */ -/* - * @test id=default-debug - * @summary Tests that we pass at least one jcstress-like test with all verification turned on - * @requires vm.gc.Shenandoah - * @requires vm.debug - * @modules java.base/jdk.internal.misc - * java.management - * - * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions - * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive - * -XX:+ShenandoahVerify -XX:+ShenandoahVerifyOptoBarriers - * TestVerifyJCStress - * - * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions - * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=compact - * -XX:+ShenandoahVerify -XX:+ShenandoahVerifyOptoBarriers - * TestVerifyJCStress - */ - /* * @test id=default * @summary Tests that we pass at least one jcstress-like test with all verification turned on * @requires vm.gc.Shenandoah - * @requires !vm.debug * @modules java.base/jdk.internal.misc * java.management * @@ -78,25 +58,10 @@ * TestVerifyJCStress */ -/* - * @test id=iu-debug - * @summary Tests that we pass at least one jcstress-like test with all verification turned on - * @requires vm.gc.Shenandoah - * @requires vm.debug - * @modules java.base/jdk.internal.misc - * java.management - * - * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockExperimentalVMOptions -XX:+UnlockDiagnosticVMOptions - * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=iu - * -XX:+ShenandoahVerify -XX:+ShenandoahVerifyOptoBarriers - * TestVerifyJCStress - */ - /* * @test id=iu * @summary Tests that we pass at least one jcstress-like test with all verification turned on * @requires vm.gc.Shenandoah - * @requires !vm.debug * @modules java.base/jdk.internal.misc * java.management * diff --git a/test/hotspot/jtreg/gc/shenandoah/options/TestSelectiveBarrierFlags.java b/test/hotspot/jtreg/gc/shenandoah/options/TestSelectiveBarrierFlags.java index 1e1627d0fe58b..5b34bfab3a008 100644 --- a/test/hotspot/jtreg/gc/shenandoah/options/TestSelectiveBarrierFlags.java +++ b/test/hotspot/jtreg/gc/shenandoah/options/TestSelectiveBarrierFlags.java @@ -35,9 +35,8 @@ * @summary Test selective barrier enabling works, by aggressively compiling HelloWorld with combinations * of barrier flags * @requires vm.gc.Shenandoah - * @requires vm.debug * @library /test/lib - * @run driver TestSelectiveBarrierFlags -Xbatch -XX:CompileThreshold=100 -XX:-TieredCompilation -XX:+ShenandoahVerifyOptoBarriers + * @run driver TestSelectiveBarrierFlags -Xbatch -XX:CompileThreshold=100 -XX:-TieredCompilation */ import java.util.*; From 940f67c1a62c6f9462266f3a108649aca114cffa Mon Sep 17 00:00:00 2001 From: Harshitha Onkar Date: Wed, 29 Nov 2023 21:53:22 +0000 Subject: [PATCH 127/250] 8318854: [macos14] Running any AWT app prints Secure coding warning Reviewed-by: kcr, kizune, prr --- .../native/libawt_lwawt/awt/AWTWindow.m | 4 +- .../libawt_lwawt/awt/ApplicationDelegate.m | 61 +++++++++++++------ .../macosx/native/libawt_lwawt/awt/CMenuBar.m | 8 ++- .../libosxapp/QueuingApplicationDelegate.m | 15 +++++ 4 files changed, 64 insertions(+), 24 deletions(-) diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTWindow.m b/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTWindow.m index 73009468fa439..33b986a0d180e 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTWindow.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTWindow.m @@ -841,7 +841,7 @@ - (void) activateWindowMenuBar { isDisabled = !awtWindow.isEnabled; } - if (menuBar == nil) { + if (menuBar == nil && [ApplicationDelegate sharedDelegate] != nil) { menuBar = [[ApplicationDelegate sharedDelegate] defaultMenuBar]; isDisabled = NO; } @@ -1230,7 +1230,7 @@ + (AWTWindow *) lastKeyWindow { window.javaMenuBar = menuBar; CMenuBar* actualMenuBar = menuBar; - if (actualMenuBar == nil) { + if (actualMenuBar == nil && [ApplicationDelegate sharedDelegate] != nil) { actualMenuBar = [[ApplicationDelegate sharedDelegate] defaultMenuBar]; } diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/ApplicationDelegate.m b/src/java.desktop/macosx/native/libawt_lwawt/awt/ApplicationDelegate.m index 590ed56e0c6de..a8a821423de44 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/ApplicationDelegate.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/ApplicationDelegate.m @@ -116,8 +116,9 @@ + (ApplicationDelegate *)sharedDelegate { // don't install the EAWT delegate if another kind of NSApplication is installed, like say, Safari BOOL shouldInstall = NO; + BOOL overrideDelegate = (getenv("AWT_OVERRIDE_NSDELEGATE") != NULL); if (NSApp != nil) { - if ([NSApp isMemberOfClass:[NSApplication class]]) shouldInstall = YES; + if ([NSApp isMemberOfClass:[NSApplication class]] && overrideDelegate) shouldInstall = YES; if ([NSApp isKindOfClass:[NSApplicationAWT class]]) shouldInstall = YES; } checked = YES; @@ -409,6 +410,19 @@ - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)app { return NSTerminateLater; } +- (BOOL)applicationSupportsSecureRestorableState:(NSApplication *)app { + static BOOL checked = NO; + static BOOL supportsSecureState = YES; + + if (checked == NO) { + checked = YES; + if (getenv("AWT_DISABLE_NSDELEGATE_SECURE_SAVE") != NULL) { + supportsSecureState = NO; + } + } + return supportsSecureState; +} + + (void)_systemWillPowerOff { [self _notifyJava:com_apple_eawt__AppEventHandler_NOTIFY_SHUTDOWN]; } @@ -506,8 +520,10 @@ + (void)_setDockIconImage:(NSImage *)image { [dockImageView setImageScaling:NSImageScaleProportionallyUpOrDown]; [dockImageView setImage:image]; - [[ApplicationDelegate sharedDelegate].fProgressIndicator removeFromSuperview]; - [dockImageView addSubview:[ApplicationDelegate sharedDelegate].fProgressIndicator]; + if ([ApplicationDelegate sharedDelegate] != nil) { + [[ApplicationDelegate sharedDelegate].fProgressIndicator removeFromSuperview]; + [dockImageView addSubview:[ApplicationDelegate sharedDelegate].fProgressIndicator]; + } // add it to the NSDockTile [dockTile setContentView: dockImageView]; @@ -520,14 +536,15 @@ + (void)_setDockIconProgress:(NSNumber *)value { AWT_ASSERT_APPKIT_THREAD; ApplicationDelegate *delegate = [ApplicationDelegate sharedDelegate]; - if ([value doubleValue] >= 0 && [value doubleValue] <=100) { - [delegate.fProgressIndicator setDoubleValue:[value doubleValue]]; - [delegate.fProgressIndicator setHidden:NO]; - } else { - [delegate.fProgressIndicator setHidden:YES]; + if (delegate != nil) { + if ([value doubleValue] >= 0 && [value doubleValue] <=100) { + [delegate.fProgressIndicator setDoubleValue:[value doubleValue]]; + [delegate.fProgressIndicator setHidden:NO]; + } else { + [delegate.fProgressIndicator setHidden:YES]; + } + [[NSApp dockTile] display]; } - - [[NSApp dockTile] display]; } // Obtains the image of the Dock icon, either manually set, a drawn copy, or the default NSApplicationIcon @@ -638,7 +655,9 @@ + (NSImage *)_dockIconImage { NSMenu *menu = (NSMenu *)jlong_to_ptr(nsMenuPtr); [ThreadUtilities performOnMainThreadWaiting:YES block:^(){ - [ApplicationDelegate sharedDelegate].fDockMenu = menu; + if ([ApplicationDelegate sharedDelegate] != nil) { + [ApplicationDelegate sharedDelegate].fDockMenu = menu; + } }]; JNI_COCOA_EXIT(env); @@ -818,13 +837,15 @@ + (NSImage *)_dockIconImage { [ThreadUtilities performOnMainThreadWaiting:NO block:^(){ ApplicationDelegate *delegate = [ApplicationDelegate sharedDelegate]; - switch (menuID) { - case com_apple_eawt__AppMenuBarHandler_MENU_ABOUT: - [delegate _updateAboutMenu:visible enabled:enabled]; - break; - case com_apple_eawt__AppMenuBarHandler_MENU_PREFS: - [delegate _updatePreferencesMenu:visible enabled:enabled]; - break; + if (delegate != nil) { + switch (menuID) { + case com_apple_eawt__AppMenuBarHandler_MENU_ABOUT: + [delegate _updateAboutMenu:visible enabled:enabled]; + break; + case com_apple_eawt__AppMenuBarHandler_MENU_PREFS: + [delegate _updatePreferencesMenu:visible enabled:enabled]; + break; + } } }]; @@ -843,7 +864,9 @@ + (NSImage *)_dockIconImage { CMenuBar *menu = (CMenuBar *)jlong_to_ptr(cMenuBarPtr); [ThreadUtilities performOnMainThreadWaiting:NO block:^(){ - [ApplicationDelegate sharedDelegate].fDefaultMenuBar = menu; + if ([ApplicationDelegate sharedDelegate] != nil) { + [ApplicationDelegate sharedDelegate].fDefaultMenuBar = menu; + } }]; JNI_COCOA_EXIT(env); diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/CMenuBar.m b/src/java.desktop/macosx/native/libawt_lwawt/awt/CMenuBar.m index 49a6a80da213c..b02cc81806392 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/CMenuBar.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/CMenuBar.m @@ -210,9 +210,11 @@ -(void) deactivate { // In theory, this might cause flickering if the window gaining focus // has its own menu. However, I couldn't reproduce it on practice, so // perhaps this is a non issue. - CMenuBar* defaultMenu = [[ApplicationDelegate sharedDelegate] defaultMenuBar]; - if (defaultMenu != nil) { - [CMenuBar activate:defaultMenu modallyDisabled:NO]; + if ([ApplicationDelegate sharedDelegate] != nil) { + CMenuBar* defaultMenu = [[ApplicationDelegate sharedDelegate] defaultMenuBar]; + if (defaultMenu != nil) { + [CMenuBar activate:defaultMenu modallyDisabled:NO]; + } } } } diff --git a/src/java.desktop/macosx/native/libosxapp/QueuingApplicationDelegate.m b/src/java.desktop/macosx/native/libosxapp/QueuingApplicationDelegate.m index 034a990ebc802..ced48c72a3683 100644 --- a/src/java.desktop/macosx/native/libosxapp/QueuingApplicationDelegate.m +++ b/src/java.desktop/macosx/native/libosxapp/QueuingApplicationDelegate.m @@ -200,6 +200,21 @@ - (void)_appDidUnhide } copy]]; } + +- (BOOL)applicationSupportsSecureRestorableState:(NSApplication *)app +{ + static BOOL checked = NO; + static BOOL supportsSecureState = YES; + + if (checked == NO) { + checked = YES; + if (getenv("AWT_DISABLE_NSDELEGATE_SECURE_SAVE") != NULL) { + supportsSecureState = NO; + } + } + return supportsSecureState; +} + - (void)processQueuedEventsWithTargetDelegate:(id )delegate { self.realDelegate = delegate; From 7766785098816cfcdae3479540cdc866c1ed18ad Mon Sep 17 00:00:00 2001 From: Roland Westrelin Date: Thu, 30 Nov 2023 08:09:06 +0000 Subject: [PATCH 128/250] 8319372: C2 compilation fails with "Bad immediate dominator info" Reviewed-by: kvn, chagedorn, thartmann --- src/hotspot/share/opto/castnode.cpp | 73 ------------------- .../c2/TestTopCastIIOnUndetectedDeadPath.java | 58 +++++++++++++++ .../TestTopCastIIOnUndetectedDeadPath2.java | 55 ++++++++++++++ .../TestTopCastIIOnUndetectedDeadPath3.java | 58 +++++++++++++++ 4 files changed, 171 insertions(+), 73 deletions(-) create mode 100644 test/hotspot/jtreg/compiler/c2/TestTopCastIIOnUndetectedDeadPath.java create mode 100644 test/hotspot/jtreg/compiler/c2/TestTopCastIIOnUndetectedDeadPath2.java create mode 100644 test/hotspot/jtreg/compiler/c2/TestTopCastIIOnUndetectedDeadPath3.java diff --git a/src/hotspot/share/opto/castnode.cpp b/src/hotspot/share/opto/castnode.cpp index 7168cdcf7fe43..ec34e5bdbe8d7 100644 --- a/src/hotspot/share/opto/castnode.cpp +++ b/src/hotspot/share/opto/castnode.cpp @@ -263,79 +263,6 @@ const Type* CastIINode::Value(PhaseGVN* phase) const { res = widen_type(phase, res, T_INT); } - // Try to improve the type of the CastII if we recognize a CmpI/If pattern. - // - // in1 in2 - // | | - // +--- | --+ - // | | | - // CmpINode | - // | | - // BoolNode | - // | | - // IfNode | - // | | - // IfProj | - // | | - // CastIINode - // - if (carry_dependency()) { - if (in(0) != nullptr && in(0)->in(0) != nullptr && in(0)->in(0)->is_If()) { - assert(in(0)->is_IfFalse() || in(0)->is_IfTrue(), "should be If proj"); - Node* proj = in(0); - if (proj->in(0)->in(1)->is_Bool()) { - Node* b = proj->in(0)->in(1); - if (b->in(1)->Opcode() == Op_CmpI) { - Node* cmp = b->in(1); - if (cmp->in(1) == in(1) && phase->type(cmp->in(2))->isa_int()) { - const TypeInt* in2_t = phase->type(cmp->in(2))->is_int(); - const Type* t = TypeInt::INT; - BoolTest test = b->as_Bool()->_test; - if (proj->is_IfFalse()) { - test = test.negate(); - } - BoolTest::mask m = test._test; - jlong lo_long = min_jint; - jlong hi_long = max_jint; - if (m == BoolTest::le || m == BoolTest::lt) { - hi_long = in2_t->_hi; - if (m == BoolTest::lt) { - hi_long -= 1; - } - } else if (m == BoolTest::ge || m == BoolTest::gt) { - lo_long = in2_t->_lo; - if (m == BoolTest::gt) { - lo_long += 1; - } - } else if (m == BoolTest::eq) { - lo_long = in2_t->_lo; - hi_long = in2_t->_hi; - } else if (m == BoolTest::ne) { - // can't do any better - } else { - stringStream ss; - test.dump_on(&ss); - fatal("unexpected comparison %s", ss.freeze()); - } - int lo_int = (int)lo_long; - int hi_int = (int)hi_long; - - if (lo_long != (jlong)lo_int) { - lo_int = min_jint; - } - if (hi_long != (jlong)hi_int) { - hi_int = max_jint; - } - - t = TypeInt::make(lo_int, hi_int, Type::WidenMax); - - res = res->filter_speculative(t); - return res; - } - } - } - } - } return res; } diff --git a/test/hotspot/jtreg/compiler/c2/TestTopCastIIOnUndetectedDeadPath.java b/test/hotspot/jtreg/compiler/c2/TestTopCastIIOnUndetectedDeadPath.java new file mode 100644 index 0000000000000..1b95e13d4f71f --- /dev/null +++ b/test/hotspot/jtreg/compiler/c2/TestTopCastIIOnUndetectedDeadPath.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2023, Red Hat, Inc. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8319372 + * @summary CastII because of condition guarding it becomes top + * @requires vm.compiler2.enabled + * @run main/othervm -Xcomp -XX:CompileOnly=TestTopCastIIOnUndetectedDeadPath::test -XX:CompileCommand=quiet -XX:-TieredCompilation + * -XX:+UnlockDiagnosticVMOptions -XX:StressSeed=426264791 -XX:+StressIGVN TestTopCastIIOnUndetectedDeadPath + * @run main/othervm -Xcomp -XX:CompileOnly=TestTopCastIIOnUndetectedDeadPath::test -XX:CompileCommand=quiet -XX:-TieredCompilation + * -XX:+UnlockDiagnosticVMOptions -XX:+StressIGVN TestTopCastIIOnUndetectedDeadPath + */ + +public class TestTopCastIIOnUndetectedDeadPath { + static class X { + static void m(int[] a) { + + } + } + + static int array[] = new int[10]; + + static void test(int val) { + for (int i = 1; i < 10; ++i) { + for (int j = i; j < 10; ++j) { + if (i == 0 && j != 0) { + X.m(array); + } + array[j - 1] = val; + } + } + } + + public static void main(String[] arg) { + test(42); + } +} diff --git a/test/hotspot/jtreg/compiler/c2/TestTopCastIIOnUndetectedDeadPath2.java b/test/hotspot/jtreg/compiler/c2/TestTopCastIIOnUndetectedDeadPath2.java new file mode 100644 index 0000000000000..98121b3b7542e --- /dev/null +++ b/test/hotspot/jtreg/compiler/c2/TestTopCastIIOnUndetectedDeadPath2.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2023, Red Hat, Inc. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8319372 + * @summary CastII because of condition guarding it becomes top + * @requires vm.compiler2.enabled + * @run main/othervm -XX:CompileCommand=quiet -XX:CompileCommand=compileonly,TestTopCastIIOnUndetectedDeadPath2::test -XX:-TieredCompilation + * -Xbatch -XX:+UnlockDiagnosticVMOptions -XX:+StressIGVN -XX:StressSeed=256120824 TestTopCastIIOnUndetectedDeadPath2 + * @run main/othervm -XX:CompileCommand=quiet -XX:CompileCommand=compileonly,TestTopCastIIOnUndetectedDeadPath2::test -XX:-TieredCompilation + * -Xbatch -XX:+UnlockDiagnosticVMOptions -XX:+StressIGVN TestTopCastIIOnUndetectedDeadPath2 + */ + +public class TestTopCastIIOnUndetectedDeadPath2 { + static int array[] = new int[100]; + + static int test() { + int res = 0; + for (int i = 1; i < 100; ++i) { + try { + res = array[i - 1]; + int x = (42 % i); + } catch (ArithmeticException e) { + } + } + return res; + } + + public static void main(String[] args) { + for (int i = 0; i < 10_000; i++) { + test(); + } + } +} diff --git a/test/hotspot/jtreg/compiler/c2/TestTopCastIIOnUndetectedDeadPath3.java b/test/hotspot/jtreg/compiler/c2/TestTopCastIIOnUndetectedDeadPath3.java new file mode 100644 index 0000000000000..86f26b22295e7 --- /dev/null +++ b/test/hotspot/jtreg/compiler/c2/TestTopCastIIOnUndetectedDeadPath3.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2023, Red Hat, Inc. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8319372 + * @summary CastII because of condition guarding it becomes top + * @run main/othervm -Xcomp -XX:CompileOnly=TestTopCastIIOnUndetectedDeadPath3::* -XX:-TieredCompilation TestTopCastIIOnUndetectedDeadPath3 + */ + +public class TestTopCastIIOnUndetectedDeadPath3 { + + static long test() { + int x = 6, y = 5; + int[] iArr = new int[200]; + for (int i = 129; i > 5; i -= 2) { // OSR compiled + try { + y = iArr[i - 1]; + x = iArr[i + 1]; + x = 1 / i; + } catch (ArithmeticException a_e) { + } + } + Foo.empty(); + return x + y; + } + + public static void main(String[] strArr) { + new TestTopCastIIOnUndetectedDeadPath3(); + for (int i = 0; i < 2000; i++) { + test(); + } + } +} + +class Foo { + public static void empty() {} +} From d6b4aa01a20eb7ecd44602a9fab3e3380bff3d3a Mon Sep 17 00:00:00 2001 From: Olga Mikhaltsova Date: Thu, 30 Nov 2023 08:15:34 +0000 Subject: [PATCH 129/250] 8318157: RISC-V: implement ensureMaterializedForStackWalk intrinsic Reviewed-by: fyang --- src/hotspot/cpu/riscv/riscv.ad | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/hotspot/cpu/riscv/riscv.ad b/src/hotspot/cpu/riscv/riscv.ad index 87f240873a85b..70e787206ce7e 100644 --- a/src/hotspot/cpu/riscv/riscv.ad +++ b/src/hotspot/cpu/riscv/riscv.ad @@ -2378,6 +2378,11 @@ encode %{ ciEnv::current()->record_failure("CodeCache is full"); return; } + } else if (_method->intrinsic_id() == vmIntrinsicID::_ensureMaterializedForStackWalk) { + // The NOP here is purely to ensure that eliding a call to + // JVM_EnsureMaterializedForStackWalk doesn't change the code size. + __ nop(); + __ block_comment("call JVM_EnsureMaterializedForStackWalk (elided)"); } else { int method_index = resolved_method_index(cbuf); RelocationHolder rspec = _optimized_virtual ? opt_virtual_call_Relocation::spec(method_index) From 0d146361f27e1415fab9272de1cdde84c074c718 Mon Sep 17 00:00:00 2001 From: Stefan Karlsson Date: Thu, 30 Nov 2023 09:46:26 +0000 Subject: [PATCH 130/250] 8320515: assert(monitor->object_peek() != nullptr) failed: Owned monitors should not have a dead object Reviewed-by: dholmes, ihse, sspitsyn, dcubed --- make/test/JtregNativeHotspot.gmk | 3 +- src/hotspot/share/prims/jvmtiEnvBase.cpp | 7 + src/hotspot/share/runtime/synchronizer.cpp | 1 - src/hotspot/share/runtime/vmOperations.cpp | 6 + .../Monitor/MonitorWithDeadObjectTest.java | 99 ++++++++++ .../Monitor/libMonitorWithDeadObjectTest.c | 172 ++++++++++++++++++ .../GetOwnedMonitorInfoTest.java | 35 +++- .../libGetOwnedMonitorInfoTest.c | 9 + 8 files changed, 325 insertions(+), 7 deletions(-) create mode 100644 test/hotspot/jtreg/runtime/Monitor/MonitorWithDeadObjectTest.java create mode 100644 test/hotspot/jtreg/runtime/Monitor/libMonitorWithDeadObjectTest.c diff --git a/make/test/JtregNativeHotspot.gmk b/make/test/JtregNativeHotspot.gmk index 24fcac2198ebe..98101ee1e86bf 100644 --- a/make/test/JtregNativeHotspot.gmk +++ b/make/test/JtregNativeHotspot.gmk @@ -861,7 +861,7 @@ 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 libTestJNI.c libCompleteExit.c libTestPsig.c exeGetCreatedJavaVMs.c + BUILD_HOTSPOT_JTREG_EXCLUDE += exesigtest.c libterminatedThread.c libTestJNI.c libCompleteExit.c libMonitorWithDeadObjectTest.c libTestPsig.c exeGetCreatedJavaVMs.c BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libatExit := jvm.lib BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libnativeStack := jvm.lib BUILD_HOTSPOT_JTREG_EXECUTABLES_LIBS_exedaemonDestroy := jvm.lib @@ -1503,6 +1503,7 @@ else BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libterminatedThread += -lpthread BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libatExit += -ljvm BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libCompleteExit += -lpthread + BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libMonitorWithDeadObjectTest += -lpthread BUILD_HOTSPOT_JTREG_LIBRARIES_LIBS_libnativeStack += -lpthread BUILD_HOTSPOT_JTREG_EXECUTABLES_LIBS_exeGetCreatedJavaVMs := -ljvm -lpthread diff --git a/src/hotspot/share/prims/jvmtiEnvBase.cpp b/src/hotspot/share/prims/jvmtiEnvBase.cpp index 709cc90d5619a..9d6296ee31603 100644 --- a/src/hotspot/share/prims/jvmtiEnvBase.cpp +++ b/src/hotspot/share/prims/jvmtiEnvBase.cpp @@ -2243,6 +2243,13 @@ JvmtiMonitorClosure::do_monitor(ObjectMonitor* mon) { } // Filter out on stack monitors collected during stack walk. oop obj = mon->object(); + + if (obj == nullptr) { + // This can happen if JNI code drops all references to the + // owning object. + return; + } + bool found = false; for (int j = 0; j < _owned_monitors_list->length(); j++) { jobject jobj = ((jvmtiMonitorStackDepthInfo*)_owned_monitors_list->at(j))->monitor; diff --git a/src/hotspot/share/runtime/synchronizer.cpp b/src/hotspot/share/runtime/synchronizer.cpp index 4d01037380d88..7c41010fdb894 100644 --- a/src/hotspot/share/runtime/synchronizer.cpp +++ b/src/hotspot/share/runtime/synchronizer.cpp @@ -1115,7 +1115,6 @@ void ObjectSynchronizer::owned_monitors_iterate_filtered(MonitorClosure* closure // ObjectMonitor cannot be async deflated. if (monitor->has_owner() && filter(monitor->owner_raw())) { assert(!monitor->is_being_async_deflated(), "Owned monitors should not be deflating"); - assert(monitor->object_peek() != nullptr, "Owned monitors should not have a dead object"); closure->do_monitor(monitor); } diff --git a/src/hotspot/share/runtime/vmOperations.cpp b/src/hotspot/share/runtime/vmOperations.cpp index cad9dd2ad54c5..3469e3f2cc0ba 100644 --- a/src/hotspot/share/runtime/vmOperations.cpp +++ b/src/hotspot/share/runtime/vmOperations.cpp @@ -347,6 +347,12 @@ class ObjectMonitorsDump : public MonitorClosure, public ObjectMonitorsView { return; } + if (monitor->object_peek() == nullptr) { + // JNI code doesn't necessarily keep the monitor object + // alive. Filter out monitors with dead objects. + return; + } + add(monitor); } diff --git a/test/hotspot/jtreg/runtime/Monitor/MonitorWithDeadObjectTest.java b/test/hotspot/jtreg/runtime/Monitor/MonitorWithDeadObjectTest.java new file mode 100644 index 0000000000000..31aeaccf07a43 --- /dev/null +++ b/test/hotspot/jtreg/runtime/Monitor/MonitorWithDeadObjectTest.java @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2022, 2023, 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. + * + */ + +/* + * @bug 8320515 + * @summary This test checks that ObjectMonitors with dead objects don't + * cause asserts, crashes, or failures when various sub-systems + * in the JVM find them. + * @library /testlibrary /test/lib + * @modules jdk.management + */ + +/* + * @requires os.family != "windows" & os.family != "aix" + * @test id=DetachThread + * @run main/othervm/native MonitorWithDeadObjectTest 0 + */ + +/* + * @requires os.family != "windows" & os.family != "aix" + * @test id=DumpThreadsBeforeDetach + * @run main/othervm/native MonitorWithDeadObjectTest 1 + */ + +/* + * @requires os.family != "windows" & os.family != "aix" + * @test id=DumpThreadsAfterDetach + * @run main/othervm/native MonitorWithDeadObjectTest 2 + */ + +import java.lang.management.ManagementFactory; +import java.lang.management.ThreadMXBean; + +public class MonitorWithDeadObjectTest { + public static native void createMonitorWithDeadObject(); + public static native void createMonitorWithDeadObjectDumpThreadsBeforeDetach(); + + static { + System.loadLibrary("MonitorWithDeadObjectTest"); + } + + private static void dumpThreadsWithLockedMonitors() { + ThreadMXBean threadBean = ManagementFactory.getThreadMXBean(); + threadBean.dumpAllThreads(true, false); + } + + private static void testDetachThread() { + // Create an ObjectMonitor with a dead object from an attached thread. + // This used to provoke an assert in DetachCurrentThread. + createMonitorWithDeadObject(); + } + + private static void testDumpThreadsBeforeDetach() { + // Create an ObjectMonitor with a dead object from an attached thread + // and perform a thread dump before detaching the thread. + createMonitorWithDeadObjectDumpThreadsBeforeDetach(); + } + + private static void testDumpThreadsAfterDetach() { + createMonitorWithDeadObject(); + + // The thread dumping code used to not tolerate monitors with dead + // objects and the detach code used to not unlock these monitors, so + // test that we don't end up with a bug where these monitors are not + // unlocked and then passed to the thread dumping code. + dumpThreadsWithLockedMonitors(); + } + + public static void main(String[] args) throws Exception { + int test = Integer.parseInt(args[0]); + switch (test) { + case 0: testDetachThread(); break; + case 1: testDumpThreadsBeforeDetach(); break; + case 2: testDumpThreadsAfterDetach(); break; + default: throw new RuntimeException("Unknown test"); + }; + } +} diff --git a/test/hotspot/jtreg/runtime/Monitor/libMonitorWithDeadObjectTest.c b/test/hotspot/jtreg/runtime/Monitor/libMonitorWithDeadObjectTest.c new file mode 100644 index 0000000000000..7e12eac2ea2ba --- /dev/null +++ b/test/hotspot/jtreg/runtime/Monitor/libMonitorWithDeadObjectTest.c @@ -0,0 +1,172 @@ +/* + * Copyright (c) 2022, 2023, 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. + */ + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +static JavaVM* jvm; +static pthread_t attacher; + +#define die(x) do { printf("%s:%s\n",x , __func__); perror(x); exit(EXIT_FAILURE); } while (0) + +static void check_exception(JNIEnv* env, const char* msg) { + if ((*env)->ExceptionCheck(env)) { + fprintf(stderr, "Error: %s", msg); + exit(-1); + } +} + +#define check(env, what, msg) \ + check_exception((env), (msg)); \ + do { \ + if ((what) == 0) { \ + fprintf(stderr, #what "is null: %s", (msg)); \ + exit(-2); \ + } \ + } while (0) + +static jobject create_object(JNIEnv* env) { + jclass clazz = (*env)->FindClass(env, "java/lang/Object"); + check(env, clazz, "No class"); + + jmethodID constructor = (*env)->GetMethodID(env, clazz, "", "()V"); + check(env, constructor, "No constructor"); + + jobject obj = (*env)->NewObject(env, clazz, constructor); + check(env, constructor, "No object"); + + return obj; +} + +static void system_gc(JNIEnv* env) { + jclass clazz = (*env)->FindClass(env, "java/lang/System"); + check(env, clazz, "No class"); + + jmethodID method = (*env)->GetStaticMethodID(env, clazz, "gc", "()V"); + check(env, method, "No method"); + + (*env)->CallStaticVoidMethod(env, clazz, method); + check_exception(env, "Calling System.gc()"); +} + +static void thread_dump_with_locked_monitors(JNIEnv* env) { + jclass ManagementFactoryClass = (*env)->FindClass(env, "java/lang/management/ManagementFactory"); + check(env, ManagementFactoryClass, "No ManagementFactory class"); + + jmethodID getThreadMXBeanMethod = (*env)->GetStaticMethodID(env, ManagementFactoryClass, "getThreadMXBean", "()Ljava/lang/management/ThreadMXBean;"); + check(env, getThreadMXBeanMethod, "No getThreadMXBean method"); + + jobject threadBean = (*env)->CallStaticObjectMethod(env, ManagementFactoryClass, getThreadMXBeanMethod); + check(env, threadBean, "Calling getThreadMXBean()"); + + jclass ThreadMXBeanClass = (*env)->FindClass(env, "java/lang/management/ThreadMXBean"); + check(env, ThreadMXBeanClass, "No ThreadMXBean class"); + + jmethodID dumpAllThreadsMethod = (*env)->GetMethodID(env, ThreadMXBeanClass, "dumpAllThreads", "(ZZ)[Ljava/lang/management/ThreadInfo;"); + check(env, dumpAllThreadsMethod, "No dumpAllThreads method"); + + // The 'lockedMonitors == true' is what causes the monitor with a dead object to be examined. + jobject array = (*env)->CallObjectMethod(env, threadBean, dumpAllThreadsMethod, JNI_TRUE /* lockedMonitors */, JNI_FALSE /* lockedSynchronizers*/); + check(env, array, "Calling dumpAllThreads(true, false)"); +} + +static void create_monitor_with_dead_object(JNIEnv* env) { + jobject obj = create_object(env); + + if ((*env)->MonitorEnter(env, obj) != 0) die("MonitorEnter"); + + // Drop the last strong reference to the object associated with the monitor. + // The monitor only keeps a weak reference to the object. + (*env)->DeleteLocalRef(env, obj); + + // Let the GC clear the weak reference to the object. + system_gc(env); +} + +static void* create_monitor_with_dead_object_in_thread(void* arg) { + JNIEnv* env; + int res = (*jvm)->AttachCurrentThread(jvm, (void**)&env, NULL); + if (res != JNI_OK) die("AttachCurrentThread"); + + // Make the correct incantation to create a monitor with a dead object. + create_monitor_with_dead_object(env); + + // DetachCurrentThread will try to unlock held monitors. This has been a + // source of at least two bugs: + // - When the object reference in the monitor was cleared, the monitor + // iterator code would skip it, preventing it from being unlocked when + // the owner thread detached, leaving it lingering in the system. + // - When the monitor iterator API was rewritten the code was changed to + // assert that we didn't have "owned" monitors with dead objects. This + // test provokes that situation and that asserts. + if ((*jvm)->DetachCurrentThread(jvm) != JNI_OK) die("DetachCurrentThread"); + + return NULL; +} + +static void* create_monitor_with_dead_object_and_dump_threads_in_thread(void* arg) { + JNIEnv* env; + int res = (*jvm)->AttachCurrentThread(jvm, (void**)&env, NULL); + if (res != JNI_OK) die("AttachCurrentThread"); + + // Make the correct incantation to create a monitor with a dead object. + create_monitor_with_dead_object(env); + + // Perform a thread dump that checks for all thread's monitors. + // That code didn't expect the monitor iterators to return monitors + // with dead objects and therefore asserted/crashed. + thread_dump_with_locked_monitors(env); + + if ((*jvm)->DetachCurrentThread(jvm) != JNI_OK) die("DetachCurrentThread"); + + return NULL; +} + +JNIEXPORT void JNICALL Java_MonitorWithDeadObjectTest_createMonitorWithDeadObject(JNIEnv* env, jclass jc) { + void* ret; + + (*env)->GetJavaVM(env, &jvm); + + if (pthread_create(&attacher, NULL, create_monitor_with_dead_object_in_thread, NULL) != 0) die("pthread_create"); + if (pthread_join(attacher, &ret) != 0) die("pthread_join"); +} + +JNIEXPORT void JNICALL Java_MonitorWithDeadObjectTest_createMonitorWithDeadObjectDumpThreadsBeforeDetach(JNIEnv* env, jclass jc) { + void* ret; + + (*env)->GetJavaVM(env, &jvm); + + if (pthread_create(&attacher, NULL, create_monitor_with_dead_object_and_dump_threads_in_thread, NULL) != 0) die("pthread_create"); + if (pthread_join(attacher, &ret) != 0) die("pthread_join"); +} + +#ifdef __cplusplus +} +#endif diff --git a/test/hotspot/jtreg/serviceability/jvmti/GetOwnedMonitorInfo/GetOwnedMonitorInfoTest.java b/test/hotspot/jtreg/serviceability/jvmti/GetOwnedMonitorInfo/GetOwnedMonitorInfoTest.java index 7d40301222cb7..7b99104670f9b 100644 --- a/test/hotspot/jtreg/serviceability/jvmti/GetOwnedMonitorInfo/GetOwnedMonitorInfoTest.java +++ b/test/hotspot/jtreg/serviceability/jvmti/GetOwnedMonitorInfo/GetOwnedMonitorInfoTest.java @@ -24,8 +24,10 @@ /** * @test - * @bug 8185164 - * @summary Checks that a contended monitor does not show up in the list of owned monitors + * @bug 8185164 8320515 + * @summary Checks that a contended monitor does not show up in the list of owned monitors. + * 8320515 piggy-backs on this test and injects an owned monitor with a dead object, + and checks that that monitor isn't exposed to GetOwnedMonitorInfo. * @requires vm.jvmti * @compile GetOwnedMonitorInfoTest.java * @run main/othervm/native -agentlib:GetOwnedMonitorInfoTest GetOwnedMonitorInfoTest @@ -46,19 +48,42 @@ public class GetOwnedMonitorInfoTest { } } + private static native void jniMonitorEnter(Object obj); private static native int check(); private static native boolean hasEventPosted(); + private static void jniMonitorEnterAndLetObjectDie() { + // The monitor iterator used by GetOwnedMonitorInfo used to + // assert when an owned monitor with a dead object was found. + // Inject this situation into this test that performs other + // GetOwnedMonitorInfo testing. + Object obj = new Object() {}; + jniMonitorEnter(obj); + if (!Thread.holdsLock(obj)) { + throw new RuntimeException("The object is not locked"); + } + obj = null; + System.gc(); + } + public static void main(String[] args) throws Exception { - runTest(true); - runTest(false); + runTest(true, true); + runTest(true, false); + runTest(false, true); + runTest(false, false); } - public static void runTest(boolean isVirtual) throws Exception { + public static void runTest(boolean isVirtual, boolean jni) throws Exception { var threadFactory = isVirtual ? Thread.ofVirtual().factory() : Thread.ofPlatform().factory(); final GetOwnedMonitorInfoTest lock = new GetOwnedMonitorInfoTest(); Thread t1 = threadFactory.newThread(() -> { + Thread.currentThread().setName("Worker-Thread"); + + if (jni) { + jniMonitorEnterAndLetObjectDie(); + } + synchronized (lock) { System.out.println("Thread in sync section: " + Thread.currentThread().getName()); diff --git a/test/hotspot/jtreg/serviceability/jvmti/GetOwnedMonitorInfo/libGetOwnedMonitorInfoTest.c b/test/hotspot/jtreg/serviceability/jvmti/GetOwnedMonitorInfo/libGetOwnedMonitorInfoTest.c index 5147fae53045b..af4fd51f3b342 100644 --- a/test/hotspot/jtreg/serviceability/jvmti/GetOwnedMonitorInfo/libGetOwnedMonitorInfoTest.c +++ b/test/hotspot/jtreg/serviceability/jvmti/GetOwnedMonitorInfo/libGetOwnedMonitorInfoTest.c @@ -22,6 +22,7 @@ */ #include +#include #include #include "jvmti.h" #include "jni.h" @@ -264,6 +265,14 @@ jint Agent_Initialize(JavaVM *jvm, char *options, void *reserved) { return JNI_OK; } +JNIEXPORT void JNICALL +Java_GetOwnedMonitorInfoTest_jniMonitorEnter(JNIEnv* env, jclass cls, jobject obj) { + if ((*env)->MonitorEnter(env, obj) != 0) { + fprintf(stderr, "MonitorEnter failed"); + exit(-1); + } +} + JNIEXPORT jint JNICALL Java_GetOwnedMonitorInfoTest_check(JNIEnv *env, jclass cls) { return status; From 694136909c058370a5833322ebaf2e71a0a15164 Mon Sep 17 00:00:00 2001 From: Aleksey Shipilev Date: Thu, 30 Nov 2023 10:18:23 +0000 Subject: [PATCH 131/250] 8320921: GHA: Parallelize hotspot_compiler test jobs Reviewed-by: stuefe, ihse --- .github/workflows/test.yml | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 6f2757fe97ff9..b3590166264bf 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -60,7 +60,9 @@ jobs: - 'jdk/tier1 part 3' - 'langtools/tier1' - 'hs/tier1 common' - - 'hs/tier1 compiler' + - 'hs/tier1 compiler part 1' + - 'hs/tier1 compiler part 2' + - 'hs/tier1 compiler part 3' - 'hs/tier1 gc' - 'hs/tier1 runtime' - 'hs/tier1 serviceability' @@ -83,8 +85,16 @@ jobs: test-suite: 'test/hotspot/jtreg/:tier1_common' debug-suffix: -debug - - test-name: 'hs/tier1 compiler' - test-suite: 'test/hotspot/jtreg/:tier1_compiler' + - test-name: 'hs/tier1 compiler part 1' + test-suite: 'test/hotspot/jtreg/:tier1_compiler_1' + debug-suffix: -debug + + - test-name: 'hs/tier1 compiler part 2' + test-suite: 'test/hotspot/jtreg/:tier1_compiler_2 test/hotspot/jtreg/:tier1_compiler_not_xcomp' + debug-suffix: -debug + + - test-name: 'hs/tier1 compiler part 3' + test-suite: 'test/hotspot/jtreg/:tier1_compiler_3' debug-suffix: -debug - test-name: 'hs/tier1 gc' From 8b102ed6b4f595f07c0e741328f5fcac65320461 Mon Sep 17 00:00:00 2001 From: Aleksey Shipilev Date: Thu, 30 Nov 2023 10:51:48 +0000 Subject: [PATCH 132/250] 8321063: AArch64: Zero build fails after JDK-8320368 Reviewed-by: stuefe, haosun --- src/hotspot/share/oops/compressedKlass.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hotspot/share/oops/compressedKlass.cpp b/src/hotspot/share/oops/compressedKlass.cpp index f9d0466dda4ec..4a94eb9bde02d 100644 --- a/src/hotspot/share/oops/compressedKlass.cpp +++ b/src/hotspot/share/oops/compressedKlass.cpp @@ -84,7 +84,7 @@ char* CompressedKlassPointers::reserve_address_space_for_16bit_move(size_t size, return reserve_address_space_X(nth_bit(32), nth_bit(48), size, nth_bit(32), aslr); } -#ifndef AARCH64 +#if !defined(AARCH64) || defined(ZERO) // On aarch64 we have an own version; all other platforms use the default version void CompressedKlassPointers::initialize(address addr, size_t len) { // The default version of this code tries, in order of preference: @@ -115,7 +115,7 @@ void CompressedKlassPointers::initialize(address addr, size_t len) { DEBUG_ONLY(assert_is_valid_encoding(addr, len, _base, _shift);) } -#endif // !AARCH64 +#endif // !AARCH64 || ZERO void CompressedKlassPointers::print_mode(outputStream* st) { st->print_cr("Narrow klass base: " PTR_FORMAT ", Narrow klass shift: %d, " From 61653a1ff166816a6af6875c42bcd85023f3859d Mon Sep 17 00:00:00 2001 From: Joachim Kern Date: Thu, 30 Nov 2023 11:19:58 +0000 Subject: [PATCH 133/250] 8320830: [AIX] Dont mix os::dll_load() with direct dlclose() calls Reviewed-by: stuefe, clanger --- src/hotspot/os/aix/libodm_aix.cpp | 6 +++--- src/hotspot/os/aix/libperfstat_aix.cpp | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/hotspot/os/aix/libodm_aix.cpp b/src/hotspot/os/aix/libodm_aix.cpp index d62a94939a46b..9fe0fb7abd842 100644 --- a/src/hotspot/os/aix/libodm_aix.cpp +++ b/src/hotspot/os/aix/libodm_aix.cpp @@ -35,7 +35,7 @@ dynamicOdm::dynamicOdm() { const char* libodmname = "/usr/lib/libodm.a(shr_64.o)"; char ebuf[512]; - void* _libhandle = os::dll_load(libodmname, ebuf, sizeof(ebuf)); + _libhandle = os::dll_load(libodmname, ebuf, sizeof(ebuf)); if (!_libhandle) { trcVerbose("Cannot load %s (error %s)", libodmname, ebuf); @@ -48,14 +48,14 @@ dynamicOdm::dynamicOdm() { _odm_terminate = (fun_odm_terminate )dlsym(_libhandle, "odm_terminate" ); if (!_odm_initialize || !_odm_set_path || !_odm_mount_class || !_odm_get_obj || !_odm_terminate) { trcVerbose("Couldn't find all required odm symbols from %s", libodmname); - dlclose(_libhandle); + os::dll_unload(_libhandle); _libhandle = nullptr; return; } } dynamicOdm::~dynamicOdm() { - if (_libhandle) { dlclose(_libhandle); } + if (_libhandle) { os::dll_unload(_libhandle); } } diff --git a/src/hotspot/os/aix/libperfstat_aix.cpp b/src/hotspot/os/aix/libperfstat_aix.cpp index 69f6224536528..f547b4c78e77c 100644 --- a/src/hotspot/os/aix/libperfstat_aix.cpp +++ b/src/hotspot/os/aix/libperfstat_aix.cpp @@ -114,7 +114,7 @@ bool libperfstat::init() { void libperfstat::cleanup() { if (g_libhandle) { - dlclose(g_libhandle); + os::dll_unload(g_libhandle); g_libhandle = nullptr; } From c9d15f7d5ee616bf48d85647ee504714ac5fafc2 Mon Sep 17 00:00:00 2001 From: Evgeny Astigeevich Date: Thu, 30 Nov 2023 11:33:02 +0000 Subject: [PATCH 134/250] 8321025: Enable Neoverse N1 optimizations for Neoverse V2 Reviewed-by: ngasson, shade --- src/hotspot/cpu/aarch64/vm_version_aarch64.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/hotspot/cpu/aarch64/vm_version_aarch64.cpp b/src/hotspot/cpu/aarch64/vm_version_aarch64.cpp index df28ca284c5cf..37b0c44a593be 100644 --- a/src/hotspot/cpu/aarch64/vm_version_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/vm_version_aarch64.cpp @@ -204,8 +204,9 @@ void VM_Version::initialize() { } } - // Neoverse N1, N2 and V1 - if (_cpu == CPU_ARM && (model_is(0xd0c) || model_is(0xd49) || model_is(0xd40))) { + // Neoverse N1, N2, V1, V2 + if (_cpu == CPU_ARM && (model_is(0xd0c) || model_is(0xd49) || + model_is(0xd40) || model_is(0xd4f))) { if (FLAG_IS_DEFAULT(UseSIMDForMemoryOps)) { FLAG_SET_DEFAULT(UseSIMDForMemoryOps, true); } From da7cf258bb5b24788409dde084ad012bd64a032a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivan=20=C5=A0ipka?= Date: Thu, 30 Nov 2023 12:09:20 +0000 Subject: [PATCH 135/250] 8320665: update jdk_core at open/test/jdk/TEST.groups Reviewed-by: msheppar --- test/jdk/TEST.groups | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/jdk/TEST.groups b/test/jdk/TEST.groups index 4b332b94ca357..d15b79ea91c14 100644 --- a/test/jdk/TEST.groups +++ b/test/jdk/TEST.groups @@ -647,3 +647,7 @@ jdk_containers_extended = \ :jdk_io \ :jdk_nio \ :jdk_svc + +jdk_core_no_security = \ + :jdk_core \ + -:jdk_security \ No newline at end of file From 03759e892df1f1de5d5ede93f5ded21e468cff5a Mon Sep 17 00:00:00 2001 From: Stefan Karlsson Date: Thu, 30 Nov 2023 12:40:23 +0000 Subject: [PATCH 136/250] 8320304: Refactor and simplify monitor deflation functions Reviewed-by: dcubed, dholmes --- src/hotspot/share/runtime/synchronizer.cpp | 266 ++++++++++++--------- src/hotspot/share/runtime/synchronizer.hpp | 13 +- 2 files changed, 155 insertions(+), 124 deletions(-) diff --git a/src/hotspot/share/runtime/synchronizer.cpp b/src/hotspot/share/runtime/synchronizer.cpp index 7c41010fdb894..34eafb01c6d74 100644 --- a/src/hotspot/share/runtime/synchronizer.cpp +++ b/src/hotspot/share/runtime/synchronizer.cpp @@ -63,6 +63,8 @@ #include "utilities/linkedlist.hpp" #include "utilities/preserveException.hpp" +class ObjectMonitorDeflationLogging; + void MonitorList::add(ObjectMonitor* m) { ObjectMonitor* head; do { @@ -84,17 +86,26 @@ size_t MonitorList::max() const { return Atomic::load(&_max); } +class ObjectMonitorDeflationSafepointer : public StackObj { + JavaThread* const _current; + ObjectMonitorDeflationLogging* const _log; + +public: + ObjectMonitorDeflationSafepointer(JavaThread* current, ObjectMonitorDeflationLogging* log) + : _current(current), _log(log) {} + + void block_for_safepoint(const char* op_name, const char* count_name, size_t counter); +}; + // Walk the in-use list and unlink deflated ObjectMonitors. // Returns the number of unlinked ObjectMonitors. -size_t MonitorList::unlink_deflated(Thread* current, LogStream* ls, - elapsedTimer* timer_p, - size_t deflated_count, - GrowableArray* unlinked_list) { +size_t MonitorList::unlink_deflated(size_t deflated_count, + GrowableArray* unlinked_list, + ObjectMonitorDeflationSafepointer* safepointer) { size_t unlinked_count = 0; ObjectMonitor* prev = nullptr; ObjectMonitor* m = Atomic::load_acquire(&_head); - // The in-use list head can be null during the final audit. while (m != nullptr) { if (m->is_being_async_deflated()) { // Find next live ObjectMonitor. Batch up the unlinkable monitors, so we can @@ -154,12 +165,8 @@ size_t MonitorList::unlink_deflated(Thread* current, LogStream* ls, m = m->next_om(); } - if (current->is_Java_thread()) { - // A JavaThread must check for a safepoint/handshake and honor it. - ObjectSynchronizer::chk_for_block_req(JavaThread::cast(current), "unlinking", - "unlinked_count", unlinked_count, - ls, timer_p); - } + // Must check for a safepoint/handshake and honor it. + safepointer->block_for_safepoint("unlinking", "unlinked_count", unlinked_count); } #ifdef ASSERT @@ -1536,40 +1543,10 @@ ObjectMonitor* ObjectSynchronizer::inflate(Thread* current, oop object, } } -void ObjectSynchronizer::chk_for_block_req(JavaThread* current, const char* op_name, - const char* cnt_name, size_t cnt, - LogStream* ls, elapsedTimer* timer_p) { - if (!SafepointMechanism::should_process(current)) { - return; - } - - // A safepoint/handshake has started. - if (ls != nullptr) { - timer_p->stop(); - ls->print_cr("pausing %s: %s=" SIZE_FORMAT ", in_use_list stats: ceiling=" - SIZE_FORMAT ", count=" SIZE_FORMAT ", max=" SIZE_FORMAT, - op_name, cnt_name, cnt, in_use_list_ceiling(), - _in_use_list.count(), _in_use_list.max()); - } - - { - // Honor block request. - ThreadBlockInVM tbivm(current); - } - - if (ls != nullptr) { - ls->print_cr("resuming %s: in_use_list stats: ceiling=" SIZE_FORMAT - ", count=" SIZE_FORMAT ", max=" SIZE_FORMAT, op_name, - in_use_list_ceiling(), _in_use_list.count(), _in_use_list.max()); - timer_p->start(); - } -} - // Walk the in-use list and deflate (at most MonitorDeflationMax) idle // ObjectMonitors. Returns the number of deflated ObjectMonitors. // -size_t ObjectSynchronizer::deflate_monitor_list(Thread* current, LogStream* ls, - elapsedTimer* timer_p) { +size_t ObjectSynchronizer::deflate_monitor_list(ObjectMonitorDeflationSafepointer* safepointer) { MonitorList::Iterator iter = _in_use_list.iterator(); size_t deflated_count = 0; @@ -1582,11 +1559,8 @@ size_t ObjectSynchronizer::deflate_monitor_list(Thread* current, LogStream* ls, deflated_count++; } - if (current->is_Java_thread()) { - // A JavaThread must check for a safepoint/handshake and honor it. - chk_for_block_req(JavaThread::cast(current), "deflation", "deflated_count", - deflated_count, ls, timer_p); - } + // Must check for a safepoint/handshake and honor it. + safepointer->block_for_safepoint("deflation", "deflated_count", deflated_count); } return deflated_count; @@ -1612,104 +1586,162 @@ class VM_RendezvousGCThreads : public VM_Operation { }; }; -static size_t delete_monitors(JavaThread* current, GrowableArray* delete_list, - LogStream* ls, elapsedTimer* timer_p) { +static size_t delete_monitors(GrowableArray* delete_list, + ObjectMonitorDeflationSafepointer* safepointer) { NativeHeapTrimmer::SuspendMark sm("monitor deletion"); size_t deleted_count = 0; for (ObjectMonitor* monitor: *delete_list) { delete monitor; deleted_count++; // A JavaThread must check for a safepoint/handshake and honor it. - ObjectSynchronizer::chk_for_block_req(current, "deletion", "deleted_count", - deleted_count, ls, timer_p); + safepointer->block_for_safepoint("deletion", "deleted_count", deleted_count); } return deleted_count; } -// This function is called by the MonitorDeflationThread to deflate -// ObjectMonitors. -size_t ObjectSynchronizer::deflate_idle_monitors() { - Thread* current = Thread::current(); - if (current->is_Java_thread()) { - // The async deflation request has been processed. - _last_async_deflation_time_ns = os::javaTimeNanos(); - set_is_async_deflation_requested(false); +class ObjectMonitorDeflationLogging: public StackObj { + LogStreamHandle(Debug, monitorinflation) _debug; + LogStreamHandle(Info, monitorinflation) _info; + LogStream* _stream; + elapsedTimer _timer; + + size_t ceiling() const { return ObjectSynchronizer::in_use_list_ceiling(); } + size_t count() const { return ObjectSynchronizer::_in_use_list.count(); } + size_t max() const { return ObjectSynchronizer::_in_use_list.max(); } + +public: + ObjectMonitorDeflationLogging() + : _debug(), _info(), _stream(nullptr) { + if (_debug.is_enabled()) { + _stream = &_debug; + } else if (_info.is_enabled()) { + _stream = &_info; + } } - LogStreamHandle(Debug, monitorinflation) lsh_debug; - LogStreamHandle(Info, monitorinflation) lsh_info; - LogStream* ls = nullptr; - if (log_is_enabled(Debug, monitorinflation)) { - ls = &lsh_debug; - } else if (log_is_enabled(Info, monitorinflation)) { - ls = &lsh_info; + void begin() { + if (_stream != nullptr) { + _stream->print_cr("begin deflating: in_use_list stats: ceiling=" SIZE_FORMAT ", count=" SIZE_FORMAT ", max=" SIZE_FORMAT, + ceiling(), count(), max()); + _timer.start(); + } + } + + void before_handshake(size_t unlinked_count) { + if (_stream != nullptr) { + _timer.stop(); + _stream->print_cr("before handshaking: unlinked_count=" SIZE_FORMAT + ", in_use_list stats: ceiling=" SIZE_FORMAT ", count=" + SIZE_FORMAT ", max=" SIZE_FORMAT, + unlinked_count, ceiling(), count(), max()); + } + } + + void after_handshake() { + if (_stream != nullptr) { + _stream->print_cr("after handshaking: in_use_list stats: ceiling=" + SIZE_FORMAT ", count=" SIZE_FORMAT ", max=" SIZE_FORMAT, + ceiling(), count(), max()); + _timer.start(); + } } - elapsedTimer timer; - if (ls != nullptr) { - ls->print_cr("begin deflating: in_use_list stats: ceiling=" SIZE_FORMAT ", count=" SIZE_FORMAT ", max=" SIZE_FORMAT, - in_use_list_ceiling(), _in_use_list.count(), _in_use_list.max()); - timer.start(); + void end(size_t deflated_count, size_t unlinked_count) { + if (_stream != nullptr) { + _timer.stop(); + if (deflated_count != 0 || unlinked_count != 0 || _debug.is_enabled()) { + _stream->print_cr("deflated_count=" SIZE_FORMAT ", {unlinked,deleted}_count=" SIZE_FORMAT " monitors in %3.7f secs", + deflated_count, unlinked_count, _timer.seconds()); + } + _stream->print_cr("end deflating: in_use_list stats: ceiling=" SIZE_FORMAT ", count=" SIZE_FORMAT ", max=" SIZE_FORMAT, + ceiling(), count(), max()); + } + } + + void before_block_for_safepoint(const char* op_name, const char* cnt_name, size_t cnt) { + if (_stream != nullptr) { + _timer.stop(); + _stream->print_cr("pausing %s: %s=" SIZE_FORMAT ", in_use_list stats: ceiling=" + SIZE_FORMAT ", count=" SIZE_FORMAT ", max=" SIZE_FORMAT, + op_name, cnt_name, cnt, ceiling(), count(), max()); + } } + void after_block_for_safepoint(const char* op_name) { + if (_stream != nullptr) { + _stream->print_cr("resuming %s: in_use_list stats: ceiling=" SIZE_FORMAT + ", count=" SIZE_FORMAT ", max=" SIZE_FORMAT, op_name, + ceiling(), count(), max()); + _timer.start(); + } + } +}; + +void ObjectMonitorDeflationSafepointer::block_for_safepoint(const char* op_name, const char* count_name, size_t counter) { + if (!SafepointMechanism::should_process(_current)) { + return; + } + + // A safepoint/handshake has started. + _log->before_block_for_safepoint(op_name, count_name, counter); + + { + // Honor block request. + ThreadBlockInVM tbivm(_current); + } + + _log->after_block_for_safepoint(op_name); +} + +// This function is called by the MonitorDeflationThread to deflate +// ObjectMonitors. +size_t ObjectSynchronizer::deflate_idle_monitors() { + JavaThread* current = JavaThread::current(); + assert(current->is_monitor_deflation_thread(), "The only monitor deflater"); + + // The async deflation request has been processed. + _last_async_deflation_time_ns = os::javaTimeNanos(); + set_is_async_deflation_requested(false); + + ObjectMonitorDeflationLogging log; + ObjectMonitorDeflationSafepointer safepointer(current, &log); + + log.begin(); + // Deflate some idle ObjectMonitors. - size_t deflated_count = deflate_monitor_list(current, ls, &timer); + size_t deflated_count = deflate_monitor_list(&safepointer); + + // Unlink the deflated ObjectMonitors from the in-use list. size_t unlinked_count = 0; size_t deleted_count = 0; if (deflated_count > 0) { - // There are ObjectMonitors that have been deflated. - - // Unlink deflated ObjectMonitors from the in-use list. - ResourceMark rm; + ResourceMark rm(current); GrowableArray delete_list((int)deflated_count); - unlinked_count = _in_use_list.unlink_deflated(current, ls, &timer, deflated_count, &delete_list); - if (current->is_monitor_deflation_thread()) { - if (ls != nullptr) { - timer.stop(); - ls->print_cr("before handshaking: unlinked_count=" SIZE_FORMAT - ", in_use_list stats: ceiling=" SIZE_FORMAT ", count=" - SIZE_FORMAT ", max=" SIZE_FORMAT, - unlinked_count, in_use_list_ceiling(), - _in_use_list.count(), _in_use_list.max()); - } + unlinked_count = _in_use_list.unlink_deflated(deflated_count, &delete_list, &safepointer); - // A JavaThread needs to handshake in order to safely free the - // ObjectMonitors that were deflated in this cycle. - HandshakeForDeflation hfd_hc; - Handshake::execute(&hfd_hc); - // Also, we sync and desync GC threads around the handshake, so that they can - // safely read the mark-word and look-through to the object-monitor, without - // being afraid that the object-monitor is going away. - VM_RendezvousGCThreads sync_gc; - VMThread::execute(&sync_gc); - - if (ls != nullptr) { - ls->print_cr("after handshaking: in_use_list stats: ceiling=" - SIZE_FORMAT ", count=" SIZE_FORMAT ", max=" SIZE_FORMAT, - in_use_list_ceiling(), _in_use_list.count(), _in_use_list.max()); - timer.start(); - } - } else { - // This is not a monitor deflation thread. - // No handshake or rendezvous is needed when we are already at safepoint. - assert_at_safepoint(); - } + log.before_handshake(unlinked_count); + + // A JavaThread needs to handshake in order to safely free the + // ObjectMonitors that were deflated in this cycle. + HandshakeForDeflation hfd_hc; + Handshake::execute(&hfd_hc); + // Also, we sync and desync GC threads around the handshake, so that they can + // safely read the mark-word and look-through to the object-monitor, without + // being afraid that the object-monitor is going away. + VM_RendezvousGCThreads sync_gc; + VMThread::execute(&sync_gc); + + log.after_handshake(); // After the handshake, safely free the ObjectMonitors that were // deflated and unlinked in this cycle. - deleted_count = delete_monitors(JavaThread::cast(current), &delete_list, ls, &timer); + + // Delete the unlinked ObjectMonitors. + deleted_count = delete_monitors(&delete_list, &safepointer); assert(unlinked_count == deleted_count, "must be"); } - if (ls != nullptr) { - timer.stop(); - if (deflated_count != 0 || unlinked_count != 0 || log_is_enabled(Debug, monitorinflation)) { - ls->print_cr("deflated_count=" SIZE_FORMAT ", {unlinked,deleted}_count=" SIZE_FORMAT " monitors in %3.7f secs", - deflated_count, unlinked_count, timer.seconds()); - } - ls->print_cr("end deflating: in_use_list stats: ceiling=" SIZE_FORMAT ", count=" SIZE_FORMAT ", max=" SIZE_FORMAT, - in_use_list_ceiling(), _in_use_list.count(), _in_use_list.max()); - } + log.end(deflated_count, unlinked_count); OM_PERFDATA_OP(MonExtant, set_value(_in_use_list.count())); OM_PERFDATA_OP(Deflations, inc(deflated_count)); diff --git a/src/hotspot/share/runtime/synchronizer.hpp b/src/hotspot/share/runtime/synchronizer.hpp index 4dea13432e78e..b2315ac8d2449 100644 --- a/src/hotspot/share/runtime/synchronizer.hpp +++ b/src/hotspot/share/runtime/synchronizer.hpp @@ -34,6 +34,7 @@ template class GrowableArray; class LogStream; class ObjectMonitor; +class ObjectMonitorDeflationSafepointer; class ThreadsList; class MonitorList { @@ -46,9 +47,9 @@ class MonitorList { public: void add(ObjectMonitor* monitor); - size_t unlink_deflated(Thread* current, LogStream* ls, elapsedTimer* timer_p, - size_t deflated_count, - GrowableArray* unlinked_list); + size_t unlink_deflated(size_t deflated_count, + GrowableArray* unlinked_list, + ObjectMonitorDeflationSafepointer* safepointer); size_t count() const; size_t max() const; @@ -67,6 +68,7 @@ class MonitorList::Iterator { class ObjectSynchronizer : AllStatic { friend class VMStructs; + friend class ObjectMonitorDeflationLogging; public: typedef enum { @@ -148,10 +150,7 @@ class ObjectSynchronizer : AllStatic { static size_t deflate_idle_monitors(); // Deflate idle monitors: - static void chk_for_block_req(JavaThread* current, const char* op_name, - const char* cnt_name, size_t cnt, LogStream* ls, - elapsedTimer* timer_p); - static size_t deflate_monitor_list(Thread* current, LogStream* ls, elapsedTimer* timer_p); + static size_t deflate_monitor_list(ObjectMonitorDeflationSafepointer* safepointer); static size_t in_use_list_ceiling(); static void dec_in_use_list_ceiling(); static void inc_in_use_list_ceiling(); From 04ad98ed32cf899404a3ae13e24407e53be7ebc6 Mon Sep 17 00:00:00 2001 From: Jim Laskey Date: Thu, 30 Nov 2023 12:49:49 +0000 Subject: [PATCH 137/250] 8315458: Implement JEP 463: Implicitly Declared Classes and Instance Main Method (Second Preview) Reviewed-by: jlahoda, mcimadamore, vromero, rriggs, alanb, mchung --- .../share/classes/java/lang/Class.java | 78 +++----- .../share/classes/java/lang/System.java | 3 + .../jdk/internal/access/JavaLangAccess.java | 5 + .../jdk/internal/javac/PreviewFeature.java | 4 +- .../jdk/internal/misc/MainMethodFinder.java | 169 ------------------ .../jdk/internal/misc/MethodFinder.java | 108 +++++++++++ .../classes/sun/launcher/LauncherHelper.java | 82 +++------ .../launcher/resources/launcher.properties | 19 +- src/java.base/share/native/libjli/java.c | 151 +++++++++------- .../javax/annotation/processing/Filer.java | 22 ++- .../javax/lang/model/element/TypeElement.java | 23 +-- .../com/sun/tools/javac/code/ClassFinder.java | 3 - .../com/sun/tools/javac/code/Flags.java | 6 +- .../com/sun/tools/javac/code/Preview.java | 2 +- .../com/sun/tools/javac/code/Source.java | 2 +- .../com/sun/tools/javac/code/Symbol.java | 14 +- .../com/sun/tools/javac/comp/Attr.java | 2 +- .../com/sun/tools/javac/comp/Check.java | 5 +- .../com/sun/tools/javac/comp/Enter.java | 2 +- .../com/sun/tools/javac/jvm/ClassReader.java | 8 - .../com/sun/tools/javac/launcher/Main.java | 29 +-- .../sun/tools/javac/parser/JavacParser.java | 43 +++-- .../javac/processing/PrintingProcessor.java | 17 +- .../tools/javac/resources/compiler.properties | 12 +- .../com/sun/tools/javac/tree/TreeMaker.java | 2 +- .../javadoc/internal/tool/ElementsTable.java | 2 +- .../internal/tool/ToolEnvironment.java | 4 - .../Class/UnnamedClass/TestUnnamedClass.java | 93 ---------- test/jdk/tools/launcher/Arrrghs.java | 10 +- test/jdk/tools/launcher/InstanceMainTest.java | 12 +- .../modules/basic/LauncherErrors.java | 7 +- .../{TestUnnamed.java => TestImplicit.java} | 10 +- .../tools/javac/ImplicitClass/Implicit.java} | 4 +- .../ImplicitClassRecovery.java} | 2 +- .../ImplicitClass/ImplicitClassRecovery.out | 4 + .../javac/ImplicitClass/NestedClasses.java | 109 +++++++++++ .../NestedEnum.java | 0 .../SourceLevelErrorPosition.java | 2 +- .../SourceLevelErrorPosition.out | 2 +- .../ImplicitClass/TestImplicitClass.java | 91 ++++++++++ .../{UnnamedClass.java => ImplicitClass.java} | 2 +- ...me.java => ImplicitClassBad-Filename.java} | 0 ...kage.java => ImplicitClassHasPackage.java} | 4 +- ...ssNoMain.java => ImplicitClassNoMain.java} | 2 +- .../javac/launcher/SourceLauncherTest.java | 4 +- .../tools/javac/parser/JavacParserTest.java | 2 +- ...namedClass.java => TestImplicitClass.java} | 95 +++++----- .../javac/unnamed/UnnamedClassRecovery.out | 4 - 48 files changed, 612 insertions(+), 664 deletions(-) delete mode 100644 src/java.base/share/classes/jdk/internal/misc/MainMethodFinder.java create mode 100644 src/java.base/share/classes/jdk/internal/misc/MethodFinder.java delete mode 100644 test/jdk/java/lang/Class/UnnamedClass/TestUnnamedClass.java rename test/langtools/jdk/javadoc/doclet/testUnnamed/{TestUnnamed.java => TestImplicit.java} (91%) rename test/{jdk/java/lang/Class/UnnamedClass/Unnamed.java => langtools/tools/javac/ImplicitClass/Implicit.java} (95%) rename test/langtools/tools/javac/{unnamed/UnnamedClassRecovery.java => ImplicitClass/ImplicitClassRecovery.java} (53%) create mode 100644 test/langtools/tools/javac/ImplicitClass/ImplicitClassRecovery.out create mode 100644 test/langtools/tools/javac/ImplicitClass/NestedClasses.java rename test/langtools/tools/javac/{unnamedclass => ImplicitClass}/NestedEnum.java (100%) rename test/langtools/tools/javac/{unnamedclass => ImplicitClass}/SourceLevelErrorPosition.java (74%) rename test/langtools/tools/javac/{unnamedclass => ImplicitClass}/SourceLevelErrorPosition.out (55%) create mode 100644 test/langtools/tools/javac/ImplicitClass/TestImplicitClass.java rename test/langtools/tools/javac/diags/examples/{UnnamedClass.java => ImplicitClass.java} (96%) rename test/langtools/tools/javac/diags/examples/{UnnamedClassBad-Filename.java => ImplicitClassBad-Filename.java} (100%) rename test/langtools/tools/javac/diags/examples/{UnnamedClassHasPackage.java => ImplicitClassHasPackage.java} (92%) rename test/langtools/tools/javac/diags/examples/{UnnamedClassNoMain.java => ImplicitClassNoMain.java} (95%) rename test/langtools/tools/javac/processing/model/element/{TestUnnamedClass.java => TestImplicitClass.java} (61%) delete mode 100644 test/langtools/tools/javac/unnamed/UnnamedClassRecovery.out diff --git a/src/java.base/share/classes/java/lang/Class.java b/src/java.base/share/classes/java/lang/Class.java index c95aa764ee6bf..766509f1f2315 100644 --- a/src/java.base/share/classes/java/lang/Class.java +++ b/src/java.base/share/classes/java/lang/Class.java @@ -190,30 +190,21 @@ * a class or interface is hidden has no bearing on the characteristics * exposed by the methods of class {@code Class}. * - *

    Unnamed Classes

    - * - * A {@code class} file representing an {@linkplain #isUnnamedClass unnamed class} - * is generated by a Java compiler from a source file for an unnamed class. - * The {@code Class} object representing an unnamed class is top-level, - * {@linkplain #isSynthetic synthetic}, and {@code final}. While an - * unnamed class does not have a name in its Java source - * form, several of the name-related methods of {@code java.lang.Class} - * do return non-null and non-empty results for the {@code Class} - * object representing an unnamed class. + *

    Implicit Classes

    * * Conventionally, a Java compiler, starting from a source file for an - * unnamed class, say {@code HelloWorld.java}, creates a + * implicit class, say {@code HelloWorld.java}, creates a * similarly-named {@code class} file, {@code HelloWorld.class}, where * the class stored in that {@code class} file is named {@code * "HelloWorld"}, matching the base names of the source and {@code * class} files. * - * For the {@code Class} object of an unnamed class {@code + * For the {@code Class} object of an implicit class {@code * HelloWorld}, the methods to get the {@linkplain #getName name} and * {@linkplain #getTypeName type name} return results * equal to {@code "HelloWorld"}. The {@linkplain #getSimpleName - * simple name} of such an unnamed class is the empty string and the - * {@linkplain #getCanonicalName canonical name} is {@code null}. + * simple name} of such an implicit class is {@code "HelloWorld"} and the + * {@linkplain #getCanonicalName canonical name} is {@code "HelloWorld"}. * * @param the type of the class modeled by this {@code Class} * object. For example, the type of {@code String.class} is {@code @@ -1809,7 +1800,7 @@ public Class getEnclosingClass() throws SecurityException { /** * Returns the simple name of the underlying class as given in the * source code. An empty string is returned if the underlying class is - * {@linkplain #isAnonymousClass() anonymous} or {@linkplain #isUnnamedClass() unnamed}. + * {@linkplain #isAnonymousClass() anonymous}. * A {@linkplain #isSynthetic() synthetic class}, one not present * in source code, can have a non-empty name including special * characters, such as "{@code $}". @@ -1822,9 +1813,6 @@ public Class getEnclosingClass() throws SecurityException { * @since 1.5 */ public String getSimpleName() { - if (isUnnamedClass()) { - return ""; - } ReflectionData rd = reflectionData(); String simpleName = rd.simpleName; if (simpleName == null) { @@ -1874,7 +1862,6 @@ public String getTypeName() { *
      *
    • a {@linkplain #isLocalClass() local class} *
    • a {@linkplain #isAnonymousClass() anonymous class} - *
    • an {@linkplain #isUnnamedClass() unnamed class} *
    • a {@linkplain #isHidden() hidden class} *
    • an array whose component type does not have a canonical name
    • *
    @@ -1894,9 +1881,6 @@ public String getTypeName() { * @since 1.5 */ public String getCanonicalName() { - if (isUnnamedClass()) { - return null; - } ReflectionData rd = reflectionData(); String canonicalName = rd.canonicalName; if (canonicalName == null) { @@ -1931,33 +1915,12 @@ private String getCanonicalName0() { } } - /** - * {@return {@code true} if and only if the underlying class - * is an unnamed class} - * - * @apiNote - * An unnamed class is not an {@linkplain #isAnonymousClass anonymous class}. - * - * @since 21 - * - * @jls 7.3 Compilation Units - */ - @PreviewFeature(feature=PreviewFeature.Feature.UNNAMED_CLASSES, - reflective=true) - public boolean isUnnamedClass() { - return PreviewFeatures.isEnabled() && isSynthetic() - && isTopLevelClass() - && Modifier.isFinal(getModifiers()); - } - - /** * Returns {@code true} if and only if the underlying class * is an anonymous class. * * @apiNote * An anonymous class is not a {@linkplain #isHidden() hidden class}. - * An anonymous class is not an {@linkplain #isUnnamedClass() unnamed class}. * * @return {@code true} if and only if this class is an anonymous class. * @since 1.5 @@ -2922,6 +2885,21 @@ List getDeclaredPublicMethods(String name, Class... parameterTypes) { return result; } + /** + * Returns the most specific {@code Method} object of this class, super class or + * interface that have the specified method name and parameter types. + * + * @param publicOnly true if only public methods are examined, otherwise all methods + * @param name the name of the method + * @param parameterTypes the parameter array + * @return the {@code Method} object for the method found from this class matching + * the specified name and parameters, or null if not found + */ + Method findMethod(boolean publicOnly, String name, Class... parameterTypes) { + PublicMethods.MethodList res = getMethodsRecursive(name, parameterTypes, true, publicOnly); + return res == null ? null : getReflectionFactory().copyMethod(res.getMostSpecific()); + } + /** * Returns a {@code Constructor} object that reflects the specified * constructor of the class represented by this @@ -3750,7 +3728,7 @@ private Method getMethod0(String name, Class[] parameterTypes) { PublicMethods.MethodList res = getMethodsRecursive( name, parameterTypes == null ? EMPTY_CLASS_ARRAY : parameterTypes, - /* includeStatic */ true); + /* includeStatic */ true, /* publicOnly */ true); return res == null ? null : res.getMostSpecific(); } @@ -3759,9 +3737,10 @@ private Method getMethod0(String name, Class[] parameterTypes) { // via ReflectionFactory.copyMethod. private PublicMethods.MethodList getMethodsRecursive(String name, Class[] parameterTypes, - boolean includeStatic) { - // 1st check declared public methods - Method[] methods = privateGetDeclaredMethods(/* publicOnly */ true); + boolean includeStatic, + boolean publicOnly) { + // 1st check declared methods + Method[] methods = privateGetDeclaredMethods(publicOnly); PublicMethods.MethodList res = PublicMethods.MethodList .filter(methods, name, parameterTypes, includeStatic); // if there is at least one match among declared methods, we need not @@ -3775,15 +3754,14 @@ private PublicMethods.MethodList getMethodsRecursive(String name, // we must consult the superclass (if any) recursively... Class sc = getSuperclass(); if (sc != null) { - res = sc.getMethodsRecursive(name, parameterTypes, includeStatic); + res = sc.getMethodsRecursive(name, parameterTypes, includeStatic, publicOnly); } // ...and coalesce the superclass methods with methods obtained // from directly implemented interfaces excluding static methods... for (Class intf : getInterfaces(/* cloneArray */ false)) { res = PublicMethods.MethodList.merge( - res, intf.getMethodsRecursive(name, parameterTypes, - /* includeStatic */ false)); + res, intf.getMethodsRecursive(name, parameterTypes, /* includeStatic */ false, publicOnly)); } return res; diff --git a/src/java.base/share/classes/java/lang/System.java b/src/java.base/share/classes/java/lang/System.java index 6c7de7c779879..0c10079316722 100644 --- a/src/java.base/share/classes/java/lang/System.java +++ b/src/java.base/share/classes/java/lang/System.java @@ -2345,6 +2345,9 @@ private static void setJavaLangAccess() { public List getDeclaredPublicMethods(Class klass, String name, Class... parameterTypes) { return klass.getDeclaredPublicMethods(name, parameterTypes); } + public Method findMethod(Class klass, boolean publicOnly, String name, Class... parameterTypes) { + return klass.findMethod(publicOnly, name, parameterTypes); + } public jdk.internal.reflect.ConstantPool getConstantPool(Class klass) { return klass.getConstantPool(); } diff --git a/src/java.base/share/classes/jdk/internal/access/JavaLangAccess.java b/src/java.base/share/classes/jdk/internal/access/JavaLangAccess.java index f3ea43f17aa8c..93815009a543f 100644 --- a/src/java.base/share/classes/jdk/internal/access/JavaLangAccess.java +++ b/src/java.base/share/classes/jdk/internal/access/JavaLangAccess.java @@ -65,6 +65,11 @@ public interface JavaLangAccess { */ List getDeclaredPublicMethods(Class klass, String name, Class... parameterTypes); + /** + * Return most specific method that matches name and parameterTypes. + */ + Method findMethod(Class klass, boolean publicOnly, String name, Class... parameterTypes); + /** * Return the constant pool for a class. */ diff --git a/src/java.base/share/classes/jdk/internal/javac/PreviewFeature.java b/src/java.base/share/classes/jdk/internal/javac/PreviewFeature.java index e9a9fdeb138e7..f7ce449b981c5 100644 --- a/src/java.base/share/classes/jdk/internal/javac/PreviewFeature.java +++ b/src/java.base/share/classes/jdk/internal/javac/PreviewFeature.java @@ -69,8 +69,10 @@ public enum Feature { FOREIGN, @JEP(number=459, title="String Templates", status="Second Preview") STRING_TEMPLATES, - @JEP(number=445, title="Unnamed Classes and Instance Main Methods") + @JEP(number=445, title="Unnamed Classes and Instance Main Methods", status="Deprecated") UNNAMED_CLASSES, + @JEP(number=463, title="Implicit Classes and Instance Main Methods", status="Preview") + IMPLICIT_CLASSES, @JEP(number=446, title="Scoped Values", status="Preview") SCOPED_VALUES, @JEP(number=453, title="Structured Concurrency", status="Preview") diff --git a/src/java.base/share/classes/jdk/internal/misc/MainMethodFinder.java b/src/java.base/share/classes/jdk/internal/misc/MainMethodFinder.java deleted file mode 100644 index be4ebc38238d4..0000000000000 --- a/src/java.base/share/classes/jdk/internal/misc/MainMethodFinder.java +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package jdk.internal.misc; - -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.util.ArrayList; -import java.util.List; - -public class MainMethodFinder { - private static boolean correctArgs(Method method) { - int argc = method.getParameterCount(); - - return argc == 0 || argc == 1 && method.getParameterTypes()[0] == String[].class; - } - - /** - * Gather all the "main" methods in the class hierarchy. - * - * @param refc the main class or super class - * @param mains accumulated main methods - * @param isMainClass the class is the main class and not a super class - */ - private static void gatherMains(Class refc, List mains, boolean isMainClass) { - if (refc != null && refc != Object.class) { - for (Method method : refc.getDeclaredMethods()) { - int mods = method.getModifiers(); - // Must be named "main", public|protected|package-private, not synthetic (bridge) and either - // no arguments or one string array argument. Only statics in the Main class are acceptable. - if ("main".equals(method.getName()) && - !method.isSynthetic() && - !Modifier.isPrivate(mods) && - correctArgs(method) && - (isMainClass || !Modifier.isStatic(mods))) - { - mains.add(method); - } - } - - gatherMains(refc.getSuperclass(), mains, false); - } - } - - /** - * Comparator for two methods. - * Priority order is; - * sub-class < super-class. - * static < non-static, - * string arg < no arg and - * - * @param a first method - * @param b second method - * - * @return -1, 0 or 1 to represent higher priority. equals priority or lesser priority. - */ - private static int compareMethods(Method a, Method b) { - Class aClass = a.getDeclaringClass(); - Class bClass = b.getDeclaringClass(); - - if (aClass != bClass) { - if (bClass.isAssignableFrom(aClass)) { - return -1; - } else { - return 1; - } - } - - int aMods = a.getModifiers(); - int bMods = b.getModifiers(); - boolean aIsStatic = Modifier.isStatic(aMods); - boolean bIsStatic = Modifier.isStatic(bMods); - - if (aIsStatic && !bIsStatic) { - return -1; - } else if (!aIsStatic && bIsStatic) { - return 1; - } - - int aCount = a.getParameterCount(); - int bCount = b.getParameterCount(); - - if (bCount < aCount) { - return -1; - } else if (aCount < bCount) { - return 1; - } - - return 0; - } - - /** - * Return the traditional main method or null if not found. - * - * @param mainClass main class - * - * @return main method or null - */ - private static Method getTraditionalMain(Class mainClass) { - try { - Method traditionalMain = mainClass.getMethod("main", String[].class); - int mods = traditionalMain.getModifiers(); - - if (Modifier.isStatic(mods) && Modifier.isPublic(mods) && traditionalMain.getReturnType() == void.class) { - return traditionalMain; - } - } catch (NoSuchMethodException ex) { - // not found - } - - return null; - } - - /** - * {@return priority main method if none found} - * - * @param mainClass main class - * - * @throws NoSuchMethodException when not preview and no method found - */ - public static Method findMainMethod(Class mainClass) throws NoSuchMethodException { - boolean isTraditionMain = !PreviewFeatures.isEnabled(); - if (isTraditionMain) { - return mainClass.getMethod("main", String[].class); - } - - List mains = new ArrayList<>(); - gatherMains(mainClass, mains, true); - - if (mains.isEmpty()) { - throw new NoSuchMethodException("No main method found"); - } - - if (1 < mains.size()) { - mains.sort(MainMethodFinder::compareMethods); - } - - Method mainMethod = mains.get(0); - Method traditionalMain = getTraditionalMain(mainClass); - - if (traditionalMain != null && !traditionalMain.equals(mainMethod)) { - System.err.println("WARNING: \"" + mains.get(0) + "\" chosen over \"" + traditionalMain + "\""); - } - - return mains.get(0); - } -} diff --git a/src/java.base/share/classes/jdk/internal/misc/MethodFinder.java b/src/java.base/share/classes/jdk/internal/misc/MethodFinder.java new file mode 100644 index 0000000000000..970cebe74ed34 --- /dev/null +++ b/src/java.base/share/classes/jdk/internal/misc/MethodFinder.java @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package jdk.internal.misc; + +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; + +import jdk.internal.access.JavaLangAccess; +import jdk.internal.access.SharedSecrets; + +/** + * A collection of static methods that return specific method objects of interest. + */ +public class MethodFinder { + + private static final JavaLangAccess JLA = SharedSecrets.getJavaLangAccess(); + + private MethodFinder() { + throw new AssertionError("private constructor"); + } + + /** + * Return the first method that meets the requirements of an application main method + * {@jls 12.1.4}. The method must: + *
      + *
    • be declared in this class's hierarchy
    • + *
    • have the name "main"
    • + *
    • have a single argument of type {@code String[]}, {@code String...} or no argument
    • + *
    • have the return type of void
    • + *
    • be public, protected or package private
    • + *
    • not be abstract
    • + *
    + * + * The method returned would be used by a launcher to initiate the execution of an + * application. + * + * Searching continues until a main method is found or the search is exhausted. The + * primary search occurs in two phases, once for a main method with a {@code + * String[]} or {@code String...} argument and failing that, once for a main method + * with a no arguments. The search itself uses recursion to first look at methods + * in this class, then default methods in this class's interface hierarchy and + * then repeating these steps with the class's super class. + * + * @apiNote The method returned may be declared in this class, a super class + * or as a default method of an interface that the class or super class + * implements. + *

    It is not possible to declare a static main method and instance main + * method with the same signature in the same class. {@jls 8.4.2} states that + * "It is a compile-time error to declare two methods with override-equivalent + * signatures in a class." + *

    {@link SecurityException SecurityExceptions} can halt + * the search. In this case, a null is returned. + * + * @return the main method if a method found or null if no method is found + * + * @jls 8.2 Class Members + * @jls 8.4 Method Declarations + * @jls 8.4.2 Method Signature + * @jls 12.1.4 Invoke a main method + */ + public static Method findMainMethod(Class cls) { + boolean isPreview = PreviewFeatures.isEnabled(); + Method mainMethod = JLA.findMethod(cls, !isPreview, "main", String[].class); + + if (isPreview && mainMethod == null) { + mainMethod = JLA.findMethod(cls, false, "main"); + } + + if (mainMethod == null) { + return null; + } + + int mods = mainMethod.getModifiers(); + + if (Modifier.isAbstract(mods) || + mainMethod.getReturnType() != void.class || + (isPreview && Modifier.isPrivate(mods)) || + (!isPreview && !Modifier.isStatic(mods))) { + return null; + } + + return mainMethod; + } + +} diff --git a/src/java.base/share/classes/sun/launcher/LauncherHelper.java b/src/java.base/share/classes/sun/launcher/LauncherHelper.java index 05f797da70f4a..5cda08f60095a 100644 --- a/src/java.base/share/classes/sun/launcher/LauncherHelper.java +++ b/src/java.base/share/classes/sun/launcher/LauncherHelper.java @@ -71,7 +71,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -import jdk.internal.misc.MainMethodFinder; +import jdk.internal.misc.MethodFinder; import jdk.internal.misc.PreviewFeatures; import jdk.internal.misc.VM; import jdk.internal.module.ModuleBootstrap; @@ -709,7 +709,7 @@ static void abort(Throwable t, String msgKey, Object... args) { /** * This method: * 1. Loads the main class from the module or class path - * 2. Checks the public static void main method. + * 2. Checks for a valid main method. * 3. If the main class extends FX Application then call on FXHelper to * perform the launch. * @@ -753,7 +753,7 @@ public static Class checkAndLoadMain(boolean printToStderr, mainClass = FXHelper.class; } - validateMainClass(mainClass); + validateMainMethod(mainClass); return mainClass; } @@ -859,7 +859,7 @@ private static Class loadMainClass(int mode, String what) { } } } catch (LinkageError le) { - abort(le, "java.launcher.cls.error6", cn, + abort(le, "java.launcher.cls.error4", cn, le.getClass().getName() + ": " + le.getLocalizedMessage()); } return mainClass; @@ -890,54 +890,28 @@ private static boolean doesExtendFXApplication(Class mainClass) { return false; } - /* - * main type flags - */ - private static final int MAIN_WITHOUT_ARGS = 1; - private static final int MAIN_NONSTATIC = 2; - private static int mainType = 0; - - /* - * Return type so that launcher invokes the correct main - */ - public static int getMainType() { - return mainType; - } - - private static void setMainType(Method mainMethod) { - int mods = mainMethod.getModifiers(); - boolean isStatic = Modifier.isStatic(mods); - boolean noArgs = mainMethod.getParameterCount() == 0; - mainType = (isStatic ? 0 : MAIN_NONSTATIC) | (noArgs ? MAIN_WITHOUT_ARGS : 0); - } - - // Check the existence and signature of main and abort if incorrect - static void validateMainClass(Class mainClass) { + // Check the existence and signature of main and abort if incorrect. + private static void validateMainMethod(Class mainClass) { Method mainMethod = null; try { - mainMethod = MainMethodFinder.findMainMethod(mainClass); - } catch (NoSuchMethodException nsme) { - // invalid main or not FX application, abort with an error - abort(null, "java.launcher.cls.error4", mainClass.getName(), - JAVAFX_APPLICATION_CLASS_NAME); + mainMethod = MethodFinder.findMainMethod(mainClass); + + if (mainMethod == null) { + // invalid main or not FX application, abort with an error + abort(null, "java.launcher.cls.error2", mainClass.getName(), + JAVAFX_APPLICATION_CLASS_NAME); + } } catch (Throwable e) { if (mainClass.getModule().isNamed()) { - abort(e, "java.launcher.module.error5", + abort(e, "java.launcher.module.error3", mainClass.getName(), mainClass.getModule().getName(), e.getClass().getName(), e.getLocalizedMessage()); } else { - abort(e, "java.launcher.cls.error7", mainClass.getName(), + abort(e, "java.launcher.cls.error5", mainClass.getName(), e.getClass().getName(), e.getLocalizedMessage()); } } - setMainType(mainMethod); - - /* - * findMainMethod (above) will choose the correct method, based - * on its name and parameter type, however, we still have to - * ensure that the method is static (non-preview) and returns a void. - */ int mods = mainMethod.getModifiers(); boolean isStatic = Modifier.isStatic(mods); boolean isPublic = Modifier.isPublic(mods); @@ -945,32 +919,26 @@ static void validateMainClass(Class mainClass) { if (!PreviewFeatures.isEnabled()) { if (!isStatic || !isPublic || noArgs) { - abort(null, "java.launcher.cls.error2", "static", - mainMethod.getDeclaringClass().getName()); + abort(null, "java.launcher.cls.error2", mainClass.getName(), + JAVAFX_APPLICATION_CLASS_NAME); } + return; } if (!isStatic) { + String className = mainMethod.getDeclaringClass().getName(); if (mainClass.isMemberClass() && !Modifier.isStatic(mainClass.getModifiers())) { - abort(null, "java.launcher.cls.error9", - mainMethod.getDeclaringClass().getName()); + abort(null, "java.launcher.cls.error7", className); } try { Constructor constructor = mainClass.getDeclaredConstructor(); if (Modifier.isPrivate(constructor.getModifiers())) { - abort(null, "java.launcher.cls.error8", - mainMethod.getDeclaringClass().getName()); + abort(null, "java.launcher.cls.error6", className); } } catch (Throwable ex) { - abort(null, "java.launcher.cls.error8", - mainMethod.getDeclaringClass().getName()); + abort(null, "java.launcher.cls.error6", className); } } - - if (mainMethod.getReturnType() != java.lang.Void.TYPE) { - abort(null, "java.launcher.cls.error3", - mainMethod.getDeclaringClass().getName()); - } } private static final String encprop = "sun.jnu.encoding"; @@ -1122,13 +1090,13 @@ private static void setFXLaunchParameters(String what, int mode) { // find the module with the FX launcher Optional om = ModuleLayer.boot().findModule(JAVAFX_GRAPHICS_MODULE_NAME); if (om.isEmpty()) { - abort(null, "java.launcher.cls.error5"); + abort(null, "java.launcher.cls.error3"); } // load the FX launcher class fxLauncherClass = Class.forName(om.get(), JAVAFX_LAUNCHER_CLASS_NAME); if (fxLauncherClass == null) { - abort(null, "java.launcher.cls.error5"); + abort(null, "java.launcher.cls.error3"); } try { @@ -1149,7 +1117,7 @@ private static void setFXLaunchParameters(String what, int mode) { abort(null, "java.launcher.javafx.error1"); } } catch (NoSuchMethodException ex) { - abort(ex, "java.launcher.cls.error5", ex); + abort(ex, "java.launcher.cls.error3", ex); } fxLaunchName = what; diff --git a/src/java.base/share/classes/sun/launcher/resources/launcher.properties b/src/java.base/share/classes/sun/launcher/resources/launcher.properties index 219f0d977b556..6bea2e1f51f00 100644 --- a/src/java.base/share/classes/sun/launcher/resources/launcher.properties +++ b/src/java.base/share/classes/sun/launcher/resources/launcher.properties @@ -238,29 +238,22 @@ java.launcher.cls.error1=\ Error: Could not find or load main class {0}\n\ Caused by: {1}: {2} java.launcher.cls.error2=\ - Error: Main method is not {0} in class {1}, please define the main method as:\n\ -\ public static void main(String[] args) -java.launcher.cls.error3=\ - Error: Main method must return a value of type void in class {0}, please \n\ - define the main method as:\n\ -\ public static void main(String[] args) -java.launcher.cls.error4=\ Error: Main method not found in class {0}, please define the main method as:\n\ \ public static void main(String[] args)\n\ or a JavaFX application class must extend {1} -java.launcher.cls.error5=\ +java.launcher.cls.error3=\ Error: JavaFX runtime components are missing, and are required to run this application -java.launcher.cls.error6=\ +java.launcher.cls.error4=\ Error: LinkageError occurred while loading main class {0}\n\ \t{1} -java.launcher.cls.error7=\ +java.launcher.cls.error5=\ Error: Unable to initialize main class {0}\n\ Caused by: {1}: {2} -java.launcher.cls.error8=\ +java.launcher.cls.error6=\ Error: no non-private zero argument constructor found in class {0}\n\ remove private from existing constructor or define as:\n\ \ public {0}() -java.launcher.cls.error9=\ +java.launcher.cls.error7=\ Error: non-static inner class {0} constructor can not be invoked \n\ make inner class static or move inner class out to separate source file java.launcher.jar.error1=\ @@ -280,7 +273,7 @@ java.launcher.module.error2=\ Error: Could not find or load main class {0} in module {1} java.launcher.module.error3=\ Error: Unable to load main class {0} in module {1}\n\ - \t{2} + Caused by: {2} java.launcher.module.error4=\ {0} not found java.launcher.module.error5=\ diff --git a/src/java.base/share/native/libjli/java.c b/src/java.base/share/native/libjli/java.c index 2f9d0718e934e..fbc9ecb1c4e21 100644 --- a/src/java.base/share/native/libjli/java.c +++ b/src/java.base/share/native/libjli/java.c @@ -387,6 +387,84 @@ JLI_Launch(int argc, char ** argv, /* main argc, argv */ } \ } while (JNI_FALSE) +#define CHECK_EXCEPTION_FAIL() \ + do { \ + if ((*env)->ExceptionOccurred(env)) { \ + (*env)->ExceptionClear(env); \ + return 0; \ + } \ + } while (JNI_FALSE) + + +#define CHECK_EXCEPTION_NULL_FAIL(mainObject) \ + do { \ + if ((*env)->ExceptionOccurred(env)) { \ + (*env)->ExceptionClear(env); \ + return 0; \ + } else if (mainObject == NULL) { \ + return 0; \ + } \ + } while (JNI_FALSE) + +/* + * Invoke a static main with arguments. Returns 1 (true) if successful otherwise + * processes the pending exception from GetStaticMethodID and returns 0 (false). + */ +int +invokeStaticMainWithArgs(JNIEnv *env, jclass mainClass, jobjectArray mainArgs) { + jmethodID mainID = (*env)->GetStaticMethodID(env, mainClass, "main", + "([Ljava/lang/String;)V"); + CHECK_EXCEPTION_FAIL(); + (*env)->CallStaticVoidMethod(env, mainClass, mainID, mainArgs); + return 1; +} + +/* + * Invoke an instance main with arguments. Returns 1 (true) if successful otherwise + * processes the pending exception from GetMethodID and returns 0 (false). + */ +int +invokeInstanceMainWithArgs(JNIEnv *env, jclass mainClass, jobjectArray mainArgs) { + jmethodID constructor = (*env)->GetMethodID(env, mainClass, "", "()V"); + CHECK_EXCEPTION_FAIL(); + jobject mainObject = (*env)->NewObject(env, mainClass, constructor); + CHECK_EXCEPTION_NULL_FAIL(mainObject); + jmethodID mainID = (*env)->GetMethodID(env, mainClass, "main", + "([Ljava/lang/String;)V"); + CHECK_EXCEPTION_FAIL(); + (*env)->CallVoidMethod(env, mainObject, mainID, mainArgs); + return 1; + } + +/* + * Invoke a static main without arguments. Returns 1 (true) if successful otherwise + * processes the pending exception from GetStaticMethodID and returns 0 (false). + */ +int +invokeStaticMainWithoutArgs(JNIEnv *env, jclass mainClass) { + jmethodID mainID = (*env)->GetStaticMethodID(env, mainClass, "main", + "()V"); + CHECK_EXCEPTION_FAIL(); + (*env)->CallStaticVoidMethod(env, mainClass, mainID); + return 1; +} + +/* + * Invoke an instance main without arguments. Returns 1 (true) if successful otherwise + * processes the pending exception from GetMethodID and returns 0 (false). + */ +int +invokeInstanceMainWithoutArgs(JNIEnv *env, jclass mainClass) { + jmethodID constructor = (*env)->GetMethodID(env, mainClass, "", "()V"); + CHECK_EXCEPTION_FAIL(); + jobject mainObject = (*env)->NewObject(env, mainClass, constructor); + CHECK_EXCEPTION_NULL_FAIL(mainObject); + jmethodID mainID = (*env)->GetMethodID(env, mainClass, "main", + "()V"); + CHECK_EXCEPTION_FAIL(); + (*env)->CallVoidMethod(env, mainObject, mainID); + return 1; +} int JavaMain(void* _args) @@ -403,9 +481,6 @@ JavaMain(void* _args) jclass mainClass = NULL; jclass appClass = NULL; // actual application class being launched jobjectArray mainArgs; - jmethodID mainID; - jmethodID constructor; - jobject mainObject; int ret = 0; jlong start = 0, end = 0; @@ -491,9 +566,6 @@ JavaMain(void* _args) ret = 1; /* - * Get the application's main class. It also checks if the main - * method exists. - * * See bugid 5030265. The Main-Class name has already been parsed * from the manifest, but not parsed properly for UTF-8 support. * Hence the code here ignores the value previously extracted and @@ -523,7 +595,7 @@ JavaMain(void* _args) * consistent in the UI we need to track and report the application main class. */ appClass = GetApplicationClass(env); - NULL_CHECK_RETURN_VALUE(appClass, -1); + CHECK_EXCEPTION_NULL_LEAVE(appClass); /* Build platform specific argument array */ mainArgs = CreateApplicationArgs(env, argv, argc); @@ -545,59 +617,15 @@ JavaMain(void* _args) CHECK_EXCEPTION_LEAVE(1); /* - * The LoadMainClass not only loads the main class, it will also ensure - * that the main method's signature is correct, therefore further checking - * is not required. The main method is invoked here so that extraneous java - * stacks are not in the application stack trace. + * The main method is invoked here so that extraneous java stacks are not in + * the application stack trace. */ -#define MAIN_WITHOUT_ARGS 1 -#define MAIN_NONSTATIC 2 - - jclass helperClass = GetLauncherHelperClass(env); - jmethodID getMainType = (*env)->GetStaticMethodID(env, helperClass, - "getMainType", - "()I"); - CHECK_EXCEPTION_NULL_LEAVE(getMainType); - int mainType = (*env)->CallStaticIntMethod(env, helperClass, getMainType); - CHECK_EXCEPTION_LEAVE(mainType); - - switch (mainType) { - case 0: { - mainID = (*env)->GetStaticMethodID(env, mainClass, "main", - "([Ljava/lang/String;)V"); - CHECK_EXCEPTION_NULL_LEAVE(mainID); - (*env)->CallStaticVoidMethod(env, mainClass, mainID, mainArgs); - break; - } - case MAIN_WITHOUT_ARGS: { - mainID = (*env)->GetStaticMethodID(env, mainClass, "main", - "()V"); - CHECK_EXCEPTION_NULL_LEAVE(mainID); - (*env)->CallStaticVoidMethod(env, mainClass, mainID); - break; - } - case MAIN_NONSTATIC: { - constructor = (*env)->GetMethodID(env, mainClass, "", "()V"); - CHECK_EXCEPTION_NULL_LEAVE(constructor); - mainObject = (*env)->NewObject(env, mainClass, constructor); - CHECK_EXCEPTION_NULL_LEAVE(mainObject); - mainID = (*env)->GetMethodID(env, mainClass, "main", - "([Ljava/lang/String;)V"); - CHECK_EXCEPTION_NULL_LEAVE(mainID); - (*env)->CallVoidMethod(env, mainObject, mainID, mainArgs); - break; - } - case MAIN_NONSTATIC | MAIN_WITHOUT_ARGS: { - constructor = (*env)->GetMethodID(env, mainClass, "", "()V"); - CHECK_EXCEPTION_NULL_LEAVE(constructor); - mainObject = (*env)->NewObject(env, mainClass, constructor); - CHECK_EXCEPTION_NULL_LEAVE(mainObject); - mainID = (*env)->GetMethodID(env, mainClass, "main", - "()V"); - CHECK_EXCEPTION_NULL_LEAVE(mainID); - (*env)->CallVoidMethod(env, mainObject, mainID); - break; - } + if (!invokeStaticMainWithArgs(env, mainClass, mainArgs) && + !invokeInstanceMainWithArgs(env, mainClass, mainArgs) && + !invokeStaticMainWithoutArgs(env, mainClass) && + !invokeInstanceMainWithoutArgs(env, mainClass)) { + ret = 1; + LEAVE(); } /* @@ -1593,8 +1621,9 @@ NewPlatformStringArray(JNIEnv *env, char **strv, int strc) } /* - * Loads a class and verifies that the main class is present and it is ok to - * call it for more details refer to the java implementation. + * Calls LauncherHelper::checkAndLoadMain to verify that the main class + * is present, it is ok to load the main class and then load the main class. + * For more details refer to the java implementation. */ static jclass LoadMainClass(JNIEnv *env, int mode, char *name) diff --git a/src/java.compiler/share/classes/javax/annotation/processing/Filer.java b/src/java.compiler/share/classes/javax/annotation/processing/Filer.java index 9ebcf2c59084a..7487c1fb2361c 100644 --- a/src/java.compiler/share/classes/javax/annotation/processing/Filer.java +++ b/src/java.compiler/share/classes/javax/annotation/processing/Filer.java @@ -177,12 +177,11 @@ public interface Filer { *

    Creating a source file in or for an unnamed package in a named * module is not supported. * - *

    If the environment is configured to support {@linkplain - * TypeElement#isUnnamed unnamed classes}, the name argument is - * used to provide the leading component of the name used for the - * output file. For example {@code filer.createSourceFile("Foo")} - * to create an unnamed class hosted in {@code Foo.java}. All - * unnamed classes must be in an unnamed package. + *

    If the environment is configured to support implicitly declared + * classes, the name argument is used to provide the leading component of the + * name used for the output file. For example {@code filer.createSourceFile("Foo")} + * to create an implicitly declared class hosted in {@code Foo.java}. All + * implicit classes must be in an unnamed package. * * @apiNote To use a particular {@linkplain * java.nio.charset.Charset charset} to encode the contents of the @@ -263,12 +262,11 @@ JavaFileObject createSourceFile(CharSequence name, *

    Creating a class file in or for an unnamed package in a named * module is not supported. * - *

    If the environment is configured to support {@linkplain - * TypeElement#isUnnamed unnamed classes}, the name argument is - * used to provide the leading component of the name used for the - * output file. For example {@code filer.createClassFile("Foo")} to - * create an unnamed class hosted in {@code Foo.class}. All unnamed - * classes must be in an unnamed package. + *

    If the environment is configured to support implicitly declared + * classes, the name argument is used to provide the leading component of the + * name used for the output file. For example {@code filer.createSourceFile("Foo")} + * to create an implicitly declared class hosted in {@code Foo.java}. All + * implicit classes must be in an unnamed package. * * @apiNote To avoid subsequent errors, the contents of the class * file should be compatible with the {@linkplain diff --git a/src/java.compiler/share/classes/javax/lang/model/element/TypeElement.java b/src/java.compiler/share/classes/javax/lang/model/element/TypeElement.java index d430e33e59139..a8c3b91f8b504 100644 --- a/src/java.compiler/share/classes/javax/lang/model/element/TypeElement.java +++ b/src/java.compiler/share/classes/javax/lang/model/element/TypeElement.java @@ -155,7 +155,7 @@ public interface TypeElement extends Element, Parameterizable, QualifiedNameable /** * Returns the fully qualified name of this class or interface * element. More precisely, it returns the canonical name. - * For local, anonymous, and {@linkplain #isUnnamed() unnamed} classes, which do not have canonical + * For local, and anonymous classes, which do not have canonical * names, an {@linkplain Name##empty_name empty name} is * returned. * @@ -171,7 +171,6 @@ public interface TypeElement extends Element, Parameterizable, QualifiedNameable * * @see Elements#getBinaryName * @jls 6.7 Fully Qualified Names and Canonical Names - * @jls 7.3 Compilation Units */ Name getQualifiedName(); @@ -181,10 +180,6 @@ public interface TypeElement extends Element, Parameterizable, QualifiedNameable * For an anonymous class, an {@linkplain Name##empty_name empty * name} is returned. * - * For an {@linkplain #isUnnamed() unnamed} class, a name matching - * the base name of the hosting file, minus any extension, is - * returned. - * * @return the simple name of this class or interface, * an empty name for an anonymous class * @@ -192,22 +187,6 @@ public interface TypeElement extends Element, Parameterizable, QualifiedNameable @Override Name getSimpleName(); - /** - * {@return {@code true} if this is an unnamed class and {@code - * false} otherwise} - * - * @implSpec - * The default implementation of this method returns {@code false}. - * - * @jls 7.3 Compilation Units - * @since 21 - */ - @PreviewFeature(feature=PreviewFeature.Feature.UNNAMED_CLASSES, - reflective=true) - default boolean isUnnamed() { - return false; - } - /** * Returns the direct superclass of this class or interface element. * If this class or interface element represents an interface or the class diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/ClassFinder.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/ClassFinder.java index 56b692fb7ccff..770adbebc2ebf 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/ClassFinder.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/ClassFinder.java @@ -444,9 +444,6 @@ public ClassSymbol loadClass(ModuleSymbol msym, Name flatname) throws Completion if (c.members_field == null) { try { c.complete(); - if ((c.flags_field & UNNAMED_CLASS) != 0) { - syms.removeClass(ps.modle, flatname); - } } catch (CompletionFailure ex) { if (absent) { syms.removeClass(ps.modle, flatname); diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Flags.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Flags.java index 8856654aed349..c6b8f2cd44eea 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Flags.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Flags.java @@ -123,9 +123,9 @@ public static EnumSet asFlagSet(long flags) { */ public static final int HASINIT = 1<<18; - /** Class is a unnamed top level class. + /** Class is a implicit top level class. */ - public static final int UNNAMED_CLASS = 1<<19; + public static final int IMPLICIT_CLASS = 1<<19; /** Flag is set for compiler-generated anonymous method symbols * that `own' an initializer block. @@ -499,7 +499,7 @@ public enum Flag { ANNOTATION(Flags.ANNOTATION), DEPRECATED(Flags.DEPRECATED), HASINIT(Flags.HASINIT), - UNNAMED_CLASS(Flags.UNNAMED_CLASS), + IMPLICIT_CLASS(Flags.IMPLICIT_CLASS), BLOCK(Flags.BLOCK), FROM_SOURCE(Flags.FROM_SOURCE), ENUM(Flags.ENUM), diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Preview.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Preview.java index ad859bb45077f..3c696a3e65df7 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Preview.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Preview.java @@ -210,7 +210,7 @@ public boolean isEnabled() { public boolean isPreview(Feature feature) { return switch (feature) { case STRING_TEMPLATES -> true; - case UNNAMED_CLASSES -> true; + case IMPLICIT_CLASSES -> true; case SUPER_INIT -> true; //Note: this is a backdoor which allows to optionally treat all features as 'preview' (for testing). //When real preview features will be added, this method can be implemented to return 'true' diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Source.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Source.java index 0290f8bc75214..ffff623dc4fe5 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Source.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Source.java @@ -245,7 +245,7 @@ public enum Feature { UNCONDITIONAL_PATTERN_IN_INSTANCEOF(JDK21, Fragments.FeatureUnconditionalPatternsInInstanceof, DiagKind.PLURAL), RECORD_PATTERNS(JDK21, Fragments.FeatureDeconstructionPatterns, DiagKind.PLURAL), STRING_TEMPLATES(JDK21, Fragments.FeatureStringTemplates, DiagKind.PLURAL), - UNNAMED_CLASSES(JDK21, Fragments.FeatureUnnamedClasses, DiagKind.PLURAL), + IMPLICIT_CLASSES(JDK21, Fragments.FeatureImplicitClasses, DiagKind.PLURAL), WARN_ON_ILLEGAL_UTF8(MIN, JDK21), UNNAMED_VARIABLES(JDK22, Fragments.FeatureUnnamedVariables, DiagKind.PLURAL), SUPER_INIT(JDK22, Fragments.FeatureSuperInit, DiagKind.NORMAL), diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Symbol.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Symbol.java index b3dcde6c8cfb6..d583a86ca3f8d 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Symbol.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Symbol.java @@ -435,6 +435,10 @@ public boolean isFinal() { return (flags_field & FINAL) != 0; } + public boolean isImplicit() { + return (flags_field & IMPLICIT_CLASS) != 0; + } + /** Is this symbol declared (directly or indirectly) local * to a method or variable initializer? * Also includes fields of inner classes which are in @@ -1256,7 +1260,6 @@ public RootPackageSymbol(Name name, Symbol owner, /** A class for class symbols */ - @SuppressWarnings("preview") // isUnnamed() public static class ClassSymbol extends TypeSymbol implements TypeElement { /** a scope for all class members; variables, methods and inner classes @@ -1370,7 +1373,7 @@ public String className() { @Override @DefinedBy(Api.LANGUAGE_MODEL) public Name getQualifiedName() { - return isUnnamed() ? fullname.subName(0, 0) /* empty name */ : fullname; + return fullname; } @Override @DefinedBy(Api.LANGUAGE_MODEL) @@ -1551,7 +1554,7 @@ public void setRecordComponents(List recordComponents) { @DefinedBy(Api.LANGUAGE_MODEL) public NestingKind getNestingKind() { apiComplete(); - if (owner.kind == PCK) // Handles unnamed classes as well + if (owner.kind == PCK) // Handles implicit classes as well return NestingKind.TOP_LEVEL; else if (name.isEmpty()) return NestingKind.ANONYMOUS; @@ -1642,11 +1645,6 @@ public boolean isRecord() { public List getPermittedSubclasses() { return permitted.map(s -> s.type); } - - @Override @DefinedBy(Api.LANGUAGE_MODEL) - public boolean isUnnamed() { - return (flags_field & Flags.UNNAMED_CLASS) != 0 ; - } } diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java index b69c2156e1d86..567cf0a191f25 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java @@ -5507,7 +5507,7 @@ void attribClass(ClassSymbol c) throws CompletionFailure { chk.checkFunctionalInterface((JCClassDecl) env.tree, c); chk.checkLeaksNotAccessible(env, (JCClassDecl) env.tree); - if ((c.flags_field & Flags.UNNAMED_CLASS) != 0) { + if (c.isImplicit()) { chk.checkHasMain(env.tree.pos(), c); } } finally { diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java index ead1ecf3c633f..f9b228203d4ba 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java @@ -452,7 +452,8 @@ boolean checkUniqueClassName(DiagnosticPosition pos, Name name, Scope s) { } } for (Symbol sym = s.owner; sym != null; sym = sym.owner) { - if (sym.kind == TYP && sym.name == name && sym.name != names.error) { + if (sym.kind == TYP && sym.name == name && sym.name != names.error && + !sym.isImplicit()) { duplicateError(pos, sym); return true; } @@ -2276,7 +2277,7 @@ public void checkHasMain(DiagnosticPosition pos, ClassSymbol c) { } if (!found) { - log.error(pos, Errors.UnnamedClassDoesNotHaveMainMethod); + log.error(pos, Errors.ImplicitClassDoesNotHaveMainMethod); } } diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Enter.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Enter.java index 90d482438417f..7478ef1c907c8 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Enter.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Enter.java @@ -442,7 +442,7 @@ public void visitClassDef(JCClassDecl tree) { log.error(tree.pos(), Errors.ClassPublicShouldBeInFile(topElement, tree.name)); } - if ((tree.mods.flags & UNNAMED_CLASS) != 0) { + if ((tree.mods.flags & IMPLICIT_CLASS) != 0) { syms.removeClass(env.toplevel.modle, tree.name); } } else { diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java index 51486b997d3c3..8d12ba5ccaa56 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java @@ -3047,14 +3047,6 @@ private void readClassBuffer(ClassSymbol c) throws IOException { signatureBuffer = new byte[ns]; } readClass(c); - if (previewClassFile) { - if ((c.flags_field & SYNTHETIC) != 0 && - c.owner.kind == PCK && - (c.flags_field & AUXILIARY) == 0 && - (c.flags_field & FINAL) != 0) { - c.flags_field |= UNNAMED_CLASS; - } - } } public void readClassFile(ClassSymbol c) { diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/launcher/Main.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/launcher/Main.java index 729d1cf2b057b..cd35ccaa3b74d 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/launcher/Main.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/launcher/Main.java @@ -85,7 +85,7 @@ import com.sun.tools.javac.resources.LauncherProperties.Errors; import com.sun.tools.javac.util.JCDiagnostic.Error; -import jdk.internal.misc.MainMethodFinder; +import jdk.internal.misc.MethodFinder; import jdk.internal.misc.PreviewFeatures; import jdk.internal.misc.VM; @@ -407,8 +407,8 @@ private String compile(Path file, List javacOpts, Context context) throw throw new Fault(Errors.NoClass); } TypeElement mainClass = l.mainClass; - String mainClassName = (mainClass.isUnnamed() ? mainClass.getSimpleName() - : mainClass.getQualifiedName()).toString(); + String mainClassName = mainClass.getQualifiedName().toString(); + return mainClassName; } @@ -434,26 +434,13 @@ private void execute(String mainClassName, String[] mainArgs, Context context) throw new Fault(Errors.CantFindClass(mainClassName)); } - Method mainMethod; - try { - mainMethod = MainMethodFinder.findMainMethod(appClass); - } catch (NoSuchMethodException e) { - throw new Fault(Errors.CantFindMainMethod(mainClassName)); - } - - int mods = mainMethod.getModifiers(); - boolean isStatic = Modifier.isStatic(mods); - boolean isPublic = Modifier.isPublic(mods); - boolean noArgs = mainMethod.getParameterCount() == 0; - - if (!PreviewFeatures.isEnabled() && (!isStatic || !isPublic)) { - throw new Fault(Errors.MainNotPublicStatic); - } + Method mainMethod = MethodFinder.findMainMethod(appClass); - if (!mainMethod.getReturnType().equals(void.class)) { - throw new Fault(Errors.MainNotVoid); + if (mainMethod == null) { + throw new Fault(Errors.CantFindMainMethod(mainClassName)); } + boolean isStatic = Modifier.isStatic(mainMethod.getModifiers()); Object instance = null; if (!isStatic) { @@ -478,7 +465,7 @@ private void execute(String mainClassName, String[] mainArgs, Context context) mainMethod.setAccessible(true); Object receiver = isStatic ? appClass : instance; - if (noArgs) { + if (mainMethod.getParameterCount() == 0) { mainMethod.invoke(receiver); } else { mainMethod.invoke(receiver, (Object)mainArgs); diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java index 0713739050a98..bf124bc35bc66 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java @@ -206,9 +206,9 @@ protected JavacParser(JavacParser parser, this.source = parser.source; this.preview = parser.preview; this.allowStringFolding = parser.allowStringFolding; - this.keepDocComments = false; + this.keepDocComments = parser.keepDocComments; this.parseModuleInfo = false; - this.docComments = null; + this.docComments = parser.docComments; this.errorTree = F.Erroneous(); this.endPosTable = newEndPosTable(false); this.allowYieldStatement = Feature.SWITCH_EXPRESSION.allowedInSource(source); @@ -3916,8 +3916,8 @@ public JCTree.JCCompilationUnit parseCompilationUnit() { defs.append(pd); } - boolean firstTypeDecl = true; // have we see a class, enum, or interface declaration yet? - boolean isUnnamedClass = false; + boolean firstTypeDecl = true; // have we seen a class, enum, or interface declaration yet? + boolean isImplicitClass = false; OUTER: while (token.kind != EOF) { if (token.pos <= endPosTable.errorEndPos) { // error recovery @@ -3984,13 +3984,13 @@ public JCTree.JCCompilationUnit parseCompilationUnit() { // this code speculatively tests to see if a top level method // or field can parse. If the method or field can parse then // it is parsed. Otherwise, parsing continues as though - // unnamed classes did not exist and error reporting + // implicit classes did not exist and error reporting // is the same as in the past. - if (Feature.UNNAMED_CLASSES.allowedInSource(source) && !isDeclaration()) { + if (Feature.IMPLICIT_CLASSES.allowedInSource(source) && !isDeclaration()) { final JCModifiers finalMods = mods; JavacParser speculative = new VirtualParser(this); List speculativeResult = - speculative.topLevelMethodOrFieldDeclaration(finalMods); + speculative.topLevelMethodOrFieldDeclaration(finalMods, null); if (speculativeResult.head.hasTag(METHODDEF) || speculativeResult.head.hasTag(VARDEF)) { isTopLevelMethodOrField = true; @@ -3998,9 +3998,9 @@ public JCTree.JCCompilationUnit parseCompilationUnit() { } if (isTopLevelMethodOrField) { - checkSourceLevel(token.pos, Feature.UNNAMED_CLASSES); - defs.appendList(topLevelMethodOrFieldDeclaration(mods)); - isUnnamedClass = true; + checkSourceLevel(token.pos, Feature.IMPLICIT_CLASSES); + defs.appendList(topLevelMethodOrFieldDeclaration(mods, docComment)); + isImplicitClass = true; } else { JCTree def = typeDeclaration(mods, docComment); if (def instanceof JCExpressionStatement statement) @@ -4012,7 +4012,7 @@ public JCTree.JCCompilationUnit parseCompilationUnit() { firstTypeDecl = false; } } - List topLevelDefs = isUnnamedClass ? constructUnnamedClass(defs.toList()) : defs.toList(); + List topLevelDefs = isImplicitClass ? constructImplictClass(defs.toList()) : defs.toList(); JCTree.JCCompilationUnit toplevel = F.at(firstToken.pos).TopLevel(topLevelDefs); if (!consumedToplevelDoc) attach(toplevel, firstToken.docComment()); @@ -4027,14 +4027,14 @@ public JCTree.JCCompilationUnit parseCompilationUnit() { return toplevel; } - // Restructure top level to be an unnamed class. - private List constructUnnamedClass(List origDefs) { + // Restructure top level to be an implicit class. + private List constructImplictClass(List origDefs) { ListBuffer topDefs = new ListBuffer<>(); ListBuffer defs = new ListBuffer<>(); for (JCTree def : origDefs) { if (def.hasTag(Tag.PACKAGEDEF)) { - log.error(def.pos(), Errors.UnnamedClassShouldNotHavePackageDeclaration); + log.error(def.pos(), Errors.ImplicitClassShouldNotHavePackageDeclaration); } else if (def.hasTag(Tag.IMPORT)) { topDefs.append(def); } else if (!def.hasTag(Tag.SKIP)) { @@ -4053,12 +4053,12 @@ private List constructUnnamedClass(List origDefs) { } Name name = names.fromString(simplename); - JCModifiers unnamedMods = F.at(Position.NOPOS) - .Modifiers(Flags.FINAL|Flags.SYNTHETIC|Flags.UNNAMED_CLASS, List.nil()); - JCClassDecl unnamed = F.at(primaryPos).ClassDef( - unnamedMods, name, List.nil(), null, List.nil(), List.nil(), + JCModifiers implicitMods = F.at(Position.NOPOS) + .Modifiers(Flags.FINAL|Flags.IMPLICIT_CLASS, List.nil()); + JCClassDecl implicit = F.at(primaryPos).ClassDef( + implicitMods, name, List.nil(), null, List.nil(), List.nil(), defs.toList()); - topDefs.append(unnamed); + topDefs.append(implicit); return topDefs.toList(); } @@ -4735,10 +4735,9 @@ private List constructorOrMethodOrFieldDeclaration(JCModifiers mods, Nam return List.of(syntaxError(token.pos, err, Errors.Expected(LPAREN))); } - private List topLevelMethodOrFieldDeclaration(JCModifiers mods) throws AssertionError { - int topPos = token.pos; + private List topLevelMethodOrFieldDeclaration(JCModifiers mods, Comment dc) throws AssertionError { int pos = token.pos; - Comment dc = token.docComment(); + dc = dc == null ? token.docComment() : dc; List typarams = typeParametersOpt(); // if there are type parameters but no modifiers, save the start diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/PrintingProcessor.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/PrintingProcessor.java index ee49a5b344d9c..9cb3b4992f137 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/PrintingProcessor.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/processing/PrintingProcessor.java @@ -126,7 +126,7 @@ public PrintingElementVisitor visitExecutable(ExecutableElement e, Boolean p) { kind != INSTANCE_INIT) { Element enclosing = e.getEnclosingElement(); - // Don't print out the constructor of an anonymous or unnamed class + // Don't print out the constructor of an anonymous class if (kind == CONSTRUCTOR && enclosing != null && (NestingKind.ANONYMOUS == @@ -136,13 +136,6 @@ public PrintingElementVisitor visitExecutable(ExecutableElement e, Boolean p) { public NestingKind visitType(TypeElement e, Void p) { return e.getNestingKind(); } - }).visit(enclosing) - || // Don't print the constructor of an unnamed class - (new SimpleElementVisitor14(false) { - @Override @DefinedBy(Api.LANGUAGE_MODEL) - public Boolean visitType(TypeElement e, Void p) { - return e.isUnnamed(); - } }).visit(enclosing)) ) { return this; } @@ -222,14 +215,6 @@ public PrintingElementVisitor visitType(TypeElement e, Boolean p) { printParameters(constructors.get(0)); } writer.print(")"); - } else if (e.isUnnamed()) { - writer.println("// Unnamed class in file whose name starts with " + e.getSimpleName()); - - for(Element element : e.getEnclosedElements()) { - this.visit(element); - } - - return this; } else { if (nestingKind == TOP_LEVEL) { PackageElement pkg = elementUtils.getPackageOf(e); diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties index 30756ef6fa6d7..975c3205a364e 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties @@ -524,11 +524,11 @@ compiler.err.duplicate.class=\ compiler.err.bad.file.name=\ bad file name: {0} -compiler.err.unnamed.class.should.not.have.package.declaration=\ - unnamed class should not have package declaration +compiler.err.implicit.class.should.not.have.package.declaration=\ + implicit class should not have package declaration -compiler.err.unnamed.class.does.not.have.main.method=\ - unnamed class does not have main method in the form of void main() or void main(String[] args) +compiler.err.implicit.class.does.not.have.main.method=\ + implicit class does not have main method in the form of void main() or void main(String[] args) # 0: name, 1: name compiler.err.same.binary.name=\ @@ -3218,8 +3218,8 @@ compiler.misc.feature.string.templates=\ compiler.misc.feature.unconditional.patterns.in.instanceof=\ unconditional patterns in instanceof -compiler.misc.feature.unnamed.classes=\ - unnamed classes +compiler.misc.feature.implicit.classes=\ + implicit classes compiler.misc.feature.super.init=\ statements before super() diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/tree/TreeMaker.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/tree/TreeMaker.java index 7cd0df9295b4b..21ced44c80ebc 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/tree/TreeMaker.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/tree/TreeMaker.java @@ -1161,7 +1161,7 @@ boolean isUnqualifiable(Symbol sym) { !it.hasNext(); } } - return sym.kind == TYP && (sym.flags_field & Flags.UNNAMED_CLASS) != 0; + return sym.kind == TYP && sym.isImplicit(); } /** The name of synthetic parameter number `i'. diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/ElementsTable.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/ElementsTable.java index 7f4f31844f5af..b0a6b4dfdf44f 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/ElementsTable.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/ElementsTable.java @@ -986,7 +986,7 @@ private boolean isTypeElementSelected(TypeElement te) { * @return true if the element is visible */ public boolean isSelected(Element e) { - if (toolEnv.isSynthetic((Symbol) e) && !toolEnv.isUnnamed((Symbol) e)) { + if (toolEnv.isSynthetic((Symbol) e)) { return false; } if (visibleElementVisitor == null) { diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/ToolEnvironment.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/ToolEnvironment.java index a8cb10651dd60..4b1e1c66258b5 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/ToolEnvironment.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/ToolEnvironment.java @@ -174,10 +174,6 @@ boolean isSynthetic(Symbol sym) { return (sym.flags() & Flags.SYNTHETIC) != 0; } - boolean isUnnamed(Symbol sym) { - return (sym.flags() & Flags.UNNAMED_CLASS) != 0; - } - void setElementToTreePath(Element e, TreePath tree) { if (e == null || tree == null) return; diff --git a/test/jdk/java/lang/Class/UnnamedClass/TestUnnamedClass.java b/test/jdk/java/lang/Class/UnnamedClass/TestUnnamedClass.java deleted file mode 100644 index 9e4635ab932c1..0000000000000 --- a/test/jdk/java/lang/Class/UnnamedClass/TestUnnamedClass.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @test - * @bug 8306112 - * @enablePreview - * @build Unnamed TestUnnamedClass - * @run main TestUnnamedClass - * @summary Basic checks of java.lang.Class support for unnamed classes - */ - -import java.lang.reflect.Modifier; - -public class TestUnnamedClass { - public static void main(String... args) throws Exception { - Class unnamedClass = Class.forName("Unnamed"); - - /* - * From JEP 445 JLS changes: - * - * "An unnamed class compilation unit implicitly declares a class that satisfies the following - * properties: - * It is always a top level class. - * It is always an unnamed class (it has no canonical or fully qualified name (6.7)). - * It is never abstract (8.1.1.1). - * It is always final (8.1.1.2). - * It is always a member of an unnamed package (7.4.2) and has package access. - * Its direct superclass type is always Object (8.1.4). - * It never has any direct superinterface types (8.1.5). - */ - - check(unnamedClass.isUnnamedClass(), "Unnamed class was isUnnamedClass() false"); - - check(!(unnamedClass.isInterface() || - unnamedClass.isEnum() || - unnamedClass.isRecord() || - unnamedClass.isHidden()), - "Unnamed class was not a normal class"); - - check(!(unnamedClass.isLocalClass() || - unnamedClass.isMemberClass() || - unnamedClass.isPrimitive() || - unnamedClass.isArray()), - "Unnamed class was not top-level"); - - check("Unnamed".equals(unnamedClass.getName()), "Unexpected Class.getName result"); - check("Unnamed".equals(unnamedClass.getTypeName()), "Unexpected Class.getTypeName result"); - check("".equals(unnamedClass.getSimpleName()), "Unexpected Class.getSimpleName result"); - check(unnamedClass.getCanonicalName() == null, "Unexpected non-null Class.getCanonicalName"); - - int modifiers = unnamedClass.getModifiers(); - check((modifiers & Modifier.ABSTRACT) == 0, "Unnamed class was abstract"); - check((modifiers & Modifier.FINAL) != 0, "Unnamed class was not final"); - check((modifiers & (Modifier.PUBLIC | - Modifier.PRIVATE | - Modifier.PROTECTED)) == 0, "Unnamed class was not package access"); - - check(unnamedClass.isSynthetic(), "Unnamed class was not synthetic"); - - check("".equals(unnamedClass.getPackage().getName()), "Unnamed class not in an unnamed package"); - - check(unnamedClass.getSuperclass() == Object.class, "Superclass was not java.lang.Object"); - - check(unnamedClass.getInterfaces().length == 0, "Unnamed class had super interfaces"); - } - - private static void check(boolean predicate, String message) { - if (!predicate) { - throw new RuntimeException(message); - } - } -} diff --git a/test/jdk/tools/launcher/Arrrghs.java b/test/jdk/tools/launcher/Arrrghs.java index 11a6ab0a52024..efc9505284257 100644 --- a/test/jdk/tools/launcher/Arrrghs.java +++ b/test/jdk/tools/launcher/Arrrghs.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2023, 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 @@ -541,12 +541,12 @@ void testMainMethod() throws FileNotFoundException { createJar(new File("some.jar"), new File("Foo"), "public static int main(String[] args){return 1;}"); tr = doExec(javaCmd, "-jar", "some.jar"); - tr.contains("Error: Main method must return a value of type void in class Foo"); + tr.contains("Error: Main method not found in class Foo"); if (!tr.testStatus) System.out.println(tr); // use classpath to check tr = doExec(javaCmd, "-cp", "some.jar", "Foo"); - tr.contains("Error: Main method must return a value of type void in class Foo"); + tr.contains("Error: Main method not found in class Foo"); if (!tr.testStatus) System.out.println(tr); @@ -567,12 +567,12 @@ void testMainMethod() throws FileNotFoundException { createJar(new File("some.jar"), new File("Foo"), "public void main(String[] args){}"); tr = doExec(javaCmd, "-jar", "some.jar"); - tr.contains("Error: Main method is not static in class Foo"); + tr.contains("Error: Main method not found in class Foo"); if (!tr.testStatus) System.out.println(tr); // use classpath to check tr = doExec(javaCmd, "-cp", "some.jar", "Foo"); - tr.contains("Error: Main method is not static in class Foo"); + tr.contains("Error: Main method not found in class Foo"); if (!tr.testStatus) System.out.println(tr); diff --git a/test/jdk/tools/launcher/InstanceMainTest.java b/test/jdk/tools/launcher/InstanceMainTest.java index 05973557fc35f..08b5cb48dbbec 100644 --- a/test/jdk/tools/launcher/InstanceMainTest.java +++ b/test/jdk/tools/launcher/InstanceMainTest.java @@ -42,13 +42,13 @@ static void main(String[] args) { } """, - // static dominating instance + // instance dominating static """ class MainClass { void main(String[] args) { - throw new AssertionError(); } static void main() { + throw new AssertionError(); } } """, @@ -81,12 +81,12 @@ static void main(String[] args) { } """, - // unnamed class static dominating instance + // main with args dominating main without args """ void main(String[] args) { - throw new AssertionError(); } static void main() { + throw new AssertionError(); } """, @@ -105,15 +105,15 @@ void main() { } """, - // instance main dominating super static + // instance main with args dominating super """ class MainClass extends SuperClass { void main() { + throw new AssertionError(); } } class SuperClass { void main(String[] args) { - throw new AssertionError(); } } """, diff --git a/test/jdk/tools/launcher/modules/basic/LauncherErrors.java b/test/jdk/tools/launcher/modules/basic/LauncherErrors.java index b79238218b379..dd5157fa6127e 100644 --- a/test/jdk/tools/launcher/modules/basic/LauncherErrors.java +++ b/test/jdk/tools/launcher/modules/basic/LauncherErrors.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2023, 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,9 +92,10 @@ public void testErrorMessage() throws Exception { ProcessTools.executeTestJava("-Djava.security.manager", "--module-path", dir, "--module", mid) .outputTo(System.out) .errorTo(System.out) - .shouldContain("Error: Unable to initialize main class " + MAIN_CLASS + " in module " + TEST_MODULE) - .shouldContain("Caused by: java.security.AccessControlException: access denied") + .shouldContain("Error: Unable to load main class " + MAIN_CLASS + " in module " + TEST_MODULE) + .shouldContain("Caused by: java.security.AccessControlException") .shouldNotHaveExitValue(0); + } } diff --git a/test/langtools/jdk/javadoc/doclet/testUnnamed/TestUnnamed.java b/test/langtools/jdk/javadoc/doclet/testUnnamed/TestImplicit.java similarity index 91% rename from test/langtools/jdk/javadoc/doclet/testUnnamed/TestUnnamed.java rename to test/langtools/jdk/javadoc/doclet/testUnnamed/TestImplicit.java index e9658cd4071b9..fa9a535902f87 100644 --- a/test/langtools/jdk/javadoc/doclet/testUnnamed/TestUnnamed.java +++ b/test/langtools/jdk/javadoc/doclet/testUnnamed/TestImplicit.java @@ -24,11 +24,11 @@ /* * @test * @bug 8309595 - * @summary Allow javadoc to process unnamed classes + * @summary Allow javadoc to process implicit classes * @library /tools/lib ../../lib * @modules jdk.javadoc/jdk.javadoc.internal.tool * @build toolbox.ToolBox javadoc.tester.* - * @run main TestUnnamed + * @run main TestImplicit */ import java.io.File; @@ -39,18 +39,18 @@ import javadoc.tester.JavadocTester; import toolbox.ToolBox; -public class TestUnnamed extends JavadocTester { +public class TestImplicit extends JavadocTester { private static final String thisVersion = System.getProperty("java.specification.version"); private static final ToolBox tb = new ToolBox(); public static void main(String... args) throws Exception { - new TestUnnamed().runTests(); + new TestImplicit().runTests(); } @Test - public void testUnnamed(Path base) throws IOException { + public void testImplicit(Path base) throws IOException { String className = "Sample"; Files.createDirectories(base); Path out = base.resolve("out"); diff --git a/test/jdk/java/lang/Class/UnnamedClass/Unnamed.java b/test/langtools/tools/javac/ImplicitClass/Implicit.java similarity index 95% rename from test/jdk/java/lang/Class/UnnamedClass/Unnamed.java rename to test/langtools/tools/javac/ImplicitClass/Implicit.java index 9545a90f0deaa..10e1fad007ba2 100644 --- a/test/jdk/java/lang/Class/UnnamedClass/Unnamed.java +++ b/test/langtools/tools/javac/ImplicitClass/Implicit.java @@ -23,8 +23,8 @@ /** - * Exemplar unnamed class. + * Exemplar implicit class. */ -public void main() { +void main() { System.out.println("Hello, world."); } diff --git a/test/langtools/tools/javac/unnamed/UnnamedClassRecovery.java b/test/langtools/tools/javac/ImplicitClass/ImplicitClassRecovery.java similarity index 53% rename from test/langtools/tools/javac/unnamed/UnnamedClassRecovery.java rename to test/langtools/tools/javac/ImplicitClass/ImplicitClassRecovery.java index 2c1d533ab6c9d..0057d779f8c73 100644 --- a/test/langtools/tools/javac/unnamed/UnnamedClassRecovery.java +++ b/test/langtools/tools/javac/ImplicitClass/ImplicitClassRecovery.java @@ -1,6 +1,6 @@ /** * @test /nodynamiccopyright/ - * @compile/fail/ref=UnnamedClassRecovery.out -XDrawDiagnostics --enable-preview --source ${jdk.version} UnnamedClassRecovery.java + * @compile/fail/ref=ImplicitClassRecovery.out -XDrawDiagnostics --enable-preview --source ${jdk.version} ImplicitClassRecovery.java */ public void main() { //the following is intentionally missing a semicolon: diff --git a/test/langtools/tools/javac/ImplicitClass/ImplicitClassRecovery.out b/test/langtools/tools/javac/ImplicitClass/ImplicitClassRecovery.out new file mode 100644 index 0000000000000..7de6ac6b3ee1b --- /dev/null +++ b/test/langtools/tools/javac/ImplicitClass/ImplicitClassRecovery.out @@ -0,0 +1,4 @@ +ImplicitClassRecovery.java:7:33: compiler.err.expected: ';' +- compiler.note.preview.filename: ImplicitClassRecovery.java, DEFAULT +- compiler.note.preview.recompile +1 error diff --git a/test/langtools/tools/javac/ImplicitClass/NestedClasses.java b/test/langtools/tools/javac/ImplicitClass/NestedClasses.java new file mode 100644 index 0000000000000..19f070c4d485c --- /dev/null +++ b/test/langtools/tools/javac/ImplicitClass/NestedClasses.java @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8315458 + * @enablePreview + * @summary Make sure nesting classes don't create symbol conflicts with implicit name. + * @library /tools/lib + * @modules jdk.compiler/com.sun.tools.javac.api + * jdk.compiler/com.sun.tools.javac.main + * @build toolbox.ToolBox toolbox.JavacTask + * @run main NestedClasses + */ + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; + +import toolbox.ToolBox; +import toolbox.JavaTask; +import toolbox.JavacTask; +import toolbox.Task; + +public class NestedClasses { + private static ToolBox TOOLBOX = new ToolBox(); + private static final String JAVA_VERSION = System.getProperty("java.specification.version"); + + public static void main(String... arg) throws IOException { + compPass("A.java", """ + void main() {} + class A {} // okay + """); + + compPass("A.java", """ + void main() {} + class B { + class A { } // okay + } + """); + + compFail("A.java", """ + void main() {} + class B { + class B { } //error + } + """); + } + + /* + * Test source for successful compile. + */ + static void compPass(String fileName, String code) throws IOException { + Path path = Path.of(fileName); + Files.writeString(path, code); + String output = new JavacTask(TOOLBOX) + .files(List.of(path)) + .classpath(".") + .options("-encoding", "utf8", "--enable-preview", "-source", JAVA_VERSION) + .run() + .writeAll() + .getOutput(Task.OutputKind.DIRECT); + + if (output.contains("compiler.err")) { + throw new RuntimeException("Error detected"); + } + } + + /* + * Test source for unsuccessful compile and specific error. + */ + static void compFail(String fileName, String code) throws IOException { + Path path = Path.of(fileName); + Files.writeString(path, code); + String output = new JavacTask(TOOLBOX) + .files(List.of(path)) + .classpath(".") + .options("-XDrawDiagnostics", "-encoding", "utf8", "--enable-preview", "-source", JAVA_VERSION) + .run(Task.Expect.FAIL) + .writeAll() + .getOutput(Task.OutputKind.DIRECT); + + if (!output.contains("compiler.err")) { + throw new RuntimeException("No error detected"); + } + } + + } diff --git a/test/langtools/tools/javac/unnamedclass/NestedEnum.java b/test/langtools/tools/javac/ImplicitClass/NestedEnum.java similarity index 100% rename from test/langtools/tools/javac/unnamedclass/NestedEnum.java rename to test/langtools/tools/javac/ImplicitClass/NestedEnum.java diff --git a/test/langtools/tools/javac/unnamedclass/SourceLevelErrorPosition.java b/test/langtools/tools/javac/ImplicitClass/SourceLevelErrorPosition.java similarity index 74% rename from test/langtools/tools/javac/unnamedclass/SourceLevelErrorPosition.java rename to test/langtools/tools/javac/ImplicitClass/SourceLevelErrorPosition.java index 54beb45d90bcc..786c228f11ec1 100644 --- a/test/langtools/tools/javac/unnamedclass/SourceLevelErrorPosition.java +++ b/test/langtools/tools/javac/ImplicitClass/SourceLevelErrorPosition.java @@ -1,7 +1,7 @@ /** * @test /nodynamiccopyright/ * @bug 8310314 - * @summary Ensure proper error position for the "unnamed classes not supported" error + * @summary Ensure proper error position for the "implicit classes not supported" error * @compile/fail/ref=SourceLevelErrorPosition.out -XDrawDiagnostics SourceLevelErrorPosition.java */ class Nested {} diff --git a/test/langtools/tools/javac/unnamedclass/SourceLevelErrorPosition.out b/test/langtools/tools/javac/ImplicitClass/SourceLevelErrorPosition.out similarity index 55% rename from test/langtools/tools/javac/unnamedclass/SourceLevelErrorPosition.out rename to test/langtools/tools/javac/ImplicitClass/SourceLevelErrorPosition.out index 518350810a07e..1376183d9c610 100644 --- a/test/langtools/tools/javac/unnamedclass/SourceLevelErrorPosition.out +++ b/test/langtools/tools/javac/ImplicitClass/SourceLevelErrorPosition.out @@ -1,2 +1,2 @@ -SourceLevelErrorPosition.java:8:1: compiler.err.preview.feature.disabled.plural: (compiler.misc.feature.unnamed.classes) +SourceLevelErrorPosition.java:8:1: compiler.err.preview.feature.disabled.plural: (compiler.misc.feature.implicit.classes) 1 error diff --git a/test/langtools/tools/javac/ImplicitClass/TestImplicitClass.java b/test/langtools/tools/javac/ImplicitClass/TestImplicitClass.java new file mode 100644 index 0000000000000..673c31b621500 --- /dev/null +++ b/test/langtools/tools/javac/ImplicitClass/TestImplicitClass.java @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8315458 + * @enablePreview + * @build Implicit TestImplicitClass + * @run main TestImplicitClass + * @summary Basic checks of java.lang.Class support for implicit classes + */ + +import java.lang.reflect.Modifier; + +public class TestImplicitClass { + public static void main(String... args) throws Exception { + Class implicitClass = Class.forName("Implicit"); + + /* + * From JEP 463 JLS changes: + * + * "An implicit class compilation unit implicitly declares a class that satisfies the following + * properties: + * It is always a top level class. + * It is never abstract (8.1.1.1). + * It is never synthetic (13.1.11) + * It is always final (8.1.1.2). + * It is always a member of unnamed package (7.4.2) and has package access. + * Its direct superclass type is always Object (8.1.4). + * It never has any direct superinterface types (8.1.5). + */ + + check(!(implicitClass.isInterface() || + implicitClass.isEnum() || + implicitClass.isRecord() || + implicitClass.isHidden()), + "Implicit class was not a normal class"); + + check(!(implicitClass.isLocalClass() || + implicitClass.isMemberClass() || + implicitClass.isPrimitive() || + implicitClass.isArray()), + "Implicit class was not top-level"); + + check("Implicit".equals(implicitClass.getName()), "Unexpected Class.getName result"); + check("Implicit".equals(implicitClass.getTypeName()), "Unexpected Class.getTypeName result"); + check("Implicit".equals(implicitClass.getSimpleName()), "Unexpected Class.getSimpleName result"); + check("Implicit".equals(implicitClass.getCanonicalName()), "Unexpected Class.getCanonicalName result"); + + int modifiers = implicitClass.getModifiers(); + check((modifiers & Modifier.ABSTRACT) == 0, "Implicit class was abstract"); + check((modifiers & Modifier.FINAL) != 0, "Implicit class was not final"); + check((modifiers & (Modifier.PUBLIC | + Modifier.PRIVATE | + Modifier.PROTECTED)) == 0, "Implicit class was not package access"); + + check(!implicitClass.isSynthetic(), "Implicit class was synthetic"); + + check("".equals(implicitClass.getPackage().getName()), "Implicit class not in an implicit package"); + + check(implicitClass.getSuperclass() == Object.class, "Superclass was not java.lang.Object"); + + check(implicitClass.getInterfaces().length == 0, "Implicit class had super interfaces"); + } + + private static void check(boolean predicate, String message) { + if (!predicate) { + throw new RuntimeException(message); + } + } +} diff --git a/test/langtools/tools/javac/diags/examples/UnnamedClass.java b/test/langtools/tools/javac/diags/examples/ImplicitClass.java similarity index 96% rename from test/langtools/tools/javac/diags/examples/UnnamedClass.java rename to test/langtools/tools/javac/diags/examples/ImplicitClass.java index c78dcf14e6c44..c032bdefeffcd 100644 --- a/test/langtools/tools/javac/diags/examples/UnnamedClass.java +++ b/test/langtools/tools/javac/diags/examples/ImplicitClass.java @@ -21,7 +21,7 @@ * questions. */ - // key: compiler.misc.feature.unnamed.classes + // key: compiler.misc.feature.implicit.classes // key: compiler.warn.preview.feature.use.plural // options: -source ${jdk.version} --enable-preview -Xlint:preview diff --git a/test/langtools/tools/javac/diags/examples/UnnamedClassBad-Filename.java b/test/langtools/tools/javac/diags/examples/ImplicitClassBad-Filename.java similarity index 100% rename from test/langtools/tools/javac/diags/examples/UnnamedClassBad-Filename.java rename to test/langtools/tools/javac/diags/examples/ImplicitClassBad-Filename.java diff --git a/test/langtools/tools/javac/diags/examples/UnnamedClassHasPackage.java b/test/langtools/tools/javac/diags/examples/ImplicitClassHasPackage.java similarity index 92% rename from test/langtools/tools/javac/diags/examples/UnnamedClassHasPackage.java rename to test/langtools/tools/javac/diags/examples/ImplicitClassHasPackage.java index 96601f9a9458f..c90e0f3dfbcd2 100644 --- a/test/langtools/tools/javac/diags/examples/UnnamedClassHasPackage.java +++ b/test/langtools/tools/javac/diags/examples/ImplicitClassHasPackage.java @@ -21,12 +21,12 @@ * questions. */ - // key: compiler.err.unnamed.class.should.not.have.package.declaration + // key: compiler.err.implicit.class.should.not.have.package.declaration // key: compiler.note.preview.filename // key: compiler.note.preview.recompile // options: -source ${jdk.version} --enable-preview -package unnamed.classes; +package implicit.classes; public static void main(String... args) { } diff --git a/test/langtools/tools/javac/diags/examples/UnnamedClassNoMain.java b/test/langtools/tools/javac/diags/examples/ImplicitClassNoMain.java similarity index 95% rename from test/langtools/tools/javac/diags/examples/UnnamedClassNoMain.java rename to test/langtools/tools/javac/diags/examples/ImplicitClassNoMain.java index 0caacb60e6619..4c82341f5acaa 100644 --- a/test/langtools/tools/javac/diags/examples/UnnamedClassNoMain.java +++ b/test/langtools/tools/javac/diags/examples/ImplicitClassNoMain.java @@ -21,7 +21,7 @@ * questions. */ - // key: compiler.err.unnamed.class.does.not.have.main.method + // key: compiler.err.implicit.class.does.not.have.main.method // key: compiler.note.preview.filename // key: compiler.note.preview.recompile // options: -source ${jdk.version} --enable-preview diff --git a/test/langtools/tools/javac/launcher/SourceLauncherTest.java b/test/langtools/tools/javac/launcher/SourceLauncherTest.java index 06190546d49f7..9e2ef06936933 100644 --- a/test/langtools/tools/javac/launcher/SourceLauncherTest.java +++ b/test/langtools/tools/javac/launcher/SourceLauncherTest.java @@ -564,7 +564,7 @@ public void testMainNotStatic(Path base) throws IOException { tb.writeJavaFiles(base, "class NotStatic { public void main(String... args) { } }"); testError(base.resolve("NotStatic.java"), "", - "error: 'main' method is not declared 'public static'"); + "error: can't find main(String[]) method in class: NotStatic"); } @Test @@ -572,7 +572,7 @@ public void testMainNotVoid(Path base) throws IOException { tb.writeJavaFiles(base, "class NotVoid { public static int main(String... args) { return 0; } }"); testError(base.resolve("NotVoid.java"), "", - "error: 'main' method is not declared with a return type of 'void'"); + "error: can't find main(String[]) method in class: NotVoid"); } @Test diff --git a/test/langtools/tools/javac/parser/JavacParserTest.java b/test/langtools/tools/javac/parser/JavacParserTest.java index 14f0c506cd1a0..f9ccb39c05e1d 100644 --- a/test/langtools/tools/javac/parser/JavacParserTest.java +++ b/test/langtools/tools/javac/parser/JavacParserTest.java @@ -2472,7 +2472,7 @@ void main() { result, """ \n\ - /*synthetic*/ final class Test { + final class Test { \n\ void main() { (ERROR); diff --git a/test/langtools/tools/javac/processing/model/element/TestUnnamedClass.java b/test/langtools/tools/javac/processing/model/element/TestImplicitClass.java similarity index 61% rename from test/langtools/tools/javac/processing/model/element/TestUnnamedClass.java rename to test/langtools/tools/javac/processing/model/element/TestImplicitClass.java index 13ea7e0fa6d85..bad9fa15f8b4e 100644 --- a/test/langtools/tools/javac/processing/model/element/TestUnnamedClass.java +++ b/test/langtools/tools/javac/processing/model/element/TestImplicitClass.java @@ -24,19 +24,19 @@ /* * @test * @bug 8306112 8309568 - * @summary Test basic processing of unnamed classes. + * @summary Test basic processing of implicitly declared classes. * @library /tools/javac/lib * @modules java.compiler * jdk.compiler - * @build JavacTestingAbstractProcessor TestUnnamedClass - * @compile -processor TestUnnamedClass --enable-preview --release ${jdk.version} Anonymous.java + * @build JavacTestingAbstractProcessor TestImplicitClass + * @compile -processor TestImplicitClass --enable-preview --release ${jdk.version} Anonymous.java * @clean Nameless.java - * @compile/process -processor TestUnnamedClass -proc:only --enable-preview --release ${jdk.version} -Xprefer:newer -AclassOnly Anonymous Nameless + * @compile/process -processor TestImplicitClass -proc:only --enable-preview --release ${jdk.version} -Xprefer:newer -AclassOnly Anonymous Nameless */ // The first @compile line processes Anonymous.java and a -// Nameless.java class generated using the Filer. Both of those -// unnamed classes are then compiled down to class files. The second +// Nameless.java class generated using the Filer. Both of those implicitly +// declared classes are then compiled down to class files. The second // @compile line, as directed by -Xprefer:newer, builds and checks the // language model objects constructed from those class files, ignoring // any source files for those types. @@ -52,12 +52,12 @@ import javax.tools.JavaFileObject; /** - * Test annotation processing representation of unnamed classes + * Test annotation processing representation of implicitly classes * constructed from either a source file or a class file. */ @SuppressWarnings("preview") @SupportedOptions("classOnly") -public class TestUnnamedClass extends JavacTestingAbstractProcessor { +public class TestImplicitClass extends JavacTestingAbstractProcessor { private static int round = 0; private static int checkedClassesCount = 0; @@ -72,14 +72,14 @@ public boolean process(Set annotations, // Don't generate any files if testing pre-existing class files if (!classOnly) { - generateUnnamed(); + generateImplicitClass(); } } else { if (!roundEnv.processingOver()) { // Test generated file(s) checkRoots(roundEnv); } else { // Should have checked at least one class before processing is over if (checkedClassesCount == 0) { - messager.printError("No unnamed classes checked."); + messager.printError("No implicitly declared classes checked."); } } } @@ -95,11 +95,11 @@ private void checkRoots(RoundEnvironment roundEnv) { checkUnnamedClassProperties(type); } if (checks == 0) { - messager.printError("No checking done of any candidate unnamed classes."); + messager.printError("No checking done of any candidate implicitly declared classes."); } } - private void generateUnnamed() { + private void generateImplicitClass() { try { String unnamedSource = """ void main() { @@ -117,12 +117,11 @@ void main() { } /* - * From JEP 445 JLS changes: + * From JEP 463 JLS changes: * - * "An unnamed class compilation unit implicitly declares a class that satisfies the following - * properties: + * "An implicitly declared class compilation unit implicitly declares a class that + * satisfies the following properties: * It is always a top level class. - * It is always an unnamed class (it has no canonical or fully qualified name (6.7)). * It is never abstract (8.1.1.1). * It is always final (8.1.1.2). * It is always a member of an unnamed package (7.4.2) and has package access. @@ -130,8 +129,8 @@ void main() { * It never has any direct superinterface types (8.1.5). * * The body of the class contains every ClassMemberDeclaration - * from the unnamed class compilation unit. It is not possible for - * an unnamed class compilation unit to declare an instance + * from the implicitly declared class compilation unit. It is not possible for + * an implicitly declared class compilation unit to declare an instance * initializer, static initializer, or constructor. * * It has an implicitly declared default constructor (8.8.9). @@ -141,63 +140,55 @@ void main() { * * It is a compile-time error if this class does not declare a candidate main method (12.1.4). */ - void checkUnnamedClassProperties(TypeElement unnamedClass) { + void checkUnnamedClassProperties(TypeElement implicitClass) { checkedClassesCount++; - Name expectedName = unnamedClass.getSimpleName(); + Name expectedName = implicitClass.getSimpleName(); System.out.println("Checking " + expectedName); - if (unnamedClass.getNestingKind() != NestingKind.TOP_LEVEL) { - messager.printError("Unnamed class is not top-level.", unnamedClass); + if (implicitClass.getNestingKind() != NestingKind.TOP_LEVEL) { + messager.printError("Implicitly declared class is not top-level.", implicitClass); } - if (!unnamedClass.isUnnamed()) { - messager.printError("Unnamed class is _not_ indicated as such.", unnamedClass); + if (!implicitClass.getQualifiedName().equals(expectedName)) { + messager.printError("Implicitly declared class qualified name does not match simple name.", implicitClass); } - if (unnamedClass.getSimpleName().isEmpty()) { - messager.printError("Unnamed class has an empty simple name.", unnamedClass); - } - - if (!unnamedClass.getQualifiedName().isEmpty()) { - messager.printError("Unnamed class does _not_ have an empty qualified name.", unnamedClass); - } - - Name binaryName = elements.getBinaryName(unnamedClass); + Name binaryName = elements.getBinaryName(implicitClass); if (!expectedName.equals(binaryName)) { - messager.printError("Unnamed has unexpected binary name" + binaryName + ".", unnamedClass); + messager.printError("Implicitly declared class has unexpected binary name" + binaryName + ".", implicitClass); } - if (unnamedClass.getModifiers().contains(Modifier.ABSTRACT)) { - messager.printError("Unnamed class is abstract.", unnamedClass); + if (implicitClass.getModifiers().contains(Modifier.ABSTRACT)) { + messager.printError("Implicitly declared class is abstract.", implicitClass); } - if (!unnamedClass.getModifiers().contains(Modifier.FINAL)) { - messager.printError("Unnamed class is _not_ final.", unnamedClass); + if (!implicitClass.getModifiers().contains(Modifier.FINAL)) { + messager.printError("Implicitly declared class is _not_ final.", implicitClass); } - if (!elements.getPackageOf(unnamedClass).isUnnamed()) { - messager.printError("Unnamed class is _not_ in an unnamed package.", unnamedClass); + if (!elements.getPackageOf(implicitClass).isUnnamed()) { + messager.printError("Implicitly declared class is _not_ in an unnamed package.", implicitClass); } - if (unnamedClass.getModifiers().contains(Modifier.PUBLIC) || - unnamedClass.getModifiers().contains(Modifier.PRIVATE) || - unnamedClass.getModifiers().contains(Modifier.PROTECTED)) { - messager.printError("Unnamed class does _not_ have package access.", unnamedClass); + if (implicitClass.getModifiers().contains(Modifier.PUBLIC) || + implicitClass.getModifiers().contains(Modifier.PRIVATE) || + implicitClass.getModifiers().contains(Modifier.PROTECTED)) { + messager.printError("Implicitly declared class does _not_ have package access.", implicitClass); } - if ( !types.isSameType(unnamedClass.getSuperclass(), + if ( !types.isSameType(implicitClass.getSuperclass(), elements.getTypeElement("java.lang.Object").asType())) { - messager.printError("Unnamed class does _not_ have java.lang.Object as a superclass.", unnamedClass); + messager.printError("Implicitly declared class does _not_ have java.lang.Object as a superclass.", implicitClass); } - if (!unnamedClass.getInterfaces().isEmpty()) { - messager.printError("Unnamed class has superinterfaces.", unnamedClass); + if (!implicitClass.getInterfaces().isEmpty()) { + messager.printError("Implicitly declared class has superinterfaces.", implicitClass); } - List ctors = constructorsIn(unnamedClass.getEnclosedElements()); + List ctors = constructorsIn(implicitClass.getEnclosedElements()); if (ctors.size() != 1 ) { - messager.printError("Did not find exactly one constructor", unnamedClass); + messager.printError("Did not find exactly one constructor", implicitClass); } if (!classOnly) { @@ -208,7 +199,7 @@ void checkUnnamedClassProperties(TypeElement unnamedClass) { } } - List methods = methodsIn(unnamedClass.getEnclosedElements()); + List methods = methodsIn(implicitClass.getEnclosedElements()); // Just look for a method named "main"; don't check the other details. boolean mainFound = false; Name mainName = elements.getName("main"); @@ -220,7 +211,7 @@ void checkUnnamedClassProperties(TypeElement unnamedClass) { } if (!mainFound) { - messager.printError("No main mehtod found", unnamedClass); + messager.printError("No main method found", implicitClass); } } } diff --git a/test/langtools/tools/javac/unnamed/UnnamedClassRecovery.out b/test/langtools/tools/javac/unnamed/UnnamedClassRecovery.out deleted file mode 100644 index 0389b156f0193..0000000000000 --- a/test/langtools/tools/javac/unnamed/UnnamedClassRecovery.out +++ /dev/null @@ -1,4 +0,0 @@ -UnnamedClassRecovery.java:7:33: compiler.err.expected: ';' -- compiler.note.preview.filename: UnnamedClassRecovery.java, DEFAULT -- compiler.note.preview.recompile -1 error From 33b26f79a986d015abdcd84b89842adc0a4bde64 Mon Sep 17 00:00:00 2001 From: Viktor Klang Date: Thu, 30 Nov 2023 14:45:23 +0000 Subject: [PATCH 138/250] 8319123: Implement JEP 461: Stream Gatherers (Preview) Reviewed-by: tvaleev, alanb, psandoz --- .../java/util/stream/AbstractPipeline.java | 45 +- .../classes/java/util/stream/Gatherer.java | 593 ++++++++++++++ .../classes/java/util/stream/GathererOp.java | 754 ++++++++++++++++++ .../classes/java/util/stream/Gatherers.java | 707 ++++++++++++++++ .../java/util/stream/ReferencePipeline.java | 26 +- .../classes/java/util/stream/Stream.java | 54 ++ .../java/util/stream/package-info.java | 13 + .../jdk/internal/javac/PreviewFeature.java | 2 + .../jdk/java/util/stream/GathererAPITest.java | 230 ++++++ test/jdk/java/util/stream/GathererTest.java | 479 +++++++++++ test/jdk/java/util/stream/GatherersTest.java | 368 +++++++++ .../util/stream/DefaultMethodStreams.java | 2 +- .../ops/ref/BenchmarkGathererImpls.java | 272 +++++++ .../util/stream/ops/ref/GatherFMRPar.java | 136 ++++ .../util/stream/ops/ref/GatherFMRSeq.java | 130 +++ .../ops/ref/GatherFlatMapInfinitySeq.java | 108 +++ .../util/stream/ops/ref/GatherFlatMapSeq.java | 105 +++ .../util/stream/ops/ref/GatherMapPar.java | 171 ++++ .../util/stream/ops/ref/GatherMapSeq.java | 183 +++++ .../util/stream/ops/ref/GatherMiscPar.java | 127 +++ .../util/stream/ops/ref/GatherMiscSeq.java | 164 ++++ .../util/stream/ops/ref/GatherReducePar.java | 94 +++ .../util/stream/ops/ref/GatherReduceSeq.java | 104 +++ .../stream/ops/ref/GatherWhileOrdered.java | 128 +++ 24 files changed, 4988 insertions(+), 7 deletions(-) create mode 100644 src/java.base/share/classes/java/util/stream/Gatherer.java create mode 100644 src/java.base/share/classes/java/util/stream/GathererOp.java create mode 100644 src/java.base/share/classes/java/util/stream/Gatherers.java create mode 100644 test/jdk/java/util/stream/GathererAPITest.java create mode 100644 test/jdk/java/util/stream/GathererTest.java create mode 100644 test/jdk/java/util/stream/GatherersTest.java create mode 100644 test/micro/org/openjdk/bench/java/util/stream/ops/ref/BenchmarkGathererImpls.java create mode 100644 test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherFMRPar.java create mode 100644 test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherFMRSeq.java create mode 100644 test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherFlatMapInfinitySeq.java create mode 100644 test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherFlatMapSeq.java create mode 100644 test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherMapPar.java create mode 100644 test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherMapSeq.java create mode 100644 test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherMiscPar.java create mode 100644 test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherMiscSeq.java create mode 100644 test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherReducePar.java create mode 100644 test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherReduceSeq.java create mode 100644 test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherWhileOrdered.java diff --git a/src/java.base/share/classes/java/util/stream/AbstractPipeline.java b/src/java.base/share/classes/java/util/stream/AbstractPipeline.java index cdf8a6056181f..db75384e4d3de 100644 --- a/src/java.base/share/classes/java/util/stream/AbstractPipeline.java +++ b/src/java.base/share/classes/java/util/stream/AbstractPipeline.java @@ -85,7 +85,7 @@ abstract class AbstractPipeline> * The "upstream" pipeline, or null if this is the source stage. */ @SuppressWarnings("rawtypes") - private final AbstractPipeline previousStage; + protected final AbstractPipeline previousStage; /** * The operation flags for the intermediate operation represented by this @@ -188,9 +188,13 @@ abstract class AbstractPipeline> * Constructor for appending an intermediate operation stage onto an * existing pipeline. * + * The previous stage must be unlinked and unconsumed. + * * @param previousStage the upstream pipeline stage * @param opFlags the operation flags for the new stage, described in * {@link StreamOpFlag} + * @throws IllegalStateException if previousStage is already linked or + * consumed */ AbstractPipeline(AbstractPipeline previousStage, int opFlags) { if (previousStage.linkedOrConsumed) @@ -205,6 +209,41 @@ abstract class AbstractPipeline> this.depth = previousStage.depth + 1; } + /** + * Constructor for replacing an intermediate operation stage onto an + * existing pipeline. + * + * @param previousPreviousStage the upstream pipeline stage of the upstream pipeline stage + * @param previousStage the upstream pipeline stage + * @param opFlags the operation flags for the new stage, described in + * {@link StreamOpFlag} + * @throws IllegalStateException if previousStage is already linked or + * consumed + */ + protected AbstractPipeline(AbstractPipeline previousPreviousStage, AbstractPipeline previousStage, int opFlags) { + if (previousStage.linkedOrConsumed || !previousPreviousStage.linkedOrConsumed || previousPreviousStage.nextStage != previousStage || previousStage.previousStage != previousPreviousStage) + throw new IllegalStateException(MSG_STREAM_LINKED); + + previousStage.linkedOrConsumed = true; + + previousPreviousStage.nextStage = this; + + this.previousStage = previousPreviousStage; + this.sourceOrOpFlags = opFlags & StreamOpFlag.OP_MASK; + this.combinedFlags = StreamOpFlag.combineOpFlags(opFlags, previousPreviousStage.combinedFlags); + this.sourceStage = previousPreviousStage.sourceStage; + this.depth = previousPreviousStage.depth + 1; + } + + /** + * Checks that the current stage has not been already linked or consumed, + * and then sets this stage as being linked or consumed. + */ + protected void linkOrConsume() { + if (linkedOrConsumed) + throw new IllegalStateException(MSG_STREAM_LINKED); + linkedOrConsumed = true; + } // Terminal evaluation methods @@ -402,7 +441,7 @@ protected final boolean hasAnyStateful() { * operation. */ @SuppressWarnings("unchecked") - private Spliterator sourceSpliterator(int terminalFlags) { + protected Spliterator sourceSpliterator(int terminalFlags) { // Get the source spliterator of the pipeline Spliterator spliterator = null; if (sourceStage.sourceSpliterator != null) { @@ -740,6 +779,6 @@ Node opEvaluateParallel(PipelineHelper helper, @SuppressWarnings("unchecked") Spliterator opEvaluateParallelLazy(PipelineHelper helper, Spliterator spliterator) { - return opEvaluateParallel(helper, spliterator, i -> (E_OUT[]) new Object[i]).spliterator(); + return opEvaluateParallel(helper, spliterator, Nodes.castingArray()).spliterator(); } } diff --git a/src/java.base/share/classes/java/util/stream/Gatherer.java b/src/java.base/share/classes/java/util/stream/Gatherer.java new file mode 100644 index 0000000000000..ced746cd67356 --- /dev/null +++ b/src/java.base/share/classes/java/util/stream/Gatherer.java @@ -0,0 +1,593 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package java.util.stream; + +import jdk.internal.javac.PreviewFeature; +import jdk.internal.vm.annotation.ForceInline; + +import java.util.*; +import java.util.function.BiConsumer; +import java.util.function.BinaryOperator; +import java.util.function.Supplier; + + +/** + * An intermediate operation that transforms a stream of input elements into a + * stream of output elements, optionally applying a final action when the end of + * the upstream is reached. The transformation may be stateless or stateful, + * and may buffer input before producing any output. + * + *

    Gatherer operations can be performed either sequentially, + * or be parallelized -- if a combiner function is supplied. + * + *

    There are many examples of gathering operations, including but not + * limited to: + * grouping elements into batches (windowing functions); + * de-duplicating consecutively similar elements; incremental accumulation + * functions (prefix scan); incremental reordering functions, etc. The class + * {@link java.util.stream.Gatherers} provides implementations of common + * gathering operations. + * + * @apiNote + *

    A {@code Gatherer} is specified by four functions that work together to + * process input elements, optionally using intermediate state, and optionally + * perform a final action at the end of input. They are:

      + *
    • creating a new, potentially mutable, state ({@link #initializer()})
    • + *
    • integrating a new input element ({@link #integrator()})
    • + *
    • combining two states into one ({@link #combiner()})
    • + *
    • performing an optional final action ({@link #finisher()})
    • + *
    + * + *

    Each invocation of {@link #initializer()}, {@link #integrator()}, + * {@link #combiner()}, and {@link #finisher()} must return a semantically + * identical result. + * + *

    Implementations of Gatherer must not capture, retain, or expose to + * other threads, the references to the state instance, or the downstream + * {@link Downstream} for longer than the invocation duration of the method + * which they are passed to. + * + *

    Performing a gathering operation with a {@code Gatherer} should produce a + * result equivalent to: + * + * {@snippet lang = java: + * Gatherer.Downstream downstream = ...; + * A state = gatherer.initializer().get(); + * for (T t : data) { + * gatherer.integrator().integrate(state, t, downstream); + * } + * gatherer.finisher().accept(state, downstream); + * } + * + *

    However, the library is free to partition the input, perform the + * integrations on the partitions, and then use the combiner function to + * combine the partial results to achieve a gathering operation. (Depending + * on the specific gathering operation, this may perform better or worse, + * depending on the relative cost of the integrator and combiner functions.) + * + *

    In addition to the predefined implementations in {@link Gatherers}, the + * static factory methods {@code of(...)} and {@code ofSequential(...)} + * can be used to construct gatherers. For example, you could create a gatherer + * that implements the equivalent of + * {@link java.util.stream.Stream#map(java.util.function.Function)} with: + * + * {@snippet lang = java: + * public static Gatherer map(Function mapper) { + * return Gatherer.of( + * (unused, element, downstream) -> // integrator + * downstream.push(mapper.apply(element)) + * ); + * } + * } + * + *

    Gatherers are designed to be composed; two or more Gatherers can + * be composed into a single Gatherer using the {@link #andThen(Gatherer)} + * method. + * + * {@snippet lang = java: + * // using the implementation of `map` as seen above + * Gatherer increment = map(i -> i + 1); + * + * Gatherer toString = map(i -> i.toString()); + * + * Gatherer incrementThenToString = increment.andThen(toString); + * } + * + *

    As an example, a Gatherer implementing a sequential Prefix Scan could + * be done the following way: + * + * {@snippet lang = java: + * public static Gatherer scan( + * Supplier initial, + * BiFunction scanner) { + * + * class State { + * R current = initial.get(); + * } + * + * return Gatherer.ofSequential( + * State::new, + * Gatherer.Integrator.ofGreedy((state, element, downstream) -> { + * state.current = scanner.apply(state.current, element); + * return downstream.push(state.current); + * }) + * ); + * } + * } + * + *

    Example of usage: + * + * {@snippet lang = java: + * // will contain: ["1", "12", "123", "1234", "12345", "123456", "1234567", "12345678", "123456789"] + * List numberStrings = + * Stream.of(1,2,3,4,5,6,7,8,9) + * .gather( + * scan(() -> "", (string, number) -> string + number) + * ) + * .toList(); + * } + * + * @implSpec Libraries that implement transformations based on {@code Gatherer}, + * such as {@link Stream#gather(Gatherer)}, must adhere to the following + * constraints: + *

      + *
    • Gatherers whose initializer is {@link #defaultInitializer()} are + * considered to be stateless, and invoking their initializer is optional. + *
    • + *
    • Gatherers whose integrator is an instance of {@link Integrator.Greedy} + * can be assumed not to short-circuit, and the return value of invoking + * {@link Integrator#integrate(Object, Object, Downstream)} does not need to + * be inspected.
    • + *
    • The first argument passed to the integration function, both + * arguments passed to the combiner function, and the argument passed to the + * finisher function must be the result of a previous invocation of the + * initializer or combiner functions.
    • + *
    • The implementation should not do anything with the result of any of + * the initializer or combiner functions other than to + * pass them again to the integrator, combiner, or finisher functions.
    • + *
    • Once a state object is passed to the combiner or finisher function, + * it is never passed to the integrator function again.
    • + *
    • When the integrator function returns {@code false}, + * it shall be interpreted just as if there were no more elements to pass + * it.
    • + *
    • For parallel evaluation, the gathering implementation must manage + * that the input is properly partitioned, that partitions are processed + * in isolation, and combining happens only after integration is complete + * for both partitions.
    • + *
    • Gatherers whose combiner is {@link #defaultCombiner()} may only be + * evaluated sequentially. All other combiners allow the operation to be + * parallelized by initializing each partition in separation, invoking + * the integrator until it returns {@code false}, and then joining each + * partitions state using the combiner, and then invoking the finisher on + * the joined state. Outputs and state later in the input sequence will + * be discarded if processing an earlier partition short-circuits.
    • + *
    • Gatherers whose finisher is {@link #defaultFinisher()} are considered + * to not have an end-of-stream hook and invoking their finisher is + * optional.
    • + *
    + * + * @see Stream#gather(Gatherer) + * @see Gatherers + * + * @param the type of input elements to the gatherer operation + * @param the potentially mutable state type of the gatherer operation + * (often hidden as an implementation detail) + * @param the type of output elements from the gatherer operation + * @since 22 + */ +@PreviewFeature(feature = PreviewFeature.Feature.STREAM_GATHERERS) +public interface Gatherer { + /** + * A function that produces an instance of the intermediate state used for + * this gathering operation. + * + * @implSpec The implementation in this interface returns + * {@link #defaultInitializer()}. + * + * @return A function that produces an instance of the intermediate state + * used for this gathering operation + */ + default Supplier initializer() { + return defaultInitializer(); + }; + + /** + * A function which integrates provided elements, potentially using + * the provided intermediate state, optionally producing output to the + * provided {@link Downstream}. + * + * @return a function which integrates provided elements, potentially using + * the provided state, optionally producing output to the provided + * Downstream + */ + Integrator integrator(); + + /** + * A function which accepts two intermediate states and combines them into + * one. + * + * @implSpec The implementation in this interface returns + * {@link #defaultCombiner()}. + * + * @return a function which accepts two intermediate states and combines + * them into one + */ + default BinaryOperator combiner() { + return defaultCombiner(); + } + + /** + * A function which accepts the final intermediate state + * and a {@link Downstream} object, allowing to perform a final action at + * the end of input elements. + * + * @implSpec The implementation in this interface returns + * {@link #defaultFinisher()}. + * + * @return a function which transforms the intermediate result to the final + * result(s) which are then passed on to the provided Downstream + */ + default BiConsumer> finisher() { + return defaultFinisher(); + } + + /** + * Returns a composed Gatherer which connects the output of this Gatherer + * to the input of that Gatherer. + * + * @implSpec The implementation in this interface returns a new Gatherer + * which is semantically equivalent to the combination of + * {@code this} and {@code that} gatherer. + * + * @param that the other gatherer + * @param The type of output of that Gatherer + * @throws NullPointerException if the argument is {@code null} + * @return returns a composed Gatherer which connects the output of this + * Gatherer as input that Gatherer + */ + default Gatherer andThen(Gatherer that) { + Objects.requireNonNull(that); + return Gatherers.Composite.of(this, that); + } + + /** + * Returns an initializer which is the default initializer of a Gatherer. + * The returned initializer identifies that the owner Gatherer is stateless. + * + * @implSpec This method always returns the same instance. + * + * @see Gatherer#initializer() + * @return the instance of the default initializer + * @param the type of the state of the returned initializer + */ + static Supplier defaultInitializer() { + return Gatherers.Value.DEFAULT.initializer(); + } + + /** + * Returns a combiner which is the default combiner of a Gatherer. + * The returned combiner identifies that the owning Gatherer must only + * be evaluated sequentially. + * + * @implSpec This method always returns the same instance. + * + * @see Gatherer#finisher() + * @return the instance of the default combiner + * @param the type of the state of the returned combiner + */ + static BinaryOperator defaultCombiner() { + return Gatherers.Value.DEFAULT.combiner(); + } + + /** + * Returns a {@code finisher} which is the default finisher of + * a {@code Gatherer}. + * The returned finisher identifies that the owning Gatherer performs + * no additional actions at the end of input. + * + * @implSpec This method always returns the same instance. + * + * @see Gatherer#finisher() + * @return the instance of the default finisher + * @param the type of the state of the returned finisher + * @param the type of the Downstream of the returned finisher + */ + static BiConsumer> defaultFinisher() { + return Gatherers.Value.DEFAULT.finisher(); + } + + /** + * Returns a new, sequential, and stateless {@code Gatherer} described by + * the given {@code integrator}. + * + * @param integrator the integrator function for the new gatherer + * @param the type of input elements for the new gatherer + * @param the type of results for the new gatherer + * @throws NullPointerException if the argument is {@code null} + * @return the new {@code Gatherer} + */ + static Gatherer ofSequential( + Integrator integrator) { + return of( + defaultInitializer(), + integrator, + defaultCombiner(), + defaultFinisher() + ); + } + + /** + * Returns a new, sequential, and stateless {@code Gatherer} described by + * the given {@code integrator} and {@code finisher}. + * + * @param integrator the integrator function for the new gatherer + * @param finisher the finisher function for the new gatherer + * @param the type of input elements for the new gatherer + * @param the type of results for the new gatherer + * @throws NullPointerException if any argument is {@code null} + * @return the new {@code Gatherer} + */ + static Gatherer ofSequential( + Integrator integrator, + BiConsumer> finisher) { + return of( + defaultInitializer(), + integrator, + defaultCombiner(), + finisher + ); + } + + /** + * Returns a new, sequential, {@code Gatherer} described by the given + * {@code initializer} and {@code integrator}. + * + * @param initializer the initializer function for the new gatherer + * @param integrator the integrator function for the new gatherer + * @param the type of input elements for the new gatherer + * @param the type of state for the new gatherer + * @param the type of results for the new gatherer + * @throws NullPointerException if any argument is {@code null} + * @return the new {@code Gatherer} + */ + static Gatherer ofSequential( + Supplier initializer, + Integrator integrator) { + return of( + initializer, + integrator, + defaultCombiner(), + defaultFinisher() + ); + } + + /** + * Returns a new, sequential, {@code Gatherer} described by the given + * {@code initializer}, {@code integrator}, and {@code finisher}. + * + * @param initializer the initializer function for the new gatherer + * @param integrator the integrator function for the new gatherer + * @param finisher the finisher function for the new gatherer + * @param the type of input elements for the new gatherer + * @param the type of state for the new gatherer + * @param the type of results for the new gatherer + * @throws NullPointerException if any argument is {@code null} + * @return the new {@code Gatherer} + */ + static Gatherer ofSequential( + Supplier initializer, + Integrator integrator, + BiConsumer> finisher) { + return of( + initializer, + integrator, + defaultCombiner(), + finisher + ); + } + + /** + * Returns a new, parallelizable, and stateless {@code Gatherer} described + * by the given {@code integrator}. + * + * @param integrator the integrator function for the new gatherer + * @param the type of input elements for the new gatherer + * @param the type of results for the new gatherer + * @throws NullPointerException if any argument is {@code null} + * @return the new {@code Gatherer} + */ + static Gatherer of(Integrator integrator) { + return of( + defaultInitializer(), + integrator, + Gatherers.Value.DEFAULT.statelessCombiner, + defaultFinisher() + ); + } + + /** + * Returns a new, parallelizable, and stateless {@code Gatherer} described + * by the given {@code integrator} and {@code finisher}. + * + * @param integrator the integrator function for the new gatherer + * @param finisher the finisher function for the new gatherer + * @param the type of input elements for the new gatherer + * @param the type of results for the new gatherer + * @throws NullPointerException if any argument is {@code null} + * @return the new {@code Gatherer} + */ + static Gatherer of( + Integrator integrator, + BiConsumer> finisher) { + return of( + defaultInitializer(), + integrator, + Gatherers.Value.DEFAULT.statelessCombiner, + finisher + ); + } + + /** + * Returns a new, parallelizable, {@code Gatherer} described by the given + * {@code initializer}, {@code integrator}, {@code combiner} and + * {@code finisher}. + * + * @param initializer the initializer function for the new gatherer + * @param integrator the integrator function for the new gatherer + * @param combiner the combiner function for the new gatherer + * @param finisher the finisher function for the new gatherer + * @param the type of input elements for the new gatherer + * @param the type of state for the new gatherer + * @param the type of results for the new gatherer + * @throws NullPointerException if any argument is {@code null} + * @return the new {@code Gatherer} + */ + static Gatherer of( + Supplier initializer, + Integrator integrator, + BinaryOperator combiner, + BiConsumer> finisher) { + return new Gatherers.GathererImpl<>( + Objects.requireNonNull(initializer), + Objects.requireNonNull(integrator), + Objects.requireNonNull(combiner), + Objects.requireNonNull(finisher) + ); + } + + /** + * A Downstream object is the next stage in a pipeline of operations, + * to which elements can be sent. + * @param the type of elements this downstream accepts + * @since 22 + */ + @FunctionalInterface + @PreviewFeature(feature = PreviewFeature.Feature.STREAM_GATHERERS) + interface Downstream { + + /** + * Pushes, if possible, the provided element downstream -- to the next + * stage in the pipeline. + * + * @implSpec If this method returns {@code false} then no further + * elements will be accepted and subsequent invocations of this method + * will return {@code false}. + * + * @param element the element to push downstream + * @return {@code true} if more elements can be sent, + * and {@code false} if not. + */ + boolean push(T element); + + /** + * Checks whether the next stage is known to not want + * any more elements sent to it. + * + * @apiNote This is best-effort only, once this returns {@code true} it + * should never return {@code false} again for the same instance. + * + * @implSpec The implementation in this interface returns {@code false}. + * + * @return {@code true} if this Downstream is known not to want any + * more elements sent to it, {@code false} if otherwise + */ + default boolean isRejecting() { return false; } + } + + /** + * An Integrator receives elements and processes them, + * optionally using the supplied state, and optionally sends incremental + * results downstream. + * + * @param the type of state used by this integrator + * @param the type of elements this integrator consumes + * @param the type of results this integrator can produce + * @since 22 + */ + @FunctionalInterface + @PreviewFeature(feature = PreviewFeature.Feature.STREAM_GATHERERS) + interface Integrator { + /** + * Performs an action given: the current state, the next element, and + * a downstream object; potentially inspecting and/or updating + * the state, optionally sending any number of elements downstream + * -- and then returns whether more elements are to be consumed or not. + * + * @param state The state to integrate into + * @param element The element to integrate + * @param downstream The downstream object of this integration + * @return {@code true} if subsequent integration is desired, + * {@code false} if not + */ + boolean integrate(A state, T element, Downstream downstream); + + /** + * Factory method for turning Integrator-shaped lambdas into + * Integrators. + * + * @param integrator a lambda to create as Integrator + * @return the given lambda as an Integrator + * @param the type of state used by this integrator + * @param the type of elements this integrator receives + * @param the type of results this integrator can produce + */ + @ForceInline + static Integrator of(Integrator integrator) { + return integrator; + } + + /** + * Factory method for turning Integrator-shaped lambdas into + * {@link Greedy} Integrators. + * + * @param greedy a lambda to create as Integrator.Greedy + * @return the given lambda as a Greedy Integrator + * @param the type of state used by this integrator + * @param the type of elements this integrator receives + * @param the type of results this integrator can produce + */ + @ForceInline + static Greedy ofGreedy(Greedy greedy) { + return greedy; + } + + /** + * Greedy Integrators consume all their input, and may only relay that + * the downstream does not want more elements. + * + * @implSpec This interface is used to communicate that no + * short-circuiting will be initiated by this Integrator, and that + * information can then be used to optimize evaluation. + * + * @param the type of state used by this integrator + * @param the type of elements this greedy integrator receives + * @param the type of results this greedy integrator can produce + * @since 22 + */ + @FunctionalInterface + @PreviewFeature(feature = PreviewFeature.Feature.STREAM_GATHERERS) + interface Greedy extends Integrator { } + } +} diff --git a/src/java.base/share/classes/java/util/stream/GathererOp.java b/src/java.base/share/classes/java/util/stream/GathererOp.java new file mode 100644 index 0000000000000..24b42fb28adb4 --- /dev/null +++ b/src/java.base/share/classes/java/util/stream/GathererOp.java @@ -0,0 +1,754 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package java.util.stream; + +import jdk.internal.vm.annotation.ForceInline; + +import java.lang.invoke.MethodHandles; +import java.lang.invoke.VarHandle; +import java.util.Comparator; +import java.util.Iterator; +import java.util.Optional; +import java.util.Spliterator; +import java.util.concurrent.CountedCompleter; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.function.BiConsumer; +import java.util.function.BiFunction; +import java.util.function.BinaryOperator; +import java.util.function.Consumer; +import java.util.function.Function; +import java.util.function.IntFunction; +import java.util.function.Predicate; +import java.util.function.Supplier; +import java.util.function.ToDoubleFunction; +import java.util.function.ToIntFunction; +import java.util.function.ToLongFunction; +import java.util.stream.Gatherer.Integrator; + +/** + * Runtime machinery for evaluating Gatherers under different modes. + * The performance-critical code below contains some more complicated encodings: + * therefore, make sure to run benchmarks to verify changes to prevent regressions. + * + * @since 22 + */ +final class GathererOp extends ReferencePipeline { + @SuppressWarnings("unchecked") + static Stream of( + ReferencePipeline upstream, + Gatherer gatherer) { + // When attaching a gather-operation onto another gather-operation, + // we can fuse them into one + if (upstream.getClass() == GathererOp.class) { + return new GathererOp<>( + ((GathererOp) upstream).gatherer.andThen(gatherer), + (GathererOp) upstream); + } else { + return new GathererOp<>( + (ReferencePipeline) upstream, + gatherer); + } + } + + /* + * GathererOp.NodeBuilder is a lazy accumulator of elements with O(1) + * `append`, and O(8) `join` (concat). + * + * First `append` inflates a growable Builder, the O(8) for `join` is + * because we prefer to delegate to `append` for small concatenations to + * avoid excessive indirections (unbalanced Concat-trees) when joining many + * NodeBuilders together. + */ + static final class NodeBuilder implements Consumer { + private static final int LINEAR_APPEND_MAX = 8; // TODO revisit + static final class Builder extends SpinedBuffer implements Node { + Builder() { + } + } + + NodeBuilder() { + } + + private Builder rightMost; + private Node leftMost; + + private boolean isEmpty() { + return rightMost == null && leftMost == null; + } + + @Override + public void accept(X x) { + final var b = rightMost; + (b == null ? (rightMost = new NodeBuilder.Builder<>()) : b).accept(x); + } + + public NodeBuilder join(NodeBuilder that) { + if (isEmpty()) + return that; + + if (!that.isEmpty()) { + final var tb = that.build(); + if (rightMost != null && tb instanceof NodeBuilder.Builder + && tb.count() < LINEAR_APPEND_MAX) + tb.forEach(this); // Avoid conc for small nodes + else + leftMost = Nodes.conc(StreamShape.REFERENCE, this.build(), tb); + } + + return this; + } + + public Node build() { + if (isEmpty()) + return Nodes.emptyNode(StreamShape.REFERENCE); + + final var rm = rightMost; + + if (rm != null) { + rightMost = null; // Make sure builder isn't reused + final var lm = leftMost; + leftMost = (lm == null) ? rm : Nodes.conc(StreamShape.REFERENCE, lm, rm); + } + + return leftMost; + } + } + + static final class GatherSink implements Sink, Gatherer.Downstream { + private final Sink sink; + private final Gatherer gatherer; + private final Integrator integrator; // Optimization: reuse + private A state; + private boolean proceed = true; + + GatherSink(Gatherer gatherer, Sink sink) { + this.gatherer = gatherer; + this.sink = sink; + this.integrator = gatherer.integrator(); + } + + // java.util.stream.Sink contract below: + + @Override + public void begin(long size) { + final var initializer = gatherer.initializer(); + if (initializer != Gatherer.defaultInitializer()) // Optimization + state = initializer.get(); + sink.begin(size); + } + + @Override + public void accept(T t) { + /* Benchmarks have indicated that doing an unconditional write to + * `proceed` is more efficient than branching. + * We use `&=` here to prevent flips from `false` -> `true`. + * + * As of writing this, taking `greedy` or `stateless` into + * consideration at this point doesn't yield any performance gains. + */ + proceed &= integrator.integrate(state, t, this); + } + + @Override + public boolean cancellationRequested() { + return cancellationRequested(proceed); + } + + private boolean cancellationRequested(boolean knownProceed) { + // Highly performance sensitive + return !(knownProceed && (!sink.cancellationRequested() || (proceed = false))); + } + + @Override + public void end() { + final var finisher = gatherer.finisher(); + if (finisher != Gatherer.defaultFinisher()) // Optimization + finisher.accept(state, this); + sink.end(); + state = null; // GC assistance + } + + // Gatherer.Sink contract below: + + @Override + public boolean isRejecting() { + return !proceed; + } + + @Override + public boolean push(R r) { + var p = proceed; + if (p) + sink.accept(r); + return !cancellationRequested(p); + } + } + + private static int opFlagsFor(Integrator integrator) { + return integrator instanceof Integrator.Greedy + ? GREEDY_FLAGS : SHORT_CIRCUIT_FLAGS; + } + + private static final int DEFAULT_FLAGS = + StreamOpFlag.NOT_SORTED | StreamOpFlag.NOT_DISTINCT | + StreamOpFlag.NOT_SIZED; + + private static final int SHORT_CIRCUIT_FLAGS = + DEFAULT_FLAGS | StreamOpFlag.IS_SHORT_CIRCUIT; + + private static final int GREEDY_FLAGS = + DEFAULT_FLAGS; + + final Gatherer gatherer; + + /* + * This constructor is used for initial .gather() invocations + */ + private GathererOp(ReferencePipeline upstream, Gatherer gatherer) { + /* TODO this is a prime spot for pre-super calls to make sure that + * we only need to call `integrator()` once. + */ + super(upstream, opFlagsFor(gatherer.integrator())); + this.gatherer = gatherer; + } + + /* + * This constructor is used when fusing subsequent .gather() invocations + */ + @SuppressWarnings("unchecked") + private GathererOp(Gatherer gatherer, GathererOp upstream) { + super((AbstractPipeline) upstream.upstream(), + upstream, + opFlagsFor(gatherer.integrator())); + this.gatherer = gatherer; + } + + /* This allows internal access to the previous stage, + * to be able to fuse `gather` followed by `collect`. + */ + @SuppressWarnings("unchecked") + private AbstractPipeline upstream() { + return (AbstractPipeline) super.previousStage; + } + + @Override + boolean opIsStateful() { + // TODO + /* Currently GathererOp is always stateful, but what could be tried is: + * return gatherer.initializer() != Gatherer.defaultInitializer() + * || gatherer.combiner() == Gatherer.defaultCombiner() + * || gatherer.finisher() != Gatherer.defaultFinisher(); + */ + return true; + } + + @Override + Sink opWrapSink(int flags, Sink downstream) { + return new GatherSink<>(gatherer, downstream); + } + + /* + * This is used when evaluating .gather() operations interspersed with + * other Stream operations (in parallel) + */ + @Override + Node opEvaluateParallel(PipelineHelper unused1, + Spliterator spliterator, + IntFunction unused2) { + return this., Node>evaluate( + upstream().wrapSpliterator(spliterator), + true, + gatherer, + NodeBuilder::new, + NodeBuilder::accept, + NodeBuilder::join, + NodeBuilder::build + ); + } + + @Override + Spliterator opEvaluateParallelLazy(PipelineHelper helper, + Spliterator spliterator) { + /* + * There's a very small subset of possible Gatherers which would be + * expressible as Spliterators directly, + * - the Gatherer's initializer is Gatherer.defaultInitializer(), + * - the Gatherer's combiner is NOT Gatherer.defaultCombiner() + * - the Gatherer's finisher is Gatherer.defaultFinisher() + */ + return opEvaluateParallel(null, spliterator, null).spliterator(); + } + + /* gather-operations immediately followed by (terminal) collect-operations + * are fused together to avoid having to first run the gathering to + * completion and only after that be able to run the collection on top of + * the output. This is highly beneficial in the parallel case as stateful + * operations cannot be pipelined in the ReferencePipeline implementation. + * Overriding collect-operations overcomes this limitation. + */ + @Override + public CR collect(Collector c) { + linkOrConsume(); // Important for structural integrity + final var parallel = isParallel(); + final var u = upstream(); + return evaluate( + u.wrapSpliterator(u.sourceSpliterator(0)), + parallel, + gatherer, + c.supplier(), + c.accumulator(), + parallel ? c.combiner() : null, + c.characteristics().contains(Collector.Characteristics.IDENTITY_FINISH) + ? null + : c.finisher() + ); + } + + @Override + public RR collect(Supplier supplier, + BiConsumer accumulator, + BiConsumer combiner) { + linkOrConsume(); // Important for structural integrity + final var parallel = isParallel(); + final var u = upstream(); + return evaluate( + u.wrapSpliterator(u.sourceSpliterator(0)), + parallel, + gatherer, + supplier, + accumulator, + parallel ? (l, r) -> { + combiner.accept(l, r); + return l; + } : null, + null + ); + } + + /* + * evaluate(...) is the primary execution mechanism besides opWrapSink() + * and implements both sequential, hybrid parallel-sequential, and + * parallel evaluation + */ + private CR evaluate(final Spliterator spliterator, + final boolean parallel, + final Gatherer gatherer, + final Supplier collectorSupplier, + final BiConsumer collectorAccumulator, + final BinaryOperator collectorCombiner, + final Function collectorFinisher) { + + // There are two main sections here: sequential and parallel + + final var initializer = gatherer.initializer(); + final var integrator = gatherer.integrator(); + + // Optimization + final boolean greedy = integrator instanceof Integrator.Greedy; + + // Sequential evaluation section starts here. + + // Sequential is the fusion of a Gatherer and a Collector which can + // be evaluated sequentially. + final class Sequential implements Consumer, Gatherer.Downstream { + A state; + CA collectorState; + boolean proceed; + + Sequential() { + if (initializer != Gatherer.defaultInitializer()) + state = initializer.get(); + collectorState = collectorSupplier.get(); + proceed = true; + } + + @ForceInline + Sequential evaluateUsing(Spliterator spliterator) { + if (greedy) + spliterator.forEachRemaining(this); + else + do { + } while (proceed && spliterator.tryAdvance(this)); + + return this; + } + + /* + * No need to override isKnownDone() as the default is `false` + * and collectors can never short-circuit. + */ + @Override + public boolean push(R r) { + collectorAccumulator.accept(collectorState, r); + return true; + } + + @Override + public void accept(T t) { + /* + * Benchmarking has shown that, in this case, conditional + * writing of `proceed` is desirable and if that was not the + * case, then the following line would've been clearer: + * + * proceed &= integrator.integrate(state, t, this); + */ + + var ignore = integrator.integrate(state, t, this) + || (!greedy && (proceed = false)); + } + + @SuppressWarnings("unchecked") + public CR get() { + final var finisher = gatherer.finisher(); + if (finisher != Gatherer.defaultFinisher()) + finisher.accept(state, this); + // IF collectorFinisher == null -> IDENTITY_FINISH + return (collectorFinisher == null) + ? (CR) collectorState + : collectorFinisher.apply(collectorState); + } + } + + /* + * It could be considered to also go to sequential mode if the + * operation is non-greedy AND the combiner is Gatherer.defaultCombiner() + * as those operations will not benefit from upstream parallel + * preprocessing which is the main advantage of the Hybrid evaluation + * strategy. + */ + if (!parallel) + return new Sequential().evaluateUsing(spliterator).get(); + + // Parallel section starts here: + + final var combiner = gatherer.combiner(); + + /* + * The following implementation of hybrid parallel-sequential + * Gatherer processing borrows heavily from ForeachOrderedTask, + * and adds handling of short-circuiting. + */ + @SuppressWarnings("serial") + final class Hybrid extends CountedCompleter { + private final long targetSize; + private final Hybrid leftPredecessor; + private final AtomicBoolean cancelled; + private final Sequential localResult; + + private Spliterator spliterator; + private Hybrid next; + + private static final VarHandle NEXT; + + static { + try { + MethodHandles.Lookup l = MethodHandles.lookup(); + NEXT = l.findVarHandle(Hybrid.class, "next", Hybrid.class); + } catch (Exception e) { + throw new InternalError(e); + } + } + + protected Hybrid(Spliterator spliterator) { + super(null); + this.spliterator = spliterator; + this.targetSize = + AbstractTask.suggestTargetSize(spliterator.estimateSize()); + this.localResult = new Sequential(); + this.cancelled = greedy ? null : new AtomicBoolean(false); + this.leftPredecessor = null; + } + + Hybrid(Hybrid parent, Spliterator spliterator, Hybrid leftPredecessor) { + super(parent); + this.spliterator = spliterator; + this.targetSize = parent.targetSize; + this.localResult = parent.localResult; + this.cancelled = parent.cancelled; + this.leftPredecessor = leftPredecessor; + } + + @Override + public Sequential getRawResult() { + return localResult; + } + + @Override + public void setRawResult(Sequential result) { + if (result != null) throw new IllegalStateException(); + } + + @Override + public void compute() { + var task = this; + Spliterator rightSplit = task.spliterator, leftSplit; + long sizeThreshold = task.targetSize; + boolean forkRight = false; + while ((greedy || !cancelled.get()) + && rightSplit.estimateSize() > sizeThreshold + && (leftSplit = rightSplit.trySplit()) != null) { + + var leftChild = new Hybrid(task, leftSplit, task.leftPredecessor); + var rightChild = new Hybrid(task, rightSplit, leftChild); + + /* leftChild and rightChild were just created and not + * fork():ed yet so no need for a volatile write + */ + leftChild.next = rightChild; + + // Fork the parent task + // Completion of the left and right children "happens-before" + // completion of the parent + task.addToPendingCount(1); + // Completion of the left child "happens-before" completion of + // the right child + rightChild.addToPendingCount(1); + + // If task is not on the left spine + if (task.leftPredecessor != null) { + /* + * Completion of left-predecessor, or left subtree, + * "happens-before" completion of left-most leaf node of + * right subtree. + * The left child's pending count needs to be updated before + * it is associated in the completion map, otherwise the + * left child can complete prematurely and violate the + * "happens-before" constraint. + */ + leftChild.addToPendingCount(1); + // Update association of left-predecessor to left-most + // leaf node of right subtree + if (NEXT.compareAndSet(task.leftPredecessor, task, leftChild)) { + // If replaced, adjust the pending count of the parent + // to complete when its children complete + task.addToPendingCount(-1); + } else { + // Left-predecessor has already completed, parent's + // pending count is adjusted by left-predecessor; + // left child is ready to complete + leftChild.addToPendingCount(-1); + } + } + + if (forkRight) { + rightSplit = leftSplit; + task = leftChild; + rightChild.fork(); + } else { + task = rightChild; + leftChild.fork(); + } + forkRight = !forkRight; + } + + /* + * Task's pending count is either 0 or 1. If 1 then the completion + * map will contain a value that is task, and two calls to + * tryComplete are required for completion, one below and one + * triggered by the completion of task's left-predecessor in + * onCompletion. Therefore there is no data race within the if + * block. + * + * IMPORTANT: Currently we only perform the processing of this + * upstream data if we know the operation is greedy -- as we cannot + * safely speculate on the cost/benefit ratio of parallelizing + * the pre-processing of upstream data under short-circuiting. + */ + if (greedy && task.getPendingCount() > 0) { + // Upstream elements are buffered + NodeBuilder nb = new NodeBuilder<>(); + rightSplit.forEachRemaining(nb); // Run the upstream + task.spliterator = nb.build().spliterator(); + } + task.tryComplete(); + } + + @Override + public void onCompletion(CountedCompleter caller) { + var s = spliterator; + spliterator = null; // GC assistance + + /* Performance sensitive since each leaf-task could have a + * spliterator of size 1 which means that all else is overhead + * which needs minimization. + */ + if (s != null + && (greedy || !cancelled.get()) + && !localResult.evaluateUsing(s).proceed + && !greedy) + cancelled.set(true); + + // The completion of this task *and* the dumping of elements + // "happens-before" completion of the associated left-most leaf task + // of right subtree (if any, which can be this task's right sibling) + @SuppressWarnings("unchecked") + var leftDescendant = (Hybrid) NEXT.getAndSet(this, null); + if (leftDescendant != null) { + leftDescendant.tryComplete(); + } + } + } + + /* + * The following implementation of parallel Gatherer processing + * borrows heavily from AbstractShortCircuitTask + */ + @SuppressWarnings("serial") + final class Parallel extends CountedCompleter { + private Spliterator spliterator; + private Parallel leftChild; // Only non-null if rightChild is + private Parallel rightChild; // Only non-null if leftChild is + private Sequential localResult; + private volatile boolean canceled; + private long targetSize; // lazily initialized + + private Parallel(Parallel parent, Spliterator spliterator) { + super(parent); + this.targetSize = parent.targetSize; + this.spliterator = spliterator; + } + + Parallel(Spliterator spliterator) { + super(null); + this.targetSize = 0L; + this.spliterator = spliterator; + } + + private long getTargetSize(long sizeEstimate) { + long s; + return ((s = targetSize) != 0 + ? s + : (targetSize = AbstractTask.suggestTargetSize(sizeEstimate))); + } + + @Override + public Sequential getRawResult() { + return localResult; + } + + @Override + public void setRawResult(Sequential result) { + if (result != null) throw new IllegalStateException(); + } + + private void doProcess() { + if (!(localResult = new Sequential()).evaluateUsing(spliterator).proceed + && !greedy) + cancelLaterTasks(); + } + + @Override + public void compute() { + Spliterator rs = spliterator, ls; + long sizeEstimate = rs.estimateSize(); + final long sizeThreshold = getTargetSize(sizeEstimate); + Parallel task = this; + boolean forkRight = false; + boolean proceed; + while ((proceed = (greedy || !task.isRequestedToCancel())) + && sizeEstimate > sizeThreshold + && (ls = rs.trySplit()) != null) { + final var leftChild = task.leftChild = new Parallel(task, ls); + final var rightChild = task.rightChild = new Parallel(task, rs); + task.setPendingCount(1); + if (forkRight) { + rs = ls; + task = leftChild; + rightChild.fork(); + } else { + task = rightChild; + leftChild.fork(); + } + forkRight = !forkRight; + sizeEstimate = rs.estimateSize(); + } + if (proceed) + task.doProcess(); + task.tryComplete(); + } + + Sequential merge(Sequential l, Sequential r) { + /* + * Only join the right if the left side didn't short-circuit, + * or when greedy + */ + if (greedy || (l != null && r != null && l.proceed)) { + l.state = combiner.apply(l.state, r.state); + l.collectorState = + collectorCombiner.apply(l.collectorState, r.collectorState); + l.proceed = r.proceed; + return l; + } + + return (l != null) ? l : r; + } + + @Override + public void onCompletion(CountedCompleter caller) { + spliterator = null; // GC assistance + if (leftChild != null) { + /* Results can only be null in the case where there's + * short-circuiting or when Gatherers are stateful but + * uses `null` as their state value. + */ + localResult = merge(leftChild.localResult, rightChild.localResult); + leftChild = rightChild = null; // GC assistance + } + } + + @SuppressWarnings("unchecked") + private Parallel getParent() { + return (Parallel) getCompleter(); + } + + private boolean isRequestedToCancel() { + boolean cancel = canceled; + if (!cancel) { + for (Parallel parent = getParent(); + !cancel && parent != null; + parent = parent.getParent()) + cancel = parent.canceled; + } + return cancel; + } + + private void cancelLaterTasks() { + // Go up the tree, cancel right siblings of this node and all parents + for (Parallel parent = getParent(), node = this; + parent != null; + node = parent, parent = parent.getParent()) { + // If node is a left child of parent, then has a right sibling + if (parent.leftChild == node) + parent.rightChild.canceled = true; + } + } + } + + if (combiner != Gatherer.defaultCombiner()) + return new Parallel(spliterator).invoke().get(); + else + return new Hybrid(spliterator).invoke().get(); + } +} \ No newline at end of file diff --git a/src/java.base/share/classes/java/util/stream/Gatherers.java b/src/java.base/share/classes/java/util/stream/Gatherers.java new file mode 100644 index 0000000000000..c201ee546091c --- /dev/null +++ b/src/java.base/share/classes/java/util/stream/Gatherers.java @@ -0,0 +1,707 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package java.util.stream; + +import jdk.internal.access.SharedSecrets; +import jdk.internal.javac.PreviewFeature; +import jdk.internal.vm.annotation.ForceInline; + +import java.util.ArrayDeque; +import java.util.List; +import java.util.Objects; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; +import java.util.concurrent.FutureTask; +import java.util.concurrent.Semaphore; +import java.util.function.BiConsumer; +import java.util.function.BiFunction; +import java.util.function.BinaryOperator; +import java.util.function.Function; +import java.util.function.Supplier; +import java.util.stream.Gatherer.Integrator; +import java.util.stream.Gatherer.Downstream; + +/** + * Implementations of {@link Gatherer} that provide useful intermediate + * operations, such as windowing functions, folding functions, + * transforming elements concurrently, etc. + * + * @since 22 +*/ +@PreviewFeature(feature = PreviewFeature.Feature.STREAM_GATHERERS) +public final class Gatherers { + private Gatherers() { } // This class is not intended to be instantiated + + // Public built-in Gatherers and factory methods for them + + /** + * Returns a Gatherer that gathers elements into windows + * -- encounter-ordered groups of elements -- of a fixed size. + * If the stream is empty then no window will be produced. + * The last window may contain fewer elements than the supplied window size. + * + *

    Example: + * {@snippet lang = java: + * // will contain: [[1, 2, 3], [4, 5, 6], [7, 8]] + * List> windows = + * Stream.of(1,2,3,4,5,6,7,8).gather(Gatherers.windowFixed(3)).toList(); + * } + * + * @implSpec Each window produced is an unmodifiable List; calls to any + * mutator method will always cause {@code UnsupportedOperationException} + * to be thrown. There are no guarantees on the implementation type or + * serializability of the produced Lists. + * + * @apiNote For efficiency reasons, windows may be allocated contiguously + * and eagerly. This means that choosing large window sizes for + * small streams may use excessive memory for the duration of + * evaluation of this operation. + * + * @param windowSize the size of the windows + * @param the type of elements the returned gatherer consumes + * and the contents of the windows it produces + * @return a new gatherer which groups elements into fixed-size windows + * @throws IllegalArgumentException when {@code windowSize} is less than 1 + */ + public static Gatherer> windowFixed(int windowSize) { + if (windowSize < 1) + throw new IllegalArgumentException("'windowSize' must be greater than zero"); + + class FixedWindow { + Object[] window; + int at; + + FixedWindow() { + at = 0; + window = new Object[windowSize]; + } + + boolean integrate(TR element, Downstream> downstream) { + window[at++] = element; + if (at < windowSize) { + return true; + } else { + final var oldWindow = window; + window = new Object[windowSize]; + at = 0; + return downstream.push( + SharedSecrets.getJavaUtilCollectionAccess() + .listFromTrustedArrayNullsAllowed(oldWindow) + ); + } + } + + void finish(Downstream> downstream) { + if (at > 0 && !downstream.isRejecting()) { + var lastWindow = new Object[at]; + System.arraycopy(window, 0, lastWindow, 0, at); + window = null; + at = 0; + downstream.push( + SharedSecrets.getJavaUtilCollectionAccess() + .listFromTrustedArrayNullsAllowed(lastWindow) + ); + } + } + } + return Gatherer.>ofSequential( + // Initializer + FixedWindow::new, + + // Integrator + Integrator.>ofGreedy(FixedWindow::integrate), + + // Finisher + FixedWindow::finish + ); + } + + /** + * Returns a Gatherer that gathers elements into windows -- + * encounter-ordered groups of elements -- of a given size, where each + * subsequent window includes all elements of the previous window except + * for the least recent, and adds the next element in the stream. + * If the stream is empty then no window will be produced. If the size of + * the stream is smaller than the window size then only one window will + * be produced, containing all elements in the stream. + * + *

    Example: + * {@snippet lang = java: + * // will contain: [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [6, 7], [7, 8]] + * List> windows2 = + * Stream.of(1,2,3,4,5,6,7,8).gather(Gatherers.windowSliding(2)).toList(); + * + * // will contain: [[1, 2, 3, 4, 5, 6], [2, 3, 4, 5, 6, 7], [3, 4, 5, 6, 7, 8]] + * List> windows6 = + * Stream.of(1,2,3,4,5,6,7,8).gather(Gatherers.windowSliding(6)).toList(); + * } + * + * @implSpec Each window produced is an unmodifiable List; calls to any + * mutator method will always cause {@code UnsupportedOperationException} + * to be thrown. There are no guarantees on the implementation type or + * serializability of the produced Lists. + * + * @apiNote For efficiency reasons, windows may be allocated contiguously + * and eagerly. This means that choosing large window sizes for + * small streams may use excessive memory for the duration of + * evaluation of this operation. + * + * @param windowSize the size of the windows + * @param the type of elements the returned gatherer consumes + * and the contents of the windows it produces + * @return a new gatherer which groups elements into sliding windows + * @throws IllegalArgumentException when windowSize is less than 1 + */ + public static Gatherer> windowSliding(int windowSize) { + if (windowSize < 1) + throw new IllegalArgumentException("'windowSize' must be greater than zero"); + + class SlidingWindow { + Object[] window; + int at; + boolean firstWindow; + + SlidingWindow() { + firstWindow = true; + at = 0; + window = new Object[windowSize]; + } + + boolean integrate(TR element, Downstream> downstream) { + window[at++] = element; + if (at < windowSize) { + return true; + } else { + final var oldWindow = window; + final var newWindow = new Object[windowSize]; + System.arraycopy(oldWindow,1, newWindow, 0, windowSize - 1); + window = newWindow; + at -= 1; + firstWindow = false; + return downstream.push( + SharedSecrets.getJavaUtilCollectionAccess() + .listFromTrustedArrayNullsAllowed(oldWindow) + ); + } + } + + void finish(Downstream> downstream) { + if (firstWindow && at > 0 && !downstream.isRejecting()) { + var lastWindow = new Object[at]; + System.arraycopy(window, 0, lastWindow, 0, at); + window = null; + at = 0; + downstream.push( + SharedSecrets.getJavaUtilCollectionAccess() + .listFromTrustedArrayNullsAllowed(lastWindow) + ); + } + } + } + return Gatherer.>ofSequential( + // Initializer + SlidingWindow::new, + + // Integrator + Integrator.>ofGreedy(SlidingWindow::integrate), + + // Finisher + SlidingWindow::finish + ); + } + + /** + * Returns a Gatherer that performs an ordered, reduction-like, + * transformation for scenarios where no combiner-function can be + * implemented, or for reductions which are intrinsically + * order-dependent. + * + * @implSpec If no exceptions are thrown during processing, then this + * operation only ever produces a single element. + * + *

    Example: + * {@snippet lang = java: + * // will contain: Optional["123456789"] + * Optional numberString = + * Stream.of(1,2,3,4,5,6,7,8,9) + * .gather( + * Gatherers.fold(() -> "", (string, number) -> string + number) + * ) + * .findFirst(); + * } + * + * @see java.util.stream.Stream#reduce(Object, BinaryOperator) + * + * @param initial the identity value for the fold operation + * @param folder the folding function + * @param the type of elements the returned gatherer consumes + * @param the type of elements the returned gatherer produces + * @return a new Gatherer + * @throws NullPointerException if any of the parameters are {@code null} + */ + public static Gatherer fold( + Supplier initial, + BiFunction folder) { + Objects.requireNonNull(initial, "'initial' must not be null"); + Objects.requireNonNull(folder, "'folder' must not be null"); + + class State { + R value = initial.get(); + State() {} + } + + return Gatherer.ofSequential( + State::new, + Integrator.ofGreedy((state, element, downstream) -> { + state.value = folder.apply(state.value, element); + return true; + }), + (state, downstream) -> downstream.push(state.value) + ); + } + + /** + * Returns a Gatherer that performs a Prefix Scan -- an incremental + * accumulation -- using the provided functions. Starting with an + * initial value obtained from the {@code Supplier}, each subsequent + * value is obtained by applying the {@code BiFunction} to the current + * value and the next input element, after which the resulting value is + * produced downstream. + * + *

    Example: + * {@snippet lang = java: + * // will contain: ["1", "12", "123", "1234", "12345", "123456", "1234567", "12345678", "123456789"] + * List numberStrings = + * Stream.of(1,2,3,4,5,6,7,8,9) + * .gather( + * Gatherers.scan(() -> "", (string, number) -> string + number) + * ) + * .toList(); + * } + * + * @param initial the supplier of the initial value for the scanner + * @param scanner the function to apply for each element + * @param the type of element which this gatherer consumes + * @param the type of element which this gatherer produces + * @return a new Gatherer which performs a prefix scan + * @throws NullPointerException if any of the parameters are {@code null} + */ + public static Gatherer scan( + Supplier initial, + BiFunction scanner) { + Objects.requireNonNull(initial, "'initial' must not be null"); + Objects.requireNonNull(scanner, "'scanner' must not be null"); + + class State { + R current = initial.get(); + boolean integrate(T element, Downstream downstream) { + return downstream.push(current = scanner.apply(current, element)); + } + } + + return Gatherer.ofSequential(State::new, + Integrator.ofGreedy(State::integrate)); + } + + /** + * An operation which executes a function concurrently + * with a configured level of max concurrency, using + * virtual threads. + * This operation preserves the ordering of the stream. + * + * @apiNote In progress tasks will be attempted to be cancelled, + * on a best-effort basis, in situations where the downstream no longer + * wants to receive any more elements. + * + * @implSpec If a result of the function is to be pushed downstream but + * instead the function completed exceptionally then the corresponding + * exception will instead be rethrown by this method as an instance of + * {@link RuntimeException}, after which any remaining tasks are canceled. + * + * @param maxConcurrency the maximum concurrency desired + * @param mapper a function to be executed concurrently + * @param the type of input + * @param the type of output + * @return a new Gatherer + * @throws IllegalArgumentException if {@code maxConcurrency} is less than 1 + * @throws NullPointerException if {@code mapper} is {@code null} + */ + public static Gatherer mapConcurrent( + final int maxConcurrency, + final Function mapper) { + if (maxConcurrency < 1) + throw new IllegalArgumentException( + "'maxConcurrency' must be greater than 0"); + + Objects.requireNonNull(mapper, "'mapper' must not be null"); + + class State { + // ArrayDeque default initial size is 16 + final ArrayDeque> window = + new ArrayDeque<>(Math.min(maxConcurrency, 16)); + final Semaphore windowLock = new Semaphore(maxConcurrency); + + final boolean integrate(T element, + Downstream downstream) { + if (!downstream.isRejecting()) + createTaskFor(element); + return flush(0, downstream); + } + + final void createTaskFor(T element) { + windowLock.acquireUninterruptibly(); + + var task = new FutureTask(() -> { + try { + return mapper.apply(element); + } finally { + windowLock.release(); + } + }); + + var wasAddedToWindow = window.add(task); + assert wasAddedToWindow; + + Thread.startVirtualThread(task); + } + + final boolean flush(long atLeastN, + Downstream downstream) { + boolean proceed = !downstream.isRejecting(); + boolean interrupted = false; + try { + Future current; + while (proceed + && (current = window.peek()) != null + && (current.isDone() || atLeastN > 0)) { + proceed &= downstream.push(current.get()); + atLeastN -= 1; + + var correctRemoval = window.pop() == current; + assert correctRemoval; + } + } catch(InterruptedException ie) { + proceed = false; + interrupted = true; + } catch (ExecutionException e) { + proceed = false; // Ensure cleanup + final var cause = e.getCause(); + throw (cause instanceof RuntimeException re) + ? re + : new RuntimeException(cause == null ? e : cause); + } finally { + // Clean up + if (!proceed) { + Future next; + while ((next = window.pollFirst()) != null) { + next.cancel(true); + } + } + } + + if (interrupted) + Thread.currentThread().interrupt(); + + return proceed; + } + } + + return Gatherer.ofSequential( + State::new, + Integrator.ofGreedy(State::integrate), + (state, downstream) -> state.flush(Long.MAX_VALUE, downstream) + ); + } + + // Implementation details + + /* + * This enum is used to provide the default functions for the + * factory methods + * and for the default methods for when implementing the Gatherer interface. + * + * This serves the following purposes: + * 1. removes the need for using `null` for signalling absence of specified + * value and thereby hiding user bugs + * 2. allows to check against these default values to avoid calling methods + * needlessly + * 3. allows for more efficient composition and evaluation + */ + @SuppressWarnings("rawtypes") + enum Value implements Supplier, BinaryOperator, BiConsumer { + DEFAULT; + + final BinaryOperator statelessCombiner = new BinaryOperator<>() { + @Override public Void apply(Void left, Void right) { return null; } + }; + + // BiConsumer + @Override public void accept(Object state, Object downstream) {} + + // BinaryOperator + @Override public Object apply(Object left, Object right) { + throw new UnsupportedOperationException("This combiner cannot be used!"); + } + + // Supplier + @Override public Object get() { return null; } + + @ForceInline + @SuppressWarnings("unchecked") + Supplier initializer() { return (Supplier)this; } + + @ForceInline + @SuppressWarnings("unchecked") + BinaryOperator combiner() { return (BinaryOperator) this; } + + @ForceInline + @SuppressWarnings("unchecked") + BiConsumer> finisher() { + return (BiConsumer>) this; + } + } + + record GathererImpl( + @Override Supplier initializer, + @Override Integrator integrator, + @Override BinaryOperator combiner, + @Override BiConsumer> finisher) implements Gatherer { + + static GathererImpl of( + Supplier initializer, + Integrator integrator, + BinaryOperator combiner, + BiConsumer> finisher) { + return new GathererImpl<>( + Objects.requireNonNull(initializer,"initializer"), + Objects.requireNonNull(integrator, "integrator"), + Objects.requireNonNull(combiner, "combiner"), + Objects.requireNonNull(finisher, "finisher") + ); + } + } + + static final class Composite implements Gatherer { + private final Gatherer left; + private final Gatherer right; + // FIXME change `impl` to a computed constant when available + private GathererImpl impl; + + static Composite of( + Gatherer left, + Gatherer right) { + return new Composite<>(left, right); + } + + private Composite(Gatherer left, + Gatherer right) { + this.left = left; + this.right = right; + } + + @SuppressWarnings("unchecked") + private GathererImpl impl() { + // ATTENTION: this method currently relies on a "benign" data-race + // as it should deterministically produce the same result even if + // initialized concurrently on different threads. + var i = impl; + return i != null + ? i + : (impl = (GathererImpl)impl(left, right)); + } + + @Override public Supplier initializer() { + return impl().initializer(); + } + + @Override public Integrator integrator() { + return impl().integrator(); + } + + @Override public BinaryOperator combiner() { + return impl().combiner(); + } + + @Override public BiConsumer> finisher() { + return impl().finisher(); + } + + @Override + public Gatherer andThen( + Gatherer that) { + if (that.getClass() == Composite.class) { + @SuppressWarnings("unchecked") + final var c = + (Composite) that; + return left.andThen(right.andThen(c.left).andThen(c.right)); + } else { + return left.andThen(right.andThen(that)); + } + } + + static final GathererImpl impl( + Gatherer left, Gatherer right) { + final var leftInitializer = left.initializer(); + final var leftIntegrator = left.integrator(); + final var leftCombiner = left.combiner(); + final var leftFinisher = left.finisher(); + + final var rightInitializer = right.initializer(); + final var rightIntegrator = right.integrator(); + final var rightCombiner = right.combiner(); + final var rightFinisher = right.finisher(); + + final var leftStateless = leftInitializer == Gatherer.defaultInitializer(); + final var rightStateless = rightInitializer == Gatherer.defaultInitializer(); + + final var leftGreedy = leftIntegrator instanceof Integrator.Greedy; + final var rightGreedy = rightIntegrator instanceof Integrator.Greedy; + + /* + * For pairs of stateless and greedy Gatherers, we can optimize + * evaluation as we do not need to track any state nor any + * short-circuit signals. This can provide significant + * performance improvements. + */ + if (leftStateless && rightStateless && leftGreedy && rightGreedy) { + return new GathererImpl<>( + Gatherer.defaultInitializer(), + Gatherer.Integrator.ofGreedy((unused, element, downstream) -> + leftIntegrator.integrate( + null, + element, + r -> rightIntegrator.integrate(null, r, downstream)) + ), + (leftCombiner == Gatherer.defaultCombiner() + || rightCombiner == Gatherer.defaultCombiner()) + ? Gatherer.defaultCombiner() + : Value.DEFAULT.statelessCombiner + , + (leftFinisher == Gatherer.defaultFinisher() + && rightFinisher == Gatherer.defaultFinisher()) + ? Gatherer.defaultFinisher() + : (unused, downstream) -> { + if (leftFinisher != Gatherer.defaultFinisher()) + leftFinisher.accept( + null, + r -> rightIntegrator.integrate(null, r, downstream)); + if (rightFinisher != Gatherer.defaultFinisher()) + rightFinisher.accept(null, downstream); + } + ); + } else { + class State { + final A leftState; + final AA rightState; + boolean leftProceed; + boolean rightProceed; + + private State(A leftState, AA rightState, + boolean leftProceed, boolean rightProceed) { + this.leftState = leftState; + this.rightState = rightState; + this.leftProceed = leftProceed; + this.rightProceed = rightProceed; + } + + State() { + this(leftStateless ? null : leftInitializer.get(), + rightStateless ? null : rightInitializer.get(), + true, true); + } + + State joinLeft(State right) { + return new State( + leftStateless ? null : leftCombiner.apply(this.leftState, right.leftState), + rightStateless ? null : rightCombiner.apply(this.rightState, right.rightState), + this.leftProceed && this.rightProceed, + right.leftProceed && right.rightProceed); + } + + boolean integrate(T t, Downstream c) { + /* + * rightProceed must be checked after integration of + * left since that can cause right to short-circuit + * We always want to conditionally write leftProceed + * here, which means that we only do so if we are + * known to be not-greedy. + */ + return (leftIntegrator.integrate(leftState, t, r -> rightIntegrate(r, c)) + || leftGreedy + || (leftProceed = false)) + && (rightGreedy || rightProceed); + } + + void finish(Downstream c) { + if (leftFinisher != Gatherer.defaultFinisher()) + leftFinisher.accept(leftState, r -> rightIntegrate(r, c)); + if (rightFinisher != Gatherer.defaultFinisher()) + rightFinisher.accept(rightState, c); + } + + /* + * Currently we use the following to ferry elements from + * the left Gatherer to the right Gatherer, but we create + * the Gatherer.Downstream as a lambda which means that + * the default implementation of `isKnownDone()` is used. + * + * If it is determined that we want to be able to support + * the full interface of Gatherer.Downstream then we have + * the following options: + * 1. Have State implement Downstream + * and store the passed in Downstream + * downstream as an instance field in integrate() + * and read it in push(R r). + * 2. Allocate a new Gatherer.Downstream for + * each invocation of integrate() which might prove + * costly. + */ + public boolean rightIntegrate(R r, Downstream downstream) { + // The following logic is highly performance sensitive + return (rightGreedy || rightProceed) + && (rightIntegrator.integrate(rightState, r, downstream) + || rightGreedy + || (rightProceed = false)); + } + } + + return new GathererImpl( + State::new, + (leftGreedy && rightGreedy) + ? Integrator.ofGreedy(State::integrate) + : Integrator.of(State::integrate), + (leftCombiner == Gatherer.defaultCombiner() + || rightCombiner == Gatherer.defaultCombiner()) + ? Gatherer.defaultCombiner() + : State::joinLeft, + (leftFinisher == Gatherer.defaultFinisher() + && rightFinisher == Gatherer.defaultFinisher()) + ? Gatherer.defaultFinisher() + : State::finish + ); + } + } + } +} diff --git a/src/java.base/share/classes/java/util/stream/ReferencePipeline.java b/src/java.base/share/classes/java/util/stream/ReferencePipeline.java index e0b9c79025b0d..5058440335fe1 100644 --- a/src/java.base/share/classes/java/util/stream/ReferencePipeline.java +++ b/src/java.base/share/classes/java/util/stream/ReferencePipeline.java @@ -90,12 +90,27 @@ abstract class ReferencePipeline * Constructor for appending an intermediate operation onto an existing * pipeline. * - * @param upstream the upstream element source. + * @param upstream the upstream element source + * @param opFlags The operation flags for this operation, described in + * {@link StreamOpFlag} */ ReferencePipeline(AbstractPipeline upstream, int opFlags) { super(upstream, opFlags); } + /** + * Constructor for appending an intermediate operation onto an existing + * pipeline. + * + * @param upupstream the upstream of the upstream element source + * @param upstream the upstream element source + * @param opFlags The operation flags for this operation, described in + * {@link StreamOpFlag} + */ + protected ReferencePipeline(AbstractPipeline upupstream, AbstractPipeline upstream, int opFlags) { + super(upupstream, upstream, opFlags); + } + // Shape-specific methods @Override @@ -667,9 +682,14 @@ public final R reduce(R identity, BiFunction accumulato return evaluate(ReduceOps.makeRef(identity, accumulator, combiner)); } + @Override + public final Stream gather(Gatherer gatherer) { + return GathererOp.of(this, gatherer); + } + @Override @SuppressWarnings("unchecked") - public final R collect(Collector collector) { + public R collect(Collector collector) { A container; if (isParallel() && (collector.characteristics().contains(Collector.Characteristics.CONCURRENT)) @@ -687,7 +707,7 @@ public final R collect(Collector collector) { } @Override - public final R collect(Supplier supplier, + public R collect(Supplier supplier, BiConsumer accumulator, BiConsumer combiner) { return evaluate(ReduceOps.makeRef(supplier, accumulator, combiner)); diff --git a/src/java.base/share/classes/java/util/stream/Stream.java b/src/java.base/share/classes/java/util/stream/Stream.java index 284ec632d7425..30b87bd8b5496 100644 --- a/src/java.base/share/classes/java/util/stream/Stream.java +++ b/src/java.base/share/classes/java/util/stream/Stream.java @@ -24,6 +24,8 @@ */ package java.util.stream; +import jdk.internal.javac.PreviewFeature; + import java.nio.file.Files; import java.nio.file.Path; import java.util.*; @@ -1051,6 +1053,58 @@ U reduce(U identity, BiFunction accumulator, BinaryOperator combiner); + /** + * Returns a stream consisting of the results of applying the given + * {@link Gatherer} to the elements of this stream. + * + *

    This is a stateful + * intermediate operation that is an + * extension point. + * + *

    Gatherers are highly flexible and can describe a vast array of + * possibly stateful operations, with support for short-circuiting, and + * parallelization. + * + *

    When executed in parallel, multiple intermediate results may be + * instantiated, populated, and merged so as to maintain isolation of + * mutable data structures. Therefore, even when executed in parallel + * with non-thread-safe data structures (such as {@code ArrayList}), no + * additional synchronization is needed for a parallel reduction. + * + *

    Implementations are allowed, but not required, to detect consecutive + * invocations and compose them into a single, fused, operation. This would + * make the first expression below behave like the second: + * + *

    {@code
    +     *     var stream1 = Stream.of(...).gather(gatherer1).gather(gatherer2);
    +     *     var stream2 = Stream.of(...).gather(gatherer1.andThen(gatherer2));
    +     * }
    + * + * @implSpec + * The default implementation obtains the {@link #spliterator() spliterator} + * of this stream, wraps that spliterator so as to support the semantics + * of this operation on traversal, and returns a new stream associated with + * the wrapped spliterator. The returned stream preserves the execution + * characteristics of this stream (namely parallel or sequential execution + * as per {@link #isParallel()}) but the wrapped spliterator may choose to + * not support splitting. When the returned stream is closed, the close + * handlers for both the returned and this stream are invoked. + * Implementations of this interface should provide their own + * implementation of this method. + * + * @see Gatherers + * @param The element type of the new stream + * @param gatherer a gatherer + * @return the new stream + * @since 22 + */ + @PreviewFeature(feature = PreviewFeature.Feature.STREAM_GATHERERS) + default Stream gather(Gatherer gatherer) { + return StreamSupport.stream(spliterator(), isParallel()) + .gather(gatherer) + .onClose(this::close); + } + /** * Performs a mutable * reduction operation on the elements of this stream. A mutable diff --git a/src/java.base/share/classes/java/util/stream/package-info.java b/src/java.base/share/classes/java/util/stream/package-info.java index 85700bfbab1a9..951dc41ea44e9 100644 --- a/src/java.base/share/classes/java/util/stream/package-info.java +++ b/src/java.base/share/classes/java/util/stream/package-info.java @@ -620,6 +620,19 @@ * but in some cases equivalence may be relaxed to account for differences in * order. * + *

    Extensibility

    + * + *

    Implementing {@link java.util.stream.Collector}; + * using the factory method {@code java.util.stream.Collector.of(...)}; or + * using the predefined collectors in {@link java.util.stream.Collectors} allows + * for user-defined, reusable, terminal operations. + * + *

    Implementing {@link java.util.stream.Gatherer}; using the factory + * methods {@code java.util.stream.Gatherer.of(...)} and + * {@code java.util.stream.Gatherer.ofSequential(...)}; + * or using the predefined gatherers in {@link java.util.stream.Gatherers} + * allows for user-defined, reusable, intermediate operations. + * *

    Reduction, concurrency, and ordering

    * * With some complex reduction operations, for example a {@code collect()} that diff --git a/src/java.base/share/classes/jdk/internal/javac/PreviewFeature.java b/src/java.base/share/classes/jdk/internal/javac/PreviewFeature.java index f7ce449b981c5..77dec6dce494d 100644 --- a/src/java.base/share/classes/jdk/internal/javac/PreviewFeature.java +++ b/src/java.base/share/classes/jdk/internal/javac/PreviewFeature.java @@ -77,6 +77,8 @@ public enum Feature { SCOPED_VALUES, @JEP(number=453, title="Structured Concurrency", status="Preview") STRUCTURED_CONCURRENCY, + @JEP(number=461, title="Stream Gatherers", status="Preview") + STREAM_GATHERERS, /** * A key for testing. */ diff --git a/test/jdk/java/util/stream/GathererAPITest.java b/test/jdk/java/util/stream/GathererAPITest.java new file mode 100644 index 0000000000000..4bcda85ccbc05 --- /dev/null +++ b/test/jdk/java/util/stream/GathererAPITest.java @@ -0,0 +1,230 @@ +/* + * Copyright (c) 2023, 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. + */ +import java.util.List; +import java.util.Set; +import java.util.function.BiConsumer; +import java.util.function.BinaryOperator; +import java.util.function.Supplier; +import java.util.stream.*; +import java.util.stream.Gatherer; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assumptions.*; + +/** + * @test + * @summary Testing public API of Gatherer + * @enablePreview + * @run junit GathererAPITest + */ + +public class GathererAPITest { + final static Supplier initializer = () -> (Void)null; + final static Gatherer.Integrator integrator = (v,e,d) -> d.push(e); + final static BinaryOperator combiner = (l,r) -> l; + final static BiConsumer> finisher = (v,d) -> {}; + + final static Supplier nullInitializer = null; + final static Gatherer.Integrator nullIntegrator = null; + final static BinaryOperator nullCombiner = null; + final static BiConsumer> nullFinisher = null; + + private final static Gatherer passthrough() { + return Gatherer.of( + () -> (Void)null, + Gatherer.Integrator.ofGreedy((v,e,d) -> d.push(e)), + (l,r) -> l, + (v,d) -> {} + ); + } + + private final static Gatherer verifyGathererContract(Gatherer gatherer) { + // basics + assertNotNull(gatherer); + + // components + assertNotNull(gatherer.initializer()); + assertNotNull(gatherer.integrator()); + assertNotNull(gatherer.combiner()); + assertNotNull(gatherer.finisher()); + assertNotNull(gatherer.andThen(passthrough())); + + return gatherer; + } + + private final static Gatherer verifyGathererStructure( + Gatherer gatherer, + Supplier expectedSupplier, + Gatherer.Integrator expectedIntegrator, + BinaryOperator expectedCombiner, + BiConsumer> expectedFinisher + ) { + // basics + assertNotNull(gatherer); + + // components + assertSame(expectedSupplier, gatherer.initializer()); + assertSame(expectedIntegrator, gatherer.integrator()); + assertSame(expectedCombiner, gatherer.combiner()); + assertSame(expectedFinisher, gatherer.finisher()); + + return gatherer; + } + + @Test + public void testGathererDefaults() { + final Gatherer.Integrator expectedIntegrator = + (a,b,c) -> false; + + class Test implements Gatherer { + @Override + public Integrator integrator() { + return expectedIntegrator; + } + } + + var t = new Test(); + assertSame(Gatherer.defaultInitializer(), t.initializer()); + assertSame(expectedIntegrator, t.integrator()); + assertSame(Gatherer.defaultCombiner(), t.combiner()); + assertSame(Gatherer.>defaultFinisher(), t.finisher()); + } + + @Test + public void testDownstreamDefaults() { + class Test implements Gatherer.Downstream { + @Override public boolean push(Void v) { return false; } + } + + var t = new Test(); + assertEquals(false, t.isRejecting()); + } + + @Test + public void testGathererFactoriesNPE() { + assertThrows(NullPointerException.class, + () -> Gatherer.of(nullInitializer, integrator, combiner, finisher)); + assertThrows(NullPointerException.class, + () -> Gatherer.of(initializer, nullIntegrator, combiner, finisher)); + assertThrows(NullPointerException.class, + () -> Gatherer.of(initializer, integrator, nullCombiner, finisher)); + assertThrows(NullPointerException.class, + () -> Gatherer.of(initializer, integrator, combiner, nullFinisher)); + + assertThrows(NullPointerException.class, + () -> Gatherer.of(nullIntegrator)); + + assertThrows(NullPointerException.class, + () -> Gatherer.of(nullIntegrator, finisher)); + assertThrows(NullPointerException.class, + () -> Gatherer.of(integrator, nullFinisher)); + + assertThrows(NullPointerException.class, + () -> Gatherer.ofSequential(nullInitializer, integrator)); + assertThrows(NullPointerException.class, + () -> Gatherer.ofSequential(initializer, nullIntegrator)); + + assertThrows(NullPointerException.class, + () -> Gatherer.ofSequential(nullIntegrator)); + + assertThrows(NullPointerException.class, + () -> Gatherer.ofSequential(nullIntegrator, finisher)); + assertThrows(NullPointerException.class, + () -> Gatherer.ofSequential(integrator, nullFinisher)); + + assertThrows(NullPointerException.class, + () -> Gatherer.ofSequential(nullInitializer, integrator, finisher)); + assertThrows(NullPointerException.class, + () -> Gatherer.ofSequential(initializer, nullIntegrator, finisher)); + assertThrows(NullPointerException.class, + () -> Gatherer.ofSequential(initializer, integrator, nullFinisher)); + } + + @Test + public void testGathererFactoriesAPI() { + final var defaultInitializer = Gatherer.defaultInitializer(); + final var defaultCombiner = Gatherer.defaultCombiner(); + final var defaultFinisher = Gatherer.defaultFinisher(); + + var g1 = verifyGathererContract(passthrough()); // Quis custodiet ipsos custodes? + verifyGathererContract(g1.andThen(g1)); + + var g2 = verifyGathererContract(Gatherer.of(integrator)); + verifyGathererContract(g2.andThen(g2)); + assertSame(defaultInitializer, g2.initializer()); + assertSame(integrator, g2.integrator()); + assertNotSame(defaultCombiner, g2.combiner()); + assertSame(defaultFinisher, g2.finisher()); + + var g3 = verifyGathererContract(Gatherer.of(integrator, finisher)); + verifyGathererContract(g3.andThen(g3)); + assertSame(integrator, g3.integrator()); + assertNotSame(defaultCombiner, g3.combiner()); + assertSame(finisher, g3.finisher()); + + var g4 = verifyGathererContract(Gatherer.ofSequential(integrator)); + verifyGathererContract(g4.andThen(g4)); + verifyGathererStructure(g4, defaultInitializer, integrator, defaultCombiner, defaultFinisher); + + var g5 = verifyGathererContract(Gatherer.ofSequential(initializer, integrator)); + verifyGathererContract(g5.andThen(g5)); + verifyGathererStructure(g5, initializer, integrator, defaultCombiner, defaultFinisher); + + var g6 = verifyGathererContract(Gatherer.ofSequential(integrator, finisher)); + verifyGathererContract(g6.andThen(g6)); + verifyGathererStructure(g6, defaultInitializer, integrator, defaultCombiner, finisher); + + var g7 = verifyGathererContract(Gatherer.ofSequential(initializer, integrator, finisher)); + verifyGathererContract(g7.andThen(g7)); + verifyGathererStructure(g7, initializer, integrator, defaultCombiner, finisher); + + var g8 = verifyGathererContract(Gatherer.of(initializer, integrator, combiner, finisher)); + verifyGathererContract(g8.andThen(g8)); + verifyGathererStructure(g8, initializer, integrator, combiner, finisher); + } + + @Test + public void testGathererVariance() { + + // Make sure that Gatherers can pass-through type + Gatherer nums = Gatherer.of((unused, element, downstream) -> downstream.push(element)); + + // Make sure that Gatherers can upcast the output type from the input type + Gatherer upcast = Gatherer.of((unused, element, downstream) -> downstream.push(element)); + + // Make sure that Gatherers can consume a supertype of the Stream output + assertEquals(List.of(1,2,3,4,5), Stream.of(1,2,3,4,5).gather(nums).toList()); + + Gatherer ints = Gatherer.of((unused, element, downstream) -> downstream.push(element)); + + // Make sure that Gatherers can be composed where the output is a subtype of the input type of the next + Gatherer composition = ints.andThen(nums); + + // Make sure that composition works transitively, typing-wise + Gatherer upcastComposition = ints.andThen(nums.andThen(upcast)); + + assertEquals(List.of(1,2,3,4,5), Stream.of(1,2,3,4,5).gather(composition).toList()); + assertEquals(List.of(1,2,3,4,5), Stream.of(1,2,3,4,5).gather(upcastComposition).toList()); + } +} diff --git a/test/jdk/java/util/stream/GathererTest.java b/test/jdk/java/util/stream/GathererTest.java new file mode 100644 index 0000000000000..5d5f0b517aa09 --- /dev/null +++ b/test/jdk/java/util/stream/GathererTest.java @@ -0,0 +1,479 @@ +/* + * Copyright (c) 2023, 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. + */ +import java.util.ArrayList; +import java.util.List; +import java.util.function.Predicate; +import java.util.function.Supplier; +import java.util.stream.*; +import java.util.stream.Gatherer; +import static java.util.stream.DefaultMethodStreams.delegateTo; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; +import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assumptions.*; + +/** + * @test + * @summary Testing the Gatherer contract + * @enablePreview + * @library /lib/testlibrary/bootlib + * @build java.base/java.util.stream.DefaultMethodStreams + * @run junit GathererTest + */ + +public class GathererTest { + + record Config(int streamSize, boolean parallel, boolean defaultImpl) { + + Stream countTo(int n) { + return Stream.iterate(1, i -> i + 1).limit(n); + } + + Stream stream() { + return wrapStream(countTo(streamSize)); + } + + Stream wrapStream(Stream stream) { + stream = parallel ? stream.parallel() : stream.sequential(); + stream = defaultImpl ? delegateTo(stream) : stream; + return stream; + } + + List list() { + return stream().toList(); + } + } + + final static Stream configurations() { + return Stream.of(0,1,10,33,99,9999) + .flatMap(size -> + Stream.of(false, true) + .flatMap(parallel -> + Stream.of(false, true).map( defaultImpl -> + new Config(size, parallel, + defaultImpl)) ) + ); + } + + final class TestException extends RuntimeException { + TestException(String message) { + super(message); + } + } + + final static class InvocationTracker { + int initialize; + int integrate; + int combine; + int finish; + + void copyFrom(InvocationTracker other) { + initialize = other.initialize; + integrate = other.integrate; + combine = other.combine; + finish = other.finish; + } + + void combine(InvocationTracker other) { + if (other != this) { + initialize += other.initialize; + integrate += other.integrate; + combine += other.combine + 1; // track this merge + finish += other.finish; + } + } + } + + final Gatherer addOne = Gatherer.of( + Gatherer.Integrator.ofGreedy((vöid, element, downstream) -> downstream.push(element + 1)) + ); + + final Gatherer timesTwo = Gatherer.of( + Gatherer.Integrator.ofGreedy((vöid, element, downstream) -> downstream.push(element * 2)) + ); + + @ParameterizedTest + @MethodSource("configurations") + public void testInvocationSemanticsGreedy(Config config) { + var result = new InvocationTracker(); + var g = Gatherer.of( + () -> { + var t = new InvocationTracker(); + t.initialize++; + return t; + }, + Gatherer.Integrator.ofGreedy((t, e, d) -> { + t.integrate++; + return d.push(e); + }), + (t1, t2) -> { + t1.combine(t2); + return t1; + }, + (t, d) -> { + t.finish++; + result.copyFrom(t); + }); + var res = config.stream().gather(g).toList(); + assertEquals(config.countTo(config.streamSize).toList(), res); + if (config.parallel) { + assertTrue(result.initialize > 0); + assertEquals(config.streamSize, result.integrate); + assertTrue(config.streamSize < 2 || result.combine > 0); + assertEquals(1, result.finish); + } else { + assertEquals(1, result.initialize); + assertEquals(config.streamSize, result.integrate); + assertEquals(0, result.combine); + assertEquals(1, result.finish); + } + } + + @ParameterizedTest + @MethodSource("configurations") + public void testInvocationSemanticsShortCircuit(Config config) { + final int CONSUME_UNTIL = Math.min(config.streamSize, 5); + var result = new InvocationTracker(); + var g = Gatherer.of( + () -> { + var t = new InvocationTracker(); + t.initialize++; + return t; + }, + (t, e, d) -> { + ++t.integrate; + return e <= CONSUME_UNTIL && d.push(e) && e != CONSUME_UNTIL; + }, + (t1, t2) -> { + t1.combine(t2); + return t1; + }, + (t, d) -> { + t.finish++; + result.copyFrom(t); + }); + var res = config.stream().gather(g).toList(); + assertEquals(config.countTo(CONSUME_UNTIL).toList(), res); + if (config.parallel) { + assertTrue(result.initialize > 0); + assertEquals(CONSUME_UNTIL, result.integrate); + assertTrue(result.combine >= 0); // We can't guarantee split sizes + assertEquals(1, result.finish); + } else { + assertEquals(1, result.initialize); + assertEquals(CONSUME_UNTIL, result.integrate); + assertEquals(0, result.combine); + assertEquals(1, result.finish); + } + } + + @ParameterizedTest + @MethodSource("configurations") + public void testEmissionDuringFinisher(Config config) { + var g = Gatherer.of( + () -> { + var t = new InvocationTracker(); + t.initialize++; + return t; + }, + (t, e, d) -> { + t.integrate++; + return true; + }, + (t1, t2) -> { + t1.combine(t2); + return t1; + }, + (t, d) -> { + t.finish++; + d.push(t); + }); + var resultList = config.stream().gather(g).collect(Collectors.toList()); + assertEquals(resultList.size(), 1); + + var t = resultList.get(0); + + if (config.parallel) { + assertTrue(t.initialize > 0); + assertEquals(config.streamSize, t.integrate); + assertTrue(config.streamSize < 2 || t.combine > 0); + assertEquals(1, t.finish); + } else { + assertEquals(1, t.initialize); + assertEquals(config.streamSize, t.integrate); + assertEquals(0, t.combine); + assertEquals(1, t.finish); + } + } + + @ParameterizedTest + @MethodSource("configurations") + public void testInvocationSemanticsShortCircuitDuringCollect(Config config) { + final int CONSUME_UNTIL = Math.min(config.streamSize, 5); + var result = new InvocationTracker(); + var g = Gatherer.of( + () -> { + var t = new InvocationTracker(); + t.initialize++; + return t; + }, + (t, e, d) -> { + t.integrate++; + return e <= CONSUME_UNTIL && d.push(e) && e != CONSUME_UNTIL; + }, + (t1, t2) -> { + t1.combine(t2); + return t1; + }, + (t, d) -> { + t.finish++; + result.copyFrom(t); + }); + var res = config.stream().gather(g).collect(Collectors.toList()); + assertEquals(config.countTo(CONSUME_UNTIL).toList(), res); + if (config.parallel) { + assertTrue(result.initialize > 0); + assertEquals(CONSUME_UNTIL, result.integrate); + assertTrue(result.combine >= 0); // We can't guarantee split sizes + assertEquals(result.finish, 1); + } else { + assertEquals(result.initialize, 1); + assertEquals(CONSUME_UNTIL, result.integrate); + assertEquals(result.combine, 0); + assertEquals(result.finish, 1); + } + } + + @ParameterizedTest + @MethodSource("configurations") + public void testCompositionOfStatelessGatherers(Config config) { + var range = config.stream().toList(); + var gRes = range.stream().gather(addOne.andThen(timesTwo)).toList(); + var rRes = range.stream().map(j -> j + 1).map(j -> j * 2).toList(); + assertEquals(config.streamSize, gRes.size()); + assertEquals(config.streamSize, rRes.size()); + assertEquals(gRes, rRes); + } + + @ParameterizedTest + @MethodSource("configurations") + public void testCompositionOfStatefulGatherers(Config config) { + var t1 = new InvocationTracker(); + var g1 = Gatherer.of( + () -> { + var t = new InvocationTracker(); + t.initialize++; + return t; + }, + (t, e, d) -> { + t.integrate++; + return d.push(e); + }, + (l, r) -> { + l.combine(r); + return l; + }, + (t, d) -> { + t.finish++; + t1.copyFrom(t); + }); + + var t2 = new InvocationTracker(); + var g2 = Gatherer.of( + () -> { + var t = new InvocationTracker(); + t.initialize++; + return t; + }, + (t, e, d) -> { + t.integrate++; + return d.push(e); + }, + (l, r) -> { + l.combine(r); + return l; + }, + (t, d) -> { + t.finish++; + t2.copyFrom(t); + }); + + var res = config.stream().gather(g1.andThen(g2)).toList(); + assertEquals(config.stream().toList(), res); + + if (config.parallel) { + assertTrue(t1.initialize > 0); + assertEquals(config.streamSize, t1.integrate); + assertTrue(config.streamSize < 2 || t1.combine > 0); + assertEquals(1, t1.finish); + + assertTrue(t2.initialize > 0); + assertEquals(config.streamSize, t2.integrate); + assertTrue(config.streamSize < 2 || t2.combine > 0); + assertEquals(1, t2.finish); + } else { + assertEquals(1, t1.initialize); + assertEquals(config.streamSize, t1.integrate); + assertEquals(0, t1.combine); + assertEquals(1, t1.finish); + + assertEquals(1, t2.initialize); + assertEquals(config.streamSize, t2.integrate); + assertEquals(0, t2.combine); + assertEquals(1, t2.finish); + } + } + + @ParameterizedTest + @MethodSource("configurations") + public void testMassivelyComposedGatherers(Config config) { + final int ITERATIONS = 512; // Total number of compositions is 1 + (iterations*2) + Gatherer g = addOne; + for(int i = 0;i < ITERATIONS;++i) { + g = g.andThen(timesTwo).andThen(addOne); + } + + g = g.andThen(timesTwo); + + var ref = config.stream().map(n -> n + 1); + for(int c = 0; c < ITERATIONS; ++c) { + ref = ref.map(n -> n * 2).map(n -> n + 1); + } + ref = ref.map(n -> n * 2); + + var gatherered = config.stream().gather(g).toList(); + var reference = ref.toList(); + assertEquals(gatherered, reference); + } + + @Test + public void testUnboundedEmissions() { + Gatherer g = Gatherer.of( + () -> (Void)null, + (v,e,d) -> { do {} while(d.push(e)); return false; }, + (l,r) -> l, + (v,d) -> {} + ); + assertEquals(Stream.of(1).gather(g).limit(1).toList(), List.of(1)); + assertEquals(Stream.of(1).gather(g.andThen(g)).limit(1).toList(), List.of(1)); + } + + @ParameterizedTest + @MethodSource("configurations") + public void testCompositionSymmetry(Config config) { + var consecutiveResult = config.stream().gather(addOne).gather(timesTwo).toList(); + var interspersedResult = config.stream().gather(addOne).map(id -> id).gather(timesTwo).toList(); + var composedResult = config.stream().gather(addOne.andThen(timesTwo)).toList(); + + var reference = config.stream().map(j -> j + 1).map(j -> j * 2).toList(); + + assertEquals(config.streamSize, consecutiveResult.size()); + assertEquals(config.streamSize, interspersedResult.size()); + assertEquals(config.streamSize, composedResult.size()); + assertEquals(config.streamSize, reference.size()); + + assertEquals(consecutiveResult, reference); + assertEquals(interspersedResult, reference); + assertEquals(composedResult, reference); + } + + @ParameterizedTest + @MethodSource("configurations") + public void testExceptionInInitializer(Config config) { + final var expectedMessage = "testExceptionInInitializer()"; + assertThrowsTestException(() -> + config.stream().gather( + Gatherer.of( + () -> { throw new TestException(expectedMessage); }, + (i, e, d) -> true, + (l,r) -> l, + (i,d) -> {} + ) + ).toList(), expectedMessage); + } + + @ParameterizedTest + @MethodSource("configurations") + public void testExceptionInIntegrator(Config config) { + if (config.streamSize < 1) return; // No exceptions expected + + final var expectedMessage = "testExceptionInIntegrator()"; + assertThrowsTestException(() -> + config.stream().gather( + Gatherer.of( + () -> 1, + (i, e, d) -> { throw new TestException(expectedMessage); }, + (l,r) -> l, + (i,d) -> {} + ) + ).toList() + , expectedMessage); + } + + @ParameterizedTest + @MethodSource("configurations") + public void testExceptionInCombiner(Config config) { + if (config.streamSize < 2 || !config.parallel) return; // No exceptions expected + + final var expectedMessage = "testExceptionInCombiner()"; + assertThrowsTestException(() -> + config.stream().gather( + Gatherer.of( + () -> 1, + (i, e, d) -> true, + (l,r) -> { throw new TestException(expectedMessage); }, + (i,d) -> {} + ) + ).toList() + , expectedMessage); + } + + @ParameterizedTest + @MethodSource("configurations") + public void testExceptionInFinisher(Config config) { + final var expectedMessage = "testExceptionInFinisher()"; + assertThrowsTestException(() -> + config.stream().gather( + Gatherer.of( + () -> 1, + (i, e, d) -> true, + (l,r) -> l, + (v, d) -> { throw new TestException(expectedMessage); } + ) + ).toList() + , expectedMessage); + } + + private final static void assertThrowsTestException(Supplier supplier, String expectedMessage) { + try { + var discard = supplier.get(); + } catch (TestException e) { + assertSame(TestException.class, e.getClass()); + assertEquals(expectedMessage, e.getMessage()); + return; + } + fail("Expected TestException but wasn't thrown!"); + } +} diff --git a/test/jdk/java/util/stream/GatherersTest.java b/test/jdk/java/util/stream/GatherersTest.java new file mode 100644 index 0000000000000..e2cbee38fc2b5 --- /dev/null +++ b/test/jdk/java/util/stream/GatherersTest.java @@ -0,0 +1,368 @@ +/* + * Copyright (c) 2023, 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. + */ +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Set; +import java.util.concurrent.ConcurrentLinkedQueue; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Semaphore; +import java.util.function.Predicate; +import java.util.function.Supplier; +import java.util.stream.*; +import java.util.stream.Gatherer; + +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; +import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assumptions.*; + +/** + * @test + * @summary Testing the built-in Gatherer implementations and their contracts + * @enablePreview + * @run junit GatherersTest + */ + +public class GatherersTest { + + record Config(int streamSize, boolean parallel) { + Stream stream() { + return wrapStream(Stream.iterate(1, i -> i + 1).limit(streamSize)); + } + + Stream wrapStream(Stream stream) { + stream = parallel ? stream.parallel() : stream.sequential(); + return stream; + } + } + + final static Stream configurations() { + return Stream.of(0,1,10,33,99,9999) + .flatMap(size -> + Stream.of(false, true) + .map(parallel -> + new Config(size, parallel)) + ); + } + + final class TestException extends RuntimeException { + TestException(String message) { + super(message); + } + } + + @ParameterizedTest + @MethodSource("configurations") + public void testFixedWindowAPIandContract(Config config) { + // Groups must be greater than 0 + assertThrows(IllegalArgumentException.class, () -> Gatherers.windowFixed(0)); + + final var streamSize = config.streamSize(); + + // We're already covering less-than-one scenarios above + if (streamSize > 0) { + //Test creating a window of the same size as the stream + { + final var result = config.stream() + .gather(Gatherers.windowFixed(streamSize)) + .toList(); + assertEquals(1, result.size()); + assertEquals(config.stream().toList(), result.get(0)); + } + + //Test nulls as elements + { + assertEquals( + config.stream() + .map(n -> Arrays.asList(null, null)) + .toList(), + config.stream() + .flatMap(n -> Stream.of(null, null)) + .gather(Gatherers.windowFixed(2)) + .toList()); + } + + // Test unmodifiability of windows + { + var window = config.stream() + .gather(Gatherers.windowFixed(1)) + .findFirst() + .get(); + assertThrows(UnsupportedOperationException.class, + () -> window.add(2)); + } + } + + + // Tests that the layout of the returned data is as expected + for (var windowSize : List.of(1, 2, 3, 10)) { + final var expectLastWindowSize = streamSize % windowSize == 0 ? windowSize : streamSize % windowSize; + final var expectedSize = (streamSize / windowSize) + ((streamSize % windowSize == 0) ? 0 : 1); + + final var expected = config.stream().toList().iterator(); + + final var result = config.stream() + .gather(Gatherers.windowFixed(windowSize)) + .toList(); + + int currentWindow = 0; + for (var window : result) { + ++currentWindow; + assertEquals(currentWindow < expectedSize ? windowSize : expectLastWindowSize, window.size()); + for (var element : window) + assertEquals(expected.next(), element); + } + + assertEquals(expectedSize, currentWindow); + } + } + + @ParameterizedTest + @MethodSource("configurations") + public void testSlidingAPIandContract(Config config) { + // Groups must be greater than 0 + assertThrows(IllegalArgumentException.class, () -> Gatherers.windowSliding(0)); + + final var streamSize = config.streamSize(); + + // We're already covering less-than-one scenarios above + if (streamSize > 0) { + //Test greating a window larger than the size of the stream + { + final var result = config.stream() + .gather(Gatherers.windowSliding(streamSize + 1)) + .toList(); + assertEquals(1, result.size()); + assertEquals(config.stream().toList(), result.get(0)); + } + + //Test nulls as elements + { + assertEquals( + List.of( + Arrays.asList(null, null), + Arrays.asList(null, null) + ), + config.wrapStream(Stream.of(null, null, null)) + .gather(Gatherers.windowSliding(2)) + .toList()); + } + + // Test unmodifiability of windows + { + var window = config.stream() + .gather(Gatherers.windowSliding(1)) + .findFirst() + .get(); + assertThrows(UnsupportedOperationException.class, + () -> window.add(2)); + } + } + + // Tests that the layout of the returned data is as expected + for (var windowSize : List.of(1, 2, 3, 10)) { + final var expectLastWindowSize = streamSize < windowSize ? streamSize : windowSize; + final var expectedNumberOfWindows = streamSize == 0 ? 0 : Math.max(1, 1 + streamSize - windowSize); + + int expectedElement = 0; + int currentWindow = 0; + + final var result = config.stream() + .gather(Gatherers.windowSliding(windowSize)) + .toList(); + + for (var window : result) { + ++currentWindow; + assertEquals(currentWindow < expectedNumberOfWindows ? windowSize : expectLastWindowSize, window.size()); + for (var element : window) { + assertEquals(++expectedElement, element.intValue()); + } + // rewind for the sliding motion + expectedElement -= (window.size() - 1); + } + + assertEquals(expectedNumberOfWindows, currentWindow); + } + } + + @ParameterizedTest + @MethodSource("configurations") + public void testFoldAPIandContract(Config config) { + // Verify prereqs + assertThrows(NullPointerException.class, () -> Gatherers.fold(null, (state, next) -> state)); + assertThrows(NullPointerException.class, () -> Gatherers.fold(() -> "", null)); + + final var expectedResult = List.of( + config.stream() + .sequential() + .reduce("", (acc, next) -> acc + next, (l,r) -> { throw new IllegalStateException(); }) + ); + + final var result = config.stream() + .gather(Gatherers.fold(() -> "", (acc, next) -> acc + next)) + .toList(); + + assertEquals(expectedResult, result); + } + + @ParameterizedTest + @MethodSource("configurations") + public void testMapConcurrentAPIandContract(Config config) throws InterruptedException { + // Verify prereqs + assertThrows(IllegalArgumentException.class, () -> Gatherers.mapConcurrent(0, s -> s)); + assertThrows(NullPointerException.class, () -> Gatherers.mapConcurrent(2, null)); + + // Test exception during processing + { + final var stream = config.parallel() ? Stream.of(1).parallel() : Stream.of(1); + + assertThrows(RuntimeException.class, + () -> stream.gather(Gatherers.mapConcurrent(2, x -> { + throw new RuntimeException(); + })).toList()); + } + + // Test cancellation after exception during processing + if (config.streamSize > 2) { // We need streams of a minimum size to test this + final var firstLatch = new CountDownLatch(1); + final var secondLatch = new CountDownLatch(1); + final var cancellationLatch = new CountDownLatch(config.streamSize - 2); // all but two will get cancelled + + try { + config.stream() + .gather( + Gatherers.mapConcurrent(config.streamSize(), i -> { + switch (i) { + case 1 -> { + try { + firstLatch.await(); // the first waits for the last element to start + } catch (InterruptedException ie) { + throw new IllegalStateException(ie); + } + throw new TestException("expected"); + } + + case Integer n when n == config.streamSize - 1 -> { // last element + firstLatch.countDown(); // ensure that the first element can now proceed + } + + default -> { + try { + secondLatch.await(); // These should all get interrupted + } catch (InterruptedException ie) { + cancellationLatch.countDown(); // used to ensure that they all were interrupted + } + } + } + + return i; + }) + ) + .toList(); + fail("This should not be reached"); + } catch (RuntimeException re) { + assertSame(TestException.class, re.getClass()); + assertEquals("expected", re.getMessage()); + cancellationLatch.await(); + return; + } + + fail("This should not be reached"); + } + + // Test cancellation during short-circuiting + if (config.streamSize > 2) { + final var firstLatch = new CountDownLatch(1); + final var secondLatch = new CountDownLatch(1); + final var cancellationLatch = new CountDownLatch(config.streamSize - 2); // all but two will get cancelled + + final var result = + config.stream() + .gather( + Gatherers.mapConcurrent(config.streamSize(), i -> { + switch (i) { + case 1 -> { + try { + firstLatch.await(); // the first waits for the last element to start + } catch (InterruptedException ie) { + throw new IllegalStateException(ie); + } + } + + case Integer n when n == config.streamSize - 1 -> { // last element + firstLatch.countDown(); // ensure that the first element can now proceed + } + + default -> { + try { + secondLatch.await(); // These should all get interrupted + } catch (InterruptedException ie) { + cancellationLatch.countDown(); // used to ensure that they all were interrupted + } + } + } + + return i; + }) + ) + .limit(2) + .toList(); + cancellationLatch.await(); // If this hangs, then we didn't cancel and interrupt the tasks + assertEquals(List.of(1,2), result); + } + + for (var concurrency : List.of(1, 2, 3, 10, 1000)) { + // Test normal operation + { + final var expectedResult = config.stream() + .map(x -> x * x) + .toList(); + + final var result = config.stream() + .gather(Gatherers.mapConcurrent(concurrency, x -> x * x)) + .toList(); + + assertEquals(expectedResult, result); + } + + // Test short-circuiting + { + final var limitTo = Math.max(config.streamSize() / 2, 1); + + final var expectedResult = config.stream() + .map(x -> x * x) + .limit(limitTo) + .toList(); + + final var result = config.stream() + .gather(Gatherers.mapConcurrent(concurrency, x -> x * x)) + .limit(limitTo) + .toList(); + + assertEquals(expectedResult, result); + } + } + } +} diff --git a/test/jdk/lib/testlibrary/bootlib/java.base/java/util/stream/DefaultMethodStreams.java b/test/jdk/lib/testlibrary/bootlib/java.base/java/util/stream/DefaultMethodStreams.java index d16603e9cf8bb..bc7c3bc471d26 100644 --- a/test/jdk/lib/testlibrary/bootlib/java.base/java/util/stream/DefaultMethodStreams.java +++ b/test/jdk/lib/testlibrary/bootlib/java.base/java/util/stream/DefaultMethodStreams.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2023, 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 diff --git a/test/micro/org/openjdk/bench/java/util/stream/ops/ref/BenchmarkGathererImpls.java b/test/micro/org/openjdk/bench/java/util/stream/ops/ref/BenchmarkGathererImpls.java new file mode 100644 index 0000000000000..623500f16c246 --- /dev/null +++ b/test/micro/org/openjdk/bench/java/util/stream/ops/ref/BenchmarkGathererImpls.java @@ -0,0 +1,272 @@ +package org.openjdk.bench.java.util.stream.ops.ref; + +import java.util.Objects; +import java.util.Optional; +import java.util.function.BiConsumer; +import java.util.function.BinaryOperator; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.function.Supplier; +import java.util.stream.Collector; +import java.util.stream.Gatherer; +import java.util.stream.Stream; + +// Utility Gatherer and Collector implementations used by Gatherer micro-benchmarks +public final class BenchmarkGathererImpls { + + public static Gatherer filter(Predicate predicate) { + return new FilteringGatherer<>(predicate); + } + + public final static Gatherer map(Function mapper) { + return new MappingGatherer<>(Objects.requireNonNull(mapper)); + } + + public static Gatherer reduce(BinaryOperator reduce) { + Objects.requireNonNull(reduce); + return new ReducingGatherer<>(reduce); + } + + public final static Gatherer takeWhile(Predicate predicate) { + return new TakeWhileGatherer<>(Objects.requireNonNull(predicate)); + } + + @SuppressWarnings("unchecked") + public final static Collector> findFirst() { + return (Collector>)FIND_FIRST; + } + + @SuppressWarnings("unchecked") + public final static Collector> findLast() { + return (Collector>)FIND_LAST; + } + + @SuppressWarnings("rawtypes") + private final static Collector FIND_FIRST = + Collector.,Optional>of( + () -> new Box<>(), + (b,e) -> { + if (!b.hasValue) { + b.value = e; + b.hasValue = true; + } + }, + (l,r) -> l.hasValue ? l : r, + b -> b.hasValue ? Optional.of(b.value) : Optional.empty() + ); + + @SuppressWarnings("rawtypes") + private final static Collector FIND_LAST = + Collector.,Optional>of( + () -> new Box<>(), + (b,e) -> { + b.value = e; + if (!b.hasValue) + b.hasValue = true; + }, + (l,r) -> r.hasValue ? r : l, + b -> b.hasValue ? Optional.of(b.value) : Optional.empty() + ); + + public final static Gatherer flatMap(Function> mapper) { + Objects.requireNonNull(mapper); + + class FlatMappingGatherer implements Gatherer, Gatherer.Integrator, BinaryOperator { + @Override public Integrator integrator() { return this; } + + // Ideal encoding, but performance-wise suboptimal due to cost of allMatch--about factor-10 worse. + /*@Override public boolean integrate(Void state, T element, Gatherer.Downstream downstream) { + try(Stream s = mapper.apply(element)) { + return s != null ? s.sequential().allMatch(downstream::flush) : true; + } + }*/ + + //The version below performs better, but is not nice to maintain or explain. + + private final static RuntimeException SHORT_CIRCUIT = new RuntimeException() { + @Override public synchronized Throwable fillInStackTrace() { return this; } + }; + + @Override public boolean integrate(Void state, T element, Gatherer.Downstream downstream) { + try (Stream s = mapper.apply(element)) { + if (s != null) { + s.sequential().spliterator().forEachRemaining(e -> { + if (!downstream.push(e)) throw SHORT_CIRCUIT; + }); + } + return true; + } catch (RuntimeException e) { + if (e == SHORT_CIRCUIT) + return false; + + throw e; // Rethrow anything else + } + } + + @Override public BinaryOperator combiner() { return this; } + @Override public Void apply(Void unused, Void unused2) { return unused; } + } + + return new FlatMappingGatherer(); + } + + final static class MappingGatherer implements Gatherer, Gatherer.Integrator.Greedy, BinaryOperator { + final Function mapper; + + MappingGatherer(Function mapper) { this.mapper = mapper; } + + @Override public Integrator integrator() { return this; } + @Override public BinaryOperator combiner() { return this; } + @Override public Void apply(Void left, Void right) { return left; } + + @Override + public Gatherer andThen(Gatherer that) { + if (that.getClass() == MappingGatherer.class) { // Implicit null-check of that + @SuppressWarnings("unchecked") + var thatMapper = ((MappingGatherer)that).mapper; + return new MappingGatherer<>(this.mapper.andThen(thatMapper)); + } else + return Gatherer.super.andThen(that); + } + + @Override + public boolean integrate(Void state, T element, Gatherer.Downstream downstream) { + return downstream.push(mapper.apply(element)); + } + } + + + final static class FilteringGatherer implements Gatherer, Gatherer.Integrator.Greedy, BinaryOperator { + final Predicate predicate; + + protected FilteringGatherer(Predicate predicate) { this.predicate = predicate; } + + @Override public Integrator integrator() { return this; } + @Override public BinaryOperator combiner() { return this; } + + @Override public Void apply(Void left, Void right) { return left; } + + @Override + public boolean integrate(Void state, TR element, Gatherer.Downstream downstream) { + return predicate.test(element) ? downstream.push(element) : true; + } + + @Override + @SuppressWarnings("unchecked") + public Gatherer andThen(Gatherer that) { + if (that.getClass() == FilteringGatherer.class) { + var first = predicate; + var second = ((FilteringGatherer) that).predicate; + return (Gatherer) new FilteringGatherer(e -> first.test(e) && second.test(e)); + } else if (that.getClass() == MappingGatherer.class) { + final var thatMapper = (MappingGatherer)that; + return new FilteringMappingGatherer<>(predicate, thatMapper.mapper); + } else if (that.getClass() == FilteringMappingGatherer.class) { + var first = predicate; + var thatFilterMapper = ((FilteringMappingGatherer) that); + var second = thatFilterMapper.predicate; + return new FilteringMappingGatherer<>(e -> first.test(e) && second.test(e), thatFilterMapper.mapper); + } else + return Gatherer.super.andThen(that); + } + } + + final static class FilteringMappingGatherer implements Gatherer, Gatherer.Integrator.Greedy, BinaryOperator { + final Predicate predicate; + final Function mapper; + + FilteringMappingGatherer(Predicate predicate, Function mapper) { + this.predicate = predicate; + this.mapper = mapper; + } + + @Override public Integrator integrator() { return this; } + @Override public BinaryOperator combiner() { return this; } + @Override public Void apply(Void left, Void right) { return left; } + + @Override + public Gatherer andThen(Gatherer that) { + if (that.getClass() == MappingGatherer.class) { // Implicit null-check of that + @SuppressWarnings("unchecked") + var thatMapper = ((MappingGatherer)that).mapper; + return new FilteringMappingGatherer<>(this.predicate, this.mapper.andThen(thatMapper)); + } else + return Gatherer.super.andThen(that); + } + + @Override + public boolean integrate(Void state, T element, Gatherer.Downstream downstream) { + return !predicate.test(element) || downstream.push(mapper.apply(element)); + } + } + + final static class ReducingGatherer implements Gatherer, TR>, + Supplier>, + Gatherer.Integrator.Greedy, TR, TR>, + BinaryOperator>, + BiConsumer, Gatherer.Downstream> { + private final BinaryOperator reduce; + ReducingGatherer(BinaryOperator reduce) { this.reduce = reduce; } + + @Override public Box get() { return new Box<>(); } + + @Override + public boolean integrate(Box state, TR m, Gatherer.Downstream downstream) { + state.value = state.hasValue || !(state.hasValue = true) ? reduce.apply(state.value, m) : m; + return true; + } + + @Override public Box apply(Box left, Box right) { + if (right.hasValue) + integrate(left, right.value, null); + return left; + } + + @Override public void accept(Box box, Gatherer.Downstream downstream) { + if (box.hasValue) + downstream.push(box.value); + } + + @Override public Supplier> initializer() { return this; } + @Override public Integrator, TR, TR> integrator() { return this; } + @Override public BinaryOperator> combiner() { return this; } + @Override public BiConsumer, Gatherer.Downstream> finisher() { return this; } + } + + final static class TakeWhileGatherer implements Gatherer, Gatherer.Integrator, BinaryOperator { + final Predicate predicate; + TakeWhileGatherer(Predicate predicate) { this.predicate = predicate; } + + @Override public Integrator integrator() { return this; } + @Override public BinaryOperator combiner() { return this; } + + @Override public Void apply(Void left, Void right) { return left; } + + @Override public boolean integrate(Void state, TR element, Gatherer.Downstream downstream) { + return predicate.test(element) && downstream.push(element); + } + + @Override + @SuppressWarnings("unchecked") + public final Gatherer andThen(Gatherer that) { + if (that.getClass() == TakeWhileGatherer.class) { + final var thisPredicate = predicate; + final var thatPredicate = ((TakeWhileGatherer)that).predicate; + return (Gatherer)new TakeWhileGatherer(e -> thisPredicate.test(e) && thatPredicate.test(e)); + } + else + return Gatherer.super.andThen(that); + } + } + + final static class Box { + T value; + boolean hasValue; + + Box() {} + } +} \ No newline at end of file diff --git a/test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherFMRPar.java b/test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherFMRPar.java new file mode 100644 index 0000000000000..476299df76e5a --- /dev/null +++ b/test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherFMRPar.java @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2023, 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. + */ +package org.openjdk.bench.java.util.stream.ops.ref; + +import org.openjdk.bench.java.util.stream.ops.LongAccumulator; +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Fork; +import org.openjdk.jmh.annotations.Measurement; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Param; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.Setup; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.Warmup; + +import java.util.concurrent.TimeUnit; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.Arrays; +import java.util.stream.Gatherer; +import static org.openjdk.bench.java.util.stream.ops.ref.BenchmarkGathererImpls.filter; +import static org.openjdk.bench.java.util.stream.ops.ref.BenchmarkGathererImpls.map; + +/** + * Benchmark for filter+map+reduce operations implemented as Gatherer, with the default map implementation of Stream as baseline. + */ +@BenchmarkMode(Mode.Throughput) +@Warmup(iterations = 4, time = 5, timeUnit = TimeUnit.SECONDS) +@Measurement(iterations = 7, time = 5, timeUnit = TimeUnit.SECONDS) +@Fork(jvmArgsAppend = "--enable-preview", value = 1) +@OutputTimeUnit(TimeUnit.SECONDS) +@State(Scope.Thread) +public class GatherFMRPar { + + @Param({"10","100","1000000"}) + private int size; + + private Function squared; + private Predicate evens; + + private Gatherer gathered; + private Gatherer ga_map_squared; + private Gatherer ga_filter_evens; + + private Long[] cachedInputArray; + + @Setup + public void setup() { + cachedInputArray = new Long[size]; + for(int i = 0;i < size;++i) + cachedInputArray[i] = Long.valueOf(i); + + squared = new Function() { @Override public Long apply(Long l) { return l*l; } }; + evens = new Predicate() { @Override public boolean test(Long l) { + return l % 2 == 0; + } }; + + ga_map_squared = map(squared); + ga_filter_evens = filter(evens); + + gathered = ga_filter_evens.andThen(ga_map_squared); + } + + @Benchmark + public long par_fmr_baseline() { + return Arrays.stream(cachedInputArray) + .parallel() + .filter(evens) + .map(squared) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } + + @Benchmark + public long par_fmr_gather() { + return Arrays.stream(cachedInputArray) + .parallel() + .gather(filter(evens)) + .gather(map(squared)) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } + + @Benchmark + public long par_fmr_gather_preallocated() { + return Arrays.stream(cachedInputArray) + .parallel() + .gather(ga_filter_evens) + .gather(ga_map_squared) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } + + @Benchmark + public long par_fmr_gather_composed() { + return Arrays.stream(cachedInputArray) + .parallel() + .gather(filter(evens).andThen(map(squared))) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } + + @Benchmark + public long par_fmr_gather_composed_preallocated() { + return Arrays.stream(cachedInputArray) + .parallel() + .gather(filter(evens).andThen(map(squared))) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } + + @Benchmark + public long par_fmr_gather_precomposed() { + return Arrays.stream(cachedInputArray) + .parallel() + .gather(gathered) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } +} diff --git a/test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherFMRSeq.java b/test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherFMRSeq.java new file mode 100644 index 0000000000000..05e48e16d075b --- /dev/null +++ b/test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherFMRSeq.java @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2023, 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. + */ +package org.openjdk.bench.java.util.stream.ops.ref; + +import org.openjdk.bench.java.util.stream.ops.LongAccumulator; +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Fork; +import org.openjdk.jmh.annotations.Measurement; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Param; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.Setup; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.Warmup; + +import java.util.concurrent.TimeUnit; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.Arrays; +import java.util.stream.Gatherer; +import static org.openjdk.bench.java.util.stream.ops.ref.BenchmarkGathererImpls.filter; +import static org.openjdk.bench.java.util.stream.ops.ref.BenchmarkGathererImpls.map; + +/** + * Benchmark for filter+map+reduce operations implemented as Gatherer, with the default map implementation of Stream as baseline. + */ +@BenchmarkMode(Mode.Throughput) +@Warmup(iterations = 4, time = 5, timeUnit = TimeUnit.SECONDS) +@Measurement(iterations = 7, time = 5, timeUnit = TimeUnit.SECONDS) +@Fork(jvmArgsAppend = "--enable-preview", value = 1) +@OutputTimeUnit(TimeUnit.SECONDS) +@State(Scope.Thread) +public class GatherFMRSeq { + + @Param({"10","100","1000000"}) + private int size; + + private Function squared; + private Predicate evens; + + private Gatherer gathered; + private Gatherer ga_map_squared; + private Gatherer ga_filter_evens; + + private Long[] cachedInputArray; + + @Setup + public void setup() { + cachedInputArray = new Long[size]; + for(int i = 0;i < size;++i) + cachedInputArray[i] = Long.valueOf(i); + + squared = new Function() { @Override public Long apply(Long l) { return l*l; } }; + evens = new Predicate() { @Override public boolean test(Long l) { + return l % 2 == 0; + } }; + + ga_map_squared = map(squared); + ga_filter_evens = filter(evens); + + gathered = ga_filter_evens.andThen(ga_map_squared); + } + + @Benchmark + public long seq_fmr_baseline() { + return Arrays.stream(cachedInputArray) + .filter(evens) + .map(squared) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } + + @Benchmark + public long seq_fmr_gather() { + return Arrays.stream(cachedInputArray) + .gather(filter(evens)) + .gather(map(squared)) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } + + @Benchmark + public long seq_fmr_gather_preallocated() { + return Arrays.stream(cachedInputArray) + .gather(ga_filter_evens) + .gather(ga_map_squared) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } + + @Benchmark + public long seq_fmr_gather_composed() { + return Arrays.stream(cachedInputArray) + .gather(filter(evens).andThen(map(squared))) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } + + @Benchmark + public long seq_fmr_gather_composed_preallocated() { + return Arrays.stream(cachedInputArray) + .gather(filter(evens).andThen(map(squared))) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } + + @Benchmark + public long seq_fmr_gather_precomposed() { + return Arrays.stream(cachedInputArray) + .gather(gathered) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } +} diff --git a/test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherFlatMapInfinitySeq.java b/test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherFlatMapInfinitySeq.java new file mode 100644 index 0000000000000..09c38f8348432 --- /dev/null +++ b/test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherFlatMapInfinitySeq.java @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2023, 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. + */ +package org.openjdk.bench.java.util.stream.ops.ref; + +import org.openjdk.bench.java.util.stream.ops.LongAccumulator; +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Fork; +import org.openjdk.jmh.annotations.Measurement; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Param; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.Setup; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.Warmup; + +import java.util.concurrent.TimeUnit; +import java.util.function.Function; +import java.util.Arrays; +import java.util.stream.Stream; +import java.util.stream.Gatherer; +import static org.openjdk.bench.java.util.stream.ops.ref.BenchmarkGathererImpls.flatMap; + +/** + * Benchmark for map() operation implemented as Gatherer, with the default map implementation of Stream as baseline. + */ +@BenchmarkMode(Mode.Throughput) +@Warmup(iterations = 4, time = 5, timeUnit = TimeUnit.SECONDS) +@Measurement(iterations = 7, time = 5, timeUnit = TimeUnit.SECONDS) +@Fork(jvmArgsAppend = "--enable-preview", value = 1) +@OutputTimeUnit(TimeUnit.SECONDS) +@State(Scope.Thread) +public class GatherFlatMapInfinitySeq { + + /** + * Implementation notes: + * - parallel version requires thread-safe sink, we use the same for sequential version for better comparison + * - operations are explicit inner classes to untangle unwanted lambda effects + * - the result of applying consecutive operations is the same, in order to have the same number of elements in sink + */ + + @Param({"10", "100", "1000"}) + private int size; + + private Function> funInf; + + private Long[] cachedInputArray; + + private Gatherer gather_flatMap_inf; + + @Setup + public void setup() { + cachedInputArray = new Long[size]; + for(int i = 0;i < size;++i) + cachedInputArray[i] = Long.valueOf(i); + + funInf = new Function>() { @Override public Stream apply(Long l) { + return Stream.generate(() -> l); + } }; + + gather_flatMap_inf = flatMap(funInf); + } + + @Benchmark + public long seq_invoke_baseline() { + return Arrays.stream(cachedInputArray) + .flatMap(funInf) + .limit(size * 5) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } + + @Benchmark + public long seq_invoke_gather() { + return Arrays.stream(cachedInputArray) + .gather(flatMap(funInf)) + .limit(size * 5) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } + + @Benchmark + public long seq_invoke_gather_preallocated() { + return Arrays.stream(cachedInputArray) + .gather(gather_flatMap_inf) + .limit(size * 5) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } +} diff --git a/test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherFlatMapSeq.java b/test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherFlatMapSeq.java new file mode 100644 index 0000000000000..a13ee01a8514b --- /dev/null +++ b/test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherFlatMapSeq.java @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2023, 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. + */ +package org.openjdk.bench.java.util.stream.ops.ref; + +import org.openjdk.bench.java.util.stream.ops.LongAccumulator; +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Fork; +import org.openjdk.jmh.annotations.Measurement; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Param; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.Setup; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.Warmup; + +import java.util.concurrent.TimeUnit; +import java.util.function.Function; +import java.util.Arrays; +import java.util.stream.Stream; +import java.util.stream.Gatherer; +import static org.openjdk.bench.java.util.stream.ops.ref.BenchmarkGathererImpls.flatMap; + +/** + * Benchmark for map() operation implemented as Gatherer, with the default map implementation of Stream as baseline. + */ +@BenchmarkMode(Mode.Throughput) +@Warmup(iterations = 4, time = 5, timeUnit = TimeUnit.SECONDS) +@Measurement(iterations = 7, time = 5, timeUnit = TimeUnit.SECONDS) +@Fork(jvmArgsAppend = "--enable-preview", value = 1) +@OutputTimeUnit(TimeUnit.SECONDS) +@State(Scope.Thread) +public class GatherFlatMapSeq { + + /** + * Implementation notes: + * - parallel version requires thread-safe sink, we use the same for sequential version for better comparison + * - operations are explicit inner classes to untangle unwanted lambda effects + * - the result of applying consecutive operations is the same, in order to have the same number of elements in sink + */ + + @Param({"10", "100", "1000"}) + private int size; + + private Function> fun; + + private Gatherer gather_flatMap; + + private Long[] cachedInputArray; + + @Setup + public void setup() { + cachedInputArray = new Long[size]; + for(int i = 0;i < size;++i) + cachedInputArray[i] = Long.valueOf(i); + + fun = new Function>() { @Override public Stream apply(Long l) { + return Arrays.stream(cachedInputArray); + } }; + + gather_flatMap = flatMap(fun); + } + + @Benchmark + public long seq_invoke_baseline() { + return Arrays.stream(cachedInputArray) + .flatMap(fun) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } + + @Benchmark + public long seq_invoke_gather() { + return Arrays.stream(cachedInputArray) + .gather(flatMap(fun)) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } + + @Benchmark + public long seq_invoke_gather_preallocated() { + return Arrays.stream(cachedInputArray) + .gather(gather_flatMap) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } +} diff --git a/test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherMapPar.java b/test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherMapPar.java new file mode 100644 index 0000000000000..62c2d03b1b1af --- /dev/null +++ b/test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherMapPar.java @@ -0,0 +1,171 @@ +/* + * Copyright (c) 2023, 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. + */ +package org.openjdk.bench.java.util.stream.ops.ref; + +import org.openjdk.bench.java.util.stream.ops.LongAccumulator; +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Fork; +import org.openjdk.jmh.annotations.Measurement; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Param; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.Setup; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.Warmup; + +import java.util.Arrays; +import java.util.concurrent.TimeUnit; +import java.util.function.Function; +import java.util.stream.Stream; +import java.util.stream.Gatherer; +import static org.openjdk.bench.java.util.stream.ops.ref.BenchmarkGathererImpls.map; + +/** + * Benchmark for map() operation implemented as Gatherer, with the default map implementation of Stream as baseline. + */ +@BenchmarkMode(Mode.Throughput) +@Warmup(iterations = 4, time = 5, timeUnit = TimeUnit.SECONDS) +@Measurement(iterations = 7, time = 5, timeUnit = TimeUnit.SECONDS) +@Fork(jvmArgsAppend = "--enable-preview", value = 1) +@OutputTimeUnit(TimeUnit.SECONDS) +@State(Scope.Thread) +public class GatherMapPar { + + /** + * Implementation notes: + * - parallel version requires thread-safe sink, we use the same for sequential version for better comparison + * - operations are explicit inner classes to untangle unwanted lambda effects + * - the result of applying consecutive operations is the same, in order to have the same number of elements in sink + */ + @Param({"10","100","1000000"}) + private int size; + + private Function m1, m2, m3; + + private Gatherer gather_m1, gather_m2, gather_m3, gather_all, gather_m1_111; + + private Long[] cachedInputArray; + + @Setup + public void setup() { + cachedInputArray = new Long[size]; + for(int i = 0;i < size;++i) + cachedInputArray[i] = Long.valueOf(i); + + m1 = new Function() { @Override public Long apply(Long l) { return l*2; } }; + m2 = new Function() { @Override public Long apply(Long l) { return l*2; } }; + m3 = new Function() { @Override public Long apply(Long l) { return l*2; } }; + gather_m1 = map(m1); + gather_m2 = map(m2); + gather_m3 = map(m3); + gather_all = gather_m1.andThen(gather_m2.andThen(gather_m3)); + gather_m1_111 = gather_m1.andThen(gather_m1.andThen(gather_m1)); + } + + @Benchmark + public long par_invoke_baseline() { + return Arrays.stream(cachedInputArray).parallel() + .map(m1) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } + + @Benchmark + public long par_invoke_gather() { + return Arrays.stream(cachedInputArray).parallel() + .gather(map(m1)) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } + + @Benchmark + public long par_invoke_gather_preallocated() { + return Arrays.stream(cachedInputArray).parallel() + .gather(gather_m1) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } + + @Benchmark + public long par_chain_111_baseline() { + return Arrays.stream(cachedInputArray).parallel() + .map(m1) + .map(m1) + .map(m1) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } + + @Benchmark + public long par_chain_111_gather_separate() { + return Arrays.stream(cachedInputArray).parallel() + .gather(map(m1)) + .gather(map(m1)) + .gather(map(m1)) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } + + @Benchmark + public long par_chain_111_gather_composed() { + return Arrays.stream(cachedInputArray).parallel() + .gather(gather_m1.andThen(gather_m1).andThen(gather_m1)) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } + + @Benchmark + public long par_chain_111_gather_precomposed() { + return Arrays.stream(cachedInputArray).parallel() + .gather(gather_m1_111) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } + + @Benchmark + public long par_chain_123_baseline() { + return Arrays.stream(cachedInputArray).parallel() + .map(m1) + .map(m2) + .map(m3) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } + + @Benchmark + public long par_chain_123_gather_separate() { + return Arrays.stream(cachedInputArray).parallel() + .gather(map(m1)) + .gather(map(m2)) + .gather(map(m3)) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } + + @Benchmark + public long par_chain_123_gather_composed() { + return Arrays.stream(cachedInputArray).parallel() + .gather(map(m1).andThen(map(m2).andThen(map(m3)))) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } + + @Benchmark + public long par_chain_123_gather_precomposed() { + return Arrays.stream(cachedInputArray).parallel() + .gather(gather_all) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } +} diff --git a/test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherMapSeq.java b/test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherMapSeq.java new file mode 100644 index 0000000000000..1e842c0c09e7d --- /dev/null +++ b/test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherMapSeq.java @@ -0,0 +1,183 @@ +/* + * Copyright (c) 2023, 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. + */ +package org.openjdk.bench.java.util.stream.ops.ref; + +import org.openjdk.bench.java.util.stream.ops.LongAccumulator; +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Fork; +import org.openjdk.jmh.annotations.Measurement; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Param; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.Setup; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.Warmup; + +import java.util.concurrent.TimeUnit; +import java.util.function.Function; +import java.util.Arrays; +import java.util.stream.Collector; +import java.util.stream.Gatherer; +import static org.openjdk.bench.java.util.stream.ops.ref.BenchmarkGathererImpls.map; + +/** + * Benchmark for map() operation implemented as Gatherer, with the default map implementation of Stream as baseline. + */ +@BenchmarkMode(Mode.Throughput) +@Warmup(iterations = 4, time = 5, timeUnit = TimeUnit.SECONDS) +@Measurement(iterations = 7, time = 5, timeUnit = TimeUnit.SECONDS) +@Fork(jvmArgsAppend = "--enable-preview", value = 1) +@OutputTimeUnit(TimeUnit.SECONDS) +@State(Scope.Thread) +public class GatherMapSeq { + + /** + * Implementation notes: + * - parallel version requires thread-safe sink, we use the same for sequential version for better comparison + * - operations are explicit inner classes to untangle unwanted lambda effects + * - the result of applying consecutive operations is the same, in order to have the same number of elements in sink + */ + + @Param({"10", "100", "1000000"}) + private int size; + + private Function m1, m2, m3; + + private Gatherer gather_m1, gather_m2, gather_m3, gather_all, gather_m1_111; + + private Long[] cachedInputArray; + + private final static Collector accumulate = + Collector.of(LongAccumulator::new, + LongAccumulator::add, + (l,r) -> { l.merge(r); return l; }, + LongAccumulator::get); + + @Setup + public void setup() { + cachedInputArray = new Long[size]; + for(int i = 0;i < size;++i) + cachedInputArray[i] = Long.valueOf(i); + m1 = new Function() { @Override public Long apply(Long l) { + return l*2; + } }; + m2 = new Function() { @Override public Long apply(Long l) { + return l*2; + } }; + m3 = new Function() { @Override public Long apply(Long l) { + return l*2; + } }; + gather_m1 = map(m1); + gather_m2 = map(m2); + gather_m3 = map(m3); + gather_all = gather_m1.andThen(gather_m2.andThen(gather_m3)); + gather_m1_111 = gather_m1.andThen(gather_m1.andThen(gather_m1)); + } + + @Benchmark + public long seq_invoke_baseline() { + return Arrays.stream(cachedInputArray) + .map(m1) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } + + @Benchmark + public long seq_invoke_gather() { + return Arrays.stream(cachedInputArray) + .gather(map(m1)) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } + + @Benchmark + public long seq_invoke_gather_preallocated() { + return Arrays.stream(cachedInputArray) + .gather(gather_m1) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } + + @Benchmark + public long seq_chain_111_baseline() { + return Arrays.stream(cachedInputArray) + .map(m1) + .map(m1) + .map(m1) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } + + @Benchmark + public long seq_chain_111_gather_separate() { + return Arrays.stream(cachedInputArray) + .gather(map(m1)) + .gather(map(m1)) + .gather(map(m1)) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } + + @Benchmark + public long seq_chain_111_gather_composed() { + return Arrays.stream(cachedInputArray) + .gather(map(m1).andThen(map(m1)).andThen(map(m1))) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } + + @Benchmark + public long seq_chain_111_gather_precomposed() { + return Arrays.stream(cachedInputArray) + .gather(gather_m1_111) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } + + @Benchmark + public long seq_chain_123_baseline() { + return Arrays.stream(cachedInputArray) + .map(m1) + .map(m2) + .map(m3) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } + + @Benchmark + public long seq_chain_123_gather_separate() { + return Arrays.stream(cachedInputArray) + .gather(map(m1)) + .gather(map(m2)) + .gather(map(m3)) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } + + @Benchmark + public long seq_chain_123_gather_composed() { + return Arrays.stream(cachedInputArray) + .gather(map(m1).andThen(map(m2)).andThen(map(m3))) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } + + @Benchmark + public long seq_chain_123_gather_precomposed() { + return Arrays.stream(cachedInputArray) + .gather(gather_all) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } +} diff --git a/test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherMiscPar.java b/test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherMiscPar.java new file mode 100644 index 0000000000000..578e470ec5cb3 --- /dev/null +++ b/test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherMiscPar.java @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2023, 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. + */ +package org.openjdk.bench.java.util.stream.ops.ref; + +import org.openjdk.bench.java.util.stream.ops.LongAccumulator; +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Fork; +import org.openjdk.jmh.annotations.Measurement; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Param; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.Setup; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.Warmup; + +import java.util.concurrent.TimeUnit; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.Arrays; +import java.util.stream.Gatherer; +import static org.openjdk.bench.java.util.stream.ops.ref.BenchmarkGathererImpls.filter; +import static org.openjdk.bench.java.util.stream.ops.ref.BenchmarkGathererImpls.map; + +/** + * Benchmark for misc operations implemented as Gatherer, with the default map implementation of Stream as baseline. + */ +@BenchmarkMode(Mode.Throughput) +@Warmup(iterations = 4, time = 5, timeUnit = TimeUnit.SECONDS) +@Measurement(iterations = 7, time = 5, timeUnit = TimeUnit.SECONDS) +@Fork(jvmArgsAppend = "--enable-preview", value = 1) +@OutputTimeUnit(TimeUnit.SECONDS) +@State(Scope.Thread) +public class GatherMiscPar { + + /** + * Implementation notes: + * - parallel version requires thread-safe sink, we use the same for sequential version for better comparison + * - operations are explicit inner classes to untangle unwanted lambda effects + * - the result of applying consecutive operations is the same, in order to have the same number of elements in sink + */ + + @Param({"10","100","1000000"}) + private int size; + + private Function timesTwo, halved; + private Predicate evens, odds; + + private Gatherer gathered; + + private Long[] cachedInputArray; + + @Setup + public void setup() { + cachedInputArray = new Long[size]; + for(int i = 0;i < size;++i) + cachedInputArray[i] = Long.valueOf(i); + + timesTwo = new Function() { @Override public Long apply(Long l) { + return l*2; + } }; + halved = new Function() { @Override public Long apply(Long l) { return l/2; } }; + + evens = new Predicate() { @Override public boolean test(Long l) { + return l % 2 == 0; + } }; + odds = new Predicate() { @Override public boolean test(Long l) { + return l % 2 != 0; + } }; + + gathered = filter(odds) + .andThen(map(timesTwo)) + .andThen(map(halved)) + .andThen(filter(evens)); + } + + @Benchmark + public long par_misc_baseline() { + return Arrays.stream(cachedInputArray) + .parallel() + .filter(odds) + .map(timesTwo) + .map(halved) + .filter(evens) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } + + @Benchmark + public long par_misc_gather() { + return Arrays.stream(cachedInputArray) + .parallel() + .gather(filter(odds)) + .gather(map(timesTwo)) + .gather(map(halved)) + .gather(filter(evens)) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } + + @Benchmark + public long par_misc_gather_precomposed() { + return Arrays.stream(cachedInputArray) + .parallel() + .gather(gathered) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } +} diff --git a/test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherMiscSeq.java b/test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherMiscSeq.java new file mode 100644 index 0000000000000..0d7d9bdef9f49 --- /dev/null +++ b/test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherMiscSeq.java @@ -0,0 +1,164 @@ +/* + * Copyright (c) 2023, 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. + */ +package org.openjdk.bench.java.util.stream.ops.ref; + +import org.openjdk.bench.java.util.stream.ops.LongAccumulator; +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Fork; +import org.openjdk.jmh.annotations.Measurement; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Param; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.Setup; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.Warmup; + +import java.util.concurrent.TimeUnit; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.Arrays; +import java.util.Optional; +import java.util.stream.Gatherer; +import static org.openjdk.bench.java.util.stream.ops.ref.BenchmarkGathererImpls.filter; +import static org.openjdk.bench.java.util.stream.ops.ref.BenchmarkGathererImpls.findLast; +import static org.openjdk.bench.java.util.stream.ops.ref.BenchmarkGathererImpls.map; + +/** + * Benchmark for misc operations implemented as Gatherer, with the default map implementation of Stream as baseline. + */ +@BenchmarkMode(Mode.Throughput) +@Warmup(iterations = 4, time = 5, timeUnit = TimeUnit.SECONDS) +@Measurement(iterations = 7, time = 5, timeUnit = TimeUnit.SECONDS) +@Fork(jvmArgsAppend = "--enable-preview", value = 1) +@OutputTimeUnit(TimeUnit.SECONDS) +@State(Scope.Thread) +public class GatherMiscSeq { + + /** + * Implementation notes: + * - parallel version requires thread-safe sink, we use the same for sequential version for better comparison + * - operations are explicit inner classes to untangle unwanted lambda effects + * - the result of applying consecutive operations is the same, in order to have the same number of elements in sink + */ + + @Param({"10","100","1000000"}) + private int size; + + private Function timesTwo, squared; + private Predicate evens, odds; + + private Gatherer gathered; + private Gatherer ga_filter_odds; + private Gatherer ga_map_timesTwo; + private Gatherer ga_map_squared; + private Gatherer ga_filter_evens; + + private Long[] cachedInputArray; + + @Setup + public void setup() { + cachedInputArray = new Long[size]; + for(int i = 0;i < size;++i) + cachedInputArray[i] = Long.valueOf(i); + + timesTwo = new Function() { @Override public Long apply(Long l) { + return l*2; + } }; + squared = new Function() { @Override public Long apply(Long l) { return l*l; } }; + + evens = new Predicate() { @Override public boolean test(Long l) { + return l % 2 == 0; + } }; + odds = new Predicate() { @Override public boolean test(Long l) { + return l % 2 != 0; + } }; + + ga_filter_odds = filter(odds); + ga_map_timesTwo = map(timesTwo); + ga_map_squared = map(squared); + ga_filter_evens = filter(evens); + + gathered = ga_filter_odds.andThen(ga_map_timesTwo).andThen(ga_map_squared).andThen(ga_filter_evens); + } + + @Benchmark + public long seq_misc_baseline() { + return Arrays.stream(cachedInputArray) + .filter(odds) + .map(timesTwo) + .map(squared) + .filter(evens) + .collect(findLast()).get(); + } + + @Benchmark + public long seq_misc_gather() { + return Arrays.stream(cachedInputArray) + .gather(filter(odds)) + .gather(map(timesTwo)) + .gather(map(squared)) + .gather(filter(evens)) + .collect(findLast()).get(); + } + + @Benchmark + public long seq_misc_gather_preallocated() { + return Arrays.stream(cachedInputArray) + .gather(ga_filter_odds) + .gather(ga_map_timesTwo) + .gather(ga_map_squared) + .gather(ga_filter_evens) + .collect(findLast()).get(); + } + + @Benchmark + public long seq_misc_gather_composed() { + return Arrays.stream(cachedInputArray) + .gather(filter(odds) + .andThen(map(timesTwo)) + .andThen(map(squared)) + .andThen(filter(evens)) + ) + .collect(findLast()).get(); + } + + @Benchmark + public long seq_misc_gather_composed_preallocated() { + return Arrays.stream(cachedInputArray) + .gather(ga_filter_odds + .andThen(ga_map_timesTwo) + .andThen(ga_map_squared) + .andThen(ga_filter_evens) + ) + .collect(findLast()).get(); + } + + @Benchmark + public long seq_misc_gather_precomposed() { + return Arrays.stream(cachedInputArray) + .gather(gathered) + .collect(findLast()).get(); + } +} diff --git a/test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherReducePar.java b/test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherReducePar.java new file mode 100644 index 0000000000000..2f2d0b06bd7a6 --- /dev/null +++ b/test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherReducePar.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2023, 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. + */ +package org.openjdk.bench.java.util.stream.ops.ref; + +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Fork; +import org.openjdk.jmh.annotations.Measurement; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Param; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.Setup; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.Warmup; + +import java.util.Optional; +import java.util.concurrent.TimeUnit; +import java.util.function.BinaryOperator; +import java.util.Arrays; +import java.util.stream.Collector; +import java.util.stream.Gatherer; +import static org.openjdk.bench.java.util.stream.ops.ref.BenchmarkGathererImpls.findFirst; +import static org.openjdk.bench.java.util.stream.ops.ref.BenchmarkGathererImpls.reduce; + +/** + * Benchmark for comparing the built-in reduce() operation with the Gatherer-based reduce-operation. + */ +@BenchmarkMode(Mode.Throughput) +@Warmup(iterations = 4, time = 5, timeUnit = TimeUnit.SECONDS) +@Measurement(iterations = 7, time = 5, timeUnit = TimeUnit.SECONDS) +@Fork(jvmArgsAppend = "--enable-preview", value = 1) +@OutputTimeUnit(TimeUnit.SECONDS) +@State(Scope.Thread) +public class GatherReducePar { + + /** + * Implementation notes: + * - parallel version requires thread-safe sink, we use the same for sequential version for better comparison + * - operations are explicit inner classes to untangle unwanted lambda effects + */ + + @Param({"100000"}) + private int size; + + private BinaryOperator op1; + + private Gatherer gather_op1; + + private Long[] cachedInputArray; + + @Setup + public void setup() { + cachedInputArray = new Long[size]; + for(int i = 0;i < size;++i) + cachedInputArray[i] = Long.valueOf(i); + + op1 = new BinaryOperator() { + @Override public Long apply(Long l, Long r) { + return (l < r) ? r : l; + } + }; + } + + @Benchmark + public long par_invoke_baseline() { + return Arrays.stream(cachedInputArray).parallel().reduce(op1).get(); + } + + @Benchmark + public long par_invoke_gather() { + return Arrays.stream(cachedInputArray).parallel().gather(reduce(op1)).collect(findFirst()).get(); + } +} diff --git a/test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherReduceSeq.java b/test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherReduceSeq.java new file mode 100644 index 0000000000000..7d8540d0ed46d --- /dev/null +++ b/test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherReduceSeq.java @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2023, 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. + */ +package org.openjdk.bench.java.util.stream.ops.ref; + +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Fork; +import org.openjdk.jmh.annotations.Measurement; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Param; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.Setup; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.Warmup; + +import java.util.concurrent.TimeUnit; +import java.util.function.BinaryOperator; +import java.util.Arrays; +import java.util.Optional; +import java.util.stream.Gatherer; +import java.util.stream.Collector; +import java.util.stream.Stream; + +import static org.openjdk.bench.java.util.stream.ops.ref.BenchmarkGathererImpls.findFirst; +import static org.openjdk.bench.java.util.stream.ops.ref.BenchmarkGathererImpls.reduce; + +/** + * Benchmark for comparing the built-in reduce() operation with the Gatherer-based reduce-operation. + */ +@BenchmarkMode(Mode.Throughput) +@Warmup(iterations = 4, time = 5, timeUnit = TimeUnit.SECONDS) +@Measurement(iterations = 7, time = 5, timeUnit = TimeUnit.SECONDS) +@Fork(jvmArgsAppend = "--enable-preview", value = 1) +@OutputTimeUnit(TimeUnit.SECONDS) +@State(Scope.Thread) +public class GatherReduceSeq { + + /** + * Implementation notes: + * - parallel version requires thread-safe sink, we use the same for sequential version for better comparison + * - operations are explicit inner classes to untangle unwanted lambda effects + */ + + @Param({"100", "100000"}) + private int size; + + private BinaryOperator op1; + + private Gatherer gather_op1; + + private Long[] cachedInputArray; + + @Setup + public void setup() { + cachedInputArray = new Long[size]; + for(int i = 0;i < size;++i) + cachedInputArray[i] = Long.valueOf(i); + + op1 = new BinaryOperator() { + @Override + public Long apply(Long l, Long r) { + return (l < r) ? r : l; + } + }; + + gather_op1 = reduce(op1); + } + + @Benchmark + public long seq_invoke_baseline() { + return Arrays.stream(cachedInputArray).reduce(op1).get(); + } + + @Benchmark + public long seq_invoke_gather() { + return Arrays.stream(cachedInputArray).gather(reduce(op1)).collect(findFirst()).get(); + } + + @Benchmark + public long seq_invoke_gather_preallocated() { + return Arrays.stream(cachedInputArray).gather(gather_op1).collect(findFirst()).get(); + } +} diff --git a/test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherWhileOrdered.java b/test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherWhileOrdered.java new file mode 100644 index 0000000000000..6e9e5fec1faf8 --- /dev/null +++ b/test/micro/org/openjdk/bench/java/util/stream/ops/ref/GatherWhileOrdered.java @@ -0,0 +1,128 @@ +/* + * Copyright (c) 2023, 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. + */ +package org.openjdk.bench.java.util.stream.ops.ref; + +import org.openjdk.bench.java.util.stream.ops.LongAccumulator; +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Fork; +import org.openjdk.jmh.annotations.Measurement; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Param; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.Setup; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.Warmup; + +import java.util.concurrent.TimeUnit; +import java.util.function.BinaryOperator; +import java.util.function.Predicate; +import java.util.Objects; +import java.util.Arrays; +import java.util.stream.Gatherer; +import static org.openjdk.bench.java.util.stream.ops.ref.BenchmarkGathererImpls.takeWhile; + +/** + * Benchmark for comparing the built-in takeWhile-operation with the Gatherer-based takeWhile-operation for ordered streams. + */ +@BenchmarkMode(Mode.Throughput) +@Warmup(iterations = 4, time = 5, timeUnit = TimeUnit.SECONDS) +@Measurement(iterations = 7, time = 5, timeUnit = TimeUnit.SECONDS) +@Fork(jvmArgsAppend = "--enable-preview", value = 1) +@OutputTimeUnit(TimeUnit.SECONDS) +@State(Scope.Thread) +public class GatherWhileOrdered { + + /** + * Implementation notes: + * - parallel version requires thread-safe sink, we use the same for sequential version for better comparison + * - operations are explicit inner classes to untangle unwanted lambda effects + */ + + @Param("100000") + private int size; + + @Param({"0", "49999", "99999"}) + private int find; + + private Predicate predicate; + + private Gatherer gather_takeWhile; + + private Long[] cachedInputArray; + + @Setup + public void setup() { + final int limit = find; + + cachedInputArray = new Long[size]; + for(int i = 0;i < size;++i) + cachedInputArray[i] = Long.valueOf(i); + + predicate = new Predicate() { + @Override + public boolean test(Long v) { + return v < limit; + } + }; + + gather_takeWhile = takeWhile(predicate); + } + + @Benchmark + public long seq_invoke_baseline() { + return Arrays.stream(cachedInputArray).takeWhile(predicate) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } + + @Benchmark + public long seq_invoke_gather() { + return Arrays.stream(cachedInputArray).gather(takeWhile(predicate)) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } + + @Benchmark + public long seq_invoke_gather_preallocated() { + return Arrays.stream(cachedInputArray).gather(gather_takeWhile) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } + + @Benchmark + public long par_invoke_baseline() { + return Arrays.stream(cachedInputArray).parallel().takeWhile(predicate) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } + + @Benchmark + public long par_invoke_gather() { + return Arrays.stream(cachedInputArray).parallel().gather(takeWhile(predicate)) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } + + @Benchmark + public long par_invoke_gather_preallocated() { + return Arrays.stream(cachedInputArray).parallel().gather(gather_takeWhile) + .collect(LongAccumulator::new, LongAccumulator::add, LongAccumulator::merge).get(); + } +} From da09eabdfc51599d0a34b07c538fba4009af57c5 Mon Sep 17 00:00:00 2001 From: Tom Rodriguez Date: Thu, 30 Nov 2023 14:58:18 +0000 Subject: [PATCH 139/250] 8319980: [JVMCI] libgraal should reuse Thread instances as C2 does Reviewed-by: dnsimon, kvn --- src/hotspot/share/compiler/compileBroker.cpp | 52 +++++++++----------- src/hotspot/share/compiler/compileBroker.hpp | 1 - 2 files changed, 23 insertions(+), 30 deletions(-) diff --git a/src/hotspot/share/compiler/compileBroker.cpp b/src/hotspot/share/compiler/compileBroker.cpp index dce935a14d8cb..bdaa64c5e4f08 100644 --- a/src/hotspot/share/compiler/compileBroker.cpp +++ b/src/hotspot/share/compiler/compileBroker.cpp @@ -278,7 +278,7 @@ bool CompileBroker::can_remove(CompilerThread *ct, bool do_it) { if (ct->idle_time_millis() < (c1 ? 500 : 100)) return false; #if INCLUDE_JVMCI - if (compiler->is_jvmci()) { + if (compiler->is_jvmci() && !UseJVMCINativeLibrary) { // Handles for JVMCI thread objects may get released concurrently. if (do_it) { assert(CompileThread_lock->owner() == ct, "must be holding lock"); @@ -297,7 +297,7 @@ bool CompileBroker::can_remove(CompilerThread *ct, bool do_it) { assert_locked_or_safepoint(CompileThread_lock); // Update must be consistent. compiler->set_num_compiler_threads(compiler_count - 1); #if INCLUDE_JVMCI - if (compiler->is_jvmci()) { + if (compiler->is_jvmci() && !UseJVMCINativeLibrary) { // Old j.l.Thread object can die when no longer referenced elsewhere. JNIHandles::destroy_global(compiler2_object(compiler_count - 1)); _compiler2_objects[compiler_count - 1] = nullptr; @@ -772,11 +772,6 @@ void CompileBroker::compilation_init(JavaThread* THREAD) { _initialized = true; } -Handle CompileBroker::create_thread_oop(const char* name, TRAPS) { - Handle thread_oop = JavaThread::create_system_thread_object(name, CHECK_NH); - return thread_oop; -} - #if defined(ASSERT) && COMPILER2_OR_JVMCI // Stress testing. Dedicated threads revert optimizations based on escape analysis concurrently to // the running java application. Configured with vm options DeoptimizeObjectsALot*. @@ -923,6 +918,13 @@ static bool trace_compiler_threads() { return TraceCompilerThreads || lt.is_enabled(); } +static jobject create_compiler_thread(AbstractCompiler* compiler, int i, TRAPS) { + char name_buffer[256]; + os::snprintf_checked(name_buffer, sizeof(name_buffer), "%s CompilerThread%d", compiler->name(), i); + Handle thread_oop = JavaThread::create_system_thread_object(name_buffer, CHECK_NULL); + return JNIHandles::make_global(thread_oop); +} + static void print_compiler_threads(stringStream& msg) { if (TraceCompilerThreads) { tty->print_cr("%7d %s", (int)tty->time_stamp().milliseconds(), msg.as_string()); @@ -953,18 +955,9 @@ void CompileBroker::init_compiler_threads() { _compiler1_logs = NEW_C_HEAP_ARRAY(CompileLog*, _c1_count, mtCompiler); } - char name_buffer[256]; - for (int i = 0; i < _c2_count; i++) { - jobject thread_handle = nullptr; - // Create all j.l.Thread objects for C1 and C2 threads here, but only one - // for JVMCI compiler which can create further ones on demand. - JVMCI_ONLY(if (!UseJVMCICompiler || !UseDynamicNumberOfCompilerThreads || i == 0) {) // Create a name for our thread. - os::snprintf_checked(name_buffer, sizeof(name_buffer), "%s CompilerThread%d", _compilers[1]->name(), i); - Handle thread_oop = create_thread_oop(name_buffer, CHECK); - thread_handle = JNIHandles::make_global(thread_oop); - JVMCI_ONLY(}) + jobject thread_handle = create_compiler_thread(_compilers[1], i, CHECK); _compiler2_objects[i] = thread_handle; _compiler2_logs[i] = nullptr; @@ -985,9 +978,7 @@ void CompileBroker::init_compiler_threads() { for (int i = 0; i < _c1_count; i++) { // Create a name for our thread. - os::snprintf_checked(name_buffer, sizeof(name_buffer), "C1 CompilerThread%d", i); - Handle thread_oop = create_thread_oop(name_buffer, CHECK); - jobject thread_handle = JNIHandles::make_global(thread_oop); + jobject thread_handle = create_compiler_thread(_compilers[0], i, CHECK); _compiler1_objects[i] = thread_handle; _compiler1_logs[i] = nullptr; @@ -1015,7 +1006,7 @@ void CompileBroker::init_compiler_threads() { // Initialize and start the object deoptimizer threads const int total_count = DeoptimizeObjectsALotThreadCountSingle + DeoptimizeObjectsALotThreadCountAll; for (int count = 0; count < total_count; count++) { - Handle thread_oop = create_thread_oop("Deoptimize objects a lot single mode", CHECK); + Handle thread_oop = JavaThread::create_system_thread_object("Deoptimize objects a lot single mode", CHECK); jobject thread_handle = JNIHandles::make_local(THREAD, thread_oop()); make_thread(deoptimizer_t, thread_handle, nullptr, nullptr, THREAD); } @@ -1042,13 +1033,15 @@ void CompileBroker::possibly_add_compiler_threads(JavaThread* THREAD) { for (int i = old_c2_count; i < new_c2_count; i++) { #if INCLUDE_JVMCI - if (UseJVMCICompiler) { - // Native compiler threads as used in C1/C2 can reuse the j.l.Thread - // objects as their existence is completely hidden from the rest of - // the VM (and those compiler threads can't call Java code to do the - // creation anyway). For JVMCI we have to create new j.l.Thread objects - // as they are visible and we can see unexpected thread lifecycle - // transitions if we bind them to new JavaThreads. + if (UseJVMCICompiler && !UseJVMCINativeLibrary && _compiler2_objects[i] == nullptr) { + // Native compiler threads as used in C1/C2 can reuse the j.l.Thread objects as their + // existence is completely hidden from the rest of the VM (and those compiler threads can't + // call Java code to do the creation anyway). + // + // For pure Java JVMCI we have to create new j.l.Thread objects as they are visible and we + // can see unexpected thread lifecycle transitions if we bind them to new JavaThreads. For + // native library JVMCI it's preferred to use the C1/C2 strategy as this avoids unnecessary + // coupling with Java. if (!THREAD->can_call_java()) break; char name_buffer[256]; os::snprintf_checked(name_buffer, sizeof(name_buffer), "%s CompilerThread%d", _compilers[1]->name(), i); @@ -1056,7 +1049,7 @@ void CompileBroker::possibly_add_compiler_threads(JavaThread* THREAD) { { // We have to give up the lock temporarily for the Java calls. MutexUnlocker mu(CompileThread_lock); - thread_oop = create_thread_oop(name_buffer, THREAD); + thread_oop = JavaThread::create_system_thread_object(name_buffer, THREAD); } if (HAS_PENDING_EXCEPTION) { if (trace_compiler_threads()) { @@ -1076,6 +1069,7 @@ void CompileBroker::possibly_add_compiler_threads(JavaThread* THREAD) { _compiler2_objects[i] = thread_handle; } #endif + guarantee(compiler2_object(i) != nullptr, "Thread oop must exist"); JavaThread *ct = make_thread(compiler_t, compiler2_object(i), _c2_compile_queue, _compilers[1], THREAD); if (ct == nullptr) break; _compilers[1]->set_num_compiler_threads(i + 1); diff --git a/src/hotspot/share/compiler/compileBroker.hpp b/src/hotspot/share/compiler/compileBroker.hpp index d136045102a8b..71a9c9dd6bbb0 100644 --- a/src/hotspot/share/compiler/compileBroker.hpp +++ b/src/hotspot/share/compiler/compileBroker.hpp @@ -241,7 +241,6 @@ class CompileBroker: AllStatic { deoptimizer_t }; - static Handle create_thread_oop(const char* name, TRAPS); static JavaThread* make_thread(ThreadType type, jobject thread_oop, CompileQueue* queue, AbstractCompiler* comp, JavaThread* THREAD); static void init_compiler_threads(); static void possibly_add_compiler_threads(JavaThread* THREAD); From 693847452f208446a34186f142fe2c56a49ceceb Mon Sep 17 00:00:00 2001 From: Albert Mingkun Yang Date: Thu, 30 Nov 2023 15:48:00 +0000 Subject: [PATCH 140/250] 8320916: jdk/jfr/event/gc/stacktrace/TestParallelMarkSweepAllocationPendingStackTrace.java failed with "OutOfMemoryError: GC overhead limit exceeded" Reviewed-by: sjohanss, tschatzl --- .../jdk/jdk/jfr/event/gc/stacktrace/AllocationStackTrace.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/jdk/jdk/jfr/event/gc/stacktrace/AllocationStackTrace.java b/test/jdk/jdk/jfr/event/gc/stacktrace/AllocationStackTrace.java index 5e3b56d2c8602..c5dbcd2b42ecd 100644 --- a/test/jdk/jdk/jfr/event/gc/stacktrace/AllocationStackTrace.java +++ b/test/jdk/jdk/jfr/event/gc/stacktrace/AllocationStackTrace.java @@ -79,7 +79,7 @@ public void allocate() { class OldGenMemoryAllocator extends MemoryAllocator { private List list = new ArrayList(); - private int counter = 6000; + private int counter = 5000; @Override public void allocate() { @@ -87,7 +87,7 @@ public void allocate() { list.add(new byte[10 * KB]); } else { list = new ArrayList(); - counter = 6000; + counter = 5000; } garbage = list; From 6aba6aa6f14c022ae70aee4e7a65ee74464de3a2 Mon Sep 17 00:00:00 2001 From: Volodymyr Paprotski <101140609+vpaprotsk@users.noreply.github.com> Date: Thu, 30 Nov 2023 16:10:54 +0000 Subject: [PATCH 141/250] 8320347: Emulate vblendvp[sd] on ECore Reviewed-by: sviswanathan, jbhateja --- src/hotspot/cpu/x86/c2_MacroAssembler_x86.cpp | 94 ++++++++++++++----- src/hotspot/cpu/x86/macroAssembler_x86.cpp | 50 ++++++++++ src/hotspot/cpu/x86/macroAssembler_x86.hpp | 4 + src/hotspot/cpu/x86/x86.ad | 20 +++- src/hotspot/cpu/x86/x86_64.ad | 74 +++------------ .../vectorization/TestSignumVector.java | 26 ++++- .../runner/BasicDoubleOpTest.java | 57 ++++++++++- .../runner/BasicFloatOpTest.java | 66 ++++++++++++- 8 files changed, 296 insertions(+), 95 deletions(-) diff --git a/src/hotspot/cpu/x86/c2_MacroAssembler_x86.cpp b/src/hotspot/cpu/x86/c2_MacroAssembler_x86.cpp index 29413e5457c57..54e5f55fa2b00 100644 --- a/src/hotspot/cpu/x86/c2_MacroAssembler_x86.cpp +++ b/src/hotspot/cpu/x86/c2_MacroAssembler_x86.cpp @@ -1094,32 +1094,78 @@ void C2_MacroAssembler::vminmax_fp(int opcode, BasicType elem_bt, bool is_min = (opcode == Op_MinV || opcode == Op_MinReductionV); bool is_double_word = is_double_word_type(elem_bt); + /* Note on 'non-obvious' assembly sequence: + * + * While there are vminps/vmaxps instructions, there are two important differences between hardware + * and Java on how they handle floats: + * a. -0.0 and +0.0 are considered equal (vminps/vmaxps will return second parameter when inputs are equal) + * b. NaN is not necesarily propagated (vminps/vmaxps will return second parameter when either input is NaN) + * + * It is still more efficient to use vminps/vmaxps, but with some pre/post-processing: + * a. -0.0/+0.0: Bias negative (positive) numbers to second parameter before vminps (vmaxps) + * (only useful when signs differ, noop otherwise) + * b. NaN: Check if it was the first parameter that had the NaN (with vcmp[UNORD_Q]) + + * Following pseudo code describes the algorithm for max[FD] (Min algorithm is on similar lines): + * btmp = (b < +0.0) ? a : b + * atmp = (b < +0.0) ? b : a + * Tmp = Max_Float(atmp , btmp) + * Res = (atmp == NaN) ? atmp : Tmp + */ + + void (MacroAssembler::*vblend)(XMMRegister, XMMRegister, XMMRegister, XMMRegister, int, bool, XMMRegister); + void (MacroAssembler::*vmaxmin)(XMMRegister, XMMRegister, XMMRegister, int); + void (MacroAssembler::*vcmp)(XMMRegister, XMMRegister, XMMRegister, int, int); + XMMRegister mask; + if (!is_double_word && is_min) { - vblendvps(atmp, a, b, a, vlen_enc); - vblendvps(btmp, b, a, a, vlen_enc); - vminps(tmp, atmp, btmp, vlen_enc); - vcmpps(btmp, atmp, atmp, Assembler::UNORD_Q, vlen_enc); - vblendvps(dst, tmp, atmp, btmp, vlen_enc); + mask = a; + vblend = &MacroAssembler::vblendvps; + vmaxmin = &MacroAssembler::vminps; + vcmp = &MacroAssembler::vcmpps; } else if (!is_double_word && !is_min) { - vblendvps(btmp, b, a, b, vlen_enc); - vblendvps(atmp, a, b, b, vlen_enc); - vmaxps(tmp, atmp, btmp, vlen_enc); - vcmpps(btmp, atmp, atmp, Assembler::UNORD_Q, vlen_enc); - vblendvps(dst, tmp, atmp, btmp, vlen_enc); + mask = b; + vblend = &MacroAssembler::vblendvps; + vmaxmin = &MacroAssembler::vmaxps; + vcmp = &MacroAssembler::vcmpps; } else if (is_double_word && is_min) { - vblendvpd(atmp, a, b, a, vlen_enc); - vblendvpd(btmp, b, a, a, vlen_enc); - vminpd(tmp, atmp, btmp, vlen_enc); - vcmppd(btmp, atmp, atmp, Assembler::UNORD_Q, vlen_enc); - vblendvpd(dst, tmp, atmp, btmp, vlen_enc); + mask = a; + vblend = &MacroAssembler::vblendvpd; + vmaxmin = &MacroAssembler::vminpd; + vcmp = &MacroAssembler::vcmppd; } else { assert(is_double_word && !is_min, "sanity"); - vblendvpd(btmp, b, a, b, vlen_enc); - vblendvpd(atmp, a, b, b, vlen_enc); - vmaxpd(tmp, atmp, btmp, vlen_enc); - vcmppd(btmp, atmp, atmp, Assembler::UNORD_Q, vlen_enc); - vblendvpd(dst, tmp, atmp, btmp, vlen_enc); + mask = b; + vblend = &MacroAssembler::vblendvpd; + vmaxmin = &MacroAssembler::vmaxpd; + vcmp = &MacroAssembler::vcmppd; } + + // Make sure EnableX86ECoreOpts isn't disabled on register overlaps + XMMRegister maxmin, scratch; + if (dst == btmp) { + maxmin = btmp; + scratch = tmp; + } else { + maxmin = tmp; + scratch = btmp; + } + + bool precompute_mask = EnableX86ECoreOpts && UseAVX>1; + if (precompute_mask && !is_double_word) { + vpsrad(tmp, mask, 32, vlen_enc); + mask = tmp; + } else if (precompute_mask && is_double_word) { + vpxor(tmp, tmp, tmp, vlen_enc); + vpcmpgtq(tmp, tmp, mask, vlen_enc); + mask = tmp; + } + + (this->*vblend)(atmp, a, b, mask, vlen_enc, !precompute_mask, btmp); + (this->*vblend)(btmp, b, a, mask, vlen_enc, !precompute_mask, tmp); + (this->*vmaxmin)(maxmin, atmp, btmp, vlen_enc); + (this->*vcmp)(scratch, atmp, atmp, Assembler::UNORD_Q, vlen_enc); + (this->*vblend)(dst, maxmin, atmp, scratch, vlen_enc, false, scratch); } void C2_MacroAssembler::evminmax_fp(int opcode, BasicType elem_bt, @@ -5318,18 +5364,18 @@ void C2_MacroAssembler::vector_signum_avx(int opcode, XMMRegister dst, XMMRegist if (opcode == Op_SignumVD) { vsubpd(dst, zero, one, vec_enc); // if src < 0 ? -1 : 1 - vblendvpd(dst, one, dst, src, vec_enc); + vblendvpd(dst, one, dst, src, vec_enc, true, xtmp1); // if src == NaN, -0.0 or 0.0 return src. vcmppd(xtmp1, src, zero, Assembler::EQ_UQ, vec_enc); - vblendvpd(dst, dst, src, xtmp1, vec_enc); + vblendvpd(dst, dst, src, xtmp1, vec_enc, false, xtmp1); } else { assert(opcode == Op_SignumVF, ""); vsubps(dst, zero, one, vec_enc); // if src < 0 ? -1 : 1 - vblendvps(dst, one, dst, src, vec_enc); + vblendvps(dst, one, dst, src, vec_enc, true, xtmp1); // if src == NaN, -0.0 or 0.0 return src. vcmpps(xtmp1, src, zero, Assembler::EQ_UQ, vec_enc); - vblendvps(dst, dst, src, xtmp1, vec_enc); + vblendvps(dst, dst, src, xtmp1, vec_enc, false, xtmp1); } } diff --git a/src/hotspot/cpu/x86/macroAssembler_x86.cpp b/src/hotspot/cpu/x86/macroAssembler_x86.cpp index ed8a23771d34c..6f04cdef50898 100644 --- a/src/hotspot/cpu/x86/macroAssembler_x86.cpp +++ b/src/hotspot/cpu/x86/macroAssembler_x86.cpp @@ -3566,6 +3566,56 @@ void MacroAssembler::vbroadcastss(XMMRegister dst, AddressLiteral src, int vecto } } +// Vector float blend +// vblendvps(XMMRegister dst, XMMRegister nds, XMMRegister src, XMMRegister mask, int vector_len, bool compute_mask = true, XMMRegister scratch = xnoreg) +void MacroAssembler::vblendvps(XMMRegister dst, XMMRegister src1, XMMRegister src2, XMMRegister mask, int vector_len, bool compute_mask, XMMRegister scratch) { + // WARN: Allow dst == (src1|src2), mask == scratch + bool blend_emulation = EnableX86ECoreOpts && UseAVX > 1; + bool scratch_available = scratch != xnoreg && scratch != src1 && scratch != src2 && scratch != dst; + bool dst_available = dst != mask && (dst != src1 || dst != src2); + if (blend_emulation && scratch_available && dst_available) { + if (compute_mask) { + vpsrad(scratch, mask, 32, vector_len); + mask = scratch; + } + if (dst == src1) { + vpandn(dst, mask, src1, vector_len); // if mask == 0, src1 + vpand (scratch, mask, src2, vector_len); // if mask == 1, src2 + } else { + vpand (dst, mask, src2, vector_len); // if mask == 1, src2 + vpandn(scratch, mask, src1, vector_len); // if mask == 0, src1 + } + vpor(dst, dst, scratch, vector_len); + } else { + Assembler::vblendvps(dst, src1, src2, mask, vector_len); + } +} + +// vblendvpd(XMMRegister dst, XMMRegister nds, XMMRegister src, XMMRegister mask, int vector_len, bool compute_mask = true, XMMRegister scratch = xnoreg) +void MacroAssembler::vblendvpd(XMMRegister dst, XMMRegister src1, XMMRegister src2, XMMRegister mask, int vector_len, bool compute_mask, XMMRegister scratch) { + // WARN: Allow dst == (src1|src2), mask == scratch + bool blend_emulation = EnableX86ECoreOpts && UseAVX > 1; + bool scratch_available = scratch != xnoreg && scratch != src1 && scratch != src2 && scratch != dst && (!compute_mask || scratch != mask); + bool dst_available = dst != mask && (dst != src1 || dst != src2); + if (blend_emulation && scratch_available && dst_available) { + if (compute_mask) { + vpxor(scratch, scratch, scratch, vector_len); + vpcmpgtq(scratch, scratch, mask, vector_len); + mask = scratch; + } + if (dst == src1) { + vpandn(dst, mask, src1, vector_len); // if mask == 0, src + vpand (scratch, mask, src2, vector_len); // if mask == 1, src2 + } else { + vpand (dst, mask, src2, vector_len); // if mask == 1, src2 + vpandn(scratch, mask, src1, vector_len); // if mask == 0, src + } + vpor(dst, dst, scratch, vector_len); + } else { + Assembler::vblendvpd(dst, src1, src2, mask, vector_len); + } +} + void MacroAssembler::vpcmpeqb(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) { assert(((dst->encoding() < 16 && src->encoding() < 16 && nds->encoding() < 16) || VM_Version::supports_avx512vlbw()),"XMM register should be 0-15"); Assembler::vpcmpeqb(dst, nds, src, vector_len); diff --git a/src/hotspot/cpu/x86/macroAssembler_x86.hpp b/src/hotspot/cpu/x86/macroAssembler_x86.hpp index 47943576dcec9..ea6a37d16edba 100644 --- a/src/hotspot/cpu/x86/macroAssembler_x86.hpp +++ b/src/hotspot/cpu/x86/macroAssembler_x86.hpp @@ -1130,6 +1130,10 @@ class MacroAssembler: public Assembler { using Assembler::vbroadcastss; void vbroadcastss(XMMRegister dst, AddressLiteral src, int vector_len, Register rscratch = noreg); + // Vector float blend + void vblendvps(XMMRegister dst, XMMRegister nds, XMMRegister src, XMMRegister mask, int vector_len, bool compute_mask = true, XMMRegister scratch = xnoreg); + void vblendvpd(XMMRegister dst, XMMRegister nds, XMMRegister src, XMMRegister mask, int vector_len, bool compute_mask = true, XMMRegister scratch = xnoreg); + void divsd(XMMRegister dst, XMMRegister src) { Assembler::divsd(dst, src); } void divsd(XMMRegister dst, Address src) { Assembler::divsd(dst, src); } void divsd(XMMRegister dst, AddressLiteral src, Register rscratch = noreg); diff --git a/src/hotspot/cpu/x86/x86.ad b/src/hotspot/cpu/x86/x86.ad index 681abd7199fee..694ec2ddbd6aa 100644 --- a/src/hotspot/cpu/x86/x86.ad +++ b/src/hotspot/cpu/x86/x86.ad @@ -7801,7 +7801,7 @@ instruct blendvp(vec dst, vec src, vec mask, rxmm0 tmp) %{ %} instruct vblendvpI(legVec dst, legVec src1, legVec src2, legVec mask) %{ - predicate(UseAVX > 0 && + predicate(UseAVX > 0 && !EnableX86ECoreOpts && n->in(2)->bottom_type()->isa_vectmask() == NULL && Matcher::vector_length_in_bytes(n) <= 32 && is_integral_type(Matcher::vector_element_basic_type(n))); @@ -7815,7 +7815,7 @@ instruct vblendvpI(legVec dst, legVec src1, legVec src2, legVec mask) %{ %} instruct vblendvpFD(legVec dst, legVec src1, legVec src2, legVec mask) %{ - predicate(UseAVX > 0 && + predicate(UseAVX > 0 && !EnableX86ECoreOpts && n->in(2)->bottom_type()->isa_vectmask() == NULL && Matcher::vector_length_in_bytes(n) <= 32 && !is_integral_type(Matcher::vector_element_basic_type(n))); @@ -7828,6 +7828,22 @@ instruct vblendvpFD(legVec dst, legVec src1, legVec src2, legVec mask) %{ ins_pipe( pipe_slow ); %} +instruct vblendvp(legVec dst, legVec src1, legVec src2, legVec mask, legVec vtmp) %{ + predicate(UseAVX > 0 && EnableX86ECoreOpts && + n->in(2)->bottom_type()->isa_vectmask() == NULL && + Matcher::vector_length_in_bytes(n) <= 32); + match(Set dst (VectorBlend (Binary src1 src2) mask)); + format %{ "vector_blend $dst,$src1,$src2,$mask\t! using $vtmp as TEMP" %} + effect(TEMP vtmp, TEMP dst); + ins_encode %{ + int vlen_enc = vector_length_encoding(this); + __ vpandn($vtmp$$XMMRegister, $mask$$XMMRegister, $src1$$XMMRegister, vlen_enc); + __ vpand ($dst$$XMMRegister, $mask$$XMMRegister, $src2$$XMMRegister, vlen_enc); + __ vpor ($dst$$XMMRegister, $dst$$XMMRegister, $vtmp$$XMMRegister, vlen_enc); + %} + ins_pipe( pipe_slow ); +%} + instruct evblendvp64(vec dst, vec src1, vec src2, vec mask, kReg ktmp) %{ predicate(Matcher::vector_length_in_bytes(n) == 64 && n->in(2)->bottom_type()->isa_vectmask() == NULL); diff --git a/src/hotspot/cpu/x86/x86_64.ad b/src/hotspot/cpu/x86/x86_64.ad index 94844cd4e7f9d..759dd8a1d485b 100644 --- a/src/hotspot/cpu/x86/x86_64.ad +++ b/src/hotspot/cpu/x86/x86_64.ad @@ -4478,34 +4478,15 @@ instruct loadD(regD dst, memory mem) ins_pipe(pipe_slow); // XXX %} - -// Following pseudo code describes the algorithm for max[FD]: -// Min algorithm is on similar lines -// btmp = (b < +0.0) ? a : b -// atmp = (b < +0.0) ? b : a -// Tmp = Max_Float(atmp , btmp) -// Res = (atmp == NaN) ? atmp : Tmp - // max = java.lang.Math.max(float a, float b) instruct maxF_reg(legRegF dst, legRegF a, legRegF b, legRegF tmp, legRegF atmp, legRegF btmp) %{ predicate(UseAVX > 0 && !SuperWord::is_reduction(n)); match(Set dst (MaxF a b)); effect(USE a, USE b, TEMP tmp, TEMP atmp, TEMP btmp); - format %{ - "vblendvps $btmp,$b,$a,$b \n\t" - "vblendvps $atmp,$a,$b,$b \n\t" - "vmaxss $tmp,$atmp,$btmp \n\t" - "vcmpps.unordered $btmp,$atmp,$atmp \n\t" - "vblendvps $dst,$tmp,$atmp,$btmp \n\t" - %} - ins_encode %{ - int vector_len = Assembler::AVX_128bit; - __ vblendvps($btmp$$XMMRegister, $b$$XMMRegister, $a$$XMMRegister, $b$$XMMRegister, vector_len); - __ vblendvps($atmp$$XMMRegister, $a$$XMMRegister, $b$$XMMRegister, $b$$XMMRegister, vector_len); - __ vmaxss($tmp$$XMMRegister, $atmp$$XMMRegister, $btmp$$XMMRegister); - __ vcmpps($btmp$$XMMRegister, $atmp$$XMMRegister, $atmp$$XMMRegister, Assembler::_false, vector_len); - __ vblendvps($dst$$XMMRegister, $tmp$$XMMRegister, $atmp$$XMMRegister, $btmp$$XMMRegister, vector_len); - %} + format %{ "maxF $dst, $a, $b \t! using tmp, atmp and btmp as TEMP" %} + ins_encode %{ + __ vminmax_fp(Op_MaxV, T_FLOAT, $dst$$XMMRegister, $a$$XMMRegister, $b$$XMMRegister, $tmp$$XMMRegister, $atmp$$XMMRegister, $btmp$$XMMRegister, Assembler::AVX_128bit); + %} ins_pipe( pipe_slow ); %} @@ -4527,20 +4508,9 @@ instruct maxD_reg(legRegD dst, legRegD a, legRegD b, legRegD tmp, legRegD atmp, predicate(UseAVX > 0 && !SuperWord::is_reduction(n)); match(Set dst (MaxD a b)); effect(USE a, USE b, TEMP atmp, TEMP btmp, TEMP tmp); - format %{ - "vblendvpd $btmp,$b,$a,$b \n\t" - "vblendvpd $atmp,$a,$b,$b \n\t" - "vmaxsd $tmp,$atmp,$btmp \n\t" - "vcmppd.unordered $btmp,$atmp,$atmp \n\t" - "vblendvpd $dst,$tmp,$atmp,$btmp \n\t" - %} + format %{ "maxD $dst, $a, $b \t! using tmp, atmp and btmp as TEMP" %} ins_encode %{ - int vector_len = Assembler::AVX_128bit; - __ vblendvpd($btmp$$XMMRegister, $b$$XMMRegister, $a$$XMMRegister, $b$$XMMRegister, vector_len); - __ vblendvpd($atmp$$XMMRegister, $a$$XMMRegister, $b$$XMMRegister, $b$$XMMRegister, vector_len); - __ vmaxsd($tmp$$XMMRegister, $atmp$$XMMRegister, $btmp$$XMMRegister); - __ vcmppd($btmp$$XMMRegister, $atmp$$XMMRegister, $atmp$$XMMRegister, Assembler::_false, vector_len); - __ vblendvpd($dst$$XMMRegister, $tmp$$XMMRegister, $atmp$$XMMRegister, $btmp$$XMMRegister, vector_len); + __ vminmax_fp(Op_MaxV, T_DOUBLE, $dst$$XMMRegister, $a$$XMMRegister, $b$$XMMRegister, $tmp$$XMMRegister, $atmp$$XMMRegister, $btmp$$XMMRegister, Assembler::AVX_128bit); %} ins_pipe( pipe_slow ); %} @@ -4563,20 +4533,9 @@ instruct minF_reg(legRegF dst, legRegF a, legRegF b, legRegF tmp, legRegF atmp, predicate(UseAVX > 0 && !SuperWord::is_reduction(n)); match(Set dst (MinF a b)); effect(USE a, USE b, TEMP tmp, TEMP atmp, TEMP btmp); - format %{ - "vblendvps $atmp,$a,$b,$a \n\t" - "vblendvps $btmp,$b,$a,$a \n\t" - "vminss $tmp,$atmp,$btmp \n\t" - "vcmpps.unordered $btmp,$atmp,$atmp \n\t" - "vblendvps $dst,$tmp,$atmp,$btmp \n\t" - %} + format %{ "minF $dst, $a, $b \t! using tmp, atmp and btmp as TEMP" %} ins_encode %{ - int vector_len = Assembler::AVX_128bit; - __ vblendvps($atmp$$XMMRegister, $a$$XMMRegister, $b$$XMMRegister, $a$$XMMRegister, vector_len); - __ vblendvps($btmp$$XMMRegister, $b$$XMMRegister, $a$$XMMRegister, $a$$XMMRegister, vector_len); - __ vminss($tmp$$XMMRegister, $atmp$$XMMRegister, $btmp$$XMMRegister); - __ vcmpps($btmp$$XMMRegister, $atmp$$XMMRegister, $atmp$$XMMRegister, Assembler::_false, vector_len); - __ vblendvps($dst$$XMMRegister, $tmp$$XMMRegister, $atmp$$XMMRegister, $btmp$$XMMRegister, vector_len); + __ vminmax_fp(Op_MinV, T_FLOAT, $dst$$XMMRegister, $a$$XMMRegister, $b$$XMMRegister, $tmp$$XMMRegister, $atmp$$XMMRegister, $btmp$$XMMRegister, Assembler::AVX_128bit); %} ins_pipe( pipe_slow ); %} @@ -4599,20 +4558,9 @@ instruct minD_reg(legRegD dst, legRegD a, legRegD b, legRegD tmp, legRegD atmp, predicate(UseAVX > 0 && !SuperWord::is_reduction(n)); match(Set dst (MinD a b)); effect(USE a, USE b, TEMP tmp, TEMP atmp, TEMP btmp); - format %{ - "vblendvpd $atmp,$a,$b,$a \n\t" - "vblendvpd $btmp,$b,$a,$a \n\t" - "vminsd $tmp,$atmp,$btmp \n\t" - "vcmppd.unordered $btmp,$atmp,$atmp \n\t" - "vblendvpd $dst,$tmp,$atmp,$btmp \n\t" - %} - ins_encode %{ - int vector_len = Assembler::AVX_128bit; - __ vblendvpd($atmp$$XMMRegister, $a$$XMMRegister, $b$$XMMRegister, $a$$XMMRegister, vector_len); - __ vblendvpd($btmp$$XMMRegister, $b$$XMMRegister, $a$$XMMRegister, $a$$XMMRegister, vector_len); - __ vminsd($tmp$$XMMRegister, $atmp$$XMMRegister, $btmp$$XMMRegister); - __ vcmppd($btmp$$XMMRegister, $atmp$$XMMRegister, $atmp$$XMMRegister, Assembler::_false, vector_len); - __ vblendvpd($dst$$XMMRegister, $tmp$$XMMRegister, $atmp$$XMMRegister, $btmp$$XMMRegister, vector_len); + format %{ "minD $dst, $a, $b \t! using tmp, atmp and btmp as TEMP" %} + ins_encode %{ + __ vminmax_fp(Op_MinV, T_DOUBLE, $dst$$XMMRegister, $a$$XMMRegister, $b$$XMMRegister, $tmp$$XMMRegister, $atmp$$XMMRegister, $btmp$$XMMRegister, Assembler::AVX_128bit); %} ins_pipe( pipe_slow ); %} diff --git a/test/hotspot/jtreg/compiler/vectorization/TestSignumVector.java b/test/hotspot/jtreg/compiler/vectorization/TestSignumVector.java index bf6a10b855f42..db85a61cc7585 100644 --- a/test/hotspot/jtreg/compiler/vectorization/TestSignumVector.java +++ b/test/hotspot/jtreg/compiler/vectorization/TestSignumVector.java @@ -33,6 +33,8 @@ package compiler.vectorization; +import java.util.Random; + import compiler.lib.ir_framework.*; public class TestSignumVector { @@ -62,12 +64,22 @@ public void test_signum_double(double[] dout, double[] dinp) { public void kernel_test_signum_double() { dinp = new double[ARRLEN]; dout = new double[ARRLEN]; + Random rnd = new Random(20); for(int i = 0 ; i < ARRLEN; i++) { - dinp[i] = (double)i*1.4; + dinp[i] = (i-ARRLEN/2)*rnd.nextDouble(); } for (int i = 0; i < ITERS; i++) { test_signum_double(dout , dinp); } + for(int i = 0 ; i < ARRLEN; i++) { + if (i-ARRLEN/2<0) { + if (dout[i] != -1.0) throw new RuntimeException("Expected negative numbers in first half of array: " + java.util.Arrays.toString(dout)); + } else if (i-ARRLEN/2==0) { + if (dout[i] != 0) throw new RuntimeException("Expected zero in the middle of array: " + java.util.Arrays.toString(dout)); + } else { + if (dout[i] != 1.0) throw new RuntimeException("Expected positive numbers in second half of array: " + java.util.Arrays.toString(dout)); + } + } } @Test @@ -82,11 +94,21 @@ public void test_signum_float(float[] fout, float[] finp) { public void kernel_test_round() { finp = new float[ARRLEN]; fout = new float[ARRLEN]; + Random rnd = new Random(20); for(int i = 0 ; i < ARRLEN; i++) { - finp[i] = (float)i*1.4f; + finp[i] = (i-ARRLEN/2)*rnd.nextFloat(); } for (int i = 0; i < ITERS; i++) { test_signum_float(fout , finp); } + for(int i = 0 ; i < ARRLEN; i++) { + if (i-ARRLEN/2<0) { + if (fout[i] != -1.0) throw new RuntimeException("Expected negative numbers in first half of array: " + java.util.Arrays.toString(fout)); + } else if (i-ARRLEN/2==0) { + if (fout[i] != 0) throw new RuntimeException("Expected zero in the middle of array: " + java.util.Arrays.toString(fout)); + } else { + if (fout[i] != 1.0) throw new RuntimeException("Expected positive numbers in second half of array: " + java.util.Arrays.toString(fout)); + } + } } } diff --git a/test/hotspot/jtreg/compiler/vectorization/runner/BasicDoubleOpTest.java b/test/hotspot/jtreg/compiler/vectorization/runner/BasicDoubleOpTest.java index 92ccca40c8a23..0f758be4ed0c7 100644 --- a/test/hotspot/jtreg/compiler/vectorization/runner/BasicDoubleOpTest.java +++ b/test/hotspot/jtreg/compiler/vectorization/runner/BasicDoubleOpTest.java @@ -42,6 +42,7 @@ package compiler.vectorization.runner; import compiler.lib.ir_framework.*; +import java.util.Random; public class BasicDoubleOpTest extends VectorizationTestRunner { @@ -50,11 +51,63 @@ public class BasicDoubleOpTest extends VectorizationTestRunner { private double[] a; private double[] b; private double[] c; + private double[] d; + private double[] e; public BasicDoubleOpTest() { + // Positive test values sign | exponent | mantisa + double smallPositive = Double.longBitsToDouble(0<<63 | 0x03f << 52 | 0x30000f); + double positive = Double.longBitsToDouble(0<<63 | 0x07f << 52 | 0x30000f); + double bigPositive = Double.longBitsToDouble(0<<63 | 0x07f << 52 | 0x30100f); + double biggerPositive = Double.longBitsToDouble(0<<63 | 0x7fe << 52 | 0x30000f); + double maxPositive = Double.MAX_VALUE; + + // Special positive + double nan1 = Double.longBitsToDouble(0<<63 | 0x7ff << 52 | 0x7fffff); + double nan2 = Double.longBitsToDouble(0<<63 | 0x7ff << 52 | 0x30000f); + double inf = Double.longBitsToDouble(0<<63 | 0x7ff << 52); + double zero = 0.0; + + // Negative test values sign | exponent | mantisa + double smallNegative = Double.longBitsToDouble(1<<63 | 0x003 << 52 | 0x30000f); + double negative = Double.longBitsToDouble(1<<63 | 0x783 << 52 | 0x30100f); + double bigNegative = Double.longBitsToDouble(1<<63 | 0x783 << 52 | 0x30000f); + double biggerNegative = Double.longBitsToDouble(1<<63 | 0x786 << 52 | 0x30000f); + double maxNegative = Double.longBitsToDouble(1<<63 | 0x7fe << 52 | 0x7fffff); + + // Special negative + double nNan1 = Double.longBitsToDouble(1<<63 | 0x7ff << 52 | 0x7fffff); + double nNan2 = Double.longBitsToDouble(1<<63 | 0x7ff << 52 | 0x30000f); + double nInf = Double.longBitsToDouble(1<<63 | 0x7ff << 52); + double nZero = -0.0; + + double[] numberList = new double[] { + nInf, maxNegative, biggerNegative, bigNegative, negative, smallNegative, nZero, + zero, smallPositive, positive, bigPositive, biggerPositive, maxPositive, inf, + nan1, nan2, nNan1, nNan2 + }; + + Random rnd = new Random(10); a = new double[SIZE]; b = new double[SIZE]; c = new double[SIZE]; + d = new double[SIZE]; + e = new double[SIZE]; + + for (int i = 0; i < SIZE;) { + for (int j = 0; j < numberList.length && i < SIZE; j++, i++) { + for (int k = j; k < numberList.length && i < SIZE; k++, i++) { + if (rnd.nextBoolean()) { + d[i] = numberList[j]; + e[i] = numberList[k]; + } else { + d[i] = numberList[k]; + e[i] = numberList[j]; + } + } + } + } + for (int i = 0; i < SIZE; i++) { a[i] = 850.0 * i + 22222.22; b[i] = -12345.678; @@ -179,7 +232,7 @@ public double[] vectorDiv() { public double[] vectorMax() { double[] res = new double[SIZE]; for (int i = 0; i < SIZE; i++) { - res[i] = Math.max(a[i], b[i]); + res[i] = Math.max(d[i], e[i]); } return res; } @@ -190,7 +243,7 @@ public double[] vectorMax() { public double[] vectorMin() { double[] res = new double[SIZE]; for (int i = 0; i < SIZE; i++) { - res[i] = Math.min(a[i], b[i]); + res[i] = Math.min(d[i], e[i]); } return res; } diff --git a/test/hotspot/jtreg/compiler/vectorization/runner/BasicFloatOpTest.java b/test/hotspot/jtreg/compiler/vectorization/runner/BasicFloatOpTest.java index 72e8aa640cae4..e2bf0492d2a64 100644 --- a/test/hotspot/jtreg/compiler/vectorization/runner/BasicFloatOpTest.java +++ b/test/hotspot/jtreg/compiler/vectorization/runner/BasicFloatOpTest.java @@ -42,6 +42,7 @@ package compiler.vectorization.runner; import compiler.lib.ir_framework.*; +import java.util.Random; public class BasicFloatOpTest extends VectorizationTestRunner { @@ -50,11 +51,72 @@ public class BasicFloatOpTest extends VectorizationTestRunner { private float[] a; private float[] b; private float[] c; + private float[] d; + private float[] e; public BasicFloatOpTest() { + // Positive test values sign | exponent | mantisa + float smallPositive = Float.intBitsToFloat(0<<31 | 0x3f << 23 | 0x30000f); + float positive = Float.intBitsToFloat(0<<31 | 0x7f << 23 | 0x30000f); + float bigPositive = Float.intBitsToFloat(0<<31 | 0x7f << 23 | 0x30100f); + float biggerPositive = Float.intBitsToFloat(0<<31 | 0xfe << 23 | 0x30000f); + float maxPositive = Float.MAX_VALUE; + + // Special positive + float nan1 = Float.intBitsToFloat(0<<31 | 0xff << 23 | 0x7fffff); + float nan2 = Float.intBitsToFloat(0<<31 | 0xff << 23 | 0x30000f); + float inf = Float.intBitsToFloat(0<<31 | 0xff << 23); + float zero = 0.0f; + + // Negative test values sign | exponent | mantisa + float smallNegative = Float.intBitsToFloat(1<<31 | 0x03 << 23 | 0x30000f); + float negative = Float.intBitsToFloat(1<<31 | 0x83 << 23 | 0x30100f); + float bigNegative = Float.intBitsToFloat(1<<31 | 0x83 << 23 | 0x30000f); + float biggerNegative = Float.intBitsToFloat(1<<31 | 0x86 << 23 | 0x30000f); + float maxNegative = Float.intBitsToFloat(1<<31 | 0xfe << 23 | 0x7fffff); + + // Special negative + float nNan1 = Float.intBitsToFloat(1<<31 | 0xff << 23 | 0x7fffff); + float nNan2 = Float.intBitsToFloat(1<<31 | 0xff << 23 | 0x30000f); + float nInf = Float.intBitsToFloat(1<<31 | 0xff << 23); + float nZero = -0.0f; + + float[] orderedList = new float[] { + nInf, maxNegative, biggerNegative, bigNegative, negative, smallNegative, nZero, + zero, smallPositive, positive, bigPositive, biggerPositive, maxPositive, inf + }; + + float[] NaNs = new float[] { + nan1, nan2, nNan1, nNan2 + }; + + float[] numberList = new float[] { + nInf, maxNegative, biggerNegative, bigNegative, negative, smallNegative, nZero, + zero, smallPositive, positive, bigPositive, biggerPositive, maxPositive, inf, + nan1, nan2, nNan1, nNan2 + }; + + Random rnd = new Random(11); a = new float[SIZE]; b = new float[SIZE]; c = new float[SIZE]; + d = new float[SIZE]; + e = new float[SIZE]; + + for (int i = 0; i < SIZE;) { + for (int j = 0; j < numberList.length && i < SIZE; j++, i++) { + for (int k = j; k < numberList.length && i < SIZE; k++, i++) { + if (rnd.nextBoolean()) { + d[i] = numberList[j]; + e[i] = numberList[k]; + } else { + d[i] = numberList[k]; + e[i] = numberList[j]; + } + } + } + } + for (int i = 0; i < SIZE; i++) { a[i] = 850.0f * i + 22222.22f; b[i] = -12345.678f; @@ -146,7 +208,7 @@ public float[] vectorDiv() { public float[] vectorMax() { float[] res = new float[SIZE]; for (int i = 0; i < SIZE; i++) { - res[i] = Math.max(a[i], b[i]); + res[i] = Math.max(d[i], e[i]); } return res; } @@ -157,7 +219,7 @@ public float[] vectorMax() { public float[] vectorMin() { float[] res = new float[SIZE]; for (int i = 0; i < SIZE; i++) { - res[i] = Math.min(a[i], b[i]); + res[i] = Math.min(d[i], e[i]); } return res; } From a3eb6640773620331692da40356522ff618c3c44 Mon Sep 17 00:00:00 2001 From: Alisen Chung Date: Thu, 30 Nov 2023 16:11:09 +0000 Subject: [PATCH 142/250] 8315701: [macos] Regression: KeyEvent has different keycode on different keyboard layouts Reviewed-by: aivanov, kizune --- .../classes/sun/lwawt/LWWindowPeer.java | 12 +- .../sun/lwawt/PlatformEventNotifier.java | 2 +- .../sun/lwawt/macosx/CPlatformResponder.java | 14 +- .../sun/lwawt/macosx/CWarningWindow.java | 2 +- .../macosx/native/libawt_lwawt/awt/AWTEvent.m | 13 +- .../AcceleratorTest/AcceleratorTest.html | 43 -- .../AcceleratorTest/AcceleratorTest.java | 427 ++++++------------ 7 files changed, 170 insertions(+), 343 deletions(-) delete mode 100644 test/jdk/java/awt/event/KeyEvent/AcceleratorTest/AcceleratorTest.html diff --git a/src/java.desktop/macosx/classes/sun/lwawt/LWWindowPeer.java b/src/java.desktop/macosx/classes/sun/lwawt/LWWindowPeer.java index 7f218e4d1baa7..4ec8d87fee3f7 100644 --- a/src/java.desktop/macosx/classes/sun/lwawt/LWWindowPeer.java +++ b/src/java.desktop/macosx/classes/sun/lwawt/LWWindowPeer.java @@ -1044,7 +1044,7 @@ public void notifyMouseWheelEvent(long when, int x, int y, int absX, */ @Override public void notifyKeyEvent(int id, long when, int modifiers, - int keyCode, char keyChar, int keyLocation) + int keyCode, char keyChar, int keyLocation, int extendedKeyCode) { LWKeyboardFocusManagerPeer kfmPeer = LWKeyboardFocusManagerPeer.getInstance(); Component focusOwner = kfmPeer.getCurrentFocusOwner(); @@ -1058,9 +1058,13 @@ public void notifyKeyEvent(int id, long when, int modifiers, KeyEvent keyEvent = new KeyEvent(focusOwner, id, when, modifiers, keyCode, keyChar, keyLocation); - AWTAccessor.getKeyEventAccessor().setExtendedKeyCode(keyEvent, - (keyChar == KeyEvent.CHAR_UNDEFINED) ? keyCode - : ExtendedKeyCodes.getExtendedKeyCodeForChar(keyChar)); + if (extendedKeyCode >= 0) { + AWTAccessor.getKeyEventAccessor().setExtendedKeyCode(keyEvent, extendedKeyCode); + } else { + AWTAccessor.getKeyEventAccessor().setExtendedKeyCode(keyEvent, + (keyChar == KeyEvent.CHAR_UNDEFINED) ? keyCode + : ExtendedKeyCodes.getExtendedKeyCodeForChar(keyChar)); + } postEvent(keyEvent); } diff --git a/src/java.desktop/macosx/classes/sun/lwawt/PlatformEventNotifier.java b/src/java.desktop/macosx/classes/sun/lwawt/PlatformEventNotifier.java index d613b9cea25a8..aea8ff2e6a930 100644 --- a/src/java.desktop/macosx/classes/sun/lwawt/PlatformEventNotifier.java +++ b/src/java.desktop/macosx/classes/sun/lwawt/PlatformEventNotifier.java @@ -61,5 +61,5 @@ void notifyMouseWheelEvent(long when, int x, int y, final int absX, * Called by the delegate when a key is pressed. */ void notifyKeyEvent(int id, long when, int modifiers, - int keyCode, char keyChar, int keyLocation); + int keyCode, char keyChar, int keyLocation, int extendedKeyCode); } diff --git a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java index 2cbf308fafbb3..f14c7b40cbab2 100644 --- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java +++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java @@ -143,6 +143,7 @@ void handleKeyEvent(int eventType, int modifierFlags, String chars, String chars int jeventType = KeyEvent.KEY_PRESSED; int jkeyCode = KeyEvent.VK_UNDEFINED; + int jextendedkeyCode = -1; int jkeyLocation = KeyEvent.KEY_LOCATION_UNKNOWN; boolean postsTyped = false; boolean spaceKeyTyped = false; @@ -173,7 +174,7 @@ void handleKeyEvent(int eventType, int modifierFlags, String chars, String chars charsIgnoringModifiers.charAt(0) : KeyEvent.CHAR_UNDEFINED; int[] in = new int[] {testCharIgnoringModifiers, isDeadChar ? 1 : 0, modifierFlags, keyCode}; - int[] out = new int[3]; // [jkeyCode, jkeyLocation, deadChar] + int[] out = new int[4]; // [jkeyCode, jkeyLocation, deadChar, extendedKeyCode] postsTyped = NSEvent.nsToJavaKeyInfo(in, out); if (!postsTyped) { @@ -201,6 +202,7 @@ void handleKeyEvent(int eventType, int modifierFlags, String chars, String chars } jkeyCode = out[0]; + jextendedkeyCode = out[3]; jkeyLocation = out[1]; jeventType = isNpapiCallback ? NSEvent.npToJavaEventType(eventType) : NSEvent.nsToJavaEventType(eventType); @@ -221,7 +223,7 @@ void handleKeyEvent(int eventType, int modifierFlags, String chars, String chars lastKeyPressCode = jkeyCode; } eventNotifier.notifyKeyEvent(jeventType, when, jmodifiers, - jkeyCode, javaChar, jkeyLocation); + jkeyCode, javaChar, jkeyLocation, jextendedkeyCode); // Current browser may be sending input events, so don't // post the KEY_TYPED here. @@ -241,12 +243,12 @@ void handleKeyEvent(int eventType, int modifierFlags, String chars, String chars } eventNotifier.notifyKeyEvent(KeyEvent.KEY_TYPED, when, jmodifiers, KeyEvent.VK_UNDEFINED, javaChar, - KeyEvent.KEY_LOCATION_UNKNOWN); + KeyEvent.KEY_LOCATION_UNKNOWN, jextendedkeyCode); //If events come from Firefox, released events should also be generated. if (needsKeyReleased) { eventNotifier.notifyKeyEvent(KeyEvent.KEY_RELEASED, when, jmodifiers, jkeyCode, javaChar, - KeyEvent.KEY_LOCATION_UNKNOWN); + KeyEvent.KEY_LOCATION_UNKNOWN, jextendedkeyCode); } } } @@ -260,13 +262,13 @@ void handleInputEvent(String text) { eventNotifier.notifyKeyEvent(KeyEvent.KEY_TYPED, System.currentTimeMillis(), 0, KeyEvent.VK_UNDEFINED, c, - KeyEvent.KEY_LOCATION_UNKNOWN); + KeyEvent.KEY_LOCATION_UNKNOWN, -1); index++; } eventNotifier.notifyKeyEvent(KeyEvent.KEY_RELEASED, System.currentTimeMillis(), 0, lastKeyPressCode, c, - KeyEvent.KEY_LOCATION_UNKNOWN); + KeyEvent.KEY_LOCATION_UNKNOWN, -1); } } diff --git a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CWarningWindow.java b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CWarningWindow.java index 52e85e338415a..bcb18c76ae10d 100644 --- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CWarningWindow.java +++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CWarningWindow.java @@ -245,7 +245,7 @@ public void notifyMouseWheelEvent(long when, int x, int y, int absX, @Override public void notifyKeyEvent(int id, long when, int modifiers, int keyCode, - char keyChar, int keyLocation) { + char keyChar, int keyLocation, int jextendedkeyCode) { } protected int getInitialStyleBits() { diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTEvent.m b/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTEvent.m index 0f09c59c2c0da..d26def5694fb0 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTEvent.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTEvent.m @@ -429,7 +429,7 @@ static unichar NsGetDeadKeyChar(unsigned short keyCode) NsCharToJavaVirtualKeyCode(unichar ch, BOOL isDeadChar, NSUInteger flags, unsigned short key, jint *keyCode, jint *keyLocation, BOOL *postsTyped, - unichar *deadChar) + unichar *deadChar, jint *extendedkeyCode) { static size_t size = sizeof(keyTable) / sizeof(struct _key); NSInteger offset; @@ -469,10 +469,9 @@ static unichar NsGetDeadKeyChar(unsigned short keyCode) *postsTyped = YES; // do quick conversion // the keyCode is off by 32, so adding it here - *keyCode = java_awt_event_KeyEvent_VK_A + offset + 32; + *extendedkeyCode = java_awt_event_KeyEvent_VK_A + offset + 32; *keyLocation = java_awt_event_KeyEvent_KEY_LOCATION_STANDARD; -return; - } + } } if ([[NSCharacterSet decimalDigitCharacterSet] characterIsMember:ch]) { @@ -695,18 +694,20 @@ jlong UTC(NSEvent *event) { jshort keyCode = (jshort)data[3]; jint jkeyCode = java_awt_event_KeyEvent_VK_UNDEFINED; + jint jextendedkeyCode = -1; jint jkeyLocation = java_awt_event_KeyEvent_KEY_LOCATION_UNKNOWN; jint testDeadChar = 0; NsCharToJavaVirtualKeyCode((unichar)testChar, isDeadChar, (NSUInteger)modifierFlags, (unsigned short)keyCode, &jkeyCode, &jkeyLocation, &postsTyped, - (unichar *) &testDeadChar); + (unichar *) &testDeadChar, &jextendedkeyCode); - // out = [jkeyCode, jkeyLocation, deadChar]; + // out = [jkeyCode, jkeyLocation, deadChar, jextendedkeyCode]; (*env)->SetIntArrayRegion(env, outData, 0, 1, &jkeyCode); (*env)->SetIntArrayRegion(env, outData, 1, 1, &jkeyLocation); (*env)->SetIntArrayRegion(env, outData, 2, 1, &testDeadChar); + (*env)->SetIntArrayRegion(env, outData, 3, 1, &jextendedkeyCode); (*env)->ReleaseIntArrayElements(env, inData, data, 0); diff --git a/test/jdk/java/awt/event/KeyEvent/AcceleratorTest/AcceleratorTest.html b/test/jdk/java/awt/event/KeyEvent/AcceleratorTest/AcceleratorTest.html deleted file mode 100644 index e6f7dcb9d5d6f..0000000000000 --- a/test/jdk/java/awt/event/KeyEvent/AcceleratorTest/AcceleratorTest.html +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - AcceleratorTest - - - -

    AcceleratorTest
    Bug ID:

    - -

    See the dialog box (usually in upper left corner) for instructions

    - - - - diff --git a/test/jdk/java/awt/event/KeyEvent/AcceleratorTest/AcceleratorTest.java b/test/jdk/java/awt/event/KeyEvent/AcceleratorTest/AcceleratorTest.java index 8d983461d7453..1d9635d58caa1 100644 --- a/test/jdk/java/awt/event/KeyEvent/AcceleratorTest/AcceleratorTest.java +++ b/test/jdk/java/awt/event/KeyEvent/AcceleratorTest/AcceleratorTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,307 +22,170 @@ */ /* - test - @bug 6680988 - @summary verify that various shortcuts and accelerators work - @author yuri.nesterenko : area=awt.keyboard - @run applet/manual=yesno AcceleratorTest.html -*/ - -/** - * AcceleratorTest.java - * - * summary: + * @test + * @bug 6680988 + * @key headful + * @summary verify that various shortcuts and accelerators work + * @library /java/awt/regtesthelpers + * @build PassFailJFrame + * @run main/manual AcceleratorTest */ -//import java.applet.Applet; -import javax.swing.*; -import java.awt.*; -import java.awt.event.*; +import java.awt.BorderLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.InputEvent; +import java.awt.event.KeyEvent; import java.util.Hashtable; - - -public class AcceleratorTest extends JApplet -{ - //Declare things used in the test, like buttons and labels here - static int pressed = 0; - Hashtable cmdHash = new Hashtable(); - String[] CMD = { - "\u042E, keep me in focus", - "Item Cyrl Be", - "Item English Period", - "Item English N", - "\u0436" +import javax.swing.AbstractAction; +import javax.swing.InputMap; +import javax.swing.JButton; +import javax.swing.JComponent; +import javax.swing.JFrame; +import javax.swing.JMenu; +import javax.swing.JMenuBar; +import javax.swing.JMenuItem; +import javax.swing.JTextArea; +import javax.swing.KeyStroke; +import javax.swing.SwingUtilities; + +public class AcceleratorTest { + static JFrame output; + static JTextArea text; + static JFrame jfr; + static Hashtable cmdHash = new Hashtable(); + static String[] CMD = { + "\u042E, keep me in focus", + "Item Ctrl Be", + "Item Ctrl English Period", + "Item Ctrl English N", + "\u0436" }; - JFrame jfr; - - public void init() - { - //Create instructions for the user here, as well as set up - // the environment -- set the layout manager, add buttons, - // etc. - this.setLayout (new BorderLayout ()); - - String[] instructions = - { - " Ensure you have Russian keyboard layout as a currently active.", - "(1) Press Ctrl+\u0411 (a key with \",<\" on it) ", - "(2) Find a . (period) in this layout (perhaps \"/?\" or \"7&\" key).", - "Press Ctrl+.", - "(3) Press Crtl+ regular English . (period) key (on \".>\" )", - "(4) Press Ctrl+ key with English N.", - "(5) Press Alt+\u042E (key with \".>\")", - "(6) Press Alt+\u0436 (key with \";:\")", - "If all expected commands will be fired, look for message", - "\"All tests passed\"" - }; - Sysout.createDialogWithInstructions( instructions ); - for(int i = 0; i < CMD.length; i++) { + public static void main(String[] args) throws Exception { + String instructions = + "Ensure you have Russian keyboard layout as a currently active.\n" + + "(1) Press Ctrl + \u0411 (a key with \",<\" on it) \n" + + "(2) Find a . (period) in this layout (perhaps \"/?\" or \"7&\" key). " + + "Press Ctrl + .\n" + + "(3) Press Ctrl + regular English . (period) key (on \".>\" )\n" + + "(4) Press Ctrl + key with English N.\n" + + "(5) Press Alt + \u042E (key with \".>\")\n" + + "(6) Press Alt + \u0436 (key with \";:\")\n" + + "If all expected commands will be fired, look for message\n" + + "\"All tests passed\""; + + for (int i = 0; i < CMD.length; i++) { cmdHash.put(CMD[i], 0); } - jfr = new JFrame(); - JButton jbu; - jfr.add((jbu = new JButton(CMD[0]))); - jbu.setMnemonic(java.awt.event.KeyEvent.getExtendedKeyCodeForChar('\u042E')); - jbu.addActionListener( new ALi(CMD[0])); - - - JMenuBar menuBar = new JMenuBar(); - jfr.setJMenuBar(menuBar); - JMenu menu = new JMenu("Menu"); - menuBar.add(menu); + PassFailJFrame testFrame = new PassFailJFrame.Builder() + .title("Test Instructions Frame") + .instructions(instructions) + .testTimeOut(10) + .rows(10) + .columns(45) + .build(); + + SwingUtilities.invokeAndWait(() -> { + output = new JFrame("output"); + text = new JTextArea(); + output.getContentPane().add(text); + + jfr = new JFrame("AcceleratorTest"); + jfr.setLayout(new BorderLayout()); + JButton jbu; + jfr.add((jbu = new JButton(CMD[0]))); + jbu.setMnemonic(java.awt.event.KeyEvent.getExtendedKeyCodeForChar('\u042E')); + jbu.addActionListener(new ALi(CMD[0])); + + JMenuBar menuBar = new JMenuBar(); + jfr.setJMenuBar(menuBar); + JMenu menu = new JMenu("Menu"); + menuBar.add(menu); + + JMenuItem menuItem = new JMenuItem(CMD[1]); + menuItem.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent + .getExtendedKeyCodeForChar('\u0431'), InputEvent.CTRL_DOWN_MASK)); + + JMenuItem menuItemEnglish = new JMenuItem(CMD[2]); + menuItemEnglish.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_PERIOD, + InputEvent.CTRL_DOWN_MASK)); + + JMenuItem menuItemE1 = new JMenuItem(CMD[3]); + menuItemE1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, + InputEvent.CTRL_DOWN_MASK)); + + menuItem.addActionListener(new ALi(CMD[1])); + menuItemEnglish.addActionListener(new ALi(CMD[2])); + menuItemE1.addActionListener(new ALi(CMD[3])); + + menu.add(menuItem); + menu.add(menuItemEnglish); + menu.add(menuItemE1); + + KeyStroke ks; + InputMap im = new InputMap(); + ks = KeyStroke.getKeyStroke(KeyEvent.getExtendedKeyCodeForChar('\u0436'), + java.awt.event.InputEvent.ALT_DOWN_MASK); + im.put(ks, "pushAction"); + im.setParent(jbu.getInputMap(JComponent.WHEN_FOCUSED)); + jbu.setInputMap(JComponent.WHEN_FOCUSED, im); + + jbu.getActionMap().put("pushAction", + new AbstractAction("pushAction") { + public void actionPerformed(ActionEvent evt) { + if (evt.getActionCommand().equals(CMD[4])) { + cmdHash.put(CMD[4], 1); + } + boolean notYet = false; + for (int i = 0; i < CMD.length; i++) { + if (cmdHash.get(CMD[i]) == 0) notYet = true; + } + text.append(evt.getActionCommand() + " FIRED\n"); + if (!notYet) { + text.append("All tests passed."); + } + } + } + ); + }); + + testFrame.addTestWindow(jfr); + testFrame.addTestWindow(output); + + PassFailJFrame.positionTestWindow(jfr, PassFailJFrame.Position.HORIZONTAL); + jfr.setSize(200, 200); + + PassFailJFrame.positionTestWindow(output, PassFailJFrame.Position.HORIZONTAL); + output.setSize(200, 200); - JMenuItem menuItem = new JMenuItem(CMD[1]); - menuItem.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.getExtendedKeyCodeForChar('\u0431'), - InputEvent.CTRL_DOWN_MASK)); - - JMenuItem menuItemEnglish = new JMenuItem(CMD[2]); - menuItemEnglish.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_PERIOD, - InputEvent.CTRL_DOWN_MASK)); - JMenuItem menuItemE1 = new JMenuItem(CMD[3]); - menuItemE1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, - InputEvent.CTRL_DOWN_MASK)); - menuItem.addActionListener( new ALi(CMD[1])); - menuItemEnglish.addActionListener( new ALi(CMD[2])); - menuItemE1.addActionListener( new ALi(CMD[3])); - menu.add(menuItem); - menu.add(menuItemEnglish); - menu.add(menuItemE1); - - KeyStroke ks; - InputMap im = new InputMap(); - ks = KeyStroke.getKeyStroke(KeyEvent.getExtendedKeyCodeForChar('\u0436'), java.awt.event.InputEvent.ALT_DOWN_MASK); - im.put(ks, "pushAction"); - im.setParent(jbu.getInputMap(JComponent.WHEN_FOCUSED)); - jbu.setInputMap(JComponent.WHEN_FOCUSED, im); - - jbu.getActionMap().put("pushAction", - new AbstractAction("pushAction") { - public void actionPerformed(ActionEvent evt) { - if( evt.getActionCommand().equals(CMD[4])) { - cmdHash.put(CMD[4], 1); - } - boolean notYet = false; - for(int i = 0; i < CMD.length; i++) { - if(cmdHash.get(CMD[i]) == 0 ) notYet = true; - } - Sysout.println("Fired"); - if( !notYet ) { - Sysout.println("All tests passed."); - } - } - } - ); - - - jfr.setBounds(650,0,200,200); jfr.setVisible(true); + output.setVisible(true); - }//End init() - - public void start () - { - //Get things going. Request focus, set size, et cetera - setSize (200,200); - setVisible(true); - validate(); + testFrame.awaitAndCheck(); + } - }// start() - public class ALi implements ActionListener { + public static class ALi implements ActionListener { String expectedCmd; - public ALi( String eCmd ) { + + public ALi(String eCmd) { expectedCmd = eCmd; } + public void actionPerformed(ActionEvent ae) { - if( cmdHash.containsKey(ae.getActionCommand()) ) { + if (cmdHash.containsKey(ae.getActionCommand())) { cmdHash.put(expectedCmd, 1); } boolean notYet = false; - for(int i = 0; i < CMD.length; i++) { - if(cmdHash.get(CMD[i]) == 0 ) notYet = true; - //Sysout.println(CMD[i]+":"+cmdHash.get(CMD[i])); + for (int i = 0; i < CMD.length; i++) { + if (cmdHash.get(CMD[i]) == 0) notYet = true; + //text.append(CMD[i]+":"+cmdHash.get(CMD[i])); } - Sysout.println("FIRED"); - if( !notYet ) { - Sysout.println("All tests passed."); + text.append(ae.getActionCommand() + " FIRED\n"); + if (!notYet) { + text.append("All tests passed.\n"); } } } - - -}// class AcceleratorTest - -/* Place other classes related to the test after this line */ - - - - - -/**************************************************** - Standard Test Machinery - DO NOT modify anything below -- it's a standard - chunk of code whose purpose is to make user - interaction uniform, and thereby make it simpler - to read and understand someone else's test. - ****************************************************/ - -/** - This is part of the standard test machinery. - It creates a dialog (with the instructions), and is the interface - for sending text messages to the user. - To print the instructions, send an array of strings to Sysout.createDialog - WithInstructions method. Put one line of instructions per array entry. - To display a message for the tester to see, simply call Sysout.println - with the string to be displayed. - This mimics System.out.println but works within the test harness as well - as standalone. - */ - -class Sysout -{ - private static TestDialog dialog; - private static boolean numbering = false; - private static int messageNumber = 0; - - public static void createDialogWithInstructions( String[] instructions ) - { - dialog = new TestDialog( new Frame(), "Instructions" ); - dialog.printInstructions( instructions ); - dialog.setVisible(true); - println( "Any messages for the tester will display here." ); - } - - public static void createDialog( ) - { - dialog = new TestDialog( new Frame(), "Instructions" ); - String[] defInstr = { "Instructions will appear here. ", "" } ; - dialog.printInstructions( defInstr ); - dialog.setVisible(true); - println( "Any messages for the tester will display here." ); - } - - /* Enables message counting for the tester. */ - public static void enableNumbering(boolean enable){ - numbering = enable; - } - - public static void printInstructions( String[] instructions ) - { - dialog.printInstructions( instructions ); - } - - - public static void println( String messageIn ) - { - if (numbering) { - messageIn = "" + messageNumber + " " + messageIn; - messageNumber++; - } - dialog.displayMessage( messageIn ); - } - -}// Sysout class - -/** - This is part of the standard test machinery. It provides a place for the - test instructions to be displayed, and a place for interactive messages - to the user to be displayed. - To have the test instructions displayed, see Sysout. - To have a message to the user be displayed, see Sysout. - Do not call anything in this dialog directly. - */ -class TestDialog extends Dialog -{ - - TextArea instructionsText; - TextArea messageText; - int maxStringLength = 80; - - //DO NOT call this directly, go through Sysout - public TestDialog( Frame frame, String name ) - { - super( frame, name ); - int scrollBoth = TextArea.SCROLLBARS_BOTH; - instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth ); - add( "North", instructionsText ); - - messageText = new TextArea( "", 5, maxStringLength, scrollBoth ); - add("Center", messageText); - - pack(); - - setVisible(true); - }// TestDialog() - - //DO NOT call this directly, go through Sysout - public void printInstructions( String[] instructions ) - { - //Clear out any current instructions - instructionsText.setText( "" ); - - //Go down array of instruction strings - - String printStr, remainingStr; - for( int i=0; i < instructions.length; i++ ) - { - //chop up each into pieces maxSringLength long - remainingStr = instructions[ i ]; - while( remainingStr.length() > 0 ) - { - //if longer than max then chop off first max chars to print - if( remainingStr.length() >= maxStringLength ) - { - //Try to chop on a word boundary - int posOfSpace = remainingStr. - lastIndexOf( ' ', maxStringLength - 1 ); - - if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1; - - printStr = remainingStr.substring( 0, posOfSpace + 1 ); - remainingStr = remainingStr.substring( posOfSpace + 1 ); - } - //else just print - else - { - printStr = remainingStr; - remainingStr = ""; - } - - instructionsText.append( printStr + "\n" ); - - }// while - - }// for - - }//printInstructions() - - //DO NOT call this directly, go through Sysout - public void displayMessage( String messageIn ) - { - messageText.append( messageIn + "\n" ); - System.out.println(messageIn); - } - -}// TestDialog class +} From c6a827836277f753652815ce6a6bedd426468b87 Mon Sep 17 00:00:00 2001 From: "Daniel D. Daugherty" Date: Thu, 30 Nov 2023 16:16:59 +0000 Subject: [PATCH 143/250] 8321127: ProblemList java/util/stream/GatherersTest.java Reviewed-by: shade, alanb --- test/jdk/ProblemList.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/test/jdk/ProblemList.txt b/test/jdk/ProblemList.txt index a76ed37aced08..4fa926b366c23 100644 --- a/test/jdk/ProblemList.txt +++ b/test/jdk/ProblemList.txt @@ -723,6 +723,7 @@ com/sun/jdi/InvokeHangTest.java 8218463 linux-al java/util/Locale/LocaleProvidersRun.java 8268379 macosx-x64 sun/util/locale/provider/CalendarDataRegression.java 8268379 macosx-x64 +java/util/stream/GatherersTest.java 8321124 generic-all ############################################################################ From b1cbf55859c26cfca89c556b0db0e551ad58e4a6 Mon Sep 17 00:00:00 2001 From: Albert Mingkun Yang Date: Thu, 30 Nov 2023 16:32:23 +0000 Subject: [PATCH 144/250] 8321018: Parallel: Make some methods in ParCompactionManager private Reviewed-by: sjohanss, tschatzl --- src/hotspot/share/gc/parallel/psCompactionManager.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hotspot/share/gc/parallel/psCompactionManager.hpp b/src/hotspot/share/gc/parallel/psCompactionManager.hpp index 65409f5785f04..458d33af74a87 100644 --- a/src/hotspot/share/gc/parallel/psCompactionManager.hpp +++ b/src/hotspot/share/gc/parallel/psCompactionManager.hpp @@ -105,7 +105,8 @@ class ParCompactionManager : public CHeapObj { // Returns true and a valid task if there has not been enough space in the shared // objArray stack, otherwise returns false and the task is invalid. bool publish_or_pop_objarray_tasks(ObjArrayTask& task); - protected: + + ParCompactionManager(); // Array of task queues. Needed by the task terminator. static RegionTaskQueueSet* region_task_queues() { return _region_task_queues; } OopTaskQueue* oop_stack() { return &_oop_stack; } @@ -155,7 +156,6 @@ class ParCompactionManager : public CHeapObj { // Simply use the first compaction manager here. static ParCompactionManager* get_vmthread_cm() { return _manager_array[0]; } - ParCompactionManager(); ParMarkBitMap* mark_bitmap() { return _mark_bitmap; } From 8bedb28bbc0698dd0592f8e121ce0a4b7b0ac03d Mon Sep 17 00:00:00 2001 From: Jorn Vernee Date: Thu, 30 Nov 2023 16:35:12 +0000 Subject: [PATCH 145/250] 8321119: Disable java/foreign/TestHandshake.java on Zero VMs Reviewed-by: eosterlund, shade --- test/jdk/java/foreign/TestHandshake.java | 1 + 1 file changed, 1 insertion(+) diff --git a/test/jdk/java/foreign/TestHandshake.java b/test/jdk/java/foreign/TestHandshake.java index 79825ce4750b3..efa175eb5c403 100644 --- a/test/jdk/java/foreign/TestHandshake.java +++ b/test/jdk/java/foreign/TestHandshake.java @@ -23,6 +23,7 @@ /* * @test + * @requires vm.flavor != "zero" * @modules java.base/jdk.internal.vm.annotation java.base/jdk.internal.misc * @key randomness * @run testng/othervm TestHandshake From 7c135c3697eafedc6e244f5c866a40127247e26a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20=C3=96sterlund?= Date: Thu, 30 Nov 2023 16:37:33 +0000 Subject: [PATCH 146/250] 8321066: Multiple JFR tests have started failing Reviewed-by: mcimadamore, jvernee, dcubed --- src/hotspot/share/prims/unsafe.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/hotspot/share/prims/unsafe.cpp b/src/hotspot/share/prims/unsafe.cpp index 3d732f3292d66..ece60d32f9a64 100644 --- a/src/hotspot/share/prims/unsafe.cpp +++ b/src/hotspot/share/prims/unsafe.cpp @@ -83,7 +83,7 @@ // to unsafe functions, if we have such async exception conditions, // and return immediately if that is the case. // -// We also use NoSafepointVerifier to block potential safepoints. +// We can't have safepoints in this code. // It would be problematic if an async exception handshake were installed later on // during another safepoint in the function, but before the memory access happens, // as the memory will be freed after the handshake is installed. We must notice @@ -97,8 +97,7 @@ // that is about to be freed. (i.e. there can be no UNSAFE_LEAF_SCOPED) #define UNSAFE_ENTRY_SCOPED(result_type, header) \ JVM_ENTRY(static result_type, header) \ - if (thread->has_async_exception_condition()) {return (result_type)0;} \ - NoSafepointVerifier nsv; + if (thread->has_async_exception_condition()) {return (result_type)0;} #define UNSAFE_END JVM_END From 41daa3b934255420dcf414cf9045289ba05a9f48 Mon Sep 17 00:00:00 2001 From: Serguei Spitsyn Date: Thu, 30 Nov 2023 16:58:27 +0000 Subject: [PATCH 147/250] 8320239: add dynamic switch for JvmtiVTMSTransitionDisabler sync protocol Reviewed-by: lmesnik, pchilanomate, amenkov --- src/hotspot/share/prims/jvmtiThreadState.cpp | 41 ++++++++++++++++---- src/hotspot/share/prims/jvmtiThreadState.hpp | 9 +++++ 2 files changed, 43 insertions(+), 7 deletions(-) diff --git a/src/hotspot/share/prims/jvmtiThreadState.cpp b/src/hotspot/share/prims/jvmtiThreadState.cpp index 432bbba71af92..0004feb54b4e3 100644 --- a/src/hotspot/share/prims/jvmtiThreadState.cpp +++ b/src/hotspot/share/prims/jvmtiThreadState.cpp @@ -228,6 +228,12 @@ volatile bool JvmtiVTMSTransitionDisabler::_SR_mode = false; // Notifications from VirtualThread about VTMS events are enabled. bool JvmtiVTMSTransitionDisabler::_VTMS_notify_jvmti_events = false; +// The JvmtiVTMSTransitionDisabler sync protocol is enabled if this count > 0. +volatile int JvmtiVTMSTransitionDisabler::_sync_protocol_enabled_count = 0; + +// JvmtiVTMSTraansitionDisabler sync protocol is enabled permanently after seeing a suspender. +volatile bool JvmtiVTMSTransitionDisabler::_sync_protocol_enabled_permanently = false; + #ifdef ASSERT void JvmtiVTMSTransitionDisabler::print_info() { @@ -255,6 +261,9 @@ JvmtiVTMSTransitionDisabler::JvmtiVTMSTransitionDisabler(jthread thread) if (Thread::current_or_null() == nullptr) { return; // Detached thread, can be a call from Agent_OnLoad. } + if (!sync_protocol_enabled_permanently()) { + JvmtiVTMSTransitionDisabler::inc_sync_protocol_enabled_count(); + } if (_thread != nullptr) { VTMS_transition_disable_for_one(); // disable VTMS transitions for one virtual thread } else { @@ -272,6 +281,12 @@ JvmtiVTMSTransitionDisabler::JvmtiVTMSTransitionDisabler(bool is_SR) if (Thread::current_or_null() == nullptr) { return; // Detached thread, can be a call from Agent_OnLoad. } + if (!sync_protocol_enabled_permanently()) { + JvmtiVTMSTransitionDisabler::inc_sync_protocol_enabled_count(); + if (is_SR) { + Atomic::store(&_sync_protocol_enabled_permanently, true); + } + } VTMS_transition_disable_for_all(); } @@ -287,6 +302,9 @@ JvmtiVTMSTransitionDisabler::~JvmtiVTMSTransitionDisabler() { } else { VTMS_transition_enable_for_all(); // enable VTMS transitions for all virtual threads } + if (!sync_protocol_enabled_permanently()) { + JvmtiVTMSTransitionDisabler::dec_sync_protocol_enabled_count(); + } } // disable VTMS transitions for one virtual thread @@ -404,14 +422,21 @@ JvmtiVTMSTransitionDisabler::VTMS_transition_enable_for_all() { void JvmtiVTMSTransitionDisabler::start_VTMS_transition(jthread vthread, bool is_mount) { JavaThread* thread = JavaThread::current(); - HandleMark hm(thread); - Handle vth = Handle(thread, JNIHandles::resolve_external_guard(vthread)); - int attempts = 50000; + oop vt = JNIHandles::resolve_external_guard(vthread); + assert(!thread->is_in_VTMS_transition(), "VTMS_transition sanity check"); // Avoid using MonitorLocker on performance critical path, use // two-level synchronization with lock-free operations on counters. Atomic::inc(&_VTMS_transition_count); // Try to enter VTMS transition section optmistically. - java_lang_Thread::set_is_in_VTMS_transition(vth(), true); + java_lang_Thread::set_is_in_VTMS_transition(vt, true); + + if (!sync_protocol_enabled()) { + thread->set_is_in_VTMS_transition(true); + return; + } + HandleMark hm(thread); + Handle vth = Handle(thread, vt); + int attempts = 50000; // Do not allow suspends inside VTMS transitions. // Block while transitions are disabled or there are suspend requests. @@ -458,7 +483,6 @@ JvmtiVTMSTransitionDisabler::start_VTMS_transition(jthread vthread, bool is_moun } #endif // Enter VTMS transition section. - assert(!thread->is_in_VTMS_transition(), "VTMS_transition sanity check"); thread->set_is_in_VTMS_transition(true); } @@ -469,11 +493,14 @@ JvmtiVTMSTransitionDisabler::finish_VTMS_transition(jthread vthread, bool is_mou assert(thread->is_in_VTMS_transition(), "sanity check"); thread->set_is_in_VTMS_transition(false); oop vt = JNIHandles::resolve_external_guard(vthread); - int64_t thread_id = java_lang_Thread::thread_id(vt); java_lang_Thread::set_is_in_VTMS_transition(vt, false); - Atomic::dec(&_VTMS_transition_count); + if (!sync_protocol_enabled()) { + return; + } + int64_t thread_id = java_lang_Thread::thread_id(vt); + // Unblock waiting VTMS transition disablers. if (_VTMS_transition_disable_for_one_count > 0 || _VTMS_transition_disable_for_all_count > 0) { diff --git a/src/hotspot/share/prims/jvmtiThreadState.hpp b/src/hotspot/share/prims/jvmtiThreadState.hpp index 4dc24487058df..c15e328f36388 100644 --- a/src/hotspot/share/prims/jvmtiThreadState.hpp +++ b/src/hotspot/share/prims/jvmtiThreadState.hpp @@ -83,6 +83,8 @@ class JvmtiVTMSTransitionDisabler { static volatile int _VTMS_transition_disable_for_all_count; // transitions for all virtual threads are disabled while it is positive static volatile bool _SR_mode; // there is an active suspender or resumer static volatile int _VTMS_transition_count; // current number of VTMS transitions + static volatile int _sync_protocol_enabled_count; // current number of JvmtiVTMSTransitionDisablers enabled sync protocol + static volatile bool _sync_protocol_enabled_permanently; // seen a suspender: JvmtiVTMSTraansitionDisabler protocol is enabled permanently bool _is_SR; // is suspender or resumer jthread _thread; // virtual thread to disable transitions for, no-op if it is a platform thread @@ -100,6 +102,13 @@ class JvmtiVTMSTransitionDisabler { static void set_VTMS_transition_count(bool val) { _VTMS_transition_count = val; } + static void inc_sync_protocol_enabled_count() { Atomic::inc(&_sync_protocol_enabled_count); } + static void dec_sync_protocol_enabled_count() { Atomic::dec(&_sync_protocol_enabled_count); } + static int sync_protocol_enabled_count() { return Atomic::load(&_sync_protocol_enabled_count); } + static bool sync_protocol_enabled_permanently() { return Atomic::load(&_sync_protocol_enabled_permanently); } + + static bool sync_protocol_enabled() { return sync_protocol_enabled_permanently() || sync_protocol_enabled_count() > 0; } + // parameter is_SR: suspender or resumer JvmtiVTMSTransitionDisabler(bool is_SR = false); JvmtiVTMSTransitionDisabler(jthread thread); From 7ad700596fbc58c27fedfa46755e80ea57712fac Mon Sep 17 00:00:00 2001 From: Weibing Xiao Date: Thu, 30 Nov 2023 17:34:49 +0000 Subject: [PATCH 148/250] 8315034: File.mkdirs() occasionally fails to create folders on Windows shared folder Reviewed-by: bpb --- src/java.base/windows/native/libjava/canonicalize_md.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/java.base/windows/native/libjava/canonicalize_md.c b/src/java.base/windows/native/libjava/canonicalize_md.c index 1ec990ff5a439..ecfdf63d09162 100644 --- a/src/java.base/windows/native/libjava/canonicalize_md.c +++ b/src/java.base/windows/native/libjava/canonicalize_md.c @@ -138,7 +138,8 @@ lastErrorReportable() || (errval == ERROR_BAD_NET_NAME) || (errval == ERROR_ACCESS_DENIED) || (errval == ERROR_NETWORK_UNREACHABLE) - || (errval == ERROR_NETWORK_ACCESS_DENIED)) { + || (errval == ERROR_NETWORK_ACCESS_DENIED) + || (errval == ERROR_NO_MORE_FILES)) { return 0; } return 1; From 0a60b0f99efb38d2cc97f3862ef95a0d26ba49a7 Mon Sep 17 00:00:00 2001 From: Weijun Wang Date: Thu, 30 Nov 2023 19:14:29 +0000 Subject: [PATCH 149/250] 8302233: HSS/LMS: keytool and jarsigner changes Reviewed-by: mullan --- .../classes/sun/security/pkcs/PKCS7.java | 65 +----------------- .../classes/sun/security/pkcs/SignerInfo.java | 66 ++++++++++++++----- .../classes/sun/security/util/KeyUtil.java | 39 +++++++++-- .../security/util/SignatureFileVerifier.java | 19 +++--- .../sun/security/util/SignatureUtil.java | 32 ++++----- .../jdk/security/jarsigner/JarSigner.java | 2 +- .../sun/security/tools/jarsigner/Main.java | 6 +- .../sun/security/pkcs/pkcs7/NewSigAlg.java | 2 +- test/jdk/sun/security/pkcs/pkcs7/TwoHash.java | 2 +- .../lib/security/timestamp/TsaSigner.java | 5 +- 10 files changed, 120 insertions(+), 118 deletions(-) diff --git a/src/java.base/share/classes/sun/security/pkcs/PKCS7.java b/src/java.base/share/classes/sun/security/pkcs/PKCS7.java index 82d1a4d0bd9b7..23925869b9f3f 100644 --- a/src/java.base/share/classes/sun/security/pkcs/PKCS7.java +++ b/src/java.base/share/classes/sun/security/pkcs/PKCS7.java @@ -720,7 +720,7 @@ public boolean isOldStyle() { * * @param sigalg signature algorithm to be used * @param sigProvider (optional) provider - * @param privateKey signer's private ky + * @param privateKey signer's private key * @param signerChain signer's certificate chain * @param content the content to sign * @param internalsf whether the content should be included in output @@ -732,7 +732,7 @@ public boolean isOldStyle() { * @throws IOException should not happen here, all byte array * @throws NoSuchAlgorithmException if siglag is bad */ - public static byte[] generateNewSignedData( + public static byte[] generateSignedData( String sigalg, Provider sigProvider, PrivateKey privateKey, X509Certificate[] signerChain, byte[] content, boolean internalsf, boolean directsign, @@ -743,7 +743,7 @@ public static byte[] generateNewSignedData( Signature signer = SignatureUtil.fromKey(sigalg, privateKey, sigProvider); AlgorithmId digAlgID = SignatureUtil.getDigestAlgInPkcs7SignerInfo( - signer, sigalg, privateKey, directsign); + signer, sigalg, privateKey, signerChain[0].getPublicKey(), directsign); AlgorithmId sigAlgID = SignatureUtil.fromSignature(signer, privateKey); PKCS9Attributes authAttrs = null; @@ -837,65 +837,6 @@ private static byte[] constructToken(byte[] signature, return p7out.toByteArray(); } - /** - * Assembles a PKCS #7 signed data message that optionally includes a - * signature timestamp. - * - * @param signature the signature bytes - * @param signerChain the signer's X.509 certificate chain - * @param content the content that is signed; specify null to not include - * it in the PKCS7 data - * @param signatureAlgorithm the name of the signature algorithm - * @param tsaURI the URI of the Timestamping Authority; or null if no - * timestamp is requested - * @param tSAPolicyID the TSAPolicyID of the Timestamping Authority as a - * numerical object identifier; or null if we leave the TSA server - * to choose one. This argument is only used when tsaURI is provided - * @return the bytes of the encoded PKCS #7 signed data message - * @throws NoSuchAlgorithmException The exception is thrown if the signature - * algorithm is unrecognised. - * @throws CertificateException The exception is thrown if an error occurs - * while processing the signer's certificate or the TSA's - * certificate. - * @throws IOException The exception is thrown if an error occurs while - * generating the signature timestamp or while generating the signed - * data message. - */ - @Deprecated(since="16", forRemoval=true) - public static byte[] generateSignedData(byte[] signature, - X509Certificate[] signerChain, - byte[] content, - String signatureAlgorithm, - URI tsaURI, - String tSAPolicyID, - String tSADigestAlg) - throws CertificateException, IOException, NoSuchAlgorithmException - { - - // Generate the timestamp token - PKCS9Attributes unauthAttrs = null; - if (tsaURI != null) { - // Timestamp the signature - HttpTimestamper tsa = new HttpTimestamper(tsaURI); - byte[] tsToken = generateTimestampToken( - tsa, tSAPolicyID, tSADigestAlg, signature); - - // Insert the timestamp token into the PKCS #7 signer info element - // (as an unsigned attribute) - unauthAttrs = - new PKCS9Attributes(new PKCS9Attribute[]{ - new PKCS9Attribute( - PKCS9Attribute.SIGNATURE_TIMESTAMP_TOKEN_OID, - tsToken)}); - } - - return constructToken(signature, signerChain, content, - null, - unauthAttrs, - AlgorithmId.get(SignatureUtil.extractDigestAlgFromDwithE(signatureAlgorithm)), - AlgorithmId.get(signatureAlgorithm)); - } - /** * Examine the certificate for a Subject Information Access extension * (RFC 5280). diff --git a/src/java.base/share/classes/sun/security/pkcs/SignerInfo.java b/src/java.base/share/classes/sun/security/pkcs/SignerInfo.java index 39cd90c56abea..7b4742ea92a22 100644 --- a/src/java.base/share/classes/sun/security/pkcs/SignerInfo.java +++ b/src/java.base/share/classes/sun/security/pkcs/SignerInfo.java @@ -398,8 +398,7 @@ SignerInfo verify(PKCS7 block, byte[] data) // to form signing algorithm. See makeSigAlg for details. String sigAlgName = makeSigAlg( digestAlgorithmId, - digestEncryptionAlgorithmId, - authenticatedAttributes == null); + digestEncryptionAlgorithmId); KnownOIDs oid = KnownOIDs.findMatch(sigAlgName); if (oid != null) { @@ -422,6 +421,12 @@ SignerInfo verify(PKCS7 block, byte[] data) + "critical extension(s)"); } + algorithmsConformanceCheck( + digestAlgorithmId, + digestEncryptionAlgorithmId, + key, + authenticatedAttributes == null); + // Make sure that if the usage of the key in the certificate is // restricted, it can be used for digital signatures. // XXX We may want to check for additional extensions in the @@ -471,26 +476,17 @@ SignerInfo verify(PKCS7 block, byte[] data) } /** - * Derives the signature algorithm name from the digest algorithm - * and the encryption algorithm inside a PKCS7 SignerInfo. - * - * The digest algorithm is in the form "DIG", and the encryption - * algorithm can be in any of the 3 forms: - * - * 1. Old style key algorithm like RSA, DSA, EC, this method returns - * DIGwithKEY. - * 2. New style signature algorithm in the form of HASHwithKEY, this - * method returns DIGwithKEY. Please note this is not HASHwithKEY. - * 3. Modern signature algorithm like RSASSA-PSS and EdDSA, this method - * returns the signature algorithm itself but ensures digAlgId is - * compatible with the algorithm as described in RFC 4056 and 8419. + * Checks if the digest algorithm and encryption algorithm combination + * inside a PKCS7 SignerInfo is legal. * * @param digAlgId the digest algorithm * @param encAlgId the encryption algorithm + * @param key the public key for verification * @param directSign whether the signature is calculated on the content * directly. This makes difference for Ed448. */ - public static String makeSigAlg(AlgorithmId digAlgId, AlgorithmId encAlgId, + private static void algorithmsConformanceCheck( + AlgorithmId digAlgId, AlgorithmId encAlgId, PublicKey key, boolean directSign) throws NoSuchAlgorithmException { String encAlg = encAlgId.getName(); switch (encAlg) { @@ -509,12 +505,12 @@ public static String makeSigAlg(AlgorithmId digAlgId, AlgorithmId encAlgId, if (!AlgorithmId.get(spec.getDigestAlgorithm()).equals(digAlgId)) { throw new NoSuchAlgorithmException("Incompatible digest algorithm"); } - return encAlg; + break; case "Ed25519": if (!digAlgId.equals(SignatureUtil.EdDSADigestAlgHolder.sha512)) { throw new NoSuchAlgorithmException("Incompatible digest algorithm"); } - return encAlg; + break; case "Ed448": if (directSign) { if (!digAlgId.equals(SignatureUtil.EdDSADigestAlgHolder.shake256)) { @@ -525,6 +521,40 @@ public static String makeSigAlg(AlgorithmId digAlgId, AlgorithmId encAlgId, throw new NoSuchAlgorithmException("Incompatible digest algorithm"); } } + break; + case "HSS/LMS": + // RFC 8708 requires the same hash algorithm used as in the HSS/LMS algorithm + if (!digAlgId.equals(AlgorithmId.get(KeyUtil.hashAlgFromHSS(key)))) { + throw new NoSuchAlgorithmException("Incompatible digest algorithm"); + } + break; + } + } + + /** + * Derives the signature algorithm name from the digest algorithm + * and the encryption algorithm inside a PKCS7 SignerInfo. + * + * The digest algorithm is in the form "DIG", and the encryption + * algorithm can be in any of the 3 forms: + * + * 1. Old style key algorithm like RSA, DSA, EC, this method returns + * DIGwithKEY. + * 2. New style signature algorithm in the form of HASHwithKEY, this + * method returns DIGwithKEY. Please note this is not HASHwithKEY. + * 3. Modern signature algorithm like RSASSA-PSS and EdDSA, this method + * returns the signature algorithm itself. + * + * @param digAlgId the digest algorithm + * @param encAlgId the encryption algorithm + */ + public static String makeSigAlg(AlgorithmId digAlgId, AlgorithmId encAlgId) { + String encAlg = encAlgId.getName(); + switch (encAlg) { + case "RSASSA-PSS": + case "Ed25519": + case "Ed448": + case "HSS/LMS": return encAlg; default: String digAlg = digAlgId.getName(); diff --git a/src/java.base/share/classes/sun/security/util/KeyUtil.java b/src/java.base/share/classes/sun/security/util/KeyUtil.java index e17ca2aaaeb72..059467779b988 100644 --- a/src/java.base/share/classes/sun/security/util/KeyUtil.java +++ b/src/java.base/share/classes/sun/security/util/KeyUtil.java @@ -25,11 +25,9 @@ package sun.security.util; +import java.io.IOException; import java.math.BigInteger; -import java.security.AlgorithmParameters; -import java.security.InvalidKeyException; -import java.security.Key; -import java.security.SecureRandom; +import java.security.*; import java.security.interfaces.*; import java.security.spec.*; import java.util.Arrays; @@ -405,5 +403,38 @@ public static byte[] trimZeroes(byte[] b) { return t; } + /** + * Finds the hash algorithm from an HSS/LMS public key. + * + * @param publicKey the HSS/LMS public key + * @return the hash algorithm + * @throws NoSuchAlgorithmException if key is from an unknown configuration + */ + public static String hashAlgFromHSS(PublicKey publicKey) + throws NoSuchAlgorithmException { + try { + DerValue val = new DerValue(publicKey.getEncoded()); + val.data.getDerValue(); + byte[] rawKey = new DerValue(val.data.getBitString()).getOctetString(); + // According to https://www.rfc-editor.org/rfc/rfc8554.html: + // Section 6.1: HSS public key is u32str(L) || pub[0], where pub[0] + // is the LMS public key for the top-level tree. + // Section 5.3: LMS public key is u32str(type) || u32str(otstype) || I || T[1] + // Section 8: type is the numeric identifier for an LMS specification. + // This RFC defines 5 SHA-256 based types, value from 5 to 9. + if (rawKey.length < 8) { + throw new NoSuchAlgorithmException("Cannot decode public key"); + } + int num = ((rawKey[4] & 0xff) << 24) + ((rawKey[5] & 0xff) << 16) + + ((rawKey[6] & 0xff) << 8) + (rawKey[7] & 0xff); + return switch (num) { + // RFC 8554 only supports SHA_256 hash algorithm + case 5, 6, 7, 8, 9 -> "SHA-256"; + default -> throw new NoSuchAlgorithmException("Unknown LMS type: " + num); + }; + } catch (IOException e) { + throw new NoSuchAlgorithmException("Cannot decode public key", e); + } + } } diff --git a/src/java.base/share/classes/sun/security/util/SignatureFileVerifier.java b/src/java.base/share/classes/sun/security/util/SignatureFileVerifier.java index e16ae803b962b..1e204816bd65f 100644 --- a/src/java.base/share/classes/sun/security/util/SignatureFileVerifier.java +++ b/src/java.base/share/classes/sun/security/util/SignatureFileVerifier.java @@ -184,21 +184,20 @@ public static boolean isBlockOrSF(String s) { /** * Returns the signed JAR block file extension for a key. * + * Returns "DSA" for unknown algorithms. This is safe because the + * signature verification process does not require the extension to + * match the key algorithm as long as it is "RSA", "DSA", or "EC." + * * @param key the key used to sign the JAR file * @return the extension * @see #isBlockOrSF(String) */ public static String getBlockExtension(PrivateKey key) { - String keyAlgorithm = key.getAlgorithm().toUpperCase(Locale.ENGLISH); - if (keyAlgorithm.equals("RSASSA-PSS")) { - return "RSA"; - } else if (keyAlgorithm.equals("EDDSA") - || keyAlgorithm.equals("ED25519") - || keyAlgorithm.equals("ED448")) { - return "EC"; - } else { - return keyAlgorithm; - } + return switch (key.getAlgorithm().toUpperCase(Locale.ENGLISH)) { + case "RSA", "RSASSA-PSS" -> "RSA"; + case "EC", "EDDSA", "ED25519", "ED448" -> "EC"; + default -> "DSA"; + }; } /** diff --git a/src/java.base/share/classes/sun/security/util/SignatureUtil.java b/src/java.base/share/classes/sun/security/util/SignatureUtil.java index 61d8be3ca8c35..3d415814ba4fc 100644 --- a/src/java.base/share/classes/sun/security/util/SignatureUtil.java +++ b/src/java.base/share/classes/sun/security/util/SignatureUtil.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2023, 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 @@ -212,12 +212,13 @@ public static class EdDSADigestAlgHolder { * @param signer Signature object that tells you RSASSA-PSS params * @param sigalg Signature algorithm * @param privateKey key tells you EdDSA params + * @param publicKey key tells you HSS/LMS hash algorithm * @param directsign Ed448 uses different digest algs depending on this * @return the digest algId * @throws NoSuchAlgorithmException */ public static AlgorithmId getDigestAlgInPkcs7SignerInfo( - Signature signer, String sigalg, PrivateKey privateKey, boolean directsign) + Signature signer, String sigalg, PrivateKey privateKey, PublicKey publicKey, boolean directsign) throws NoSuchAlgorithmException { AlgorithmId digAlgID; String kAlg = privateKey.getAlgorithm(); @@ -243,18 +244,18 @@ public static AlgorithmId getDigestAlgInPkcs7SignerInfo( default: throw new AssertionError("Unknown curve name: " + kAlg); } - } else { - if (sigalg.equalsIgnoreCase("RSASSA-PSS")) { - try { - digAlgID = AlgorithmId.get(signer.getParameters() - .getParameterSpec(PSSParameterSpec.class) - .getDigestAlgorithm()); - } catch (InvalidParameterSpecException e) { - throw new AssertionError("Should not happen", e); - } - } else { - digAlgID = AlgorithmId.get(extractDigestAlgFromDwithE(sigalg)); + } else if (sigalg.equalsIgnoreCase("RSASSA-PSS")) { + try { + digAlgID = AlgorithmId.get(signer.getParameters() + .getParameterSpec(PSSParameterSpec.class) + .getDigestAlgorithm()); + } catch (InvalidParameterSpecException e) { + throw new AssertionError("Should not happen", e); } + } else if (sigalg.equalsIgnoreCase("HSS/LMS")) { + digAlgID = AlgorithmId.get(KeyUtil.hashAlgFromHSS(publicKey)); + } else { + digAlgID = AlgorithmId.get(extractDigestAlgFromDwithE(sigalg)); } return digAlgID; } @@ -484,14 +485,15 @@ public static void checkKeyAndSigAlgMatch(PrivateKey key, String sAlg) { public static String getDefaultSigAlgForKey(PrivateKey k) { String kAlg = k.getAlgorithm().toUpperCase(Locale.ENGLISH); return switch (kAlg) { + case "DH", "XDH", "X25519", "X448" -> null; case "DSA" -> "SHA256withDSA"; case "RSA" -> ifcFfcStrength(KeyUtil.getKeySize(k)) + "withRSA"; case "EC" -> ecStrength(KeyUtil.getKeySize(k)) + "withECDSA"; case "EDDSA" -> k instanceof EdECPrivateKey ? ((EdECPrivateKey) k).getParams().getName() : kAlg; - case "RSASSA-PSS", "ED25519", "ED448" -> kAlg; - default -> null; + default -> kAlg; // All modern signature algorithms, + // RSASSA-PSS, ED25519, ED448, HSS/LMS, etc }; } diff --git a/src/jdk.jartool/share/classes/jdk/security/jarsigner/JarSigner.java b/src/jdk.jartool/share/classes/jdk/security/jarsigner/JarSigner.java index 4f85adb752837..5dbaf6041ee25 100644 --- a/src/jdk.jartool/share/classes/jdk/security/jarsigner/JarSigner.java +++ b/src/jdk.jartool/share/classes/jdk/security/jarsigner/JarSigner.java @@ -845,7 +845,7 @@ private void sign0(ZipFile zipFile, OutputStream os) }; } // We now create authAttrs in block data, so "direct == false". - block = PKCS7.generateNewSignedData(sigalg, sigProvider, privateKey, certChain, + block = PKCS7.generateSignedData(sigalg, sigProvider, privateKey, certChain, content, internalsf, false, timestamper); String sfFilename = sf.getMetaName(); diff --git a/src/jdk.jartool/share/classes/sun/security/tools/jarsigner/Main.java b/src/jdk.jartool/share/classes/sun/security/tools/jarsigner/Main.java index ed2c9be854310..e011145632dfa 100644 --- a/src/jdk.jartool/share/classes/sun/security/tools/jarsigner/Main.java +++ b/src/jdk.jartool/share/classes/sun/security/tools/jarsigner/Main.java @@ -1015,8 +1015,7 @@ void verifyJar(String jarName) String digestAlg = digestMap.get(s); String sigAlg = SignerInfo.makeSigAlg( si.getDigestAlgorithmId(), - si.getDigestEncryptionAlgorithmId(), - si.getAuthenticatedAttributes() == null); + si.getDigestEncryptionAlgorithmId()); AlgorithmId encAlgId = si.getDigestEncryptionAlgorithmId(); AlgorithmParameters sigAlgParams = encAlgId.getParameters(); PublicKey key = signer.getPublicKey(); @@ -1031,8 +1030,7 @@ void verifyJar(String jarName) String tsDigestAlg = tsTokenInfo.getHashAlgorithm().getName(); String tsSigAlg = SignerInfo.makeSigAlg( tsSi.getDigestAlgorithmId(), - tsSi.getDigestEncryptionAlgorithmId(), - tsSi.getAuthenticatedAttributes() == null); + tsSi.getDigestEncryptionAlgorithmId()); AlgorithmId tsEncAlgId = tsSi.getDigestEncryptionAlgorithmId(); AlgorithmParameters tsSigAlgParams = tsEncAlgId.getParameters(); Calendar c = Calendar.getInstance( diff --git a/test/jdk/sun/security/pkcs/pkcs7/NewSigAlg.java b/test/jdk/sun/security/pkcs/pkcs7/NewSigAlg.java index 098dd9caaa42c..926c2c0c65e69 100644 --- a/test/jdk/sun/security/pkcs/pkcs7/NewSigAlg.java +++ b/test/jdk/sun/security/pkcs/pkcs7/NewSigAlg.java @@ -46,6 +46,6 @@ public static void main(String[] args) throws Exception { static void test(String d, String e, String s) throws Exception { Asserts.assertEQ(s, SignerInfo.makeSigAlg( - AlgorithmId.get(d), AlgorithmId.get(s), false)); + AlgorithmId.get(d), AlgorithmId.get(s))); } } diff --git a/test/jdk/sun/security/pkcs/pkcs7/TwoHash.java b/test/jdk/sun/security/pkcs/pkcs7/TwoHash.java index 6aaf7825c26d2..4ebedd21928c4 100644 --- a/test/jdk/sun/security/pkcs/pkcs7/TwoHash.java +++ b/test/jdk/sun/security/pkcs/pkcs7/TwoHash.java @@ -45,7 +45,7 @@ public static void main(String[] args) throws Exception { CertAndKeyGen cak = new CertAndKeyGen("EC", "SHA512withECDSA"); cak.generate("secp256r1"); - byte[] signature = PKCS7.generateNewSignedData( + byte[] signature = PKCS7.generateSignedData( "SHA256withECDSA", null, cak.getPrivateKey(), diff --git a/test/lib/jdk/test/lib/security/timestamp/TsaSigner.java b/test/lib/jdk/test/lib/security/timestamp/TsaSigner.java index a3647552557d5..22d630f3aa887 100644 --- a/test/lib/jdk/test/lib/security/timestamp/TsaSigner.java +++ b/test/lib/jdk/test/lib/security/timestamp/TsaSigner.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2023, 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 @@ -219,7 +219,8 @@ private byte[] createResponse(TsaParam requestParam) throws Exception { new X500Name(issuerName), signerEntry.cert.getSerialNumber(), SignatureUtil.getDigestAlgInPkcs7SignerInfo( - signature, sigAlgo, signerEntry.privateKey, false), + signature, sigAlgo, signerEntry.privateKey, + signerEntry.cert.getPublicKey(), false), AlgorithmId.get(sigAlgo), signature.sign()); From 630bafd9c66e7612d48c183c81a58ecbd6ea5866 Mon Sep 17 00:00:00 2001 From: Ioi Lam Date: Thu, 30 Nov 2023 19:22:11 +0000 Subject: [PATCH 150/250] 8320826: call allocate_shared_strings_array after all strings are interned Reviewed-by: ccheung, matsaave --- src/hotspot/share/cds/metaspaceShared.cpp | 5 ++++- src/hotspot/share/classfile/stringTable.cpp | 4 +++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/hotspot/share/cds/metaspaceShared.cpp b/src/hotspot/share/cds/metaspaceShared.cpp index d85db121db34a..dedd7cb85ee5d 100644 --- a/src/hotspot/share/cds/metaspaceShared.cpp +++ b/src/hotspot/share/cds/metaspaceShared.cpp @@ -783,7 +783,6 @@ void MetaspaceShared::preload_and_dump_impl(TRAPS) { #if INCLUDE_CDS_JAVA_HEAP if (CDSConfig::is_dumping_heap()) { - StringTable::allocate_shared_strings_array(CHECK); if (!HeapShared::is_archived_boot_layer_available(THREAD)) { log_info(cds)("archivedBootLayer not available, disabling full module graph"); CDSConfig::disable_dumping_full_module_graph(); @@ -793,6 +792,10 @@ void MetaspaceShared::preload_and_dump_impl(TRAPS) { if (CDSConfig::is_dumping_full_module_graph()) { HeapShared::reset_archived_object_states(CHECK); } + + // Do this at the very end, when no Java code will be executed. Otherwise + // some new strings may be added to the intern table. + StringTable::allocate_shared_strings_array(CHECK); } #endif diff --git a/src/hotspot/share/classfile/stringTable.cpp b/src/hotspot/share/classfile/stringTable.cpp index 506eef46241da..9e96340d82b9c 100644 --- a/src/hotspot/share/classfile/stringTable.cpp +++ b/src/hotspot/share/classfile/stringTable.cpp @@ -806,7 +806,9 @@ oop StringTable::lookup_shared(const jchar* name, int len) { // This should be called when we know no more strings will be added (which will be easy // to guarantee because CDS runs with a single Java thread. See JDK-8253495.) void StringTable::allocate_shared_strings_array(TRAPS) { - assert(CDSConfig::is_dumping_heap(), "must be"); + if (!CDSConfig::is_dumping_heap()) { + return; + } if (_items_count > (size_t)max_jint) { fatal("Too many strings to be archived: %zu", _items_count); } From e96e19195287a065711358bffde753e9d83e5de3 Mon Sep 17 00:00:00 2001 From: Jorn Vernee Date: Thu, 30 Nov 2023 19:26:54 +0000 Subject: [PATCH 151/250] 8318586: Explicitly handle upcall stub allocation failure 8318653: UpcallTestHelper::runInNewProcess waits for forked process without timeout Reviewed-by: shade, mcimadamore --- .../cpu/aarch64/downcallLinker_aarch64.cpp | 12 +++- .../cpu/aarch64/upcallLinker_aarch64.cpp | 6 ++ src/hotspot/cpu/ppc/downcallLinker_ppc.cpp | 12 +++- src/hotspot/cpu/ppc/upcallLinker_ppc.cpp | 7 ++ .../cpu/riscv/downcallLinker_riscv.cpp | 12 +++- src/hotspot/cpu/riscv/upcallLinker_riscv.cpp | 7 ++ src/hotspot/cpu/s390/downcallLinker_s390.cpp | 12 +++- src/hotspot/cpu/s390/upcallLinker_s390.cpp | 7 ++ src/hotspot/cpu/x86/downcallLinker_x86_64.cpp | 12 +++- src/hotspot/cpu/x86/upcallLinker_x86_64.cpp | 6 ++ src/hotspot/share/code/codeBlob.cpp | 4 ++ src/hotspot/share/prims/nativeEntryPoint.cpp | 12 ++-- .../foreign/abi/NativeEntryPoint.java | 3 + .../internal/foreign/abi/UpcallLinker.java | 3 + test/jdk/java/foreign/NativeTestHelper.java | 6 +- .../java/foreign/TestAddressDereference.java | 1 + .../java/foreign/TestStubAllocFailure.java | 66 +++++++++++++++++++ .../jdk/java/foreign/TestUpcallException.java | 1 + test/jdk/java/foreign/UpcallTestHelper.java | 34 +++++++--- .../foreign/critical/TestCriticalUpcall.java | 2 +- .../passheapsegment/TestPassHeapSegment.java | 2 +- 21 files changed, 207 insertions(+), 20 deletions(-) create mode 100644 test/jdk/java/foreign/TestStubAllocFailure.java diff --git a/src/hotspot/cpu/aarch64/downcallLinker_aarch64.cpp b/src/hotspot/cpu/aarch64/downcallLinker_aarch64.cpp index c5bcc38b5f651..b9a480af7ba97 100644 --- a/src/hotspot/cpu/aarch64/downcallLinker_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/downcallLinker_aarch64.cpp @@ -51,6 +51,9 @@ RuntimeStub* DowncallLinker::make_downcall_stub(BasicType* signature, int code_size = native_invoker_code_base_size + (num_args * native_invoker_size_per_arg); int locs_size = 1; // must be non-zero CodeBuffer code("nep_invoker_blob", code_size, locs_size); + if (code.blob() == nullptr) { + return nullptr; + } StubGenerator g(&code, signature, num_args, ret_bt, abi, input_registers, output_registers, needs_return_buffer, captured_state_mask, @@ -58,12 +61,19 @@ RuntimeStub* DowncallLinker::make_downcall_stub(BasicType* signature, g.generate(); code.log_section_sizes("nep_invoker_blob"); + bool caller_must_gc_arguments = false; + bool alloc_fail_is_fatal = false; RuntimeStub* stub = RuntimeStub::new_runtime_stub("nep_invoker_blob", &code, g.frame_complete(), g.framesize(), - g.oop_maps(), false); + g.oop_maps(), + caller_must_gc_arguments, + alloc_fail_is_fatal); + if (stub == nullptr) { + return nullptr; + } #ifndef PRODUCT LogTarget(Trace, foreign, downcall) lt; diff --git a/src/hotspot/cpu/aarch64/upcallLinker_aarch64.cpp b/src/hotspot/cpu/aarch64/upcallLinker_aarch64.cpp index 03aa1cd6cd7ec..14e9764457508 100644 --- a/src/hotspot/cpu/aarch64/upcallLinker_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/upcallLinker_aarch64.cpp @@ -127,6 +127,9 @@ address UpcallLinker::make_upcall_stub(jobject receiver, Method* entry, const CallRegs call_regs = ForeignGlobals::parse_call_regs(jconv); int code_size = upcall_stub_code_base_size + (total_out_args * upcall_stub_size_per_arg); CodeBuffer buffer("upcall_stub", code_size, /* locs_size = */ 1); + if (buffer.blob() == nullptr) { + return nullptr; + } GrowableArray unfiltered_out_regs; int out_arg_bytes = ForeignGlobals::java_calling_convention(out_sig_bt, total_out_args, unfiltered_out_regs); @@ -324,6 +327,9 @@ address UpcallLinker::make_upcall_stub(jobject receiver, Method* entry, &buffer, receiver, in_ByteSize(frame_data_offset)); + if (blob == nullptr) { + return nullptr; + } #ifndef PRODUCT if (lt.is_enabled()) { diff --git a/src/hotspot/cpu/ppc/downcallLinker_ppc.cpp b/src/hotspot/cpu/ppc/downcallLinker_ppc.cpp index 5fb9509926f9c..7175f727437af 100644 --- a/src/hotspot/cpu/ppc/downcallLinker_ppc.cpp +++ b/src/hotspot/cpu/ppc/downcallLinker_ppc.cpp @@ -51,6 +51,9 @@ RuntimeStub* DowncallLinker::make_downcall_stub(BasicType* signature, int code_size = native_invoker_code_base_size + (num_args * native_invoker_size_per_arg); int locs_size = 1; // must be non-zero CodeBuffer code("nep_invoker_blob", code_size, locs_size); + if (code.blob() == nullptr) { + return nullptr; + } StubGenerator g(&code, signature, num_args, ret_bt, abi, input_registers, output_registers, needs_return_buffer, captured_state_mask, @@ -58,12 +61,19 @@ RuntimeStub* DowncallLinker::make_downcall_stub(BasicType* signature, g.generate(); code.log_section_sizes("nep_invoker_blob"); + bool caller_must_gc_arguments = false; + bool alloc_fail_is_fatal = false; RuntimeStub* stub = RuntimeStub::new_runtime_stub("nep_invoker_blob", &code, g.frame_complete(), g.framesize(), - g.oop_maps(), false); + g.oop_maps(), + caller_must_gc_arguments, + alloc_fail_is_fatal); + if (stub == nullptr) { + return nullptr; + } #ifndef PRODUCT LogTarget(Trace, foreign, downcall) lt; diff --git a/src/hotspot/cpu/ppc/upcallLinker_ppc.cpp b/src/hotspot/cpu/ppc/upcallLinker_ppc.cpp index 727ebe2b568e1..a1c8f46ce2d57 100644 --- a/src/hotspot/cpu/ppc/upcallLinker_ppc.cpp +++ b/src/hotspot/cpu/ppc/upcallLinker_ppc.cpp @@ -128,6 +128,9 @@ address UpcallLinker::make_upcall_stub(jobject receiver, Method* entry, const CallRegs call_regs = ForeignGlobals::parse_call_regs(jconv); int code_size = upcall_stub_code_base_size + (total_out_args * upcall_stub_size_per_arg); CodeBuffer buffer("upcall_stub", code_size, /* locs_size = */ 1); + if (buffer.blob() == nullptr) { + return nullptr; + } Register callerSP = R2, // C/C++ uses R2 as TOC, but we can reuse it here tmp = R11_scratch1, // same as shuffle_reg @@ -332,6 +335,10 @@ address UpcallLinker::make_upcall_stub(jobject receiver, Method* entry, &buffer, receiver, in_ByteSize(frame_data_offset)); + if (blob == nullptr) { + return nullptr; + } + #ifndef ABI_ELFv2 // Need to patch the FunctionDescriptor after relocating. address fd_addr = blob->code_begin(); diff --git a/src/hotspot/cpu/riscv/downcallLinker_riscv.cpp b/src/hotspot/cpu/riscv/downcallLinker_riscv.cpp index fefb40f4b1e1c..9c4ea56d0c8ba 100644 --- a/src/hotspot/cpu/riscv/downcallLinker_riscv.cpp +++ b/src/hotspot/cpu/riscv/downcallLinker_riscv.cpp @@ -52,6 +52,9 @@ RuntimeStub* DowncallLinker::make_downcall_stub(BasicType* signature, int code_size = native_invoker_code_base_size + (num_args * native_invoker_size_per_arg); int locs_size = 1; // must be non-zero CodeBuffer code("nep_invoker_blob", code_size, locs_size); + if (code.blob() == nullptr) { + return nullptr; + } StubGenerator g(&code, signature, num_args, ret_bt, abi, input_registers, output_registers, needs_return_buffer, captured_state_mask, @@ -59,12 +62,19 @@ RuntimeStub* DowncallLinker::make_downcall_stub(BasicType* signature, g.generate(); code.log_section_sizes("nep_invoker_blob"); + bool caller_must_gc_arguments = false; + bool alloc_fail_is_fatal = false; RuntimeStub* stub = RuntimeStub::new_runtime_stub("nep_invoker_blob", &code, g.frame_complete(), g.framesize(), - g.oop_maps(), false); + g.oop_maps(), + caller_must_gc_arguments, + alloc_fail_is_fatal); + if (stub == nullptr) { + return nullptr; + } #ifndef PRODUCT LogTarget(Trace, foreign, downcall) lt; diff --git a/src/hotspot/cpu/riscv/upcallLinker_riscv.cpp b/src/hotspot/cpu/riscv/upcallLinker_riscv.cpp index abfea10fd0217..142d9d636938d 100644 --- a/src/hotspot/cpu/riscv/upcallLinker_riscv.cpp +++ b/src/hotspot/cpu/riscv/upcallLinker_riscv.cpp @@ -128,6 +128,9 @@ address UpcallLinker::make_upcall_stub(jobject receiver, Method* entry, const CallRegs call_regs = ForeignGlobals::parse_call_regs(jconv); int code_size = upcall_stub_code_base_size + (total_out_args * upcall_stub_size_per_arg); CodeBuffer buffer("upcall_stub", code_size, /* locs_size = */ 1); + if (buffer.blob() == nullptr) { + return nullptr; + } GrowableArray unfiltered_out_regs; int out_arg_bytes = ForeignGlobals::java_calling_convention(out_sig_bt, total_out_args, unfiltered_out_regs); @@ -344,6 +347,10 @@ address UpcallLinker::make_upcall_stub(jobject receiver, Method* entry, &buffer, receiver, in_ByteSize(frame_data_offset)); + if (blob == nullptr) { + return nullptr; + } + #ifndef PRODUCT if (lt.is_enabled()) { ResourceMark rm; diff --git a/src/hotspot/cpu/s390/downcallLinker_s390.cpp b/src/hotspot/cpu/s390/downcallLinker_s390.cpp index d3e11104e4800..22bd644e2b8a4 100644 --- a/src/hotspot/cpu/s390/downcallLinker_s390.cpp +++ b/src/hotspot/cpu/s390/downcallLinker_s390.cpp @@ -52,6 +52,9 @@ RuntimeStub* DowncallLinker::make_downcall_stub(BasicType* signature, int code_size = native_invoker_code_base_size + (num_args * native_invoker_size_per_args); int locs_size = 1; //must be non zero CodeBuffer code("nep_invoker_blob", code_size, locs_size); + if (code.blob() == nullptr) { + return nullptr; + } StubGenerator g(&code, signature, num_args, ret_bt, abi, input_registers, output_registers, @@ -60,12 +63,19 @@ RuntimeStub* DowncallLinker::make_downcall_stub(BasicType* signature, g.generate(); code.log_section_sizes("nep_invoker_blob"); + bool caller_must_gc_arguments = false; + bool alloc_fail_is_fatal = false; RuntimeStub* stub = RuntimeStub::new_runtime_stub("nep_invoker_blob", &code, g.frame_complete(), g.framesize(), - g.oop_maps(), false); + g.oop_maps(), + caller_must_gc_arguments, + alloc_fail_is_fatal); + if (stub == nullptr) { + return nullptr; + } #ifndef PRODUCT LogTarget(Trace, foreign, downcall) lt; diff --git a/src/hotspot/cpu/s390/upcallLinker_s390.cpp b/src/hotspot/cpu/s390/upcallLinker_s390.cpp index 10be41d6c287a..20c9b35db626a 100644 --- a/src/hotspot/cpu/s390/upcallLinker_s390.cpp +++ b/src/hotspot/cpu/s390/upcallLinker_s390.cpp @@ -126,6 +126,9 @@ address UpcallLinker::make_upcall_stub(jobject receiver, Method* entry, const CallRegs call_regs = ForeignGlobals::parse_call_regs(jconv); int code_size = upcall_stub_code_base_size + (total_out_args * upcall_stub_size_per_arg); CodeBuffer buffer("upcall_stub", code_size, /* locs_size = */ 0); + if (buffer.blob() == nullptr) { + return nullptr; + } Register call_target_address = Z_R1_scratch; @@ -283,6 +286,10 @@ address UpcallLinker::make_upcall_stub(jobject receiver, Method* entry, &buffer, receiver, in_ByteSize(frame_data_offset)); + if (blob == nullptr) { + return nullptr; + } + #ifndef PRODUCT if (lt.is_enabled()) { ResourceMark rm; diff --git a/src/hotspot/cpu/x86/downcallLinker_x86_64.cpp b/src/hotspot/cpu/x86/downcallLinker_x86_64.cpp index 1a40429b7bdba..41039e0cfd835 100644 --- a/src/hotspot/cpu/x86/downcallLinker_x86_64.cpp +++ b/src/hotspot/cpu/x86/downcallLinker_x86_64.cpp @@ -49,6 +49,9 @@ RuntimeStub* DowncallLinker::make_downcall_stub(BasicType* signature, int code_size = native_invoker_code_base_size + (num_args * native_invoker_size_per_arg); int locs_size = 1; // can not be zero CodeBuffer code("nep_invoker_blob", code_size, locs_size); + if (code.blob() == nullptr) { + return nullptr; + } StubGenerator g(&code, signature, num_args, ret_bt, abi, input_registers, output_registers, needs_return_buffer, captured_state_mask, @@ -56,12 +59,19 @@ RuntimeStub* DowncallLinker::make_downcall_stub(BasicType* signature, g.generate(); code.log_section_sizes("nep_invoker_blob"); + bool caller_must_gc_arguments = false; + bool alloc_fail_is_fatal = false; RuntimeStub* stub = RuntimeStub::new_runtime_stub("nep_invoker_blob", &code, g.frame_complete(), g.framesize(), - g.oop_maps(), false); + g.oop_maps(), + caller_must_gc_arguments, + alloc_fail_is_fatal); + if (stub == nullptr) { + return nullptr; + } #ifndef PRODUCT LogTarget(Trace, foreign, downcall) lt; diff --git a/src/hotspot/cpu/x86/upcallLinker_x86_64.cpp b/src/hotspot/cpu/x86/upcallLinker_x86_64.cpp index ca170c5013e26..89e7a466264b9 100644 --- a/src/hotspot/cpu/x86/upcallLinker_x86_64.cpp +++ b/src/hotspot/cpu/x86/upcallLinker_x86_64.cpp @@ -177,6 +177,9 @@ address UpcallLinker::make_upcall_stub(jobject receiver, Method* entry, const CallRegs call_regs = ForeignGlobals::parse_call_regs(jconv); int code_size = upcall_stub_code_base_size + (total_out_args * upcall_stub_size_per_arg); CodeBuffer buffer("upcall_stub", code_size, /* locs_size = */ 1); + if (buffer.blob() == nullptr) { + return nullptr; + } GrowableArray unfiltered_out_regs; int out_arg_bytes = ForeignGlobals::java_calling_convention(out_sig_bt, total_out_args, unfiltered_out_regs); @@ -379,6 +382,9 @@ address UpcallLinker::make_upcall_stub(jobject receiver, Method* entry, &buffer, receiver, in_ByteSize(frame_data_offset)); + if (blob == nullptr) { + return nullptr; + } #ifndef PRODUCT if (lt.is_enabled()) { diff --git a/src/hotspot/share/code/codeBlob.cpp b/src/hotspot/share/code/codeBlob.cpp index 75cf3fbf2d4cd..ff449324d7c57 100644 --- a/src/hotspot/share/code/codeBlob.cpp +++ b/src/hotspot/share/code/codeBlob.cpp @@ -759,6 +759,10 @@ UpcallStub* UpcallStub::create(const char* name, CodeBuffer* cb, jobject receive MutexLocker mu(CodeCache_lock, Mutex::_no_safepoint_check_flag); blob = new (size) UpcallStub(name, cb, size, receiver, frame_data_offset); } + if (blob == nullptr) { + return nullptr; // caller must handle this + } + // Track memory usage statistic after releasing CodeCache_lock MemoryService::track_code_cache_memory_usage(); diff --git a/src/hotspot/share/prims/nativeEntryPoint.cpp b/src/hotspot/share/prims/nativeEntryPoint.cpp index 69014c9d64c39..2dbff08a7cb78 100644 --- a/src/hotspot/share/prims/nativeEntryPoint.cpp +++ b/src/hotspot/share/prims/nativeEntryPoint.cpp @@ -78,10 +78,14 @@ JNI_ENTRY(jlong, NEP_makeDowncallStub(JNIEnv* env, jclass _unused, jobject metho output_regs.push(ForeignGlobals::parse_vmstorage(ret_moves_oop->obj_at(i))); } - return (jlong) DowncallLinker::make_downcall_stub(basic_type, pslots, ret_bt, abi, - input_regs, output_regs, - needs_return_buffer, captured_state_mask, - needs_transition)->code_begin(); + RuntimeStub* stub = DowncallLinker::make_downcall_stub(basic_type, pslots, ret_bt, abi, + input_regs, output_regs, + needs_return_buffer, captured_state_mask, + needs_transition); + if (stub == nullptr) { + return 0; + } + return (jlong) stub->code_begin(); JNI_END JNI_ENTRY(jboolean, NEP_freeDowncallStub(JNIEnv* env, jclass _unused, jlong invoker)) diff --git a/src/java.base/share/classes/jdk/internal/foreign/abi/NativeEntryPoint.java b/src/java.base/share/classes/jdk/internal/foreign/abi/NativeEntryPoint.java index 51c7304b7c679..e65cee68ac72a 100644 --- a/src/java.base/share/classes/jdk/internal/foreign/abi/NativeEntryPoint.java +++ b/src/java.base/share/classes/jdk/internal/foreign/abi/NativeEntryPoint.java @@ -71,6 +71,9 @@ public static NativeEntryPoint make(ABIDescriptor abi, return NEP_CACHE.get(key, k -> { long downcallStub = makeDowncallStub(methodType, abi, argMoves, returnMoves, needsReturnBuffer, capturedStateMask, needsTransition); + if (downcallStub == 0) { + throw new OutOfMemoryError("Failed to allocate downcall stub"); + } NativeEntryPoint nep = new NativeEntryPoint(methodType, downcallStub); CLEANER.register(nep, () -> freeDowncallStub(downcallStub)); return nep; diff --git a/src/java.base/share/classes/jdk/internal/foreign/abi/UpcallLinker.java b/src/java.base/share/classes/jdk/internal/foreign/abi/UpcallLinker.java index c5d53a4c5fee4..272cfc3ca4e3c 100644 --- a/src/java.base/share/classes/jdk/internal/foreign/abi/UpcallLinker.java +++ b/src/java.base/share/classes/jdk/internal/foreign/abi/UpcallLinker.java @@ -106,6 +106,9 @@ public static UpcallStubFactory makeFactory(MethodType targetType, ABIDescriptor doBindings = insertArguments(exactInvoker(doBindings.type()), 0, doBindings); long entryPoint = makeUpcallStub(doBindings, abi, conv, callingSequence.needsReturnBuffer(), callingSequence.returnBufferSize()); + if (entryPoint == 0) { + throw new OutOfMemoryError("Failed to allocate upcall stub"); + } return UpcallStubs.makeUpcall(entryPoint, scope); }; } diff --git a/test/jdk/java/foreign/NativeTestHelper.java b/test/jdk/java/foreign/NativeTestHelper.java index d12593f7b8548..1ea45437da11c 100644 --- a/test/jdk/java/foreign/NativeTestHelper.java +++ b/test/jdk/java/foreign/NativeTestHelper.java @@ -175,9 +175,13 @@ public static MethodHandle downcallHandle(String symbol, FunctionDescriptor desc } public static MemorySegment upcallStub(Class holder, String name, FunctionDescriptor descriptor) { + return upcallStub(holder, name, descriptor, Arena.ofAuto()); + } + + public static MemorySegment upcallStub(Class holder, String name, FunctionDescriptor descriptor, Arena arena) { try { MethodHandle target = MethodHandles.lookup().findStatic(holder, name, descriptor.toMethodType()); - return LINKER.upcallStub(target, descriptor, Arena.ofAuto()); + return LINKER.upcallStub(target, descriptor, arena); } catch (ReflectiveOperationException e) { throw new RuntimeException(e); } diff --git a/test/jdk/java/foreign/TestAddressDereference.java b/test/jdk/java/foreign/TestAddressDereference.java index 6dc9575e5ae8a..3ebec596263b7 100644 --- a/test/jdk/java/foreign/TestAddressDereference.java +++ b/test/jdk/java/foreign/TestAddressDereference.java @@ -128,6 +128,7 @@ public void testNativeUpcallArgNeg(long alignment, ValueLayout layout) throws Th if (!badAlign) return; runInNewProcess(UpcallTestRunner.class, true, new String[] {Long.toString(alignment), layout.toString() }) + .assertFailed() .assertStdErrContains("alignment constraint for address"); } diff --git a/test/jdk/java/foreign/TestStubAllocFailure.java b/test/jdk/java/foreign/TestStubAllocFailure.java new file mode 100644 index 0000000000000..d3a1ef6e3ded8 --- /dev/null +++ b/test/jdk/java/foreign/TestStubAllocFailure.java @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @library ../ /test/lib + * @requires jdk.foreign.linker != "FALLBACK" + * @run testng/othervm/native + * --enable-native-access=ALL-UNNAMED + * TestStubAllocFailure + */ + +import java.lang.foreign.*; +import java.io.IOException; +import java.util.List; + +import org.testng.annotations.Test; + +import static org.testng.Assert.assertTrue; +import static org.testng.Assert.fail; + +public class TestStubAllocFailure extends UpcallTestHelper { + + @Test + public void testUpcallAllocFailure() throws IOException, InterruptedException { + runInNewProcess(UpcallRunner.class, true, List.of("-XX:ReservedCodeCacheSize=3M"), List.of()) + .assertSuccess(); + } + + public static class UpcallRunner extends NativeTestHelper { + public static void main(String[] args) throws Throwable { + try (Arena arena = Arena.ofConfined()) { + while (true) { + // allocate stubs until we crash + upcallStub(UpcallRunner.class, "target", FunctionDescriptor.ofVoid(), arena); + } + } catch (OutOfMemoryError e) { + assertTrue(e.getMessage().contains("Failed to allocate upcall stub")); + } + } + + public static void target() { + fail("Should not get here"); + } + } +} diff --git a/test/jdk/java/foreign/TestUpcallException.java b/test/jdk/java/foreign/TestUpcallException.java index fa922b9fb3911..f7dca7bc19c95 100644 --- a/test/jdk/java/foreign/TestUpcallException.java +++ b/test/jdk/java/foreign/TestUpcallException.java @@ -48,6 +48,7 @@ public class TestUpcallException extends UpcallTestHelper { @Test(dataProvider = "exceptionCases") public void testException(Class target, boolean useSpec) throws InterruptedException, IOException { runInNewProcess(target, useSpec) + .assertFailed() .assertStdErrContains("Testing upcall exceptions"); } diff --git a/test/jdk/java/foreign/UpcallTestHelper.java b/test/jdk/java/foreign/UpcallTestHelper.java index 2939c4bfd3747..e24c35e498c46 100644 --- a/test/jdk/java/foreign/UpcallTestHelper.java +++ b/test/jdk/java/foreign/UpcallTestHelper.java @@ -22,25 +22,37 @@ */ import jdk.test.lib.process.ProcessTools; +import jdk.test.lib.Utils; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; +import java.util.concurrent.TimeUnit; +import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotEquals; import static org.testng.Assert.assertTrue; public class UpcallTestHelper extends NativeTestHelper { - public record Output(List stdout, List stderr) { + public record Output(int result, List stdout, List stderr) { private static void assertContains(List lines, String shouldInclude, String name) { assertTrue(lines.stream().anyMatch(line -> line.contains(shouldInclude)), "Did not find '" + shouldInclude + "' in " + name); } + public Output assertFailed() { + assertNotEquals(result, 0); + return this; + } + + public Output assertSuccess() { + assertEquals(result, 0); + return this; + } + public Output assertStdErrContains(String shouldInclude) { assertContains(stderr, shouldInclude, "stderr"); return this; @@ -53,27 +65,33 @@ public Output assertStdOutContains(String shouldInclude) { } public Output runInNewProcess(Class target, boolean useSpec, String... programArgs) throws IOException, InterruptedException { + return runInNewProcess(target, useSpec, List.of(), List.of(programArgs)); + } + + public Output runInNewProcess(Class target, boolean useSpec, List vmArgs, List programArgs) throws IOException, InterruptedException { assert !target.isArray(); List command = new ArrayList<>(List.of( "--enable-native-access=ALL-UNNAMED", "-Djava.library.path=" + System.getProperty("java.library.path"), - "-Djdk.internal.foreign.UpcallLinker.USE_SPEC=" + useSpec, - target.getName() + "-Djdk.internal.foreign.UpcallLinker.USE_SPEC=" + useSpec )); - command.addAll(Arrays.asList(programArgs)); + command.addAll(vmArgs); + command.add(target.getName()); + command.addAll(programArgs); Process process = ProcessTools.createTestJavaProcessBuilder(command).start(); - int result = process.waitFor(); - assertNotEquals(result, 0); + long timeOut = (long) (Utils.TIMEOUT_FACTOR * 1L); + boolean completed = process.waitFor(timeOut, TimeUnit.MINUTES); + assertTrue(completed, "Time out while waiting for process"); List outLines = linesFromStream(process.getInputStream()); outLines.forEach(System.out::println); List errLines = linesFromStream(process.getErrorStream()); errLines.forEach(System.err::println); - return new Output(outLines, errLines); + return new Output(process.exitValue(), outLines, errLines); } private static List linesFromStream(InputStream stream) throws IOException { diff --git a/test/jdk/java/foreign/critical/TestCriticalUpcall.java b/test/jdk/java/foreign/critical/TestCriticalUpcall.java index fe19720bf9335..c2f2d5572c183 100644 --- a/test/jdk/java/foreign/critical/TestCriticalUpcall.java +++ b/test/jdk/java/foreign/critical/TestCriticalUpcall.java @@ -43,7 +43,7 @@ public class TestCriticalUpcall extends UpcallTestHelper { @Test public void testUpcallFailure() throws IOException, InterruptedException { // test to see if we catch a trivial downcall doing an upcall - runInNewProcess(Runner.class, true).assertStdOutContains("wrong thread state for upcall"); + runInNewProcess(Runner.class, true).assertFailed().assertStdOutContains("wrong thread state for upcall"); } public static class Runner extends NativeTestHelper { diff --git a/test/jdk/java/foreign/passheapsegment/TestPassHeapSegment.java b/test/jdk/java/foreign/passheapsegment/TestPassHeapSegment.java index d78e1a293d7c5..5f97dbf288da5 100644 --- a/test/jdk/java/foreign/passheapsegment/TestPassHeapSegment.java +++ b/test/jdk/java/foreign/passheapsegment/TestPassHeapSegment.java @@ -53,7 +53,7 @@ public void testNoHeapArgs() throws Throwable { @Test(dataProvider = "specs") public void testNoHeapReturns(boolean spec) throws IOException, InterruptedException { - runInNewProcess(Runner.class, spec).assertStdErrContains("Heap segment not allowed"); + runInNewProcess(Runner.class, spec).assertFailed().assertStdErrContains("Heap segment not allowed"); } public static class Runner { From c4732c2baa4d6fd1775f81a90e74675c39811495 Mon Sep 17 00:00:00 2001 From: Matias Saavedra Silva Date: Thu, 30 Nov 2023 21:20:23 +0000 Subject: [PATCH 152/250] 8320530: has_resolved_ref_index flag not restored after resetting entry Reviewed-by: adinn, dholmes, iklam, coleenp --- .../share/oops/resolvedMethodEntry.cpp | 10 ++++- .../share/oops/resolvedMethodEntry.hpp | 40 ++++++++++++++----- 2 files changed, 39 insertions(+), 11 deletions(-) diff --git a/src/hotspot/share/oops/resolvedMethodEntry.cpp b/src/hotspot/share/oops/resolvedMethodEntry.cpp index 963c37de48ae4..7702dddd9cc7f 100644 --- a/src/hotspot/share/oops/resolvedMethodEntry.cpp +++ b/src/hotspot/share/oops/resolvedMethodEntry.cpp @@ -37,11 +37,11 @@ bool ResolvedMethodEntry::check_no_old_or_obsolete_entry() { } void ResolvedMethodEntry::reset_entry() { - if (has_resolved_ref_index()) { + if (has_resolved_references_index()) { u2 saved_resolved_references_index = _entry_specific._resolved_references_index; u2 saved_cpool_index = _cpool_index; memset(this, 0, sizeof(*this)); - _entry_specific._resolved_references_index = saved_resolved_references_index; + set_resolved_references_index(saved_resolved_references_index); _cpool_index = saved_cpool_index; } else { u2 saved_cpool_index = _cpool_index; @@ -74,7 +74,13 @@ void ResolvedMethodEntry::print_on(outputStream* st) const { st->print_cr(" - Resolved References Index: none"); } if (bytecode2() == Bytecodes::_invokevirtual) { +#ifdef ASSERT + if (_has_table_index) { + st->print_cr(" - Table Index: %d", table_index()); + } +#else st->print_cr(" - Table Index: %d", table_index()); +#endif } else { st->print_cr(" - Table Index: none"); } diff --git a/src/hotspot/share/oops/resolvedMethodEntry.hpp b/src/hotspot/share/oops/resolvedMethodEntry.hpp index 02c6241f6f98c..f5f7b8fbab511 100644 --- a/src/hotspot/share/oops/resolvedMethodEntry.hpp +++ b/src/hotspot/share/oops/resolvedMethodEntry.hpp @@ -77,6 +77,10 @@ class ResolvedMethodEntry { u1 _tos_state; // TOS state u1 _flags; // Flags: [00|has_resolved_ref_index|has_local_signature|has_appendix|forced_virtual|final|virtual_final] u1 _bytecode1, _bytecode2; // Resolved invoke codes +#ifdef ASSERT + bool _has_interface_klass; + bool _has_table_index; +#endif // Constructors public: @@ -87,7 +91,11 @@ class ResolvedMethodEntry { _tos_state(0), _flags(0), _bytecode1(0), - _bytecode2(0) { _entry_specific._interface_klass = nullptr; } + _bytecode2(0) { + _entry_specific._interface_klass = nullptr; + DEBUG_ONLY(_has_interface_klass = false;) + DEBUG_ONLY(_has_table_index = false;) + } ResolvedMethodEntry() : ResolvedMethodEntry(0) {} @@ -101,18 +109,29 @@ class ResolvedMethodEntry { has_resolved_ref_shift = 5 }; + // Flags + bool is_vfinal() const { return (_flags & (1 << is_vfinal_shift)) != 0; } + bool is_final() const { return (_flags & (1 << is_final_shift)) != 0; } + bool is_forced_virtual() const { return (_flags & (1 << is_forced_virtual_shift)) != 0; } + bool has_appendix() const { return (_flags & (1 << has_appendix_shift)) != 0; } + bool has_local_signature() const { return (_flags & (1 << has_local_signature_shift)) != 0; } + bool has_resolved_references_index() const { return (_flags & (1 << has_resolved_ref_shift)) != 0; } + // Getters Method* method() const { return Atomic::load_acquire(&_method); } InstanceKlass* interface_klass() const { assert(_bytecode1 == Bytecodes::_invokeinterface, "Only invokeinterface has a klass %d", _bytecode1); + assert(_has_interface_klass, "sanity"); return _entry_specific._interface_klass; } u2 resolved_references_index() const { // This index may be read before resolution completes + assert(has_resolved_references_index(), "sanity"); return _entry_specific._resolved_references_index; } u2 table_index() const { assert(_bytecode2 == Bytecodes::_invokevirtual, "Only invokevirtual has a vtable/itable index %d", _bytecode2); + assert(_has_table_index, "sanity"); return _entry_specific._table_index; } u2 constant_pool_index() const { return _cpool_index; } @@ -121,14 +140,6 @@ class ResolvedMethodEntry { u1 bytecode1() const { return Atomic::load_acquire(&_bytecode1); } u1 bytecode2() const { return Atomic::load_acquire(&_bytecode2); } - // Flags - bool is_vfinal() const { return (_flags & (1 << is_vfinal_shift)) != 0; } - bool is_final() const { return (_flags & (1 << is_final_shift)) != 0; } - bool is_forced_virtual() const { return (_flags & (1 << is_forced_virtual_shift)) != 0; } - bool has_appendix() const { return (_flags & (1 << has_appendix_shift)) != 0; } - bool has_local_signature() const { return (_flags & (1 << has_local_signature_shift)) != 0; } - bool has_resolved_ref_index() const { return (_flags & (1 << has_resolved_ref_shift)) != 0; } - bool is_resolved(Bytecodes::Code code) const { switch(code) { case Bytecodes::_invokeinterface: @@ -178,15 +189,26 @@ class ResolvedMethodEntry { } void set_klass(InstanceKlass* klass) { + assert(!has_resolved_references_index() && + !_has_table_index, + "Mutually exclusive fields %d %d %d", has_resolved_references_index(), _has_interface_klass, _has_table_index); + DEBUG_ONLY(_has_interface_klass = true;) _entry_specific._interface_klass = klass; } void set_resolved_references_index(u2 ref_index) { + assert(!_has_interface_klass && + !_has_table_index, + "Mutually exclusive fields %d %d %d", has_resolved_references_index(), _has_interface_klass, _has_table_index); set_flags(1 << has_resolved_ref_shift); _entry_specific._resolved_references_index = ref_index; } void set_table_index(u2 table_index) { + assert(!has_resolved_references_index() && + !_has_interface_klass, + "Mutually exclusive fields %d %d %d", has_resolved_references_index(), _has_interface_klass, _has_table_index); + DEBUG_ONLY(_has_table_index = true;) _entry_specific._table_index = table_index; } From 76fea807071eee80a1e00aae7bc4784a6d35bf4b Mon Sep 17 00:00:00 2001 From: Phil Race Date: Thu, 30 Nov 2023 22:59:37 +0000 Subject: [PATCH 153/250] 8320608: Many jtreg printing tests are missing the @printer keyword Reviewed-by: aivanov, serb --- test/jdk/TEST.ROOT | 40 +++++++-- .../PaintSetEnabledDeadlock.java | 0 .../ConstrainedPrintingTest.java | 1 + .../java/awt/PrintJob/EdgeTest/EdgeTest.java | 2 +- test/jdk/java/awt/PrintJob/HighResTest.java | 2 +- .../java/awt/PrintJob/JobAttrUpdateTest.java | 1 + .../awt/PrintJob/MultipleEnd/MultipleEnd.java | 2 +- .../PageSetupDlgBlockingTest.java | 2 +- .../PrintJob/PrintArcTest/PrintArcTest.java | 3 +- .../PrintCheckboxManualTest.java | 2 +- .../QuoteAndBackslashTest.java | 3 +- .../RoundedRectTest/RoundedRectTest.java | 3 +- .../awt/PrintJob/SaveDialogTitleTest.java | 1 + .../PrintJob/Security/SecurityDialogTest.java | 2 +- .../TestPrintJobFrameAssociation.java | 1 + .../jdk/java/awt/PrintJob/Text/stringwidth.sh | 1 + .../awt/print/Dialog/DestinationTest.java | 1 + .../java/awt/print/Dialog/DialogCopies.java | 1 + .../java/awt/print/Dialog/DialogOrient.java | 1 + .../awt/print/Dialog/DialogOwnerTest.java | 1 + .../jdk/java/awt/print/Dialog/DialogType.java | 1 + .../awt/print/Dialog/MediaInPrintable.java | 1 + .../java/awt/print/Dialog/PaperSizeError.java | 1 + .../java/awt/print/Dialog/PrintApplet.java | 1 + .../java/awt/print/Dialog/PrintDialog.java | 1 + .../awt/print/Dialog/PrintDlgPageable.java | 1 + .../RestoreActiveWindowTest.java | 1 + .../print/Headless/HeadlessPrinterJob.java | 1 + .../PrintFontWithMissedFontFamilyTest.java | 1 + .../awt/print/PageFormat/CustomPaper.java | 2 +- .../print/PageFormat/ImageableAreaTest.java | 2 +- .../java/awt/print/PageFormat/NullPaper.java | 7 -- .../jdk/java/awt/print/PageFormat/Orient.java | 2 +- .../PageFormat/PageFormatFromAttributes.java | 1 + .../awt/print/PageFormat/PageSetupDialog.java | 2 +- .../PageFormat/PrintContentCutOffTest.java | 1 + .../PageFormat/ReverseLandscapeTest.java | 2 +- .../java/awt/print/PageFormat/SetOrient.html | 1 + .../print/PageFormat/SmallPaperPrinting.java | 83 +++++++++++-------- .../awt/print/PageFormat/ValidateCustom.java | 2 +- .../WrongPaperForBookPrintingTest.java | 2 +- .../PageFormat/WrongPaperPrintingTest.java | 1 + .../PathPrecisionScaleFactorShapeTest.java | 1 + .../PathPrecisionScaleFactorTextTest.java | 1 + .../java/awt/print/PrinterJob/BannerTest.java | 1 + .../PrinterJob/Cancel/PrinterJobCancel.java | 2 +- .../PrinterJob/Collate2DPrintingTest.java | 1 + .../print/PrinterJob/CompareImageable.java | 1 + .../PrinterJob/CustomFont/CustomFont.java | 2 +- .../CustomPrintService/PrintDialog.java | 1 - .../SetPrintServiceTest.java | 1 - .../awt/print/PrinterJob/DeviceScale.java | 2 +- .../awt/print/PrinterJob/DlgAttrsBug.java | 1 + .../java/awt/print/PrinterJob/DrawImage.java | 2 +- .../print/PrinterJob/DrawStringMethods.java | 1 + .../java/awt/print/PrinterJob/EmptyFill.java | 6 +- .../awt/print/PrinterJob/GetMediasTest.java | 1 + .../PrinterJob/ImagePrinting/ImageTypes.java | 2 +- .../ImagePrinting/PrintARGBImage.java | 1 + .../awt/print/PrinterJob/InitToBlack.java | 1 + .../awt/print/PrinterJob/InvalidPage.java | 2 +- .../PrinterJob/JobName/PrinterJobName.java | 2 +- .../PrinterJob/LandscapeStackOverflow.java | 2 +- .../awt/print/PrinterJob/Legal/PrintTest.java | 1 + .../LinearGradientPrintingTest.java | 1 + .../PrinterJob/MultiMonPrintDlgTest.java | 1 + .../MultiThread/MultiThreadTest.java | 1 + .../java/awt/print/PrinterJob/NumCopies.java | 2 +- .../PrinterJob/PageDialogMarginTest.java | 1 + .../PageDialogMarginValidation.java | 1 + .../awt/print/PrinterJob/PageDialogTest.java | 1 + .../java/awt/print/PrinterJob/PageDlgApp.java | 1 + .../print/PrinterJob/PageDlgPrnButton.java | 1 + .../PrinterJob/PageDlgStackOverflowTest.java | 1 + .../print/PrinterJob/PageFormatChange.java | 1 + .../java/awt/print/PrinterJob/PageRanges.java | 1 + .../PrinterJob/PolylinePrintingTest.java | 1 + .../awt/print/PrinterJob/PrintAWTImage.java | 1 + .../awt/print/PrinterJob/PrintAllFonts.java | 4 +- .../PrinterJob/PrintAttributeUpdateTest.java | 1 + .../awt/print/PrinterJob/PrintBadImage.java | 2 +- .../print/PrinterJob/PrintCompoundString.java | 2 +- .../awt/print/PrinterJob/PrintDialog.java | 2 +- .../print/PrinterJob/PrintDialogCancel.java | 2 +- .../print/PrinterJob/PrintDlgPageable.java | 1 + .../PrintDlgSelectionAttribTest.java | 1 + .../awt/print/PrinterJob/PrintFontStyle.java | 7 ++ .../PrinterJob/PrintGlyphVectorTest.java | 1 + .../java/awt/print/PrinterJob/PrintImage.java | 2 +- .../print/PrinterJob/PrintLatinCJKTest.java | 1 + .../awt/print/PrinterJob/PrintNullString.java | 2 +- .../print/PrinterJob/PrintParenString.java | 2 +- .../print/PrinterJob/PrintRotatedText.java | 2 +- .../java/awt/print/PrinterJob/PrintTest.java | 1 + .../print/PrinterJob/PrintTestLexmarkIQ.java | 1 + .../awt/print/PrinterJob/PrintTextLayout.java | 2 +- .../awt/print/PrinterJob/PrintTextTest.java | 1 + .../print/PrinterJob/PrintTranslatedFont.java | 2 +- .../print/PrinterJob/PrintVolatileImage.java | 2 +- .../PrinterDialogsModalityTest.html | 2 +- .../PrinterDialogsModalityTest.java | 2 +- .../PrinterJob/PrinterJobDialogBugDemo.java | 1 + .../RadialGradientPrintingTest.java | 1 + .../awt/print/PrinterJob/RemoveListener.java | 3 +- .../awt/print/PrinterJob/SameService.java | 1 + .../PrinterJob/ScaledText/ScaledText.java | 2 +- .../print/PrinterJob/SecurityDialogTest.java | 1 + .../awt/print/PrinterJob/SetCopies/Test.java | 1 + .../awt/print/PrinterJob/SwingUIText.java | 1 + .../TestCheckSystemDefaultBannerOption.java | 1 + .../PrinterJob/TestMediaTraySelection.java | 1 + .../TestPageDlgFrameAssociation.java | 1 + .../TestPrintDlgFrameAssociation.java | 1 + .../PrinterJob/TexturePaintPrintingTest.java | 1 + .../java/awt/print/PrinterJob/ThinLines.java | 2 +- .../PrinterJob/ValidatePage/ValidatePage.java | 2 +- .../java/awt/print/PrinterJob/XparColor.java | 1 + .../print/PrinterJob/raster/RasterTest.java | 2 +- .../RemotePrinterStatusRefresh.java | 1 + .../java/awt/print/bug8023392/bug8023392.html | 2 +- .../java/awt/print/bug8023392/bug8023392.java | 2 +- test/jdk/javax/print/DialogMargins.java | 2 +- test/jdk/javax/print/LookupServices.java | 1 + .../PrintServiceLookup/GetPrintServices.java | 1 + .../print/PrintSubInputStream/Example.java | 2 +- .../jdk/javax/print/ServiceUIPropBtnTest.java | 1 + test/jdk/javax/print/TextFlavorTest.java | 1 + test/jdk/javax/print/attribute/Chroma.java | 2 +- .../javax/print/attribute/CollateAttr.java | 1 + .../print/attribute/PSCopiesFlavorTest.java | 1 + .../javax/print/attribute/PrintResAttr.java | 1 + .../print/attribute/ServiceDialogTest.java | 1 + .../attribute/ServiceDialogValidateTest.java | 1 + .../attribute/ServiceDlgPageRangeTest.java | 1 + .../attribute/ServiceDlgSheetCollateTest.java | 1 + .../print/attribute/Services_getDocFl.java | 1 + .../print/attribute/SidesAttributeTest.java | 1 + .../attribute/TestUnsupportedResolution.java | 1 + .../autosense/PrintAutoSenseData.java | 1 + 139 files changed, 224 insertions(+), 107 deletions(-) rename test/jdk/java/awt/{print => Paint}/PaintSetEnabledDeadlock/PaintSetEnabledDeadlock.java (100%) diff --git a/test/jdk/TEST.ROOT b/test/jdk/TEST.ROOT index a8794af0e3f47..25ef8250e4d45 100644 --- a/test/jdk/TEST.ROOT +++ b/test/jdk/TEST.ROOT @@ -9,17 +9,41 @@ # should be taken to handle test failures of intermittent or # randomness tests. # -# A "headful" test requires a graphical environment to meaningfully -# run. Tests that are not headful are "headless". -# A test flagged with key sound needs audio devices on the system, this -# may be accompanied by the headful keyword since audio device access +# A test flagged with cgroups uses cgroups. +# +# Notes on "client" keywords : headful sound printer multimon +# =========================================================== +# +# These keywords are there to help with test selection so that +# tests that need a particular resource can be selected to run on a system +# with that resource. Conversely "!somekeyword" can be used to exclude tests +# on a system without such a resource. +# Caution: If you are always excluding tests using any of these keywords then you +# are likely missing many important tests. +# +# "headful". A "headful" test requires a graphical environment to meaningfully run. +# This does not have to mean a physical host, since a VM can be configured as headful. +# Tests that are not headful are "headless". +# Note: all manual tests are assumed to be headful and do not need the keyword. +# +# "printer". Not all tests of printing APIs require a printer, but many do. +# So a "printer" test requires a printer to be installed to do anything meaningful. +# Tests may not fail if there is none, instead just silently return. +# But they also may legitimately throw an Exception depending on the test. +# Also printer tests are not necessarily headful, but some are, and some are automated. +# +# "sound". Similarly, not all sound tests require audio devices, but many do. +# A test flagged with key "sound" needs audio devices on the system. +# Also they are not necessarily "headful", since they don't require a display etc. +# But sometimes they may be accompanied by the headful keyword, since sound # is often linked to access to desktop resources and headful systems are # also more likely to have audio devices (ie meaning both input and output) -# A test flagged with key "printer" requires a printer to succeed, else -# throws a PrinterException or the like. -# A test flagged with cgroups uses cgroups. +# +# "multimon" should be used in conjunction with headful and is used to identify +# tests which require two displays connected. -keys=2d dnd headful sound i18n intermittent printer randomness jfr cgroups +keys=headful sound printer multimon \ + i18n intermittent randomness jfr cgroups # Tests that must run in othervm mode othervm.dirs=java/awt java/beans javax/accessibility javax/imageio javax/sound javax/swing javax/print \ diff --git a/test/jdk/java/awt/print/PaintSetEnabledDeadlock/PaintSetEnabledDeadlock.java b/test/jdk/java/awt/Paint/PaintSetEnabledDeadlock/PaintSetEnabledDeadlock.java similarity index 100% rename from test/jdk/java/awt/print/PaintSetEnabledDeadlock/PaintSetEnabledDeadlock.java rename to test/jdk/java/awt/Paint/PaintSetEnabledDeadlock/PaintSetEnabledDeadlock.java diff --git a/test/jdk/java/awt/PrintJob/ConstrainedPrintingTest/ConstrainedPrintingTest.java b/test/jdk/java/awt/PrintJob/ConstrainedPrintingTest/ConstrainedPrintingTest.java index 1532a01ca4fc3..f5c349ac9a55a 100644 --- a/test/jdk/java/awt/PrintJob/ConstrainedPrintingTest/ConstrainedPrintingTest.java +++ b/test/jdk/java/awt/PrintJob/ConstrainedPrintingTest/ConstrainedPrintingTest.java @@ -24,6 +24,7 @@ /* @test @bug 4116029 4300383 + @key printer @summary verify that child components can draw only inside their visible bounds @library /test/lib diff --git a/test/jdk/java/awt/PrintJob/EdgeTest/EdgeTest.java b/test/jdk/java/awt/PrintJob/EdgeTest/EdgeTest.java index f7bf5e72a60a5..58f84b43fb29f 100644 --- a/test/jdk/java/awt/PrintJob/EdgeTest/EdgeTest.java +++ b/test/jdk/java/awt/PrintJob/EdgeTest/EdgeTest.java @@ -24,9 +24,9 @@ /** * @test * @bug 4092755 + * @key printer * @summary Verifies that (0, 0) is the upper-left corner of the page, not * the upper-left corner adjusted for the margins. - * @author dpm * @run main/manual EdgeTest */ diff --git a/test/jdk/java/awt/PrintJob/HighResTest.java b/test/jdk/java/awt/PrintJob/HighResTest.java index e802214fdaf99..dbf7d4a2ce6b6 100644 --- a/test/jdk/java/awt/PrintJob/HighResTest.java +++ b/test/jdk/java/awt/PrintJob/HighResTest.java @@ -26,7 +26,7 @@ @test @bug 4227128 8066139 @summary Test printing at resolutions > 72dpi - @author dpm: area=awt.print + @key printer @run main/manual HighResTest */ import java.awt.Button; diff --git a/test/jdk/java/awt/PrintJob/JobAttrUpdateTest.java b/test/jdk/java/awt/PrintJob/JobAttrUpdateTest.java index 186b9a6d8bac0..cbc8d6a7ae8dd 100644 --- a/test/jdk/java/awt/PrintJob/JobAttrUpdateTest.java +++ b/test/jdk/java/awt/PrintJob/JobAttrUpdateTest.java @@ -23,6 +23,7 @@ /* * @test * @bug 6357905 + * @key printer * @summary JobAttributes.getFromPage() and getToPage() always returns 1 * @run main/manual JobAttrUpdateTest */ diff --git a/test/jdk/java/awt/PrintJob/MultipleEnd/MultipleEnd.java b/test/jdk/java/awt/PrintJob/MultipleEnd/MultipleEnd.java index b115e8d4a91db..88b6a4720d93f 100644 --- a/test/jdk/java/awt/PrintJob/MultipleEnd/MultipleEnd.java +++ b/test/jdk/java/awt/PrintJob/MultipleEnd/MultipleEnd.java @@ -23,7 +23,7 @@ /** * @test - * @key headful + * @key headful printer * @bug 4112758 * @summary Checks that a second invocation of PrintJob.end() does not cause * an exception or segmentation violation. diff --git a/test/jdk/java/awt/PrintJob/PageSetupDlgBlockingTest/PageSetupDlgBlockingTest.java b/test/jdk/java/awt/PrintJob/PageSetupDlgBlockingTest/PageSetupDlgBlockingTest.java index 805a2fa5c2cae..9fbf48f3eb467 100644 --- a/test/jdk/java/awt/PrintJob/PageSetupDlgBlockingTest/PageSetupDlgBlockingTest.java +++ b/test/jdk/java/awt/PrintJob/PageSetupDlgBlockingTest/PageSetupDlgBlockingTest.java @@ -25,7 +25,7 @@ @test @bug 4507585 @summary Native modal dialog shouldn't block event dispatching when called on EventDispatchThread. - @author tav@sparc.spb.su: area=awt.PrintJob + @key printer @run main/manual=yesno PageSetupDlgBlockingTest */ diff --git a/test/jdk/java/awt/PrintJob/PrintArcTest/PrintArcTest.java b/test/jdk/java/awt/PrintJob/PrintArcTest/PrintArcTest.java index 7e9023b1afcf0..f04ce62c1a615 100644 --- a/test/jdk/java/awt/PrintJob/PrintArcTest/PrintArcTest.java +++ b/test/jdk/java/awt/PrintJob/PrintArcTest/PrintArcTest.java @@ -23,10 +23,9 @@ /* * @test - * @key headful + * @key headful printer * @bug 4105609 * @summary Test printing of drawArc preceded by drawString - * @author robi.khan */ import java.awt.*; diff --git a/test/jdk/java/awt/PrintJob/PrintCheckboxTest/PrintCheckboxManualTest.java b/test/jdk/java/awt/PrintJob/PrintCheckboxTest/PrintCheckboxManualTest.java index 33ef83bfddd85..4fd3ee8ef1691 100644 --- a/test/jdk/java/awt/PrintJob/PrintCheckboxTest/PrintCheckboxManualTest.java +++ b/test/jdk/java/awt/PrintJob/PrintCheckboxTest/PrintCheckboxManualTest.java @@ -26,7 +26,7 @@ @bug 5045936 5055171 @summary Tests that there is no ClassCastException thrown in printing checkbox and scrollbar with XAWT - @author art@sparc.spb.su + @key printer @run applet/manual=yesno PrintCheckboxManualTest.html */ diff --git a/test/jdk/java/awt/PrintJob/QuoteAndBackslashTest/QuoteAndBackslashTest.java b/test/jdk/java/awt/PrintJob/QuoteAndBackslashTest/QuoteAndBackslashTest.java index dcc720de23e91..c84671b6dc255 100644 --- a/test/jdk/java/awt/PrintJob/QuoteAndBackslashTest/QuoteAndBackslashTest.java +++ b/test/jdk/java/awt/PrintJob/QuoteAndBackslashTest/QuoteAndBackslashTest.java @@ -23,11 +23,10 @@ /** * @test - * @key headful + * @key headful printer * @bug 4040668 * @summary Checks that banner titles which contain double quotation marks * or backslashes still print correctly. - * @author dpm */ import java.awt.*; diff --git a/test/jdk/java/awt/PrintJob/RoundedRectTest/RoundedRectTest.java b/test/jdk/java/awt/PrintJob/RoundedRectTest/RoundedRectTest.java index a8af7b585f113..650203889c7e9 100644 --- a/test/jdk/java/awt/PrintJob/RoundedRectTest/RoundedRectTest.java +++ b/test/jdk/java/awt/PrintJob/RoundedRectTest/RoundedRectTest.java @@ -23,10 +23,9 @@ /** * @test - * @key headful + * @key headful printer * @bug 4061440 * @summary Checks that rounded rectangles print correctly. - * @author dpm */ import java.awt.*; diff --git a/test/jdk/java/awt/PrintJob/SaveDialogTitleTest.java b/test/jdk/java/awt/PrintJob/SaveDialogTitleTest.java index 4e502290f94bc..b0d7c9cd238a5 100644 --- a/test/jdk/java/awt/PrintJob/SaveDialogTitleTest.java +++ b/test/jdk/java/awt/PrintJob/SaveDialogTitleTest.java @@ -24,6 +24,7 @@ /* * @test * @bug 4851363 8025988 8025990 + * @key printer * @summary Tests the save to file dialog has a title. * @run main/manual=yesno/othervm SaveDialogTitleTest */ diff --git a/test/jdk/java/awt/PrintJob/Security/SecurityDialogTest.java b/test/jdk/java/awt/PrintJob/Security/SecurityDialogTest.java index 3bda65e0a714c..b84afc6eb9b96 100644 --- a/test/jdk/java/awt/PrintJob/Security/SecurityDialogTest.java +++ b/test/jdk/java/awt/PrintJob/Security/SecurityDialogTest.java @@ -23,7 +23,7 @@ /** * @test - * @key headful + * @key headful printer * @bug 6195901 6195923 6195928 6195933 6491273 6888734 * @summary No SecurityException should be thrown when printing to a file using the given policy. diff --git a/test/jdk/java/awt/PrintJob/TestPrintJobFrameAssociation.java b/test/jdk/java/awt/PrintJob/TestPrintJobFrameAssociation.java index 1dd861cf325df..2a58cb724d74d 100644 --- a/test/jdk/java/awt/PrintJob/TestPrintJobFrameAssociation.java +++ b/test/jdk/java/awt/PrintJob/TestPrintJobFrameAssociation.java @@ -23,6 +23,7 @@ /* * @test * @bug 8154218 + * @key printer * @summary Verifies if owner Frame is associated with print dialog * @run main/manual TestPrintJobFrameAssociation */ diff --git a/test/jdk/java/awt/PrintJob/Text/stringwidth.sh b/test/jdk/java/awt/PrintJob/Text/stringwidth.sh index 32bce9e728bc8..fea11e5ba5f70 100644 --- a/test/jdk/java/awt/PrintJob/Text/stringwidth.sh +++ b/test/jdk/java/awt/PrintJob/Text/stringwidth.sh @@ -23,6 +23,7 @@ # # @test # @bug 4692562 +# @key printer # @summary Requirement: Windows with printer installed. It should print with text "Hello World". # @compile StringWidth.java # @run shell/manual stringwidth.sh diff --git a/test/jdk/java/awt/print/Dialog/DestinationTest.java b/test/jdk/java/awt/print/Dialog/DestinationTest.java index 8bb9403b566b4..933fba3042b07 100644 --- a/test/jdk/java/awt/print/Dialog/DestinationTest.java +++ b/test/jdk/java/awt/print/Dialog/DestinationTest.java @@ -24,6 +24,7 @@ /** * @test * @bug 4846344 4851365 4851321 4851316 4863656 5046198 6293139 + * @key printer * @summary Confirm that cancelling the dialog will not prompt for file. * @run main/manual DestinationTest */ diff --git a/test/jdk/java/awt/print/Dialog/DialogCopies.java b/test/jdk/java/awt/print/Dialog/DialogCopies.java index 39d15461de8d1..1fb874a9d57da 100644 --- a/test/jdk/java/awt/print/Dialog/DialogCopies.java +++ b/test/jdk/java/awt/print/Dialog/DialogCopies.java @@ -24,6 +24,7 @@ /* * @test * @bug 6357858 + * @key printer * @summary Job must reports the number of copies set in the dialog. * @run main/manual DialogCopies */ diff --git a/test/jdk/java/awt/print/Dialog/DialogOrient.java b/test/jdk/java/awt/print/Dialog/DialogOrient.java index c8009d742d737..6650ced64f46e 100644 --- a/test/jdk/java/awt/print/Dialog/DialogOrient.java +++ b/test/jdk/java/awt/print/Dialog/DialogOrient.java @@ -24,6 +24,7 @@ /* @test @bug 6594374 + @key printer @summary Confirm that the orientation is as specified. @run main/manual DialogOrient */ diff --git a/test/jdk/java/awt/print/Dialog/DialogOwnerTest.java b/test/jdk/java/awt/print/Dialog/DialogOwnerTest.java index b4fbc7c3d37f8..dc4064466caca 100644 --- a/test/jdk/java/awt/print/Dialog/DialogOwnerTest.java +++ b/test/jdk/java/awt/print/Dialog/DialogOwnerTest.java @@ -23,6 +23,7 @@ /* @test @bug 8203796 + @key printer @run main/manual DialogOwnerTest @summary Test DialogOwner API */ diff --git a/test/jdk/java/awt/print/Dialog/DialogType.java b/test/jdk/java/awt/print/Dialog/DialogType.java index 00b07930cf07c..472b89e44f213 100644 --- a/test/jdk/java/awt/print/Dialog/DialogType.java +++ b/test/jdk/java/awt/print/Dialog/DialogType.java @@ -24,6 +24,7 @@ /** * @test * @bug 6568874 + * @key printer * @summary Verify the native dialog works with attribute sets. * @run main/manual=yesno DialogType */ diff --git a/test/jdk/java/awt/print/Dialog/MediaInPrintable.java b/test/jdk/java/awt/print/Dialog/MediaInPrintable.java index a800f69c74da2..cb74cb140f55c 100644 --- a/test/jdk/java/awt/print/Dialog/MediaInPrintable.java +++ b/test/jdk/java/awt/print/Dialog/MediaInPrintable.java @@ -24,6 +24,7 @@ /** * @test * @bug 4869575 6361766 + * @key printer * @summary Setting orientation in the page format does not have any effect on the printout. To test 6361766, the application must exit. * @run main/manual MediaInPrintable */ diff --git a/test/jdk/java/awt/print/Dialog/PaperSizeError.java b/test/jdk/java/awt/print/Dialog/PaperSizeError.java index 970c7df2fcc23..fea7bb85af873 100644 --- a/test/jdk/java/awt/print/Dialog/PaperSizeError.java +++ b/test/jdk/java/awt/print/Dialog/PaperSizeError.java @@ -24,6 +24,7 @@ /** * @test * @bug 6360339 + * @key printer * @summary Test for fp error in paper size calculations. * @run main/manual PaperSizeError */ diff --git a/test/jdk/java/awt/print/Dialog/PrintApplet.java b/test/jdk/java/awt/print/Dialog/PrintApplet.java index ecd9920571c6a..c8a3cd955feed 100644 --- a/test/jdk/java/awt/print/Dialog/PrintApplet.java +++ b/test/jdk/java/awt/print/Dialog/PrintApplet.java @@ -24,6 +24,7 @@ /* @test @bug 5024549 + @key printer @summary Pass if dialogs are modal. @run applet/manual PrintApplet.html */ diff --git a/test/jdk/java/awt/print/Dialog/PrintDialog.java b/test/jdk/java/awt/print/Dialog/PrintDialog.java index 870db01a98574..c81ebfbc45246 100644 --- a/test/jdk/java/awt/print/Dialog/PrintDialog.java +++ b/test/jdk/java/awt/print/Dialog/PrintDialog.java @@ -24,6 +24,7 @@ /* @test @bug 6342748 + @key printer @summary Pass if dialogs display correctly @run main/manual PrintDialog */ diff --git a/test/jdk/java/awt/print/Dialog/PrintDlgPageable.java b/test/jdk/java/awt/print/Dialog/PrintDlgPageable.java index d447874f72aeb..eadd3cf9cb6bc 100644 --- a/test/jdk/java/awt/print/Dialog/PrintDlgPageable.java +++ b/test/jdk/java/awt/print/Dialog/PrintDlgPageable.java @@ -24,6 +24,7 @@ /** * @test * @bug 4869502 4869539 + * @key printer * @summary Confirm that ToPage is populated for argument =2. Range is disabled for argument = 0. * @run main/manual PrintDlgPageable */ diff --git a/test/jdk/java/awt/print/Dialog/RestoreActiveWindowTest/RestoreActiveWindowTest.java b/test/jdk/java/awt/print/Dialog/RestoreActiveWindowTest/RestoreActiveWindowTest.java index 8d29dbb58490f..2d2e00f2ed7a8 100644 --- a/test/jdk/java/awt/print/Dialog/RestoreActiveWindowTest/RestoreActiveWindowTest.java +++ b/test/jdk/java/awt/print/Dialog/RestoreActiveWindowTest/RestoreActiveWindowTest.java @@ -24,6 +24,7 @@ /* * @test * @bug 6365992 6379599 8137137 + * @key printer * @summary REG: Showing and disposing a native print dialog makes the main * frame inactive, Win32 * @run main/manual RestoreActiveWindowTest diff --git a/test/jdk/java/awt/print/Headless/HeadlessPrinterJob.java b/test/jdk/java/awt/print/Headless/HeadlessPrinterJob.java index ff7a22ec8a3e2..143c898e32ace 100644 --- a/test/jdk/java/awt/print/Headless/HeadlessPrinterJob.java +++ b/test/jdk/java/awt/print/Headless/HeadlessPrinterJob.java @@ -31,6 +31,7 @@ /* * @test + * @key printer * @summary Check that PrinterJob constructor and methods do not throw unexpected * exceptions in headless mode * @run main/othervm -Djava.awt.headless=true HeadlessPrinterJob diff --git a/test/jdk/java/awt/print/MissedFontFamilyName/PrintFontWithMissedFontFamilyTest.java b/test/jdk/java/awt/print/MissedFontFamilyName/PrintFontWithMissedFontFamilyTest.java index a6808282f37aa..af655f2d69e84 100644 --- a/test/jdk/java/awt/print/MissedFontFamilyName/PrintFontWithMissedFontFamilyTest.java +++ b/test/jdk/java/awt/print/MissedFontFamilyName/PrintFontWithMissedFontFamilyTest.java @@ -25,6 +25,7 @@ /** * @test * @bug 8265761 + * @key printer * @requires (os.family == "windows") * @summary Font with missed font family name is not properly printed on Windows * @run main/othervm/manual PrintFontWithMissedFontFamilyTest diff --git a/test/jdk/java/awt/print/PageFormat/CustomPaper.java b/test/jdk/java/awt/print/PageFormat/CustomPaper.java index 3b8e83d5c1b22..1976a20c01f12 100644 --- a/test/jdk/java/awt/print/PageFormat/CustomPaper.java +++ b/test/jdk/java/awt/print/PageFormat/CustomPaper.java @@ -25,7 +25,7 @@ * @test * @bug 4355514 * @bug 4385157 - * @author Jennifer Godinez + * @key printer * @summary Prints a rectangle to show the imageable area of a * 12in x 14in custom paper size. * @run main/manual CustomPaper diff --git a/test/jdk/java/awt/print/PageFormat/ImageableAreaTest.java b/test/jdk/java/awt/print/PageFormat/ImageableAreaTest.java index 7bf37415e6e7d..07f458704a53a 100644 --- a/test/jdk/java/awt/print/PageFormat/ImageableAreaTest.java +++ b/test/jdk/java/awt/print/PageFormat/ImageableAreaTest.java @@ -47,7 +47,7 @@ * @test * @bug 8044444 8081491 * @summary The output's 'Page-n' footer does not show completely - * @author Alexandr Scherbatiy + * @key printer * @run main/manual ImageableAreaTest */ public class ImageableAreaTest { diff --git a/test/jdk/java/awt/print/PageFormat/NullPaper.java b/test/jdk/java/awt/print/PageFormat/NullPaper.java index 0bae3aa95921d..1a9000b61350c 100644 --- a/test/jdk/java/awt/print/PageFormat/NullPaper.java +++ b/test/jdk/java/awt/print/PageFormat/NullPaper.java @@ -23,13 +23,11 @@ /* @test - @key headful @bug 4199506 @summary java.awt.print.PageFormat.setpaper(Paper paper) assertion test fails by not throwing NullPointerException when a null paper instance is passed as argument and this is specified in the doc. - @author rbi: area=PageFormat @run main NullPaper */ @@ -46,9 +44,6 @@ */ -import java.awt.*; -import java.awt.event.*; -import java.awt.geom.*; import java.awt.print.*; // This test is a "main" test as applets would need Runtime permission @@ -154,7 +149,6 @@ public static synchronized void setTimeoutTo( int seconds ) public static synchronized void pass() { System.out.println( "The test passed." ); - System.out.println( "The test is over, hit Ctl-C to stop Java VM" ); //first check if this is executing in main thread if ( mainThread == Thread.currentThread() ) { @@ -180,7 +174,6 @@ public static synchronized void fail() public static synchronized void fail( String whyFailed ) { System.out.println( "The test failed: " + whyFailed ); - System.out.println( "The test is over, hit Ctl-C to stop Java VM" ); //check if this called from main thread if ( mainThread == Thread.currentThread() ) { diff --git a/test/jdk/java/awt/print/PageFormat/Orient.java b/test/jdk/java/awt/print/PageFormat/Orient.java index ac3bb1ed84054..ea6facaf57042 100644 --- a/test/jdk/java/awt/print/PageFormat/Orient.java +++ b/test/jdk/java/awt/print/PageFormat/Orient.java @@ -27,7 +27,7 @@ @summary Confirm that the you get three pages of output, one each in portrait, landscape, and reverse landscape orientations. - @author rbi: area=PageFormat + @key printer @run main/manual Orient */ diff --git a/test/jdk/java/awt/print/PageFormat/PageFormatFromAttributes.java b/test/jdk/java/awt/print/PageFormat/PageFormatFromAttributes.java index e552db507de93..b5ac83969f2b3 100644 --- a/test/jdk/java/awt/print/PageFormat/PageFormatFromAttributes.java +++ b/test/jdk/java/awt/print/PageFormat/PageFormatFromAttributes.java @@ -25,6 +25,7 @@ * @test * @bug 4500750 6848799 8028584 * @summary Tests creating page format from attributes + * @key printer * @run main PageFormatFromAttributes */ import java.awt.print.*; diff --git a/test/jdk/java/awt/print/PageFormat/PageSetupDialog.java b/test/jdk/java/awt/print/PageFormat/PageSetupDialog.java index 98da138ac2239..5284793ef0153 100644 --- a/test/jdk/java/awt/print/PageFormat/PageSetupDialog.java +++ b/test/jdk/java/awt/print/PageFormat/PageSetupDialog.java @@ -28,7 +28,7 @@ * @bug 6358747 * @bug 6574633 * @summary Page setup dialog settings - * @author prr + * @key printer * @run main/manual PageSetupDialog */ diff --git a/test/jdk/java/awt/print/PageFormat/PrintContentCutOffTest.java b/test/jdk/java/awt/print/PageFormat/PrintContentCutOffTest.java index d2362cdc81536..df07741c9076d 100644 --- a/test/jdk/java/awt/print/PageFormat/PrintContentCutOffTest.java +++ b/test/jdk/java/awt/print/PageFormat/PrintContentCutOffTest.java @@ -24,6 +24,7 @@ /** * @test + * @key printer * @bug 8295737 * @summary macOS: Print content cut off when width > height with portrait orientation * @run main/othervm/manual PrintContentCutOffTest diff --git a/test/jdk/java/awt/print/PageFormat/ReverseLandscapeTest.java b/test/jdk/java/awt/print/PageFormat/ReverseLandscapeTest.java index 2c6544f4af178..850123aa9a8af 100644 --- a/test/jdk/java/awt/print/PageFormat/ReverseLandscapeTest.java +++ b/test/jdk/java/awt/print/PageFormat/ReverseLandscapeTest.java @@ -23,7 +23,7 @@ /* * @test - * @key headful + * @key headful printer * @bug 4254954 * @summary PageFormat would fail on solaris when setting orientation */ diff --git a/test/jdk/java/awt/print/PageFormat/SetOrient.html b/test/jdk/java/awt/print/PageFormat/SetOrient.html index e500872ff0548..422d64e4610f1 100644 --- a/test/jdk/java/awt/print/PageFormat/SetOrient.html +++ b/test/jdk/java/awt/print/PageFormat/SetOrient.html @@ -27,6 +27,7 @@ @bug 4186119 @summary Confirm that the clip and transform of the Graphics2D is affected by the landscape orientation of the PageFormat. + @key printer @run applet/manual=yesno SetOrient.html --> diff --git a/test/jdk/java/awt/print/PageFormat/SmallPaperPrinting.java b/test/jdk/java/awt/print/PageFormat/SmallPaperPrinting.java index e03e9f283b270..e936cd047de7b 100644 --- a/test/jdk/java/awt/print/PageFormat/SmallPaperPrinting.java +++ b/test/jdk/java/awt/print/PageFormat/SmallPaperPrinting.java @@ -21,43 +21,56 @@ * questions. */ - import java.awt.*; - import java.awt.print.*; +import java.awt.Graphics; +import java.awt.print.PageFormat; +import java.awt.print.Paper; +import java.awt.print.Printable; +import java.awt.print.PrinterException; +import java.awt.print.PrinterJob; - public class SmallPaperPrinting - { - public static void main(String args[]) - { - System.out.println("----------------- Instructions --------------------"); - System.out.println("Arguments: (none) - paper width=1, height=.0001"); - System.out.println(" 1 - paper width=.0001, height=1"); - System.out.println(" 2 - paper width=-1, height=1"); - System.out.println("A passing test should catch a PrinterException"); - System.out.println("and should display \"Print error: (exception msg)\"."); - System.out.println("---------------------------------------------------\n"); - PrinterJob job = PrinterJob.getPrinterJob(); - PageFormat format = job.defaultPage(); - Paper paper = format.getPaper(); +/* + * @test + * @key printer + * @run main/othervm SmallPaperPrinting + * @run main/othervm SmallPaperPrinting 1 + * @run main/othervm SmallPaperPrinting 2 + */ + +public class SmallPaperPrinting +{ + public static void main(String args[]) { + System.out.println("----------------- Instructions --------------------"); + System.out.println("Arguments: (none) - paper width=1, height=.0001"); + System.out.println(" 1 - paper width=.0001, height=1"); + System.out.println(" 2 - paper width=-1, height=1"); + System.out.println("A passing test should catch a PrinterException"); + System.out.println("and should display \"Print error: (exception msg)\"."); + System.out.println("---------------------------------------------------\n"); + PrinterJob job = PrinterJob.getPrinterJob(); + PageFormat format = job.defaultPage(); + Paper paper = format.getPaper(); - double w = 1, h = .0001; // Generates ArithmeticException: / by zero. - if(args.length > 0 && args[0].equals("1")) { - w = .0001; h = 1; } // Generates IllegalArgumentException. - else if(args.length > 0 && args[0].equals("2")) { - w = -1; h = 1; } // Generates NegativeArraySizeException. - paper.setSize(w, h); - paper.setImageableArea(0, 0, w, h); - format.setPaper(paper); - job.setPrintable( - new Printable() { - public int print(Graphics g, PageFormat page_format, int page) { - return NO_SUCH_PAGE; - } - }, format); + double w = 1, h = .0001; // Generates ArithmeticException: / by zero. + if (args.length > 0 && args[0].equals("1")) { + w = .0001; h = 1; + } // Generates IllegalArgumentException. + else if (args.length > 0 && args[0].equals("2")) { + w = -1; h = 1; + } // Generates NegativeArraySizeException. + paper.setSize(w, h); + paper.setImageableArea(0, 0, w, h); + format.setPaper(paper); + job.setPrintable( + new Printable() { + public int print(Graphics g, PageFormat page_format, int page) { + return NO_SUCH_PAGE; + } + }, format); - try { - job.print(); } - catch(PrinterException e) { - System.err.println("Print error:\n" + e.getMessage()); // Passing test! - } + try { + job.print(); + } catch (PrinterException e) { + System.err.println("Print error:\n" + e.getMessage()); // Passing test! } } +} diff --git a/test/jdk/java/awt/print/PageFormat/ValidateCustom.java b/test/jdk/java/awt/print/PageFormat/ValidateCustom.java index e15eebf9bc42d..2521609ee4faf 100644 --- a/test/jdk/java/awt/print/PageFormat/ValidateCustom.java +++ b/test/jdk/java/awt/print/PageFormat/ValidateCustom.java @@ -24,7 +24,7 @@ /* * @test * @bug 4414987 - * @author Jennifer Godinez + * @key printer * @summary Displays width & height of validated custom paper size * @run main/manual ValidateCustom */ diff --git a/test/jdk/java/awt/print/PageFormat/WrongPaperForBookPrintingTest.java b/test/jdk/java/awt/print/PageFormat/WrongPaperForBookPrintingTest.java index 5c4410e0ee440..1015fab4ed6ec 100644 --- a/test/jdk/java/awt/print/PageFormat/WrongPaperForBookPrintingTest.java +++ b/test/jdk/java/awt/print/PageFormat/WrongPaperForBookPrintingTest.java @@ -22,7 +22,7 @@ */ /* @test - @key headful + @key printer @bug 8201818 @summary Printing attributes break page size set via "java.awt.print.Book" object diff --git a/test/jdk/java/awt/print/PageFormat/WrongPaperPrintingTest.java b/test/jdk/java/awt/print/PageFormat/WrongPaperPrintingTest.java index 77b46031487d4..d96d4a4c33626 100644 --- a/test/jdk/java/awt/print/PageFormat/WrongPaperPrintingTest.java +++ b/test/jdk/java/awt/print/PageFormat/WrongPaperPrintingTest.java @@ -23,6 +23,7 @@ /* @test @bug 8167102 8181659 + @key printer @summary PrintRequestAttributeSet breaks page size set using PageFormat @run main/manual WrongPaperPrintingTest */ diff --git a/test/jdk/java/awt/print/PathPrecisionScaleFactor/PathPrecisionScaleFactorShapeTest.java b/test/jdk/java/awt/print/PathPrecisionScaleFactor/PathPrecisionScaleFactorShapeTest.java index 3b90d1e2068f3..9a626eae36474 100644 --- a/test/jdk/java/awt/print/PathPrecisionScaleFactor/PathPrecisionScaleFactorShapeTest.java +++ b/test/jdk/java/awt/print/PathPrecisionScaleFactor/PathPrecisionScaleFactorShapeTest.java @@ -25,6 +25,7 @@ /** * @test * @bug 8262470 + * @key printer * @requires (os.family == "windows") * @summary Check thay shapes are properly painted with the precision scale factor * @run main/othervm/manual PathPrecisionScaleFactorShapeTest diff --git a/test/jdk/java/awt/print/PathPrecisionScaleFactor/PathPrecisionScaleFactorTextTest.java b/test/jdk/java/awt/print/PathPrecisionScaleFactor/PathPrecisionScaleFactorTextTest.java index 9b20ab4748a22..f959ec9ca7c58 100644 --- a/test/jdk/java/awt/print/PathPrecisionScaleFactor/PathPrecisionScaleFactorTextTest.java +++ b/test/jdk/java/awt/print/PathPrecisionScaleFactor/PathPrecisionScaleFactorTextTest.java @@ -25,6 +25,7 @@ /** * @test * @bug 8262470 + * @key printer * @requires (os.family == "windows") * @summary Check that a GlyphVector outline is printed with good quility on low dpi printers * @run main/othervm/manual PathPrecisionScaleFactorTextTest diff --git a/test/jdk/java/awt/print/PrinterJob/BannerTest.java b/test/jdk/java/awt/print/PrinterJob/BannerTest.java index e061e24040064..e98bfaaf8d669 100644 --- a/test/jdk/java/awt/print/PrinterJob/BannerTest.java +++ b/test/jdk/java/awt/print/PrinterJob/BannerTest.java @@ -23,6 +23,7 @@ /* * @test * @bug 6575247 8170579 + * @key printer * @summary Verifies if Banner page is printed * @requires os.family == "solaris" * @run main/manual BannerTest diff --git a/test/jdk/java/awt/print/PrinterJob/Cancel/PrinterJobCancel.java b/test/jdk/java/awt/print/PrinterJob/Cancel/PrinterJobCancel.java index 0ad27cb5a53ea..20197224f56d5 100644 --- a/test/jdk/java/awt/print/PrinterJob/Cancel/PrinterJobCancel.java +++ b/test/jdk/java/awt/print/PrinterJob/Cancel/PrinterJobCancel.java @@ -25,7 +25,7 @@ * @test * @bug 4245280 * @summary PrinterJob not cancelled when PrinterJob.cancel() is used - * @author prr + * @key printer * @run main/manual PrinterJobCancel */ diff --git a/test/jdk/java/awt/print/PrinterJob/Collate2DPrintingTest.java b/test/jdk/java/awt/print/PrinterJob/Collate2DPrintingTest.java index 8d08da6a4a595..754030c4e9e6c 100644 --- a/test/jdk/java/awt/print/PrinterJob/Collate2DPrintingTest.java +++ b/test/jdk/java/awt/print/PrinterJob/Collate2DPrintingTest.java @@ -25,6 +25,7 @@ * @test * @bug 6362683 8012381 * @summary Collation should work. + * @key printer * @run main/manual Collate2DPrintingTest */ import java.awt.*; diff --git a/test/jdk/java/awt/print/PrinterJob/CompareImageable.java b/test/jdk/java/awt/print/PrinterJob/CompareImageable.java index 79a78c3b5a880..aec27d09d931a 100644 --- a/test/jdk/java/awt/print/PrinterJob/CompareImageable.java +++ b/test/jdk/java/awt/print/PrinterJob/CompareImageable.java @@ -24,6 +24,7 @@ /* @test @bug 4748055 + @key printer @summary PASS if the values are same in both cases (2 and 3) below. @run main/manual CompareImageable */ diff --git a/test/jdk/java/awt/print/PrinterJob/CustomFont/CustomFont.java b/test/jdk/java/awt/print/PrinterJob/CustomFont/CustomFont.java index 2b6c91fc0532b..e12b7fe16890c 100644 --- a/test/jdk/java/awt/print/PrinterJob/CustomFont/CustomFont.java +++ b/test/jdk/java/awt/print/PrinterJob/CustomFont/CustomFont.java @@ -25,7 +25,7 @@ @test @bug 4386025 8231243 @summary fonts not in win32 font directory print incorrectly. - @author prr: area=PrinterJob + @key printer @run main/manual CustomFont */ import java.io.*; diff --git a/test/jdk/java/awt/print/PrinterJob/CustomPrintService/PrintDialog.java b/test/jdk/java/awt/print/PrinterJob/CustomPrintService/PrintDialog.java index d18ee86878de6..cf37cf0cfa758 100644 --- a/test/jdk/java/awt/print/PrinterJob/CustomPrintService/PrintDialog.java +++ b/test/jdk/java/awt/print/PrinterJob/CustomPrintService/PrintDialog.java @@ -30,7 +30,6 @@ * @bug 6870661 * @summary Verify that no native dialog is opened for a custom PrintService * @run main/manual PrintDialog - * @author reinhapa */ public class PrintDialog { diff --git a/test/jdk/java/awt/print/PrinterJob/CustomPrintService/SetPrintServiceTest.java b/test/jdk/java/awt/print/PrinterJob/CustomPrintService/SetPrintServiceTest.java index 9c3ebe7d9217e..5a7fb526e9d6b 100644 --- a/test/jdk/java/awt/print/PrinterJob/CustomPrintService/SetPrintServiceTest.java +++ b/test/jdk/java/awt/print/PrinterJob/CustomPrintService/SetPrintServiceTest.java @@ -28,7 +28,6 @@ * @test * @bug 6870661 * @summary tests setPrintService() with a custom implementation - * @author reinhapa */ public class SetPrintServiceTest { diff --git a/test/jdk/java/awt/print/PrinterJob/DeviceScale.java b/test/jdk/java/awt/print/PrinterJob/DeviceScale.java index 7320eda70c911..008b5d2f0fa9f 100644 --- a/test/jdk/java/awt/print/PrinterJob/DeviceScale.java +++ b/test/jdk/java/awt/print/PrinterJob/DeviceScale.java @@ -21,7 +21,7 @@ * questions. */ -/* @test 1.2 02/05/15 +/* @test @bug 4810363 4924441 @key printer @run main DeviceScale diff --git a/test/jdk/java/awt/print/PrinterJob/DlgAttrsBug.java b/test/jdk/java/awt/print/PrinterJob/DlgAttrsBug.java index dc31ffda1fdf2..93fecd486a312 100644 --- a/test/jdk/java/awt/print/PrinterJob/DlgAttrsBug.java +++ b/test/jdk/java/awt/print/PrinterJob/DlgAttrsBug.java @@ -23,6 +23,7 @@ /* * @test * @bug 8061258 + * @key printer * @summary PrinterJob's native Print Dialog does not reflect * specified Copies or Page Ranges * @run main/manual DlgAttrsBug diff --git a/test/jdk/java/awt/print/PrinterJob/DrawImage.java b/test/jdk/java/awt/print/PrinterJob/DrawImage.java index 977dc946a9248..2fcc710719cd3 100644 --- a/test/jdk/java/awt/print/PrinterJob/DrawImage.java +++ b/test/jdk/java/awt/print/PrinterJob/DrawImage.java @@ -24,8 +24,8 @@ /** * @test * @bug 4329866 + * @key printer * @summary Confirm that no printing exception is generated. - * @author jgodinez * @run main/manual DrawImage */ diff --git a/test/jdk/java/awt/print/PrinterJob/DrawStringMethods.java b/test/jdk/java/awt/print/PrinterJob/DrawStringMethods.java index 37bb3e045a558..f5417ebae4d17 100644 --- a/test/jdk/java/awt/print/PrinterJob/DrawStringMethods.java +++ b/test/jdk/java/awt/print/PrinterJob/DrawStringMethods.java @@ -24,6 +24,7 @@ /** * @test * @bug 4185019 + * @key printer * @summary Confirm that all of the drawString methods on Graphics2D * work for printer graphics objects. * @run main/manual DrawStringMethods diff --git a/test/jdk/java/awt/print/PrinterJob/EmptyFill.java b/test/jdk/java/awt/print/PrinterJob/EmptyFill.java index ddf8ebb0150c9..3da1689bc3d2d 100644 --- a/test/jdk/java/awt/print/PrinterJob/EmptyFill.java +++ b/test/jdk/java/awt/print/PrinterJob/EmptyFill.java @@ -66,11 +66,11 @@ public static void main(String arg[]) throws Exception { } ByteArrayOutputStream baos = new ByteArrayOutputStream(4096); StreamPrintService svc = spfs[0].getPrintService(baos); - - PrinterJob pj = PrinterJob.getPrinterJob(); if (svc == null) { - return; + throw new RuntimeException("Could not create postscript stream"); } + + PrinterJob pj = PrinterJob.getPrinterJob(); pj.setPrintService(svc); pj.setPrintable(new EmptyFill()); pj.print(); diff --git a/test/jdk/java/awt/print/PrinterJob/GetMediasTest.java b/test/jdk/java/awt/print/PrinterJob/GetMediasTest.java index c70d377c6ef2e..f4ff1643b0018 100644 --- a/test/jdk/java/awt/print/PrinterJob/GetMediasTest.java +++ b/test/jdk/java/awt/print/PrinterJob/GetMediasTest.java @@ -24,6 +24,7 @@ /** * @test * @bug 6653384 + * @key printer * @summary No exception should be thrown. * @run main GetMediasTest */ diff --git a/test/jdk/java/awt/print/PrinterJob/ImagePrinting/ImageTypes.java b/test/jdk/java/awt/print/PrinterJob/ImagePrinting/ImageTypes.java index c33dc0f6718c5..af655b75d3644 100644 --- a/test/jdk/java/awt/print/PrinterJob/ImagePrinting/ImageTypes.java +++ b/test/jdk/java/awt/print/PrinterJob/ImagePrinting/ImageTypes.java @@ -25,7 +25,7 @@ * @test * @bug 4521945 7006865 * @summary Test printing images of different types. - * @author prr + * @key printer * @run main/manual ImageTypes */ diff --git a/test/jdk/java/awt/print/PrinterJob/ImagePrinting/PrintARGBImage.java b/test/jdk/java/awt/print/PrinterJob/ImagePrinting/PrintARGBImage.java index 4bef1cce0f5af..e16dc17c24f7d 100644 --- a/test/jdk/java/awt/print/PrinterJob/ImagePrinting/PrintARGBImage.java +++ b/test/jdk/java/awt/print/PrinterJob/ImagePrinting/PrintARGBImage.java @@ -34,6 +34,7 @@ /* * @test * @bug 6581756 + * @key printer * @library ../../../regtesthelpers * @build PassFailJFrame * @summary Test printing of images which need to have src area clipped diff --git a/test/jdk/java/awt/print/PrinterJob/InitToBlack.java b/test/jdk/java/awt/print/PrinterJob/InitToBlack.java index a4d7dd0a9589c..7ca5846fd4722 100644 --- a/test/jdk/java/awt/print/PrinterJob/InitToBlack.java +++ b/test/jdk/java/awt/print/PrinterJob/InitToBlack.java @@ -24,6 +24,7 @@ /** * @test * @bug 4184565 + * @key printer * @summary Confirm that the default foreground color on a printer * graphics object is black so that rendering will appear * without having to execute setColor first. diff --git a/test/jdk/java/awt/print/PrinterJob/InvalidPage.java b/test/jdk/java/awt/print/PrinterJob/InvalidPage.java index f84bd2c0d7858..fd0130320523a 100644 --- a/test/jdk/java/awt/print/PrinterJob/InvalidPage.java +++ b/test/jdk/java/awt/print/PrinterJob/InvalidPage.java @@ -25,7 +25,7 @@ * @test InvalidPage.java * @bug 4671634 6506286 * @summary Invalid page format can crash win32 JRE - * @author prr + * @key printer * @run main/manual InvalidPage */ diff --git a/test/jdk/java/awt/print/PrinterJob/JobName/PrinterJobName.java b/test/jdk/java/awt/print/PrinterJob/JobName/PrinterJobName.java index a6c6544591258..f1b99487788c4 100644 --- a/test/jdk/java/awt/print/PrinterJob/JobName/PrinterJobName.java +++ b/test/jdk/java/awt/print/PrinterJob/JobName/PrinterJobName.java @@ -25,7 +25,7 @@ * @test * @bug 4205601 * @summary setJobName should be used by PrinterJob - * @author prr + * @key printer * @run main/manual PrinterJobName */ diff --git a/test/jdk/java/awt/print/PrinterJob/LandscapeStackOverflow.java b/test/jdk/java/awt/print/PrinterJob/LandscapeStackOverflow.java index fc65dc9ddab1e..398939d125d91 100644 --- a/test/jdk/java/awt/print/PrinterJob/LandscapeStackOverflow.java +++ b/test/jdk/java/awt/print/PrinterJob/LandscapeStackOverflow.java @@ -22,7 +22,7 @@ */ /* * @test - * @key headful printer + * @key printer * @bug 6842011 8158758 * @summary Test if StackOverflowError occurs during printing landscape with * scale and transform. diff --git a/test/jdk/java/awt/print/PrinterJob/Legal/PrintTest.java b/test/jdk/java/awt/print/PrinterJob/Legal/PrintTest.java index b4c708e27857a..f5ee1c4d65a79 100644 --- a/test/jdk/java/awt/print/PrinterJob/Legal/PrintTest.java +++ b/test/jdk/java/awt/print/PrinterJob/Legal/PrintTest.java @@ -24,6 +24,7 @@ /** * @test * @bug 4886069 8023045 + * @key printer * @summary Confirm that printer recognizes the Legal selection either by * prompting the user to put Legal paper or automatically selecting * the tray containing Legal Paper. The printout image should not diff --git a/test/jdk/java/awt/print/PrinterJob/LinearGradientPrintingTest.java b/test/jdk/java/awt/print/PrinterJob/LinearGradientPrintingTest.java index ab1ab17aa7fea..456b77614a3e2 100644 --- a/test/jdk/java/awt/print/PrinterJob/LinearGradientPrintingTest.java +++ b/test/jdk/java/awt/print/PrinterJob/LinearGradientPrintingTest.java @@ -24,6 +24,7 @@ * @test * @bug 8162796 * @summary Verifies if LinearGradientPaint is printed in osx + * @key printer * @run main/manual LinearGradientPrintingTest */ import java.awt.BorderLayout; diff --git a/test/jdk/java/awt/print/PrinterJob/MultiMonPrintDlgTest.java b/test/jdk/java/awt/print/PrinterJob/MultiMonPrintDlgTest.java index 4086f663a5c86..9da6e64fedcf9 100644 --- a/test/jdk/java/awt/print/PrinterJob/MultiMonPrintDlgTest.java +++ b/test/jdk/java/awt/print/PrinterJob/MultiMonPrintDlgTest.java @@ -37,6 +37,7 @@ /** * @test * @bug 8138749 + * @key printer multimon * @summary PrinterJob.printDialog() does not support multi-mon, * always displayed on primary * @run main/manual MultiMonPrintDlgTest diff --git a/test/jdk/java/awt/print/PrinterJob/MultiThread/MultiThreadTest.java b/test/jdk/java/awt/print/PrinterJob/MultiThread/MultiThreadTest.java index 8282a052ee18b..609cc6f988b60 100644 --- a/test/jdk/java/awt/print/PrinterJob/MultiThread/MultiThreadTest.java +++ b/test/jdk/java/awt/print/PrinterJob/MultiThread/MultiThreadTest.java @@ -24,6 +24,7 @@ /** * @test * @bug 4922036 + * @key printer * @summary Confirm that no Exception is thrown and 2 identical output is produced. * @run main/manual MultiThreadTest */ diff --git a/test/jdk/java/awt/print/PrinterJob/NumCopies.java b/test/jdk/java/awt/print/PrinterJob/NumCopies.java index c851e2403d0f9..119bcab6f7a1a 100644 --- a/test/jdk/java/awt/print/PrinterJob/NumCopies.java +++ b/test/jdk/java/awt/print/PrinterJob/NumCopies.java @@ -25,7 +25,7 @@ * @test * @bug 4258003 * @summary Checks the right number of copies are printed - * @author prr + * @key printer * @run main/manual NumCopies */ diff --git a/test/jdk/java/awt/print/PrinterJob/PageDialogMarginTest.java b/test/jdk/java/awt/print/PrinterJob/PageDialogMarginTest.java index de47e70f63920..1931de988d14e 100644 --- a/test/jdk/java/awt/print/PrinterJob/PageDialogMarginTest.java +++ b/test/jdk/java/awt/print/PrinterJob/PageDialogMarginTest.java @@ -24,6 +24,7 @@ /* * @test * @bug 6801613 + * @key printer * @summary Verifies if cross-platform pageDialog and printDialog top margin * entry is working * @run main/manual PageDialogMarginTest diff --git a/test/jdk/java/awt/print/PrinterJob/PageDialogMarginValidation.java b/test/jdk/java/awt/print/PrinterJob/PageDialogMarginValidation.java index d71f84f18793c..674266e7fc8ec 100644 --- a/test/jdk/java/awt/print/PrinterJob/PageDialogMarginValidation.java +++ b/test/jdk/java/awt/print/PrinterJob/PageDialogMarginValidation.java @@ -23,6 +23,7 @@ /* * @test * @bug 6509729 + * @key printer * @summary Verifies pageDialog margin validation is correct * @run main/manual PageDialogMarginValidation */ diff --git a/test/jdk/java/awt/print/PrinterJob/PageDialogTest.java b/test/jdk/java/awt/print/PrinterJob/PageDialogTest.java index 8a8f9839ddf39..eea118733de4f 100644 --- a/test/jdk/java/awt/print/PrinterJob/PageDialogTest.java +++ b/test/jdk/java/awt/print/PrinterJob/PageDialogTest.java @@ -24,6 +24,7 @@ /* @test @bug 6302514 + @key printer @run main/manual PageDialogTest @summary A toolkit modal dialog should not be blocked by Page/Print dialog. */ diff --git a/test/jdk/java/awt/print/PrinterJob/PageDlgApp.java b/test/jdk/java/awt/print/PrinterJob/PageDlgApp.java index e07e8ffd6cfc0..96d5f64486def 100644 --- a/test/jdk/java/awt/print/PrinterJob/PageDlgApp.java +++ b/test/jdk/java/awt/print/PrinterJob/PageDlgApp.java @@ -31,6 +31,7 @@ /** * @test * @bug 8067059 + * @key printer * @run main/manual PageDlgApp * @summary Test if cancelling dialog returns null when * PrinterJob.pageDialog() with DialogSelectionType.NATIVE is called diff --git a/test/jdk/java/awt/print/PrinterJob/PageDlgPrnButton.java b/test/jdk/java/awt/print/PrinterJob/PageDlgPrnButton.java index 45a1c71a44a67..6c000dc7f5fb6 100644 --- a/test/jdk/java/awt/print/PrinterJob/PageDlgPrnButton.java +++ b/test/jdk/java/awt/print/PrinterJob/PageDlgPrnButton.java @@ -24,6 +24,7 @@ /** * @test * @bug 4956397 + * @key printer * @run main/manual PageDlgPrnButton */ diff --git a/test/jdk/java/awt/print/PrinterJob/PageDlgStackOverflowTest.java b/test/jdk/java/awt/print/PrinterJob/PageDlgStackOverflowTest.java index ffe695d6f487e..048b81f273d63 100644 --- a/test/jdk/java/awt/print/PrinterJob/PageDlgStackOverflowTest.java +++ b/test/jdk/java/awt/print/PrinterJob/PageDlgStackOverflowTest.java @@ -28,6 +28,7 @@ /** * @test * @bug 8039412 + * @key printer * @run main/manual PageDlgStackOverflowTest * @summary Calling pageDialog() after printDialog with * DialogTypeSelection.NATIVE should not result in StackOverflowError diff --git a/test/jdk/java/awt/print/PrinterJob/PageFormatChange.java b/test/jdk/java/awt/print/PrinterJob/PageFormatChange.java index 2515e11e9ecbb..10aaaea89f1ff 100644 --- a/test/jdk/java/awt/print/PrinterJob/PageFormatChange.java +++ b/test/jdk/java/awt/print/PrinterJob/PageFormatChange.java @@ -24,6 +24,7 @@ /** * @test * @bug 6359283 + * @key printer * @summary pagedialog needs to update based on change of printer. * @run main/manual PageFormatChange */ diff --git a/test/jdk/java/awt/print/PrinterJob/PageRanges.java b/test/jdk/java/awt/print/PrinterJob/PageRanges.java index 9bfd79eacce49..accde99ae9565 100644 --- a/test/jdk/java/awt/print/PrinterJob/PageRanges.java +++ b/test/jdk/java/awt/print/PrinterJob/PageRanges.java @@ -24,6 +24,7 @@ /** * @test * @bug 6575331 + * @key printer * @summary The specified pages should be printed. * @run main/manual=yesno PageRanges */ diff --git a/test/jdk/java/awt/print/PrinterJob/PolylinePrintingTest.java b/test/jdk/java/awt/print/PrinterJob/PolylinePrintingTest.java index 14a04d5542f49..7d8568c01f98c 100644 --- a/test/jdk/java/awt/print/PrinterJob/PolylinePrintingTest.java +++ b/test/jdk/java/awt/print/PrinterJob/PolylinePrintingTest.java @@ -23,6 +23,7 @@ /** * @bug 8041902 + * @key printer * @summary Test printing of wide poly lines. * @run main/manual=yesno PolylinePrintingTest */ diff --git a/test/jdk/java/awt/print/PrinterJob/PrintAWTImage.java b/test/jdk/java/awt/print/PrinterJob/PrintAWTImage.java index 2612ca6bdadd4..2397931b4fc9f 100644 --- a/test/jdk/java/awt/print/PrinterJob/PrintAWTImage.java +++ b/test/jdk/java/awt/print/PrinterJob/PrintAWTImage.java @@ -23,6 +23,7 @@ /** * @test * @bug 4257262 6708509 + * @key printer * @summary Image should be sent to printer. * @run main/manual PrintAWTImage */ diff --git a/test/jdk/java/awt/print/PrinterJob/PrintAllFonts.java b/test/jdk/java/awt/print/PrinterJob/PrintAllFonts.java index 59ebf21ee5bac..0c9f8afb7696c 100644 --- a/test/jdk/java/awt/print/PrinterJob/PrintAllFonts.java +++ b/test/jdk/java/awt/print/PrinterJob/PrintAllFonts.java @@ -23,9 +23,11 @@ /** * + * test * @bug 4884389 7183516 + * @key printer * @summary Font specified with face name loses style on printing - * @run main/manual PrintRotatedText + * @run main/manual PrintAllFonts */ import java.awt.*; diff --git a/test/jdk/java/awt/print/PrinterJob/PrintAttributeUpdateTest.java b/test/jdk/java/awt/print/PrinterJob/PrintAttributeUpdateTest.java index 1b69e0b8b365b..fd92f5deda89b 100644 --- a/test/jdk/java/awt/print/PrinterJob/PrintAttributeUpdateTest.java +++ b/test/jdk/java/awt/print/PrinterJob/PrintAttributeUpdateTest.java @@ -24,6 +24,7 @@ /* @test @bug 8042713 8170578 + @key printer @summary Print Dialog does not update attribute set with page range @run main/manual PrintAttributeUpdateTest */ diff --git a/test/jdk/java/awt/print/PrinterJob/PrintBadImage.java b/test/jdk/java/awt/print/PrinterJob/PrintBadImage.java index ad3b3fd5d83cb..48e4503db7041 100644 --- a/test/jdk/java/awt/print/PrinterJob/PrintBadImage.java +++ b/test/jdk/java/awt/print/PrinterJob/PrintBadImage.java @@ -25,7 +25,7 @@ * @test * @bug 4398853 * @summary Printing shouldn't hang on bad images - * @author prr + * @key printer * @run main/manual PrintBadImage */ diff --git a/test/jdk/java/awt/print/PrinterJob/PrintCompoundString.java b/test/jdk/java/awt/print/PrinterJob/PrintCompoundString.java index 82560d8964bf1..95cebd9976565 100644 --- a/test/jdk/java/awt/print/PrinterJob/PrintCompoundString.java +++ b/test/jdk/java/awt/print/PrinterJob/PrintCompoundString.java @@ -25,7 +25,7 @@ * @test * @bug 4396835 * @summary Compound font string not printing. - * @author prr + * @key printer * @run main/manual PrintCompoundString */ diff --git a/test/jdk/java/awt/print/PrinterJob/PrintDialog.java b/test/jdk/java/awt/print/PrinterJob/PrintDialog.java index 9ab5d63f641c9..fa9569e1aa74e 100644 --- a/test/jdk/java/awt/print/PrinterJob/PrintDialog.java +++ b/test/jdk/java/awt/print/PrinterJob/PrintDialog.java @@ -25,7 +25,7 @@ @test PrintDialog.java @bug 4257903 @summary Confirm that the you see the print dialog. - @author prr: area=PrinterJob + @key printer @run main/manual PrintDialog */ diff --git a/test/jdk/java/awt/print/PrinterJob/PrintDialogCancel.java b/test/jdk/java/awt/print/PrinterJob/PrintDialogCancel.java index 4fe3d29fe5bcc..b2d3d3a223075 100644 --- a/test/jdk/java/awt/print/PrinterJob/PrintDialogCancel.java +++ b/test/jdk/java/awt/print/PrinterJob/PrintDialogCancel.java @@ -25,7 +25,7 @@ @test @bug 4398231 @summary Confirm that the print dialog returns false when cancelled. - @author prr: area=PrinterJob + @key printer @run main/manual PrintDialogCancel */ diff --git a/test/jdk/java/awt/print/PrinterJob/PrintDlgPageable.java b/test/jdk/java/awt/print/PrinterJob/PrintDlgPageable.java index f6a74f9f965cb..6d1d8bcf6dfb6 100644 --- a/test/jdk/java/awt/print/PrinterJob/PrintDlgPageable.java +++ b/test/jdk/java/awt/print/PrinterJob/PrintDlgPageable.java @@ -23,6 +23,7 @@ /* * @test * @bug 4885375 + * @key printer * @summary Verifies if PageRanges To Field is populated based on Pageable * for COMMON print dialog * @run main/manual PrintDlgPageable diff --git a/test/jdk/java/awt/print/PrinterJob/PrintDlgSelectionAttribTest.java b/test/jdk/java/awt/print/PrinterJob/PrintDlgSelectionAttribTest.java index 9858547862667..65adee3f4f9f9 100644 --- a/test/jdk/java/awt/print/PrinterJob/PrintDlgSelectionAttribTest.java +++ b/test/jdk/java/awt/print/PrinterJob/PrintDlgSelectionAttribTest.java @@ -23,6 +23,7 @@ /* * @test * @bug 6529030 8159134 + * @key printer * @summary Verifies if Java Printing: Selection radiobutton gets enabled. * @requires (os.family == "windows") * @run main/manual PrintDlgSelectionAttribTest diff --git a/test/jdk/java/awt/print/PrinterJob/PrintFontStyle.java b/test/jdk/java/awt/print/PrinterJob/PrintFontStyle.java index 3d67246eac23d..f9997d443a2da 100644 --- a/test/jdk/java/awt/print/PrinterJob/PrintFontStyle.java +++ b/test/jdk/java/awt/print/PrinterJob/PrintFontStyle.java @@ -21,6 +21,13 @@ * questions. */ +/* + * Not enabled as a test. Needs some work. + * test + * @key printer + * @run main/manual PrintFontStyle + */ + import java.awt.*; import java.awt.print.*; import java.awt.GraphicsEnvironment; diff --git a/test/jdk/java/awt/print/PrinterJob/PrintGlyphVectorTest.java b/test/jdk/java/awt/print/PrinterJob/PrintGlyphVectorTest.java index bd921b5162df6..696cf1b74454e 100644 --- a/test/jdk/java/awt/print/PrinterJob/PrintGlyphVectorTest.java +++ b/test/jdk/java/awt/print/PrinterJob/PrintGlyphVectorTest.java @@ -24,6 +24,7 @@ /* * @test * @bug 8029204 + * @key printer * @library ../../regtesthelpers * @build PassFailJFrame * @summary Tests GlyphVector is printed in the correct location diff --git a/test/jdk/java/awt/print/PrinterJob/PrintImage.java b/test/jdk/java/awt/print/PrinterJob/PrintImage.java index 7f632bfa94ccb..7eed8c2c276f8 100644 --- a/test/jdk/java/awt/print/PrinterJob/PrintImage.java +++ b/test/jdk/java/awt/print/PrinterJob/PrintImage.java @@ -25,7 +25,7 @@ * @test %I %W * @bug 4298489 * @summary Confirm that output is same as screen. - * @author jgodinez + * @key printer * @run main/manual PrintImage */ import java.awt.*; diff --git a/test/jdk/java/awt/print/PrinterJob/PrintLatinCJKTest.java b/test/jdk/java/awt/print/PrinterJob/PrintLatinCJKTest.java index f6221aa57064b..5ffb34540ced4 100644 --- a/test/jdk/java/awt/print/PrinterJob/PrintLatinCJKTest.java +++ b/test/jdk/java/awt/print/PrinterJob/PrintLatinCJKTest.java @@ -27,6 +27,7 @@ * @library ../../regtesthelpers * @build PassFailJFrame * @summary JDK7 Printing: CJK and Latin Text in string overlap + * @key printer * @run main/manual PrintLatinCJKTest */ diff --git a/test/jdk/java/awt/print/PrinterJob/PrintNullString.java b/test/jdk/java/awt/print/PrinterJob/PrintNullString.java index 7e3101c6b30e1..b46db6a1447ba 100644 --- a/test/jdk/java/awt/print/PrinterJob/PrintNullString.java +++ b/test/jdk/java/awt/print/PrinterJob/PrintNullString.java @@ -25,7 +25,7 @@ * @test * @bug 4223328 * @summary Printer graphics must behave the same as screen graphics - * @author prr + * @key printer * @run main/manual PrintNullString */ diff --git a/test/jdk/java/awt/print/PrinterJob/PrintParenString.java b/test/jdk/java/awt/print/PrinterJob/PrintParenString.java index dc6d544d12645..f3ed7ec1f3ea4 100644 --- a/test/jdk/java/awt/print/PrinterJob/PrintParenString.java +++ b/test/jdk/java/awt/print/PrinterJob/PrintParenString.java @@ -25,7 +25,7 @@ * @test * @bug 4399442 * @summary Brackets should be quoted in Postscript output - * @author prr + * @key printer * @run main/manual PrintParenString */ diff --git a/test/jdk/java/awt/print/PrinterJob/PrintRotatedText.java b/test/jdk/java/awt/print/PrinterJob/PrintRotatedText.java index 5f5a6fa69d65e..deabc0e69991c 100644 --- a/test/jdk/java/awt/print/PrinterJob/PrintRotatedText.java +++ b/test/jdk/java/awt/print/PrinterJob/PrintRotatedText.java @@ -26,7 +26,7 @@ * @bug 4271596 * @bug 4460699 * @summary Rotated text printing - * @author prr + * @key printer * @run main/manual PrintRotatedText */ diff --git a/test/jdk/java/awt/print/PrinterJob/PrintTest.java b/test/jdk/java/awt/print/PrinterJob/PrintTest.java index 3c3febe414c83..321293877aba5 100644 --- a/test/jdk/java/awt/print/PrinterJob/PrintTest.java +++ b/test/jdk/java/awt/print/PrinterJob/PrintTest.java @@ -23,6 +23,7 @@ /* * @test * @bug 8151590 + * @key printer * @summary All radio button should be selected when we call * setDefaultSelection(JobAttributes.DefaultSelectionType.ALL); * @run main/manual PrintTest diff --git a/test/jdk/java/awt/print/PrinterJob/PrintTestLexmarkIQ.java b/test/jdk/java/awt/print/PrinterJob/PrintTestLexmarkIQ.java index cb82100efb00e..a5c7110c5d5a1 100644 --- a/test/jdk/java/awt/print/PrinterJob/PrintTestLexmarkIQ.java +++ b/test/jdk/java/awt/print/PrinterJob/PrintTestLexmarkIQ.java @@ -25,6 +25,7 @@ * @bug 6966350 8160882 * @summary Verifies if Empty pages are printed on Lexmark E352dn PS3 * with "1200 IQ" setting + * @key printer * @run main/manual PrintTestLexmarkIQ */ import java.awt.BorderLayout; diff --git a/test/jdk/java/awt/print/PrinterJob/PrintTextLayout.java b/test/jdk/java/awt/print/PrinterJob/PrintTextLayout.java index 2dfd10ccd3202..9560c6b86ff73 100644 --- a/test/jdk/java/awt/print/PrinterJob/PrintTextLayout.java +++ b/test/jdk/java/awt/print/PrinterJob/PrintTextLayout.java @@ -25,7 +25,7 @@ * @test * @bug 4480930 * @summary TextLayout prints as filled shapes - * @author prr + * @key printer * @run main/manual PrintTextLayout */ diff --git a/test/jdk/java/awt/print/PrinterJob/PrintTextTest.java b/test/jdk/java/awt/print/PrinterJob/PrintTextTest.java index c7d9c984b64c5..95bf177aa2f11 100644 --- a/test/jdk/java/awt/print/PrinterJob/PrintTextTest.java +++ b/test/jdk/java/awt/print/PrinterJob/PrintTextTest.java @@ -24,6 +24,7 @@ /** * @test * @bug 6425068 7157659 8132890 + * @key printer * @summary Confirm that text prints where we expect to the length we expect. * @run main/manual=yesno PrintTextTest */ diff --git a/test/jdk/java/awt/print/PrinterJob/PrintTranslatedFont.java b/test/jdk/java/awt/print/PrinterJob/PrintTranslatedFont.java index fefa737990bac..51ff6ce57a7dd 100644 --- a/test/jdk/java/awt/print/PrinterJob/PrintTranslatedFont.java +++ b/test/jdk/java/awt/print/PrinterJob/PrintTranslatedFont.java @@ -24,8 +24,8 @@ /** * @test * @bug 6359734 + * @key printer * @summary Test that fonts with a translation print where they should. - * @author prr * @run main/manual PrintTranslatedFont */ diff --git a/test/jdk/java/awt/print/PrinterJob/PrintVolatileImage.java b/test/jdk/java/awt/print/PrinterJob/PrintVolatileImage.java index 82a7c9ed83d6e..d594b5a31dd8f 100644 --- a/test/jdk/java/awt/print/PrinterJob/PrintVolatileImage.java +++ b/test/jdk/java/awt/print/PrinterJob/PrintVolatileImage.java @@ -25,7 +25,7 @@ * @test * @bug 4511023 * @summary Image should be sent to printer, no exceptions thrown - * @author prr + * @key printer * @run main/manual PrintVolatileImage */ diff --git a/test/jdk/java/awt/print/PrinterJob/PrinterDialogsModalityTest/PrinterDialogsModalityTest.html b/test/jdk/java/awt/print/PrinterJob/PrinterDialogsModalityTest/PrinterDialogsModalityTest.html index 3b6b87f6b03e9..9cfb86bd47976 100644 --- a/test/jdk/java/awt/print/PrinterJob/PrinterDialogsModalityTest/PrinterDialogsModalityTest.html +++ b/test/jdk/java/awt/print/PrinterJob/PrinterDialogsModalityTest/PrinterDialogsModalityTest.html @@ -25,8 +25,8 @@ diff --git a/test/jdk/java/awt/print/PrinterJob/PrinterDialogsModalityTest/PrinterDialogsModalityTest.java b/test/jdk/java/awt/print/PrinterJob/PrinterDialogsModalityTest/PrinterDialogsModalityTest.java index 2178697b1709b..bb40832e36fc8 100644 --- a/test/jdk/java/awt/print/PrinterJob/PrinterDialogsModalityTest/PrinterDialogsModalityTest.java +++ b/test/jdk/java/awt/print/PrinterJob/PrinterDialogsModalityTest/PrinterDialogsModalityTest.java @@ -24,8 +24,8 @@ /* test @bug 4784285 4785920 + @key printer @summary check whether Print- and Page- dialogs are modal and correct window activated after their closing - @author son@sparc.spb.su: area=PrinterJob.modality @run applet/manual=yesno PrinterDialogsModalityTest.html */ diff --git a/test/jdk/java/awt/print/PrinterJob/PrinterJobDialogBugDemo.java b/test/jdk/java/awt/print/PrinterJob/PrinterJobDialogBugDemo.java index d06d08dcbe3be..d7a18300bd7c9 100644 --- a/test/jdk/java/awt/print/PrinterJob/PrinterJobDialogBugDemo.java +++ b/test/jdk/java/awt/print/PrinterJob/PrinterJobDialogBugDemo.java @@ -24,6 +24,7 @@ /** * @test * @bug 4775862 + * @key printer * @run main/manual PrinterJobDialogBugDemo */ import java.awt.BorderLayout; diff --git a/test/jdk/java/awt/print/PrinterJob/RadialGradientPrintingTest.java b/test/jdk/java/awt/print/PrinterJob/RadialGradientPrintingTest.java index 61c9faeda247b..8cd538f1d6264 100644 --- a/test/jdk/java/awt/print/PrinterJob/RadialGradientPrintingTest.java +++ b/test/jdk/java/awt/print/PrinterJob/RadialGradientPrintingTest.java @@ -23,6 +23,7 @@ /* * @test * @bug 8162796 + * @key printer * @summary Verifies if RadialGradientPaint is printed in osx * @run main/manual RadialGradientPrintingTest */ diff --git a/test/jdk/java/awt/print/PrinterJob/RemoveListener.java b/test/jdk/java/awt/print/PrinterJob/RemoveListener.java index 2a467a438a3cf..0818cd7e7f4c8 100644 --- a/test/jdk/java/awt/print/PrinterJob/RemoveListener.java +++ b/test/jdk/java/awt/print/PrinterJob/RemoveListener.java @@ -22,8 +22,9 @@ */ /* - * @test 1.1 01/05/17 + * @test * @bug 4459889 + * @key printer * @summary No NullPointerException should occur. * @run main RemoveListener */ diff --git a/test/jdk/java/awt/print/PrinterJob/SameService.java b/test/jdk/java/awt/print/PrinterJob/SameService.java index 4073b55fb9241..611cea9ecdb75 100644 --- a/test/jdk/java/awt/print/PrinterJob/SameService.java +++ b/test/jdk/java/awt/print/PrinterJob/SameService.java @@ -24,6 +24,7 @@ /** * @test * @bug 6446094 + * @key printer * @summary Don't re-create print services. * @run main SameService */ diff --git a/test/jdk/java/awt/print/PrinterJob/ScaledText/ScaledText.java b/test/jdk/java/awt/print/PrinterJob/ScaledText/ScaledText.java index a440db4f2f9ba..22da443111781 100644 --- a/test/jdk/java/awt/print/PrinterJob/ScaledText/ScaledText.java +++ b/test/jdk/java/awt/print/PrinterJob/ScaledText/ScaledText.java @@ -25,7 +25,7 @@ @test @bug 4291373 @summary Printing of scaled text is wrong / disappearing - @author prr: area=PrinterJob + @key printer @run main/manual ScaledText */ import java.awt.*; diff --git a/test/jdk/java/awt/print/PrinterJob/SecurityDialogTest.java b/test/jdk/java/awt/print/PrinterJob/SecurityDialogTest.java index c5d356c6118aa..d6a9efeb97c51 100644 --- a/test/jdk/java/awt/print/PrinterJob/SecurityDialogTest.java +++ b/test/jdk/java/awt/print/PrinterJob/SecurityDialogTest.java @@ -24,6 +24,7 @@ /** * @test * @bug 4937672 5100706 6252456 + * @key printer * @run main/othervm/manual -Djava.security.manager=allow SecurityDialogTest */ diff --git a/test/jdk/java/awt/print/PrinterJob/SetCopies/Test.java b/test/jdk/java/awt/print/PrinterJob/SetCopies/Test.java index 7b8d9ce7c0094..b32d716bbee3e 100644 --- a/test/jdk/java/awt/print/PrinterJob/SetCopies/Test.java +++ b/test/jdk/java/awt/print/PrinterJob/SetCopies/Test.java @@ -24,6 +24,7 @@ /** * @test * @bug 4694495 + * @key printer * @summary Check that the dialog shows copies = 3. * @run main/manual Test */ diff --git a/test/jdk/java/awt/print/PrinterJob/SwingUIText.java b/test/jdk/java/awt/print/PrinterJob/SwingUIText.java index c1e47638023c0..5fcd5e391581a 100644 --- a/test/jdk/java/awt/print/PrinterJob/SwingUIText.java +++ b/test/jdk/java/awt/print/PrinterJob/SwingUIText.java @@ -24,6 +24,7 @@ /** * @test * @bug 6488219 6560738 7158350 8017469 + * @key printer * @summary Test that text printed in Swing UI measures and looks OK. * @run main/manual=yesno PrintTextTest */ diff --git a/test/jdk/java/awt/print/PrinterJob/TestCheckSystemDefaultBannerOption.java b/test/jdk/java/awt/print/PrinterJob/TestCheckSystemDefaultBannerOption.java index b9e18d3439383..ca07c05a6ef16 100644 --- a/test/jdk/java/awt/print/PrinterJob/TestCheckSystemDefaultBannerOption.java +++ b/test/jdk/java/awt/print/PrinterJob/TestCheckSystemDefaultBannerOption.java @@ -23,6 +23,7 @@ /* * @test * @bug 8165947 8170579 + * @key printer * @summary Verifies System default banner page option is honoured by jdk * @requires os.family == "linux" * @run main/manual TestCheckSystemDefaultBannerOption diff --git a/test/jdk/java/awt/print/PrinterJob/TestMediaTraySelection.java b/test/jdk/java/awt/print/PrinterJob/TestMediaTraySelection.java index f75336c2c0deb..6a5a91ac89e7e 100644 --- a/test/jdk/java/awt/print/PrinterJob/TestMediaTraySelection.java +++ b/test/jdk/java/awt/print/PrinterJob/TestMediaTraySelection.java @@ -24,6 +24,7 @@ * @bug 6357887 8165146 8234393 * @summary Verifies if selected printertray is used * @requires (os.family == "linux" | os.family == "mac") + * @key printer * @run main/manual TestMediaTraySelection */ diff --git a/test/jdk/java/awt/print/PrinterJob/TestPageDlgFrameAssociation.java b/test/jdk/java/awt/print/PrinterJob/TestPageDlgFrameAssociation.java index 32ee61ad1c6bb..5ca2cda4b601e 100644 --- a/test/jdk/java/awt/print/PrinterJob/TestPageDlgFrameAssociation.java +++ b/test/jdk/java/awt/print/PrinterJob/TestPageDlgFrameAssociation.java @@ -23,6 +23,7 @@ /* * @test * @bug 7064425 6948907 + * @key printer * @summary Verifies if owner Frame is associated with page dialog of PrinterJob * @run main/manual TestPageDlgFrameAssociation */ diff --git a/test/jdk/java/awt/print/PrinterJob/TestPrintDlgFrameAssociation.java b/test/jdk/java/awt/print/PrinterJob/TestPrintDlgFrameAssociation.java index d1d54307ab55b..e5d58c8baea73 100644 --- a/test/jdk/java/awt/print/PrinterJob/TestPrintDlgFrameAssociation.java +++ b/test/jdk/java/awt/print/PrinterJob/TestPrintDlgFrameAssociation.java @@ -23,6 +23,7 @@ /* * @test * @bug 7064425 6948907 + * @key printer * @summary Verifies if owner Frame is associated with print dialog of PrinterJob * @run main/manual TestPrintDlgFrameAssociation */ diff --git a/test/jdk/java/awt/print/PrinterJob/TexturePaintPrintingTest.java b/test/jdk/java/awt/print/PrinterJob/TexturePaintPrintingTest.java index 8ac81c8bbad25..3d8c6815f9552 100644 --- a/test/jdk/java/awt/print/PrinterJob/TexturePaintPrintingTest.java +++ b/test/jdk/java/awt/print/PrinterJob/TexturePaintPrintingTest.java @@ -23,6 +23,7 @@ /* * @test * @bug 8040635 + * @key printer * @summary Verifies if TexturePaint is printed in osx * @run main/manual TexturePaintPrintingTest */ diff --git a/test/jdk/java/awt/print/PrinterJob/ThinLines.java b/test/jdk/java/awt/print/PrinterJob/ThinLines.java index 2d880a4400672..f8e4e60b31969 100644 --- a/test/jdk/java/awt/print/PrinterJob/ThinLines.java +++ b/test/jdk/java/awt/print/PrinterJob/ThinLines.java @@ -25,7 +25,7 @@ @test @bug 4190081 @summary Confirm that the you see "Z" shapes on the printed page. - @author prr/rbi: area=PrinterJob + @key printer @run main/manual ThinLines */ diff --git a/test/jdk/java/awt/print/PrinterJob/ValidatePage/ValidatePage.java b/test/jdk/java/awt/print/PrinterJob/ValidatePage/ValidatePage.java index 8c9f81b11df16..ccf0bed43bbbe 100644 --- a/test/jdk/java/awt/print/PrinterJob/ValidatePage/ValidatePage.java +++ b/test/jdk/java/awt/print/PrinterJob/ValidatePage/ValidatePage.java @@ -24,8 +24,8 @@ /** * @test * @bug 4252108 6229507 + * @key printer * @summary PrinterJob.validatePage() is unimplemented. - * @author prr * @run main/manual ValidatePage */ diff --git a/test/jdk/java/awt/print/PrinterJob/XparColor.java b/test/jdk/java/awt/print/PrinterJob/XparColor.java index dd39578f2cb37..9a85a78af558a 100644 --- a/test/jdk/java/awt/print/PrinterJob/XparColor.java +++ b/test/jdk/java/awt/print/PrinterJob/XparColor.java @@ -24,6 +24,7 @@ /** * @test * @bug 4179262 + @ @key printer * @summary Confirm that transparent colors are printed correctly. The * printout should show transparent rings with increasing darkness toward * the center. diff --git a/test/jdk/java/awt/print/PrinterJob/raster/RasterTest.java b/test/jdk/java/awt/print/PrinterJob/raster/RasterTest.java index 56adc8552f7cc..297094299135e 100644 --- a/test/jdk/java/awt/print/PrinterJob/raster/RasterTest.java +++ b/test/jdk/java/awt/print/PrinterJob/raster/RasterTest.java @@ -25,7 +25,7 @@ * @test * @bug 4242639 * @summary Printing quality problem on Canon and NEC - * @author prr + * @key printer * @run main/manual RasterTest */ import java.awt.*; diff --git a/test/jdk/java/awt/print/RemotePrinterStatusRefresh/RemotePrinterStatusRefresh.java b/test/jdk/java/awt/print/RemotePrinterStatusRefresh/RemotePrinterStatusRefresh.java index 3bfedb463a7fb..7768c54481a76 100644 --- a/test/jdk/java/awt/print/RemotePrinterStatusRefresh/RemotePrinterStatusRefresh.java +++ b/test/jdk/java/awt/print/RemotePrinterStatusRefresh/RemotePrinterStatusRefresh.java @@ -23,6 +23,7 @@ /* * @test + * @key printer * @bug 8153732 8212202 8221263 8221412 8222108 8263311 * @requires (os.family == "Windows") * @summary Windows remote printer changes do not reflect in lookupPrintServices() diff --git a/test/jdk/java/awt/print/bug8023392/bug8023392.html b/test/jdk/java/awt/print/bug8023392/bug8023392.html index c51ae001e2e1f..178fba9b230e1 100644 --- a/test/jdk/java/awt/print/bug8023392/bug8023392.html +++ b/test/jdk/java/awt/print/bug8023392/bug8023392.html @@ -26,7 +26,7 @@ @test @bug 8023392 @summary Swing text components printed with spaces between chars - @author Anton Nashatyrev + @key printer @modules java.desktop/sun.swing @run applet/manual=yesno bug8023392.html --> diff --git a/test/jdk/java/awt/print/bug8023392/bug8023392.java b/test/jdk/java/awt/print/bug8023392/bug8023392.java index 071c9021ddffb..d792562ea25a8 100644 --- a/test/jdk/java/awt/print/bug8023392/bug8023392.java +++ b/test/jdk/java/awt/print/bug8023392/bug8023392.java @@ -25,7 +25,7 @@ test @bug 8023392 8259232 @summary Swing text components printed with spaces between chars - @author Anton Nashatyrev + @key printer @run applet/manual=yesno bug8023392.html */ diff --git a/test/jdk/javax/print/DialogMargins.java b/test/jdk/javax/print/DialogMargins.java index cb5b488369c6f..ca45a1690a61f 100644 --- a/test/jdk/javax/print/DialogMargins.java +++ b/test/jdk/javax/print/DialogMargins.java @@ -24,12 +24,12 @@ /** * @test * @bug 4485755 6361370 6448717 5080051 6939417 8016343 + * @key printer * @summary dialog doesn't have way to specify margins * for 6361370, verify exception for offline printer in Windows * for 6448717, faster display of print dialog * for 6500903, verify status of printer if accepting jobs or not * for 8016343, verify printing to non-default printer - * @author prr * @run main/manual DialogMargins */ diff --git a/test/jdk/javax/print/LookupServices.java b/test/jdk/javax/print/LookupServices.java index 7f6b9f1f6043f..a5685dbc57c17 100644 --- a/test/jdk/javax/print/LookupServices.java +++ b/test/jdk/javax/print/LookupServices.java @@ -24,6 +24,7 @@ /* * @test * @bug 4510477 6520186 + * @key printer * @summary No crash with HP OfficeJet 600 installed. * @run main LookupServices */ diff --git a/test/jdk/javax/print/PrintServiceLookup/GetPrintServices.java b/test/jdk/javax/print/PrintServiceLookup/GetPrintServices.java index 544428566cb9d..092f7f17da550 100644 --- a/test/jdk/javax/print/PrintServiceLookup/GetPrintServices.java +++ b/test/jdk/javax/print/PrintServiceLookup/GetPrintServices.java @@ -29,6 +29,7 @@ /* * @test + * @key printer * @bug 8013810 8025439 * @summary Test that print service returned without filter are of the same class * as with name filter diff --git a/test/jdk/javax/print/PrintSubInputStream/Example.java b/test/jdk/javax/print/PrintSubInputStream/Example.java index 27acae8af6eff..b2aa913dccb47 100644 --- a/test/jdk/javax/print/PrintSubInputStream/Example.java +++ b/test/jdk/javax/print/PrintSubInputStream/Example.java @@ -23,9 +23,9 @@ /** * @test + * key printer * @bug 4700712 4707777 * @summary Should submit only 1 job in Windows and print only 1 page. - * @author jgodinez * @run main/manual Example */ import java.awt.*; diff --git a/test/jdk/javax/print/ServiceUIPropBtnTest.java b/test/jdk/javax/print/ServiceUIPropBtnTest.java index ccb57ba40376a..189b9b3ac25e8 100644 --- a/test/jdk/javax/print/ServiceUIPropBtnTest.java +++ b/test/jdk/javax/print/ServiceUIPropBtnTest.java @@ -23,6 +23,7 @@ /* @test @bug 8246742 + @key printer @summary Verifies ServiceUI.printDialog does not support properties dialog @run main/manual ServiceUIPropBtnTest */ diff --git a/test/jdk/javax/print/TextFlavorTest.java b/test/jdk/javax/print/TextFlavorTest.java index f703e8aacc576..18b5e08f6b497 100644 --- a/test/jdk/javax/print/TextFlavorTest.java +++ b/test/jdk/javax/print/TextFlavorTest.java @@ -24,6 +24,7 @@ /* @test @bug 6334074 8022536 + @key printer @summary test supported text flavors reported properly @run main TextFlavorTest */ diff --git a/test/jdk/javax/print/attribute/Chroma.java b/test/jdk/javax/print/attribute/Chroma.java index 5968f95140950..60ce9f6719ac6 100644 --- a/test/jdk/javax/print/attribute/Chroma.java +++ b/test/jdk/javax/print/attribute/Chroma.java @@ -21,7 +21,7 @@ * questions. */ /* - * @test 1.3 01/05/11 + * @test * @bug 4456750 * @summary Test for supported chromaticity values with null DocFlavor. * No exception should be thrown. diff --git a/test/jdk/javax/print/attribute/CollateAttr.java b/test/jdk/javax/print/attribute/CollateAttr.java index 5ea8a78be3754..0c6cef60bce90 100644 --- a/test/jdk/javax/print/attribute/CollateAttr.java +++ b/test/jdk/javax/print/attribute/CollateAttr.java @@ -24,6 +24,7 @@ /** * @test * @bug 6574117 + * @key printer * @summary Verify no NPE testing service support of SheetCollate * @run main CollateAttr */ diff --git a/test/jdk/javax/print/attribute/PSCopiesFlavorTest.java b/test/jdk/javax/print/attribute/PSCopiesFlavorTest.java index 25b5d955fa555..3f78fa3853744 100644 --- a/test/jdk/javax/print/attribute/PSCopiesFlavorTest.java +++ b/test/jdk/javax/print/attribute/PSCopiesFlavorTest.java @@ -24,6 +24,7 @@ /** * @test * @bug 6527316 6732647 + * @key printer * @summary Copies isn't supported for PS flavors. * @run main PSCopiesFlavorTest */ diff --git a/test/jdk/javax/print/attribute/PrintResAttr.java b/test/jdk/javax/print/attribute/PrintResAttr.java index c5467b3253275..dee94ae1b78d0 100644 --- a/test/jdk/javax/print/attribute/PrintResAttr.java +++ b/test/jdk/javax/print/attribute/PrintResAttr.java @@ -23,6 +23,7 @@ /** * @test + * @key printer * @bug 8048328 * @summary CUPS Printing does not report supported printer resolutions. * @run main PrintResAttr diff --git a/test/jdk/javax/print/attribute/ServiceDialogTest.java b/test/jdk/javax/print/attribute/ServiceDialogTest.java index bce24e749cf68..626325ab1a417 100644 --- a/test/jdk/javax/print/attribute/ServiceDialogTest.java +++ b/test/jdk/javax/print/attribute/ServiceDialogTest.java @@ -25,6 +25,7 @@ /** * @test * @bug 4910388 4871089 4998624 + * @key printer * @summary Confirm that * 1. After choosing Reverse Landscape in the system default print * Print Service (2nd in the list), it diff --git a/test/jdk/javax/print/attribute/ServiceDialogValidateTest.java b/test/jdk/javax/print/attribute/ServiceDialogValidateTest.java index 929f76869cff3..3598d4ae7bd04 100644 --- a/test/jdk/javax/print/attribute/ServiceDialogValidateTest.java +++ b/test/jdk/javax/print/attribute/ServiceDialogValidateTest.java @@ -23,6 +23,7 @@ /* * @test * @bug 5049012 8163922 + * @key printer * @summary Verify if PrintToFile option is disabled for flavors that do not * support Destination * @requires (os.family == "linux") diff --git a/test/jdk/javax/print/attribute/ServiceDlgPageRangeTest.java b/test/jdk/javax/print/attribute/ServiceDlgPageRangeTest.java index bdf3368f5b0bc..f2982a13669bb 100644 --- a/test/jdk/javax/print/attribute/ServiceDlgPageRangeTest.java +++ b/test/jdk/javax/print/attribute/ServiceDlgPageRangeTest.java @@ -23,6 +23,7 @@ /* * @test * @bug 5080098 8164205 + * @key printer * @summary Verify if PageRanges option is disabled for Non service-formatted * flavors. * @run main/manual ServiceDlgPageRangeTest diff --git a/test/jdk/javax/print/attribute/ServiceDlgSheetCollateTest.java b/test/jdk/javax/print/attribute/ServiceDlgSheetCollateTest.java index 4f80acc29aab2..dd569639f2597 100644 --- a/test/jdk/javax/print/attribute/ServiceDlgSheetCollateTest.java +++ b/test/jdk/javax/print/attribute/ServiceDlgSheetCollateTest.java @@ -23,6 +23,7 @@ /* * @test * @bug 5080830 + * @key printer * @summary Verify if SheetCollate option is disabled for flavors that do not * support SheetCollate * @run main/manual ServiceDlgSheetCollateTest diff --git a/test/jdk/javax/print/attribute/Services_getDocFl.java b/test/jdk/javax/print/attribute/Services_getDocFl.java index ca926b3992834..63986e46a9383 100644 --- a/test/jdk/javax/print/attribute/Services_getDocFl.java +++ b/test/jdk/javax/print/attribute/Services_getDocFl.java @@ -28,6 +28,7 @@ /* * @test + * @key printer * @bug 4901243 8040139 8167291 * @summary JPG, GIF, and PNG DocFlavors (URL) should be supported if Postscript is supported. * @run main Services_getDocFl diff --git a/test/jdk/javax/print/attribute/SidesAttributeTest.java b/test/jdk/javax/print/attribute/SidesAttributeTest.java index 60454f304076d..09890c7211bce 100644 --- a/test/jdk/javax/print/attribute/SidesAttributeTest.java +++ b/test/jdk/javax/print/attribute/SidesAttributeTest.java @@ -25,6 +25,7 @@ /* * @test * @bug JDK-8311033 + * @key printer * @summary [macos] PrinterJob does not take into account Sides attribute * @run main/manual SidesAttributeTest */ diff --git a/test/jdk/javax/print/attribute/TestUnsupportedResolution.java b/test/jdk/javax/print/attribute/TestUnsupportedResolution.java index 0ecf842af2aa4..78e7e93c5f535 100644 --- a/test/jdk/javax/print/attribute/TestUnsupportedResolution.java +++ b/test/jdk/javax/print/attribute/TestUnsupportedResolution.java @@ -25,6 +25,7 @@ /** * @test * @bug 8033277 + * @key printer * @summary Confirm that scaling of printout is correct. Manual comparison with printout using a supported resolution is needed. * @run main/manual TestUnsupportedResolution */ diff --git a/test/jdk/javax/print/attribute/autosense/PrintAutoSenseData.java b/test/jdk/javax/print/attribute/autosense/PrintAutoSenseData.java index f5ddc0d15e275..008e0917342a3 100644 --- a/test/jdk/javax/print/attribute/autosense/PrintAutoSenseData.java +++ b/test/jdk/javax/print/attribute/autosense/PrintAutoSenseData.java @@ -24,6 +24,7 @@ /* * @test * @bug 4468109 8021583 + * @key printer * @summary Test for printing AUTOSENSE DocFlavor. No exception should be thrown. * @run main PrintAutoSenseData */ From 56d4c33f4096d98d08eba870070b5f21125f80be Mon Sep 17 00:00:00 2001 From: Alexey Semenyuk Date: Fri, 1 Dec 2023 01:53:20 +0000 Subject: [PATCH 154/250] 8227529: With malformed --app-image the error messages are awful Reviewed-by: almatvee --- .../jdk/jpackage/test/JPackageCommand.java | 22 ++++++-- .../jdk/jpackage/test/PackageTest.java | 6 ++- .../jpackage/share/AppImagePackageTest.java | 50 +++++++++++++++++++ 3 files changed, 71 insertions(+), 7 deletions(-) diff --git a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/JPackageCommand.java b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/JPackageCommand.java index 30a4c6f8cd8e5..fd62d6c7d8820 100644 --- a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/JPackageCommand.java +++ b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/JPackageCommand.java @@ -423,6 +423,14 @@ public Path outputBundle() { return outputDir().resolve(bundleName); } + Optional nullableOutputBundle() { + try { + return Optional.ofNullable(outputBundle()); + } catch (Exception ex) { + return Optional.empty(); + } + } + /** * Returns application layout. * @@ -749,11 +757,15 @@ public Executor.Result execute(int expectedExitCode) { if (hasArgument("--dest")) { if (isImagePackageType()) { TKit.deleteDirectoryContentsRecursive(outputDir()); - } else if (ThrowingSupplier.toSupplier(() -> TKit.deleteIfExists( - outputBundle())).get()) { - TKit.trace( - String.format("Deleted [%s] file before running jpackage", - outputBundle())); + } else { + nullableOutputBundle().ifPresent(path -> { + if (ThrowingSupplier.toSupplier(() -> TKit.deleteIfExists( + path)).get()) { + TKit.trace(String.format( + "Deleted [%s] file before running jpackage", + path)); + } + }); } } diff --git a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/PackageTest.java b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/PackageTest.java index 834948b830ae8..d597c62d83f17 100644 --- a/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/PackageTest.java +++ b/test/jdk/tools/jpackage/helpers/jdk/jpackage/test/PackageTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2023, 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 @@ -582,7 +582,9 @@ public void accept(Action action, JPackageCommand cmd) { if (expectedJPackageExitCode == 0) { TKit.assertFileExists(cmd.outputBundle()); } else { - TKit.assertPathExists(cmd.outputBundle(), false); + cmd.nullableOutputBundle().ifPresent(outputBundle -> { + TKit.assertPathExists(outputBundle, false); + }); } verifyPackageBundle(cmd, result); break; diff --git a/test/jdk/tools/jpackage/share/AppImagePackageTest.java b/test/jdk/tools/jpackage/share/AppImagePackageTest.java index 4f229e5c93459..949e68faae2ee 100644 --- a/test/jdk/tools/jpackage/share/AppImagePackageTest.java +++ b/test/jdk/tools/jpackage/share/AppImagePackageTest.java @@ -25,6 +25,7 @@ import java.nio.file.Files; import java.io.IOException; import java.util.List; +import jdk.jpackage.internal.AppImageFile; import jdk.jpackage.test.Annotations.Parameter; import jdk.jpackage.test.TKit; import jdk.jpackage.test.JPackageCommand; @@ -102,6 +103,55 @@ public static void testEmpty(boolean withIcon) throws IOException { // default: {CREATE, UNPACK, VERIFY}, but we can't verify foreign image } + @Test + public static void testBadAppImage() throws IOException { + Path appImageDir = TKit.createTempDirectory("appimage"); + Files.createFile(appImageDir.resolve("foo")); + configureAppImageWithoutJPackageXMLFile(appImageDir).addInitializer( + cmd -> { + cmd.removeArgumentWithValue("--name"); + }).run(Action.CREATE); + } + + @Test + public static void testBadAppImage2() throws IOException { + Path appImageDir = TKit.createTempDirectory("appimage"); + Files.createFile(appImageDir.resolve("foo")); + configureAppImageWithoutJPackageXMLFile(appImageDir).run(Action.CREATE); + } + + @Test + public static void testBadAppImage3() throws IOException { + Path appImageDir = TKit.createTempDirectory("appimage"); + + JPackageCommand appImageCmd = JPackageCommand.helloAppImage(). + setFakeRuntime().setArgumentValue("--dest", appImageDir); + + configureAppImageWithoutJPackageXMLFile(appImageCmd.outputBundle()). + addRunOnceInitializer(() -> { + appImageCmd.execute(); + Files.delete(AppImageFile.getPathInAppImage(appImageCmd. + outputBundle())); + }).run(Action.CREATE); + } + + private static PackageTest configureAppImageWithoutJPackageXMLFile( + Path appImageDir) { + return new PackageTest() + .addInitializer(cmd -> { + cmd.saveConsoleOutput(true); + cmd.addArguments("--app-image", appImageDir); + cmd.removeArgumentWithValue("--input"); + cmd.ignoreDefaultVerbose(true); // no "--verbose" option + }) + .addBundleVerifier((cmd, result) -> { + TKit.assertTextStream( + "Error: Missing .jpackage.xml file in app-image dir").apply( + result.getOutput().stream()); + }) + .setExpectedExitCode(1); + } + private static Path iconPath(String name) { return TKit.TEST_SRC_ROOT.resolve(Path.of("resources", name + TKit.ICON_SUFFIX)); From 02ffab1a4d9e1209f3f1da715acae975e0754551 Mon Sep 17 00:00:00 2001 From: Vladimir Kozlov Date: Fri, 1 Dec 2023 03:35:31 +0000 Subject: [PATCH 155/250] 8321141: VM build issue on MacOS after JDK-8267532 Reviewed-by: jiefu --- src/hotspot/share/ci/ciMethodData.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/hotspot/share/ci/ciMethodData.cpp b/src/hotspot/share/ci/ciMethodData.cpp index 8d1772f655fa9..dc7082c15ca9d 100644 --- a/src/hotspot/share/ci/ciMethodData.cpp +++ b/src/hotspot/share/ci/ciMethodData.cpp @@ -474,6 +474,7 @@ ciBitData ciMethodData::exception_handler_bci_to_data(int bci) { } // called with invalid bci or wrong Method/MethodData ShouldNotReachHere(); + return ciBitData(nullptr); } // Conservatively decode the trap_state of a ciProfileData. From 4ba94ef69ef2ee576c50bb6003a795746dcdf30d Mon Sep 17 00:00:00 2001 From: Aggelos Biboudis Date: Fri, 1 Dec 2023 07:13:39 +0000 Subject: [PATCH 156/250] 8320145: Compiler should accept final variable in Record Pattern Reviewed-by: jlahoda --- .../sun/tools/javac/parser/JavacParser.java | 2 + .../tools/javac/patterns/T8317300.out | 6 +-- .../tools/javac/patterns/T8320145.java | 42 +++++++++++++++++++ 3 files changed, 46 insertions(+), 4 deletions(-) create mode 100644 test/langtools/tools/javac/patterns/T8320145.java diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java index bf124bc35bc66..977df7759ab64 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java @@ -3361,6 +3361,8 @@ PatternResult analyzePattern(int lookahead) { case RPAREN: parenDepth--; break; case ARROW: return parenDepth > 0 ? PatternResult.EXPRESSION : pendingResult; + case FINAL: + if (parenDepth > 0) return PatternResult.PATTERN; default: return pendingResult; } lookahead++; diff --git a/test/langtools/tools/javac/patterns/T8317300.out b/test/langtools/tools/javac/patterns/T8317300.out index f28fd7467d80a..6889c873db560 100644 --- a/test/langtools/tools/javac/patterns/T8317300.out +++ b/test/langtools/tools/javac/patterns/T8317300.out @@ -1,5 +1,3 @@ T8317300.java:13:18: compiler.err.mod.not.allowed.here: final -T8317300.java:20:22: compiler.err.illegal.start.of.expr -T8317300.java:20:31: compiler.err.expected: token.identifier -T8317300.java:20:37: compiler.err.expected: ';' -4 errors +T8317300.java:20:22: compiler.err.mod.not.allowed.here: final +2 errors diff --git a/test/langtools/tools/javac/patterns/T8320145.java b/test/langtools/tools/javac/patterns/T8320145.java new file mode 100644 index 0000000000000..67c851a82aa84 --- /dev/null +++ b/test/langtools/tools/javac/patterns/T8320145.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +/* + * @test + * @bug 8320145 + * @summary Compiler should accept final variable in Record Pattern + * @compile T8320145.java + */ +public class T8320145 { + record ARecord(String aComponent) {} + record BRecord(ARecord aComponent) {} + record CRecord(ARecord aComponent1, ARecord aComponent2) {} + + public String match(Object o) { + return switch(o) { + case ARecord(final String s) -> s; + case BRecord(ARecord(final String s)) -> s; + case CRecord(ARecord(String s), ARecord(final String s2)) -> s; + default -> "No match"; + }; + } +} From 2476be4590f9ece654d16bf7b94f108f18a86061 Mon Sep 17 00:00:00 2001 From: Alan Bateman Date: Fri, 1 Dec 2023 07:31:10 +0000 Subject: [PATCH 157/250] 8320716: ResolvedModule::reads includes self when configuration contains two or more automatic modules Reviewed-by: mchung --- .../java/lang/module/ResolvedModule.java | 4 +- .../classes/java/lang/module/Resolver.java | 44 +-- .../lang/module/AutomaticModulesTest.java | 323 +++++++++--------- 3 files changed, 183 insertions(+), 188 deletions(-) diff --git a/src/java.base/share/classes/java/lang/module/ResolvedModule.java b/src/java.base/share/classes/java/lang/module/ResolvedModule.java index 7309e291b4b95..0237dbe295967 100644 --- a/src/java.base/share/classes/java/lang/module/ResolvedModule.java +++ b/src/java.base/share/classes/java/lang/module/ResolvedModule.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2023, 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 @@ -97,6 +97,8 @@ public String name() { /** * Returns the set of resolved modules that this resolved module reads. + * The readability relation is reflexive (every module reads itself). The + * set of resolved modules returned by this method does not include itself. * * @return A possibly-empty unmodifiable set of resolved modules that * this resolved module reads diff --git a/src/java.base/share/classes/java/lang/module/Resolver.java b/src/java.base/share/classes/java/lang/module/Resolver.java index 3cd0254ba4e68..bff087fb67432 100644 --- a/src/java.base/share/classes/java/lang/module/Resolver.java +++ b/src/java.base/share/classes/java/lang/module/Resolver.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2023, 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 @@ -497,7 +497,6 @@ private void checkHashes() { * and m2 reads m3. */ private Map> makeGraph(Configuration cf) { - int moduleCount = nameToReference.size(); // the "reads" graph starts as a module dependence graph and @@ -537,9 +536,7 @@ private Map> makeGraph(Configuration cf) { } // populate g1 and g2 with the dependences from the selected modules - Map nameToResolved = HashMap.newHashMap(moduleCount); - for (ModuleReference mref : nameToReference.values()) { ModuleDescriptor descriptor = mref.descriptor(); String name = descriptor.name(); @@ -595,8 +592,7 @@ private Map> makeGraph(Configuration cf) { String name2 = descriptor2.name(); if (!name.equals(name2)) { - ResolvedModule m2 - = computeIfAbsent(nameToResolved, name2, cf, mref2); + ResolvedModule m2 = computeIfAbsent(nameToResolved, name2, cf, mref2); reads.add(m2); if (descriptor2.isAutomatic()) requiresTransitive.add(m2); @@ -622,29 +618,33 @@ private Map> makeGraph(Configuration cf) { g2.put(m1, requiresTransitive); } - // Iteratively update g1 until there are no more requires transitive - // to propagate + // Iteratively update g1 until there are no more requires transitive to propagate boolean changed; List toAdd = new ArrayList<>(); do { changed = false; - for (Set m1Reads : g1.values()) { - for (ResolvedModule m2 : m1Reads) { - Set m2RequiresTransitive = g2.get(m2); - if (m2RequiresTransitive != null) { - for (ResolvedModule m3 : m2RequiresTransitive) { - if (!m1Reads.contains(m3)) { - // m1 reads m2, m2 requires transitive m3 - // => need to add m1 reads m3 - toAdd.add(m3); + for (Map.Entry> e : g1.entrySet()) { + ResolvedModule m1 = e.getKey(); + // automatic module already reads all selected modules so nothing to propagate + if (!m1.descriptor().isAutomatic()) { + Set m1Reads = e.getValue(); + for (ResolvedModule m2 : m1Reads) { + Set m2RequiresTransitive = g2.get(m2); + if (m2RequiresTransitive != null) { + for (ResolvedModule m3 : m2RequiresTransitive) { + if (!m1Reads.contains(m3)) { + // m1 reads m2, m2 requires transitive m3 + // => need to add m1 reads m3 + toAdd.add(m3); + } } } } - } - if (!toAdd.isEmpty()) { - m1Reads.addAll(toAdd); - toAdd.clear(); - changed = true; + if (!toAdd.isEmpty()) { + m1Reads.addAll(toAdd); + toAdd.clear(); + changed = true; + } } } } while (changed); diff --git a/test/jdk/java/lang/module/AutomaticModulesTest.java b/test/jdk/java/lang/module/AutomaticModulesTest.java index a1977ae8774dc..84240be22fea0 100644 --- a/test/jdk/java/lang/module/AutomaticModulesTest.java +++ b/test/jdk/java/lang/module/AutomaticModulesTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,12 +23,12 @@ /** * @test - * @bug 8142968 8253751 8262944 + * @bug 8142968 8253751 8262944 8314986 * @library /test/lib * @build AutomaticModulesTest * jdk.test.lib.util.JarUtils * jdk.test.lib.util.ModuleUtils - * @run testng AutomaticModulesTest + * @run junit AutomaticModulesTest * @summary Basic tests for automatic modules */ @@ -54,75 +54,69 @@ import jdk.test.lib.util.JarUtils; import jdk.test.lib.util.ModuleUtils; -import org.testng.annotations.DataProvider; -import org.testng.annotations.Test; -import static org.testng.Assert.*; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; +import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.params.provider.Arguments.arguments; -@Test public class AutomaticModulesTest { - private static final Path USER_DIR = Path.of(System.getProperty("user.dir")); - @DataProvider(name = "jarnames") - public Object[][] createJarNames() { - return new Object[][] { - - // JAR file name module-name[/version] - - { "foo.jar", "foo" }, - { "foo4j.jar", "foo4j", }, - - { "foo1.jar", "foo1" }, - { "foo10.jar", "foo10" }, - - { "foo-1.jar", "foo/1" }, - { "foo-1.2.jar", "foo/1.2" }, - { "foo-1.2.3.jar", "foo/1.2.3" }, - { "foo-1.2.3.4.jar", "foo/1.2.3.4" }, - - { "foo-10.jar", "foo/10" }, - { "foo-10.20.jar", "foo/10.20" }, - { "foo-10.20.30.jar", "foo/10.20.30" }, - { "foo-10.20.30.40.jar", "foo/10.20.30.40" }, - - { "foo-bar.jar", "foo.bar" }, - { "foo-bar-1.jar", "foo.bar/1" }, - { "foo-bar-1.2.jar", "foo.bar/1.2"}, - { "foo-bar-10.jar", "foo.bar/10" }, - { "foo-bar-10.20.jar", "foo.bar/10.20" }, - - { "foo.bar1.jar", "foo.bar1" }, - { "foo.bar10.jar", "foo.bar10" }, - - { "foo-1.2-SNAPSHOT.jar", "foo/1.2-SNAPSHOT" }, - { "foo-bar-1.2-SNAPSHOT.jar", "foo.bar/1.2-SNAPSHOT" }, - - { "foo--bar-1.0.jar", "foo.bar/1.0" }, - { "-foo-bar-1.0.jar", "foo.bar/1.0" }, - { "foo-bar--1.0.jar", "foo.bar/1.0" }, - - }; + // JAR file name to expected module name / version + static Stream jarNames() { + return Stream.of( + arguments( "foo.jar", "foo" ), + arguments( "foo4j.jar", "foo4j" ), + + arguments( "foo1.jar", "foo1" ), + arguments( "foo10.jar", "foo10" ), + + arguments( "foo-1.jar", "foo/1" ), + arguments( "foo-1.2.jar", "foo/1.2" ), + arguments( "foo-1.2.3.jar", "foo/1.2.3" ), + arguments( "foo-1.2.3.4.jar", "foo/1.2.3.4" ), + + arguments( "foo-10.jar", "foo/10" ), + arguments( "foo-10.20.jar", "foo/10.20" ), + arguments( "foo-10.20.30.jar", "foo/10.20.30" ), + arguments( "foo-10.20.30.40.jar", "foo/10.20.30.40" ), + + arguments( "foo-bar.jar", "foo.bar" ), + arguments( "foo-bar-1.jar", "foo.bar/1" ), + arguments( "foo-bar-1.2.jar", "foo.bar/1.2" ), + arguments( "foo-bar-10.jar", "foo.bar/10" ), + arguments( "foo-bar-10.20.jar", "foo.bar/10.20" ), + + arguments("foo.bar1.jar", "foo.bar1" ), + arguments( "foo.bar10.jar", "foo.bar10" ), + + arguments( "foo-1.2-SNAPSHOT.jar", "foo/1.2-SNAPSHOT" ), + arguments( "foo-bar-1.2-SNAPSHOT.jar", "foo.bar/1.2-SNAPSHOT" ), + + arguments( "foo--bar-1.0.jar", "foo.bar/1.0" ), + arguments( "-foo-bar-1.0.jar", "foo.bar/1.0" ), + arguments( "foo-bar--1.0.jar", "foo.bar/1.0" ) + ); } // JAR file names that do not map to a legal module name - @DataProvider(name = "badjarnames") - public Object[][] createBadNames() { - return new Object[][]{ - - { ".jar", null }, - { "_.jar", null }, - - { "foo.1.jar", null }, - { "1foo.jar", null }, - { "foo.1bar.jar", null }, - - }; + static Stream barJarNames() { + return Stream.of( + ".jar", + "_.jar", + "foo.1.jar", + "1foo.jar", + "foo.1bar.jar" + ); } /** * Test mapping of JAR file names to module names */ - @Test(dataProvider = "jarnames") + @ParameterizedTest + @MethodSource("jarNames") public void testNames(String fn, String mid) throws IOException { String[] s = mid.split("/"); String mn = s[0]; @@ -143,19 +137,20 @@ public void testNames(String fn, String mid) throws IOException { ModuleDescriptor descriptor = mref.get().descriptor(); assertTrue(descriptor.isAutomatic()); - assertEquals(descriptor.name(), mn); + assertEquals(mn, descriptor.name()); if (vs == null) { assertFalse(descriptor.version().isPresent()); } else { - assertEquals(descriptor.version().get().toString(), vs); + assertEquals(vs, descriptor.version().get().toString()); } } /** * Test impossible mapping of JAR files to modules names */ - @Test(dataProvider = "badjarnames", expectedExceptions = FindException.class) - public void testBadNames(String fn, String ignore) throws IOException { + @ParameterizedTest + @MethodSource("barJarNames") + public void testBadNames(String fn) throws IOException { Path dir = Files.createTempDirectory(USER_DIR, "mods"); Path jf = dir.resolve(fn); @@ -163,37 +158,36 @@ public void testBadNames(String fn, String ignore) throws IOException { createDummyJarFile(jf); // should throw FindException - ModuleFinder.of(dir).findAll(); + var finder = ModuleFinder.of(dir); + assertThrows(FindException.class, finder::findAll); } - @DataProvider(name = "modulenames") - public Object[][] createModuleNames() { - return new Object[][] { - { "foo", null }, - { "foo", "1.0" }, - { "foo.bar", null }, - { "foo.bar", "1.0" }, - { "class_", null }, - { "class_", "1.0" }, - }; + // Automatic-Module-Name attribute values and version in JAR file name + static Stream automaticModuleNames() { + return Stream.of( + arguments( "foo", null ), + arguments( "foo", "1.0" ), + arguments( "foo.bar", null ), + arguments( "foo.bar", "1.0" ), + arguments( "class_", null ), + arguments( "class_", "1.0" ) + ); } - @DataProvider(name = "badmodulenames") - public Object[][] createBadModuleNames() { - return new Object[][] { - { "", null }, - { "", "1.0" }, - { "666", null }, - { "666", "1.0" }, - { "foo.class", null }, - { "foo.class", "1.0" }, - }; + // Bad Automatic-Module-Name attribute values + static Stream badAutomaticModuleNames() { + return Stream.of( + "", + "666", + "foo.class" + ); } /** * Test JAR files with the Automatic-Module-Name attribute */ - @Test(dataProvider = "modulenames") + @ParameterizedTest + @MethodSource("automaticModuleNames") public void testAutomaticModuleNameAttribute(String name, String vs) throws IOException { @@ -218,27 +212,26 @@ public void testAutomaticModuleNameAttribute(String name, String vs) ModuleReference mref = finder.find(name).get(); ModuleDescriptor descriptor = mref.descriptor(); - assertEquals(descriptor.name(), name); - assertEquals(descriptor.version() + assertEquals(name, descriptor.name()); + assertEquals(vs, descriptor.version() .map(ModuleDescriptor.Version::toString) - .orElse(null), vs); + .orElse(null)); } /** * Test JAR files with the Automatic-Module-Name attribute with a value * that is not a legal module name. */ - @Test(dataProvider = "badmodulenames", expectedExceptions = FindException.class) - public void testBadAutomaticModuleNameAttribute(String name, String ignore) - throws IOException - { - // should throw FindException - testAutomaticModuleNameAttribute(name, null); + @ParameterizedTest + @MethodSource("badAutomaticModuleNames") + public void testBadAutomaticModuleNameAttribute(String name) throws IOException { + assertThrows(FindException.class, () -> testAutomaticModuleNameAttribute(name, null)); } /** * Test all packages are exported */ + @Test public void testPackages() throws IOException { Path dir = Files.createTempDirectory(USER_DIR, "mods"); createDummyJarFile(dir.resolve("m.jar"), @@ -263,6 +256,7 @@ public void testPackages() throws IOException { * Test class files in JAR file where the entry does not correspond to a * legal package name. */ + @Test public void testBadPackage() throws IOException { Path dir = Files.createTempDirectory(USER_DIR, "mods"); createDummyJarFile(dir.resolve("m.jar"), "p/C1.class", "p-/C2.class"); @@ -284,6 +278,7 @@ public void testBadPackage() throws IOException { /** * Test non-class resources in a JAR file. */ + @Test public void testNonClassResources() throws IOException { Path dir = Files.createTempDirectory(USER_DIR, "mods"); createDummyJarFile(dir.resolve("m.jar"), @@ -307,17 +302,18 @@ public void testNonClassResources() throws IOException { /** * Test .class file in unnamed package (top-level directory) */ - @Test(expectedExceptions = FindException.class) + @Test public void testClassInUnnamedPackage() throws IOException { Path dir = Files.createTempDirectory(USER_DIR, "mods"); createDummyJarFile(dir.resolve("m.jar"), "Mojo.class"); - ModuleFinder finder = ModuleFinder.of(dir); - finder.findAll(); + var finder = ModuleFinder.of(dir); + assertThrows(FindException.class, finder::findAll); } /** * Test JAR file with META-INF/services configuration file */ + @Test public void testServicesConfiguration() throws IOException { String service = "p.S"; String provider = "p.S1"; @@ -345,27 +341,25 @@ public void testServicesConfiguration() throws IOException { ModuleDescriptor descriptor = mref.get().descriptor(); assertTrue(descriptor.provides().size() == 1); ModuleDescriptor.Provides provides = descriptor.provides().iterator().next(); - assertEquals(provides.service(), service); + assertEquals(service, provides.service()); assertTrue(provides.providers().size() == 1); assertTrue(provides.providers().contains((provider))); } // META-INF/services files that don't map to legal service names - @DataProvider(name = "badservices") - public Object[][] createBadServices() { - return new Object[][] { - - // service type provider type - { "-", "p.S1" }, - { ".S", "p.S1" }, - }; + static Stream badServices() { + return Stream.of( + arguments( "-", "p.S1" ), + arguments( ".S", "p.S1" ) + ); } /** * Test JAR file with META-INF/services configuration file with bad * values or names. */ - @Test(dataProvider = "badservices") + @ParameterizedTest + @MethodSource("badServices") public void testBadServicesNames(String service, String provider) throws IOException { @@ -383,22 +377,20 @@ public void testBadServicesNames(String service, String provider) } // META-INF/services configuration file entries that are not legal - @DataProvider(name = "badproviders") - public Object[][] createBadProviders() { - return new Object[][] { - - // service type provider type - { "p.S", "-" }, - { "p.S", "p..S1" }, - { "p.S", "S1." }, - }; + static Stream badProviders() { + return Stream.of( + arguments("p.S", "-"), + arguments("p.S", "p..S1"), + arguments("p.S", "S1.") + ); } /** * Test JAR file with META-INF/services configuration file with bad * values or names. */ - @Test(dataProvider = "badproviders", expectedExceptions = FindException.class) + @ParameterizedTest + @MethodSource("badProviders") public void testBadProviderNames(String service, String provider) throws IOException { @@ -418,14 +410,15 @@ public void testBadProviderNames(String service, String provider) JarUtils.createJarFile(dir.resolve("m.jar"), tmpdir); // should throw FindException - ModuleFinder.of(dir).findAll(); + var finder = ModuleFinder.of(dir); + assertThrows(FindException.class, finder::findAll); } /** * Test JAR file with META-INF/services configuration file listing a * provider that is not in the module. */ - @Test(expectedExceptions = FindException.class) + @Test public void testMissingProviderPackage() throws IOException { Path tmpdir = Files.createTempDirectory(USER_DIR, "tmp"); @@ -438,31 +431,20 @@ public void testMissingProviderPackage() throws IOException { Path jarfile = dir.resolve("m.jar"); JarUtils.createJarFile(jarfile, tmpdir); - // catch FindException, inspect its cause's type and details, and rethrow - var expectedMessage = "Provider class q.P not in JAR file " + jarfile.getFileName(); - try { - ModuleFinder.of(dir).findAll(); - } catch (FindException exception) { - if (exception.getCause() instanceof InvalidModuleDescriptorException imde) { - var actualMessage = imde.getMessage(); - if (actualMessage.equals(expectedMessage)) { - throw exception; // rethrow as expected - } - throw new AssertionError( - """ - Unexpected detail message in InvalidModuleDescriptorException: - Expected message -> '%s' - Actual message -> '%s' - """.formatted(expectedMessage, actualMessage)); - } - throw new AssertionError("Unexpected exception cause: " + exception.getCause()); - } + // FindException should be thrown with InvalidModuleDescriptorException as cause + var finder = ModuleFinder.of(dir); + FindException ex = assertThrows(FindException.class, () -> finder.findAll()); + Throwable cause = ex.getCause(); + assertTrue(cause instanceof InvalidModuleDescriptorException); + var imde = (InvalidModuleDescriptorException) cause; + assertEquals("Provider class q.P not in JAR file " + jarfile.getFileName(), imde.getMessage()); } /** * Test that a JAR file with a Main-Class attribute results * in a module with a main class. */ + @Test public void testMainClass() throws IOException { String mainClass = "p.Main"; @@ -481,27 +463,24 @@ public void testMainClass() throws IOException { Configuration cf = resolve(parent, finder, "m"); ModuleDescriptor descriptor = findDescriptor(cf, "m"); - - assertTrue(descriptor.mainClass().isPresent()); - assertEquals(descriptor.mainClass().get(), mainClass); + assertEquals(mainClass, descriptor.mainClass().get()); } - // Main-Class files that do not map to a legal qualified type name - @DataProvider(name = "badmainclass") - public Object[][] createBadMainClass() { - return new Object[][] { - { "p..Main", null }, - { "p-.Main", null }, - - }; + // Main-Class attribute values that do not map to a legal qualified type name + static Stream badMainClasses() { + return Stream.of( + "p..Main", + "p-.Main" + ); } /** * Test that a JAR file with a Main-Class attribute that is not a qualified * type name. */ - @Test(dataProvider = "badmainclass") - public void testBadMainClass(String mainClass, String ignore) throws IOException { + @ParameterizedTest + @MethodSource("badMainClasses") + public void testBadMainClass(String mainClass) throws IOException { Manifest man = new Manifest(); Attributes attrs = man.getMainAttributes(); attrs.put(Attributes.Name.MANIFEST_VERSION, "1.0.0"); @@ -521,6 +500,7 @@ public void testBadMainClass(String mainClass, String ignore) throws IOException /** * Test that a JAR file with a Main-Class attribute that is not in the module */ + @Test public void testMissingMainClassPackage() throws IOException { Manifest man = new Manifest(); Attributes attrs = man.getMainAttributes(); @@ -544,6 +524,7 @@ public void testMissingMainClassPackage() throws IOException { * b* * c* */ + @Test public void testConfiguration1() throws Exception { ModuleDescriptor descriptor1 = ModuleDescriptor.newModule("a") @@ -588,13 +569,14 @@ public void testConfiguration1() throws Exception { assertTrue(a.reads().contains(c)); assertTrue(b.reads().contains(a)); + assertFalse(b.reads().contains(b)); assertTrue(b.reads().contains(c)); testReadAllBootModules(cf, "b"); // b reads all modules in boot layer assertTrue(c.reads().contains(a)); assertTrue(c.reads().contains(b)); + assertFalse(c.reads().contains(c)); testReadAllBootModules(cf, "c"); // c reads all modules in boot layer - } /** @@ -604,6 +586,7 @@ public void testConfiguration1() throws Exception { * c* * d* */ + @Test public void testInConfiguration2() throws IOException { ModuleDescriptor descriptor1 = ModuleDescriptor.newModule("a") @@ -660,12 +643,14 @@ public void testInConfiguration2() throws IOException { assertTrue(c.reads().contains(a)); assertTrue(c.reads().contains(b)); + assertFalse(c.reads().contains(c)); assertTrue(c.reads().contains(d)); testReadAllBootModules(cf, "c"); // c reads all modules in boot layer assertTrue(d.reads().contains(a)); assertTrue(d.reads().contains(b)); assertTrue(d.reads().contains(c)); + assertFalse(d.reads().contains(d)); testReadAllBootModules(cf, "d"); // d reads all modules in boot layer } @@ -676,6 +661,7 @@ public void testInConfiguration2() throws IOException { * c* * d* */ + @Test public void testInConfiguration3() throws IOException { ModuleDescriptor descriptor1 = ModuleDescriptor.newModule("a") @@ -732,18 +718,16 @@ public void testInConfiguration3() throws IOException { assertTrue(b.reads().contains(d)); assertTrue(b.reads().contains(base)); - assertTrue(reads(cf, "b", "c")); - assertTrue(reads(cf, "b", "d")); - assertTrue(reads(cf, "b", "java.base")); - assertTrue(c.reads().contains(a)); assertTrue(c.reads().contains(b)); + assertFalse(c.reads().contains(c)); assertTrue(c.reads().contains(d)); testReadAllBootModules(cf, "c"); // c reads all modules in boot layer assertTrue(d.reads().contains(a)); assertTrue(d.reads().contains(b)); assertTrue(d.reads().contains(c)); + assertFalse(d.reads().contains(d)); testReadAllBootModules(cf, "d"); // d reads all modules in boot layer } @@ -751,6 +735,7 @@ public void testInConfiguration3() throws IOException { * Basic test to ensure that no automatic modules are resolved when * an automatic module is not a root or required by other modules. */ + @Test public void testInConfiguration4() throws IOException { ModuleDescriptor descriptor1 = ModuleDescriptor.newModule("m1") @@ -780,6 +765,7 @@ public void testInConfiguration4() throws IOException { * Basic test to ensure that if an automatic module is resolved then * all observable automatic modules are resolved. */ + @Test public void testInConfiguration5() throws IOException { // m1 requires m2 ModuleDescriptor descriptor1 @@ -836,6 +822,7 @@ public void testInConfiguration5() throws IOException { assertTrue(auto1.reads().contains(m1)); assertTrue(auto1.reads().contains(m2)); + assertFalse(auto1.reads().contains(auto1)); assertTrue(auto1.reads().contains(auto2)); assertTrue(auto1.reads().contains(auto3)); assertTrue(auto1.reads().contains(base)); @@ -843,6 +830,7 @@ public void testInConfiguration5() throws IOException { assertTrue(auto2.reads().contains(m1)); assertTrue(auto2.reads().contains(m2)); assertTrue(auto2.reads().contains(auto1)); + assertFalse(auto2.reads().contains(auto2)); assertTrue(auto2.reads().contains(auto3)); assertTrue(auto2.reads().contains(base)); @@ -850,6 +838,7 @@ public void testInConfiguration5() throws IOException { assertTrue(auto3.reads().contains(m2)); assertTrue(auto3.reads().contains(auto1)); assertTrue(auto3.reads().contains(auto2)); + assertFalse(auto3.reads().contains(auto3)); assertTrue(auto3.reads().contains(base)); } @@ -859,6 +848,7 @@ public void testInConfiguration5() throws IOException { * automatic modules that are found by the after finder and not shadowed * by the before finder, or parent configurations, should also be resolved. */ + @Test public void testInConfiguration6() throws IOException { // m1 requires auto1 ModuleDescriptor descriptor1 @@ -918,12 +908,14 @@ public void testInConfiguration6() throws IOException { assertTrue(auto2.reads().contains(m1)); assertTrue(auto2.reads().contains(auto1)); + assertFalse(auto2.reads().contains(auto2)); assertTrue(auto2.reads().contains(auto3)); assertTrue(auto2.reads().contains(base)); assertTrue(auto3.reads().contains(m1)); assertTrue(auto3.reads().contains(auto1)); assertTrue(auto3.reads().contains(auto2)); + assertFalse(auto3.reads().contains(auto3)); assertTrue(auto3.reads().contains(base)); } @@ -933,6 +925,7 @@ public void testInConfiguration6() throws IOException { * automatic module in a parent configuration then it should read all * automatic modules in the parent configuration. */ + @Test public void testInConfiguration7() throws Exception { // m1 requires auto1 ModuleDescriptor descriptor1 = ModuleDescriptor.newModule("m1") @@ -964,11 +957,13 @@ public void testInConfiguration7() throws Exception { assertTrue(auto1.reads().contains(base)); assertTrue(auto1.reads().contains(m1)); + assertFalse(auto1.reads().contains(auto1)); assertTrue(auto1.reads().contains(auto2)); assertTrue(auto2.reads().contains(base)); assertTrue(auto2.reads().contains(m1)); assertTrue(auto2.reads().contains(auto1)); + assertFalse(auto2.reads().contains(auto2)); // m2 requires auto1 ModuleDescriptor descriptor2 = ModuleDescriptor.newModule("m2") @@ -999,7 +994,7 @@ public void testInConfiguration7() throws Exception { * b* contains p * c* contains p */ - @Test(expectedExceptions = { ResolutionException.class }) + @Test public void testDuplicateSuppliers1() throws IOException { ModuleDescriptor descriptor = ModuleDescriptor.newModule("a") @@ -1018,7 +1013,7 @@ public void testDuplicateSuppliers1() throws IOException { ModuleFinder.of(dir)); Configuration parent = ModuleLayer.boot().configuration(); - resolve(parent, finder, "a"); + assertThrows(ResolutionException.class, () -> resolve(parent, finder, "a")); } /** @@ -1026,7 +1021,7 @@ public void testDuplicateSuppliers1() throws IOException { * a contains p, requires b* * b* contains p */ - @Test(expectedExceptions = { ResolutionException.class }) + @Test public void testDuplicateSuppliers2() throws IOException { ModuleDescriptor descriptor = ModuleDescriptor.newModule("a") @@ -1044,12 +1039,13 @@ public void testDuplicateSuppliers2() throws IOException { ModuleFinder.of(dir)); Configuration parent = ModuleLayer.boot().configuration(); - resolve(parent, finder, "a"); + assertThrows(ResolutionException.class, () -> resolve(parent, finder, "a")); } /** * Basic test of layer containing automatic modules */ + @Test public void testInLayer() throws IOException { ModuleDescriptor descriptor = ModuleDescriptor.newModule("a") @@ -1091,6 +1087,7 @@ public void testInLayer() throws IOException { /** * Test miscellaneous methods. */ + @Test public void testMisc() throws IOException { Path dir = Files.createTempDirectory(USER_DIR, "mods"); Path m_jar = createDummyJarFile(dir.resolve("m.jar"), "p/T.class"); @@ -1132,13 +1129,10 @@ static ModuleDescriptor findDescriptor(Configuration cf, String name) { * configuration. */ static void testReadAllBootModules(Configuration cf, String mn) { - Set bootModules = ModuleLayer.boot().modules().stream() .map(Module::getName) .collect(Collectors.toSet()); - bootModules.forEach(other -> assertTrue(reads(cf, mn, other))); - } /** @@ -1202,5 +1196,4 @@ static Path createDummyJarFile(Path jarfile, String... entries) { return createDummyJarFile(jarfile, null, entries); } - } From ecd335d8f42757d332f217e220e1a9db8c48c8d6 Mon Sep 17 00:00:00 2001 From: Christian Hagedorn Date: Fri, 1 Dec 2023 07:44:09 +0000 Subject: [PATCH 158/250] 8321107: Add more test cases for JDK-8319372 Reviewed-by: roland, kvn --- .../TestTopCastIIOnUndetectedDeadPath4.java | 134 ++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 test/hotspot/jtreg/compiler/c2/TestTopCastIIOnUndetectedDeadPath4.java diff --git a/test/hotspot/jtreg/compiler/c2/TestTopCastIIOnUndetectedDeadPath4.java b/test/hotspot/jtreg/compiler/c2/TestTopCastIIOnUndetectedDeadPath4.java new file mode 100644 index 0000000000000..566295b844b82 --- /dev/null +++ b/test/hotspot/jtreg/compiler/c2/TestTopCastIIOnUndetectedDeadPath4.java @@ -0,0 +1,134 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test id=JDK-8293941 + * @bug 8319372 8293941 + * @summary Tests that CastII are not dying anymore and breaking the graph due to control that is not removed + * @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+AbortVMOnCompilationFailure -XX:-RangeCheckElimination + * -Xcomp -XX:CompileOnly=compiler.c2.TestTopCastIIOnUndetectedDeadPath4::* + * compiler.c2.TestTopCastIIOnUndetectedDeadPath4 + */ + +/* + * @test id=JDK-8314111 + * @bug 8319372 8314111 + * @summary Tests that CastII are not dying anymore and breaking the graph due to control that is not removed + * @run main/othervm -Xcomp -XX:CompileOnly=compiler.c2.TestTopCastIIOnUndetectedDeadPath4::test* + * compiler.c2.TestTopCastIIOnUndetectedDeadPath4 + */ + +/* + * @test id=NoFlags + * @summary Tests that CastII are not dying anymore and breaking the graph due to control that is not removed + * @run main/othervm compiler.c2.TestTopCastIIOnUndetectedDeadPath4 + */ + +package compiler.c2; + +public class TestTopCastIIOnUndetectedDeadPath4 { + + static boolean bFld; + static int iArrFld[]; + static long lArrFld[]; + static double dArrFld[][]; + + public static void main(String[] strArr) { + for (int i = 0; i < 5000; i++) { + test8293941(); + test8314111_1(); + test8314111_2(); + } + } + + static void test8293941() { + int i16; + boolean b = false; + for (double d1 = 31.2; d1 < 72; d1++) { + for (i16 = (int) d1; i16 < 2; ++i16) { + iArrFld[i16] >>= 5; + dArrFld[i16 - 1][i16] = 3; + if (b) { + break; + } + lArrFld[i16] = 4; + } + switch (0) { + case 5: + b = b; + } + } + } + + static void test8314111_1() { + int i, i1 = 0, i28, i30 = 0, iArr[] = new int[10]; + boolean bArr[] = new boolean[10]; + i = 1; + while (++i < 5) { + try { + i1 = iArr[i - 1]; + i1 = 2 / i; + } catch (ArithmeticException a_e) { + } + if (bFld) { + switch (i) { + case 4: + for (i28 = 3; 100 > i28; i28++) { + i1 -= i28; + } + if ((i30 -= 3) > 0) { + switch (i30) { + case 4: + bArr[i - 1] = bFld; + iArr[i] = 6; + } + } + } + } + } + } + + static void test8314111_2() { + int iArr[] = new int[1000]; + boolean bArr[] = new boolean[1000]; + int x = 0; + int i = 1; + while (++i < 5) { + try { + x = iArr[i - 1]; + x = 2 / i; + } catch (ArithmeticException a_e) { + } + if (bFld) { + x++; + bArr[i - 1] = false; + iArr[i] = 0; + } + } + } +} + +class Foo { + public static void empty() { + } +} From 8f1d40b48bf145144ae90b1d147d418d3905661b Mon Sep 17 00:00:00 2001 From: Pavel Rappo Date: Fri, 1 Dec 2023 11:51:25 +0000 Subject: [PATCH 159/250] 8321114: Rename "Unnamed Classes" to "Implicitly Declared Classes" better Reviewed-by: jlaskey --- src/java.base/share/classes/java/lang/Class.java | 10 +++++----- .../classes/jdk/internal/javac/PreviewFeature.java | 2 +- .../classes/javax/annotation/processing/Filer.java | 4 ++-- .../share/classes/com/sun/tools/javac/code/Flags.java | 2 +- .../share/classes/com/sun/tools/javac/code/Symbol.java | 2 +- .../com/sun/tools/javac/parser/JavacParser.java | 10 +++++----- .../com/sun/tools/javac/resources/compiler.properties | 6 +++--- .../processing/model/element/TestImplicitClass.java | 2 +- 8 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/java.base/share/classes/java/lang/Class.java b/src/java.base/share/classes/java/lang/Class.java index 766509f1f2315..851d65d06ad77 100644 --- a/src/java.base/share/classes/java/lang/Class.java +++ b/src/java.base/share/classes/java/lang/Class.java @@ -190,21 +190,21 @@ * a class or interface is hidden has no bearing on the characteristics * exposed by the methods of class {@code Class}. * - *

    Implicit Classes

    + *

    Implicitly Declared Classes

    * * Conventionally, a Java compiler, starting from a source file for an - * implicit class, say {@code HelloWorld.java}, creates a + * implicitly declared class, say {@code HelloWorld.java}, creates a * similarly-named {@code class} file, {@code HelloWorld.class}, where * the class stored in that {@code class} file is named {@code * "HelloWorld"}, matching the base names of the source and {@code * class} files. * - * For the {@code Class} object of an implicit class {@code + * For the {@code Class} object of an implicitly declared class {@code * HelloWorld}, the methods to get the {@linkplain #getName name} and * {@linkplain #getTypeName type name} return results * equal to {@code "HelloWorld"}. The {@linkplain #getSimpleName - * simple name} of such an implicit class is {@code "HelloWorld"} and the - * {@linkplain #getCanonicalName canonical name} is {@code "HelloWorld"}. + * simple name} of such an implicitly declared class is {@code "HelloWorld"} and + * the {@linkplain #getCanonicalName canonical name} is {@code "HelloWorld"}. * * @param the type of the class modeled by this {@code Class} * object. For example, the type of {@code String.class} is {@code diff --git a/src/java.base/share/classes/jdk/internal/javac/PreviewFeature.java b/src/java.base/share/classes/jdk/internal/javac/PreviewFeature.java index 77dec6dce494d..6f96e7e6840eb 100644 --- a/src/java.base/share/classes/jdk/internal/javac/PreviewFeature.java +++ b/src/java.base/share/classes/jdk/internal/javac/PreviewFeature.java @@ -71,7 +71,7 @@ public enum Feature { STRING_TEMPLATES, @JEP(number=445, title="Unnamed Classes and Instance Main Methods", status="Deprecated") UNNAMED_CLASSES, - @JEP(number=463, title="Implicit Classes and Instance Main Methods", status="Preview") + @JEP(number=463, title="Implicitly Declared Classes and Instance Main Methods", status="Preview") IMPLICIT_CLASSES, @JEP(number=446, title="Scoped Values", status="Preview") SCOPED_VALUES, diff --git a/src/java.compiler/share/classes/javax/annotation/processing/Filer.java b/src/java.compiler/share/classes/javax/annotation/processing/Filer.java index 7487c1fb2361c..61af2aae0c7a5 100644 --- a/src/java.compiler/share/classes/javax/annotation/processing/Filer.java +++ b/src/java.compiler/share/classes/javax/annotation/processing/Filer.java @@ -181,7 +181,7 @@ public interface Filer { * classes, the name argument is used to provide the leading component of the * name used for the output file. For example {@code filer.createSourceFile("Foo")} * to create an implicitly declared class hosted in {@code Foo.java}. All - * implicit classes must be in an unnamed package. + * implicitly declared classes must be in an unnamed package. * * @apiNote To use a particular {@linkplain * java.nio.charset.Charset charset} to encode the contents of the @@ -266,7 +266,7 @@ JavaFileObject createSourceFile(CharSequence name, * classes, the name argument is used to provide the leading component of the * name used for the output file. For example {@code filer.createSourceFile("Foo")} * to create an implicitly declared class hosted in {@code Foo.java}. All - * implicit classes must be in an unnamed package. + * implicitly declared classes must be in an unnamed package. * * @apiNote To avoid subsequent errors, the contents of the class * file should be compatible with the {@linkplain diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Flags.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Flags.java index c6b8f2cd44eea..429465c191024 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Flags.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Flags.java @@ -123,7 +123,7 @@ public static EnumSet asFlagSet(long flags) { */ public static final int HASINIT = 1<<18; - /** Class is a implicit top level class. + /** Class is an implicitly declared top level class. */ public static final int IMPLICIT_CLASS = 1<<19; diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Symbol.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Symbol.java index d583a86ca3f8d..6464afdfff899 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Symbol.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Symbol.java @@ -1554,7 +1554,7 @@ public void setRecordComponents(List recordComponents) { @DefinedBy(Api.LANGUAGE_MODEL) public NestingKind getNestingKind() { apiComplete(); - if (owner.kind == PCK) // Handles implicit classes as well + if (owner.kind == PCK) // Handles implicitly declared classes as well return NestingKind.TOP_LEVEL; else if (name.isEmpty()) return NestingKind.ANONYMOUS; diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java index 977df7759ab64..78be89ec1ea82 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java @@ -3982,11 +3982,11 @@ public JCTree.JCCompilationUnit parseCompilationUnit() { defs.appendList(semiList.toList()); boolean isTopLevelMethodOrField = false; - // Do to a significant number of existing negative tests + // Due to a significant number of existing negative tests // this code speculatively tests to see if a top level method // or field can parse. If the method or field can parse then // it is parsed. Otherwise, parsing continues as though - // implicit classes did not exist and error reporting + // implicitly declared classes did not exist and error reporting // is the same as in the past. if (Feature.IMPLICIT_CLASSES.allowedInSource(source) && !isDeclaration()) { final JCModifiers finalMods = mods; @@ -4014,7 +4014,7 @@ public JCTree.JCCompilationUnit parseCompilationUnit() { firstTypeDecl = false; } } - List topLevelDefs = isImplicitClass ? constructImplictClass(defs.toList()) : defs.toList(); + List topLevelDefs = isImplicitClass ? constructImplicitClass(defs.toList()) : defs.toList(); JCTree.JCCompilationUnit toplevel = F.at(firstToken.pos).TopLevel(topLevelDefs); if (!consumedToplevelDoc) attach(toplevel, firstToken.docComment()); @@ -4029,8 +4029,8 @@ public JCTree.JCCompilationUnit parseCompilationUnit() { return toplevel; } - // Restructure top level to be an implicit class. - private List constructImplictClass(List origDefs) { + // Restructure top level to be an implicitly declared class. + private List constructImplicitClass(List origDefs) { ListBuffer topDefs = new ListBuffer<>(); ListBuffer defs = new ListBuffer<>(); diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties index 975c3205a364e..c4f00d9d46e5e 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties @@ -525,10 +525,10 @@ compiler.err.bad.file.name=\ bad file name: {0} compiler.err.implicit.class.should.not.have.package.declaration=\ - implicit class should not have package declaration + implicitly declared class should not have package declaration compiler.err.implicit.class.does.not.have.main.method=\ - implicit class does not have main method in the form of void main() or void main(String[] args) + implicitly declared class does not have main method in the form of void main() or void main(String[] args) # 0: name, 1: name compiler.err.same.binary.name=\ @@ -3219,7 +3219,7 @@ compiler.misc.feature.unconditional.patterns.in.instanceof=\ unconditional patterns in instanceof compiler.misc.feature.implicit.classes=\ - implicit classes + implicitly declared classes compiler.misc.feature.super.init=\ statements before super() diff --git a/test/langtools/tools/javac/processing/model/element/TestImplicitClass.java b/test/langtools/tools/javac/processing/model/element/TestImplicitClass.java index bad9fa15f8b4e..e6fb81820e2a8 100644 --- a/test/langtools/tools/javac/processing/model/element/TestImplicitClass.java +++ b/test/langtools/tools/javac/processing/model/element/TestImplicitClass.java @@ -52,7 +52,7 @@ import javax.tools.JavaFileObject; /** - * Test annotation processing representation of implicitly classes + * Test annotation processing representation of implicitly declared classes * constructed from either a source file or a class file. */ @SuppressWarnings("preview") From 3b30095a63bdf8224a5625507a69942210a203a0 Mon Sep 17 00:00:00 2001 From: Jorn Vernee Date: Fri, 1 Dec 2023 13:11:07 +0000 Subject: [PATCH 160/250] 8321130: Microbenchmarks do not build any more after 8254693 on 32 bit platforms Reviewed-by: mcimadamore, tschatzl --- .../micro/org/openjdk/bench/java/lang/foreign/CLayouts.java | 2 +- .../org/openjdk/bench/java/lang/foreign/xor/libjnitest.c | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/test/micro/org/openjdk/bench/java/lang/foreign/CLayouts.java b/test/micro/org/openjdk/bench/java/lang/foreign/CLayouts.java index 978765c2c79df..bfe5ce61b1c2f 100644 --- a/test/micro/org/openjdk/bench/java/lang/foreign/CLayouts.java +++ b/test/micro/org/openjdk/bench/java/lang/foreign/CLayouts.java @@ -56,7 +56,7 @@ public class CLayouts { /** * The layout for the {@code long long} C type. */ - public static final ValueLayout.OfLong C_LONG_LONG = (ValueLayout.OfLong) LINKER.canonicalLayouts().get("long"); + public static final ValueLayout.OfLong C_LONG_LONG = (ValueLayout.OfLong) LINKER.canonicalLayouts().get("long long"); /** * The layout for the {@code float} C type */ diff --git a/test/micro/org/openjdk/bench/java/lang/foreign/xor/libjnitest.c b/test/micro/org/openjdk/bench/java/lang/foreign/xor/libjnitest.c index 2b74dc9c3d780..2ecea5f2b8324 100644 --- a/test/micro/org/openjdk/bench/java/lang/foreign/xor/libjnitest.c +++ b/test/micro/org/openjdk/bench/java/lang/foreign/xor/libjnitest.c @@ -1,6 +1,8 @@ #include #include +#include "jlong.h" + JNIEXPORT void xor_op(jbyte *restrict src, jbyte *restrict dst, jint len) { for (int i = 0; i < len; ++i) { dst[i] ^= src[i]; @@ -69,7 +71,7 @@ JNIEXPORT void JNICALL Java_org_openjdk_bench_java_lang_foreign_xor_GetArrayRegi JNIEXPORT void JNICALL Java_org_openjdk_bench_java_lang_foreign_xor_GetArrayUnsafeXorOpImpl_xorOp (JNIEnv *env, jobject obj, jlong src, jlong dst, jint len) { - jbyte *sbuf = (jbyte*)(void*)src; - jbyte *dbuf = (jbyte*)(void*)dst; + jbyte *sbuf = (jbyte*)jlong_to_ptr(src); + jbyte *dbuf = (jbyte*)jlong_to_ptr(dst); xor_op(sbuf, dbuf, len); } From 54957ac55f8c6c68efc80436417ff30d4e9e2d37 Mon Sep 17 00:00:00 2001 From: Aggelos Biboudis Date: Fri, 1 Dec 2023 14:15:38 +0000 Subject: [PATCH 161/250] 8312560: Annotation on Decomposed Record Component in Enhanced For Loop Fails Compilation Reviewed-by: jlahoda --- .../com/sun/tools/javac/comp/Attr.java | 6 +-- .../tools/javac/patterns/T8312560.java | 43 +++++++++++++++++++ 2 files changed, 46 insertions(+), 3 deletions(-) create mode 100644 test/langtools/tools/javac/patterns/T8312560.java diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java index 567cf0a191f25..342ccb267981b 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java @@ -4186,11 +4186,11 @@ public void visitBindingPattern(JCBindingPattern tree) { if (chk.checkUnique(tree.var.pos(), v, env.info.scope)) { chk.checkTransparentVar(tree.var.pos(), v, env.info.scope); } - if (tree.var.vartype != null) { - annotate.annotateLater(tree.var.mods.annotations, env, v, tree.pos()); + annotate.annotateLater(tree.var.mods.annotations, env, v, tree.pos()); + if (!tree.var.isImplicitlyTyped()) { annotate.queueScanTreeAndTypeAnnotate(tree.var.vartype, env, v, tree.var.pos()); - annotate.flush(); } + annotate.flush(); chk.validate(tree.var.vartype, env, true); result = tree.type; if (v.isUnnamedVariable()) { diff --git a/test/langtools/tools/javac/patterns/T8312560.java b/test/langtools/tools/javac/patterns/T8312560.java new file mode 100644 index 0000000000000..fda3d79813287 --- /dev/null +++ b/test/langtools/tools/javac/patterns/T8312560.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2023, 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. + */ + +import java.lang.annotation.Target; +import java.lang.annotation.ElementType; + +/* + * @test + * @bug 8312560 + * @summary Annotation on Decomposed Record Component in Enhanced For Loop Fails Compilation + * @compile T8312560.java + */ +public class T8312560 { + void m(Object o) { + if (o instanceof R(@A var x)) {} + } + + @interface A { + } + + record R(Integer x) { + } +} From 3087e14cde9257680f0406b11942f9cb7739cb7b Mon Sep 17 00:00:00 2001 From: Martin Doerr Date: Fri, 1 Dec 2023 14:44:18 +0000 Subject: [PATCH 162/250] 8320807: [PPC64][ZGC] C1 generates wrong code for atomics Reviewed-by: lucy, rrich --- src/hotspot/cpu/ppc/c1_LIRAssembler_ppc.cpp | 45 ++++++++++++++----- src/hotspot/cpu/ppc/c1_LIRGenerator_ppc.cpp | 35 --------------- .../c1/shenandoahBarrierSetC1_ppc.cpp | 45 +++++++------------ .../cpu/ppc/gc/z/zBarrierSetAssembler_ppc.cpp | 5 ++- 4 files changed, 51 insertions(+), 79 deletions(-) diff --git a/src/hotspot/cpu/ppc/c1_LIRAssembler_ppc.cpp b/src/hotspot/cpu/ppc/c1_LIRAssembler_ppc.cpp index 738511c6f5099..9913a589683a4 100644 --- a/src/hotspot/cpu/ppc/c1_LIRAssembler_ppc.cpp +++ b/src/hotspot/cpu/ppc/c1_LIRAssembler_ppc.cpp @@ -2600,6 +2600,13 @@ void LIR_Assembler::emit_compare_and_swap(LIR_OpCompareAndSwap* op) { Unimplemented(); } + // There might be a volatile load before this Unsafe CAS. + if (support_IRIW_for_not_multiple_copy_atomic_cpu) { + __ sync(); + } else { + __ lwsync(); + } + if (is_64bit) { __ cmpxchgd(BOOL_RESULT, /*current_value=*/R0, cmp_value, new_value, addr, MacroAssembler::MemBarNone, @@ -2961,9 +2968,24 @@ void LIR_Assembler::atomic_op(LIR_Code code, LIR_Opr src, LIR_Opr data, LIR_Opr assert(addr->disp() == 0 && addr->index()->is_illegal(), "use leal!"); const Register Rptr = addr->base()->as_pointer_register(), Rtmp = tmp->as_register(); - Register Rco = noreg; - if (UseCompressedOops && data->is_oop()) { - Rco = __ encode_heap_oop(Rtmp, data->as_register()); + Register Robj = noreg; + if (data->is_oop()) { + if (UseCompressedOops) { + Robj = __ encode_heap_oop(Rtmp, data->as_register()); + } else { + Robj = data->as_register(); + if (Robj == dest->as_register()) { // May happen with ZGC. + __ mr(Rtmp, Robj); + Robj = Rtmp; + } + } + } + + // There might be a volatile load before this Unsafe OP. + if (support_IRIW_for_not_multiple_copy_atomic_cpu) { + __ sync(); + } else { + __ lwsync(); } Label Lretry; @@ -2983,18 +3005,11 @@ void LIR_Assembler::atomic_op(LIR_Code code, LIR_Opr src, LIR_Opr data, LIR_Opr } else if (data->is_oop()) { assert(code == lir_xchg, "xadd for oops"); const Register Rold = dest->as_register(); + assert_different_registers(Rptr, Rold, Robj); if (UseCompressedOops) { - assert_different_registers(Rptr, Rold, Rco); __ lwarx(Rold, Rptr, MacroAssembler::cmpxchgx_hint_atomic_update()); - __ stwcx_(Rco, Rptr); + __ stwcx_(Robj, Rptr); } else { - Register Robj = data->as_register(); - assert_different_registers(Rptr, Rold, Rtmp); - assert_different_registers(Rptr, Robj, Rtmp); - if (Robj == Rold) { // May happen with ZGC. - __ mr(Rtmp, Robj); - Robj = Rtmp; - } __ ldarx(Rold, Rptr, MacroAssembler::cmpxchgx_hint_atomic_update()); __ stdcx_(Robj, Rptr); } @@ -3022,6 +3037,12 @@ void LIR_Assembler::atomic_op(LIR_Code code, LIR_Opr src, LIR_Opr data, LIR_Opr if (UseCompressedOops && data->is_oop()) { __ decode_heap_oop(dest->as_register()); } + + if (support_IRIW_for_not_multiple_copy_atomic_cpu) { + __ isync(); + } else { + __ sync(); + } } diff --git a/src/hotspot/cpu/ppc/c1_LIRGenerator_ppc.cpp b/src/hotspot/cpu/ppc/c1_LIRGenerator_ppc.cpp index ecc40d6fde7c1..32aab91c7d374 100644 --- a/src/hotspot/cpu/ppc/c1_LIRGenerator_ppc.cpp +++ b/src/hotspot/cpu/ppc/c1_LIRGenerator_ppc.cpp @@ -639,13 +639,6 @@ LIR_Opr LIRGenerator::atomic_cmpxchg(BasicType type, LIR_Opr addr, LIRItem& cmp_ cmp_value.load_item(); new_value.load_item(); - // Volatile load may be followed by Unsafe CAS. - if (support_IRIW_for_not_multiple_copy_atomic_cpu) { - __ membar(); - } else { - __ membar_release(); - } - if (is_reference_type(type)) { if (UseCompressedOops) { t1 = new_register(T_OBJECT); @@ -670,21 +663,7 @@ LIR_Opr LIRGenerator::atomic_xchg(BasicType type, LIR_Opr addr, LIRItem& value) LIR_Opr tmp = FrameMap::R0_opr; value.load_item(); - - // Volatile load may be followed by Unsafe CAS. - if (support_IRIW_for_not_multiple_copy_atomic_cpu) { - __ membar(); - } else { - __ membar_release(); - } - __ xchg(addr, value.result(), result, tmp); - - if (support_IRIW_for_not_multiple_copy_atomic_cpu) { - __ membar_acquire(); - } else { - __ membar(); - } return result; } @@ -694,21 +673,7 @@ LIR_Opr LIRGenerator::atomic_add(BasicType type, LIR_Opr addr, LIRItem& value) { LIR_Opr tmp = FrameMap::R0_opr; value.load_item(); - - // Volatile load may be followed by Unsafe CAS. - if (support_IRIW_for_not_multiple_copy_atomic_cpu) { - __ membar(); // To be safe. Unsafe semantics are unclear. - } else { - __ membar_release(); - } - __ xadd(addr, value.result(), result, tmp); - - if (support_IRIW_for_not_multiple_copy_atomic_cpu) { - __ membar_acquire(); - } else { - __ membar(); - } return result; } diff --git a/src/hotspot/cpu/ppc/gc/shenandoah/c1/shenandoahBarrierSetC1_ppc.cpp b/src/hotspot/cpu/ppc/gc/shenandoah/c1/shenandoahBarrierSetC1_ppc.cpp index fc06e1b71e0b8..6d9a1db1ed4b8 100644 --- a/src/hotspot/cpu/ppc/gc/shenandoah/c1/shenandoahBarrierSetC1_ppc.cpp +++ b/src/hotspot/cpu/ppc/gc/shenandoah/c1/shenandoahBarrierSetC1_ppc.cpp @@ -1,6 +1,6 @@ /* - * Copyright (c) 2018, 2021, Red Hat, Inc. All rights reserved. - * Copyright (c) 2012, 2021 SAP SE. All rights reserved. + * Copyright (c) 2018, 2023, Red Hat, Inc. All rights reserved. + * Copyright (c) 2012, 2023 SAP SE. 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 @@ -53,8 +53,13 @@ void LIR_OpShenandoahCompareAndSwap::emit_code(LIR_Assembler *masm) { __ encode_heap_oop(new_val, new_val); } - // Due to the memory barriers emitted in ShenandoahBarrierSetC1::atomic_cmpxchg_at_resolved, - // there is no need to specify stronger memory semantics. + // There might be a volatile load before this Unsafe CAS. + if (support_IRIW_for_not_multiple_copy_atomic_cpu) { + __ sync(); + } else { + __ lwsync(); + } + ShenandoahBarrierSet::assembler()->cmpxchg_oop(masm->masm(), addr, cmp_val, new_val, tmp1, tmp2, false, result); @@ -63,6 +68,12 @@ void LIR_OpShenandoahCompareAndSwap::emit_code(LIR_Assembler *masm) { __ decode_heap_oop(new_val); } + if (support_IRIW_for_not_multiple_copy_atomic_cpu) { + __ isync(); + } else { + __ sync(); + } + __ block_comment("} LIR_OpShenandoahCompareAndSwap (shenandaohgc)"); } @@ -80,14 +91,6 @@ LIR_Opr ShenandoahBarrierSetC1::atomic_cmpxchg_at_resolved(LIRAccess &access, LI if (access.is_oop()) { LIRGenerator* gen = access.gen(); - if (ShenandoahCASBarrier) { - if (support_IRIW_for_not_multiple_copy_atomic_cpu) { - __ membar(); - } else { - __ membar_release(); - } - } - if (ShenandoahSATBBarrier) { pre_barrier(gen, access.access_emit_info(), access.decorators(), access.resolved_addr(), LIR_OprFact::illegalOpr); @@ -104,12 +107,6 @@ LIR_Opr ShenandoahBarrierSetC1::atomic_cmpxchg_at_resolved(LIRAccess &access, LI __ append(new LIR_OpShenandoahCompareAndSwap(addr, cmp_value.result(), new_value.result(), t1, t2, result)); - if (support_IRIW_for_not_multiple_copy_atomic_cpu) { - __ membar_acquire(); - } else { - __ membar(); - } - return result; } } @@ -125,12 +122,6 @@ LIR_Opr ShenandoahBarrierSetC1::atomic_xchg_at_resolved(LIRAccess &access, LIRIt value.load_item(); LIR_Opr value_opr = value.result(); - if (support_IRIW_for_not_multiple_copy_atomic_cpu) { - __ membar(); - } else { - __ membar_release(); - } - if (access.is_oop()) { value_opr = iu_barrier(access.gen(), value_opr, access.access_emit_info(), access.decorators()); } @@ -152,11 +143,5 @@ LIR_Opr ShenandoahBarrierSetC1::atomic_xchg_at_resolved(LIRAccess &access, LIRIt } } - if (support_IRIW_for_not_multiple_copy_atomic_cpu) { - __ membar_acquire(); - } else { - __ membar(); - } - return result; } diff --git a/src/hotspot/cpu/ppc/gc/z/zBarrierSetAssembler_ppc.cpp b/src/hotspot/cpu/ppc/gc/z/zBarrierSetAssembler_ppc.cpp index 1d07c6d573a17..9ed47b688ff26 100644 --- a/src/hotspot/cpu/ppc/gc/z/zBarrierSetAssembler_ppc.cpp +++ b/src/hotspot/cpu/ppc/gc/z/zBarrierSetAssembler_ppc.cpp @@ -340,11 +340,12 @@ void ZBarrierSetAssembler::store_barrier_medium(MacroAssembler* masm, } __ ld(R0, in_bytes(ZThreadLocalData::store_good_mask_offset()), R16_thread); __ cmpxchgd(CCR0, tmp, (intptr_t)0, R0, ref_base, - MacroAssembler::MemBarNone, MacroAssembler::cmpxchgx_hint_atomic_update()); + MacroAssembler::MemBarNone, MacroAssembler::cmpxchgx_hint_atomic_update(), + noreg, need_restore ? nullptr : &slow_path); if (need_restore) { __ subf(ref_base, ind_or_offs, ref_base); + __ bne(CCR0, slow_path); } - __ bne(CCR0, slow_path); } else { // A non-atomic relocatable object won't get to the medium fast path due to a // raw null in the young generation. We only get here because the field is bad. From d568562966e9a2020704eee3d67b8a106f647d9c Mon Sep 17 00:00:00 2001 From: Naoto Sato Date: Fri, 1 Dec 2023 17:39:11 +0000 Subject: [PATCH 163/250] 8320798: Console read line with zero out should zero out underlying buffer Reviewed-by: bpb, lancea, joehw, alanb, jpai, mbaesken --- .../jdk/internal/io/JdkConsoleImpl.java | 10 ++++++++- .../classes/sun/nio/cs/StreamDecoder.java | 21 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/java.base/share/classes/jdk/internal/io/JdkConsoleImpl.java b/src/java.base/share/classes/jdk/internal/io/JdkConsoleImpl.java index 65d9177dddb31..370fc73fcd0f4 100644 --- a/src/java.base/share/classes/jdk/internal/io/JdkConsoleImpl.java +++ b/src/java.base/share/classes/jdk/internal/io/JdkConsoleImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2023, 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 @@ -195,6 +195,9 @@ else if (rcb[len-1] == '\n') { System.arraycopy(rcb, 0, b, 0, len); if (zeroOut) { Arrays.fill(rcb, 0, len, ' '); + if (reader instanceof LineReader lr) { + lr.zeroOut(); + } } } return b; @@ -228,6 +231,11 @@ class LineReader extends Reader { nextChar = nChars = 0; leftoverLF = false; } + public void zeroOut() throws IOException { + if (in instanceof StreamDecoder sd) { + sd.fillZeroToPosition(); + } + } public void close () {} public boolean ready() throws IOException { //in.ready synchronizes on readLock already diff --git a/src/java.base/share/classes/sun/nio/cs/StreamDecoder.java b/src/java.base/share/classes/sun/nio/cs/StreamDecoder.java index 340349a40fef1..a2026744f04b5 100644 --- a/src/java.base/share/classes/sun/nio/cs/StreamDecoder.java +++ b/src/java.base/share/classes/sun/nio/cs/StreamDecoder.java @@ -42,6 +42,8 @@ import java.nio.charset.CodingErrorAction; import java.nio.charset.IllegalCharsetNameException; import java.nio.charset.UnsupportedCharsetException; +import java.util.Arrays; + import jdk.internal.misc.InternalLock; public class StreamDecoder extends Reader { @@ -271,6 +273,25 @@ private boolean isOpen() { return !closed; } + public void fillZeroToPosition() throws IOException { + Object lock = this.lock; + if (lock instanceof InternalLock locker) { + locker.lock(); + try { + lockedFillZeroToPosition(); + } finally { + locker.unlock(); + } + } else { + synchronized (lock) { + lockedFillZeroToPosition(); + } + } + } + + private void lockedFillZeroToPosition() { + Arrays.fill(bb.array(), bb.arrayOffset(), bb.arrayOffset() + bb.position(), (byte)0); + } // -- Charset-based stream decoder impl -- From f6be7fdf22eede767a0ac29b4f1cb770cfdc0b0f Mon Sep 17 00:00:00 2001 From: Naoto Sato Date: Fri, 1 Dec 2023 17:43:28 +0000 Subject: [PATCH 164/250] 8321059: Unneeded array assignments in MergeCollation and CompactByteArray Reviewed-by: jlu, bpb, rriggs --- src/java.base/share/classes/java/text/MergeCollation.java | 4 +--- src/java.base/share/classes/sun/text/CompactByteArray.java | 7 ++++--- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/java.base/share/classes/java/text/MergeCollation.java b/src/java.base/share/classes/java/text/MergeCollation.java index 9bc983c203f43..1db779e003f60 100644 --- a/src/java.base/share/classes/java/text/MergeCollation.java +++ b/src/java.base/share/classes/java/text/MergeCollation.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2023, 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 @@ -68,8 +68,6 @@ final class MergeCollation { */ public MergeCollation(String pattern) throws ParseException { - for (int i = 0; i < statusArray.length; i++) - statusArray[i] = 0; setPattern(pattern); } diff --git a/src/java.base/share/classes/sun/text/CompactByteArray.java b/src/java.base/share/classes/sun/text/CompactByteArray.java index b4aa0237d169d..7024d47eab08e 100644 --- a/src/java.base/share/classes/sun/text/CompactByteArray.java +++ b/src/java.base/share/classes/sun/text/CompactByteArray.java @@ -39,6 +39,8 @@ package sun.text; +import java.util.Arrays; + /** * class CompactATypeArray : use only on primitive data types * Provides a compact way to store information that is indexed by Unicode @@ -77,12 +79,11 @@ public CompactByteArray(byte defaultValue) values = new byte[UNICODECOUNT]; indices = new short[INDEXCOUNT]; hashes = new int[INDEXCOUNT]; - for (i = 0; i < UNICODECOUNT; ++i) { - values[i] = defaultValue; + if (defaultValue != (byte)0) { + Arrays.fill(values, defaultValue); } for (i = 0; i < INDEXCOUNT; ++i) { indices[i] = (short)(i< Date: Fri, 1 Dec 2023 19:14:44 +0000 Subject: [PATCH 165/250] 8312098: Update man page for javadoc Reviewed-by: jlaskey Backport-of: 4fcb0b28d7eda3f147432ce8d8d27f91a0805ab6 --- src/jdk.javadoc/share/man/javadoc.1 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/jdk.javadoc/share/man/javadoc.1 b/src/jdk.javadoc/share/man/javadoc.1 index 2627630d60bf6..406c09b9efdaa 100644 --- a/src/jdk.javadoc/share/man/javadoc.1 +++ b/src/jdk.javadoc/share/man/javadoc.1 @@ -1,4 +1,4 @@ -.\" Copyright (c) 1994, 2022, Oracle and/or its affiliates. All rights reserved. +.\" Copyright (c) 1994, 2023, 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 @@ -84,9 +84,9 @@ options, package names, and source file names in any order. The \f[V]javadoc\f[R] tool parses the declarations and documentation comments in a set of Java source files and produces corresponding HTML pages that describe (by default) the public and protected classes, -nested classes (but not anonymous inner classes), interfaces, -constructors, methods, and fields. -You can use the \f[V]javadoc\f[R] tool to generate the API documentation +nested and unnamed classes (but not anonymous inner classes), +interfaces, constructors, methods, and fields. +You can use the\f[V]javadoc\f[R] tool to generate the API documentation or the implementation documentation for a set of source files. .PP You can run the \f[V]javadoc\f[R] tool on entire packages, individual From 1839433bff5587f6a9bede3c765100ae4737fd2e Mon Sep 17 00:00:00 2001 From: Joe Darcy Date: Fri, 1 Dec 2023 20:24:09 +0000 Subject: [PATCH 166/250] 8320941: Discuss receiver type handling Reviewed-by: vromero --- .../javax/lang/model/element/ExecutableElement.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/java.compiler/share/classes/javax/lang/model/element/ExecutableElement.java b/src/java.compiler/share/classes/javax/lang/model/element/ExecutableElement.java index d4c9c881f3b67..8bff37483947c 100644 --- a/src/java.compiler/share/classes/javax/lang/model/element/ExecutableElement.java +++ b/src/java.compiler/share/classes/javax/lang/model/element/ExecutableElement.java @@ -89,6 +89,17 @@ public interface ExecutableElement extends Element, Parameterizable { * non-inner class, or an initializer (static or instance), has no * receiver type. * + *

    The receiver parameter is a syntactic device added + * to the language for the purpose of hosting annotations. Even + * when source code is used as the basis for creating an + * executable, if a receiver parameter is not present in the + * source code, an implementation may elect to return a {@code + * NoType} object even in cases where a receiver type is + * nominally defined on the executable in question, such as an + * instance method. When a receiver parameter is present and + * hosting annotations, a suitably annotated receiver type is + * returned. + * * @return the receiver type of this executable * @since 1.8 * From 42af8ce1f6605376fdb69e03df9e22381a54fc36 Mon Sep 17 00:00:00 2001 From: Serguei Spitsyn Date: Fri, 1 Dec 2023 20:54:13 +0000 Subject: [PATCH 167/250] 8308614: Enabling JVMTI ClassLoad event slows down vthread creation by factor 10 Reviewed-by: dcubed, cjplummer, amenkov --- src/hotspot/share/prims/jvmtiThreadState.cpp | 26 +++++++++++--------- src/hotspot/share/prims/jvmtiThreadState.hpp | 7 ++++++ 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/src/hotspot/share/prims/jvmtiThreadState.cpp b/src/hotspot/share/prims/jvmtiThreadState.cpp index 0004feb54b4e3..6882c02f95a05 100644 --- a/src/hotspot/share/prims/jvmtiThreadState.cpp +++ b/src/hotspot/share/prims/jvmtiThreadState.cpp @@ -52,6 +52,7 @@ static const int UNKNOWN_STACK_DEPTH = -99; // JvmtiThreadState *JvmtiThreadState::_head = nullptr; +bool JvmtiThreadState::_seen_interp_only_mode = false; JvmtiThreadState::JvmtiThreadState(JavaThread* thread, oop thread_oop) : _thread_event_enable() { @@ -553,11 +554,14 @@ JvmtiVTMSTransitionDisabler::VTMS_vthread_start(jobject vthread) { assert(!thread->is_in_VTMS_transition(), "sanity check"); assert(!thread->is_in_tmp_VTMS_transition(), "sanity check"); - JvmtiEventController::thread_started(thread); - if (JvmtiExport::can_support_virtual_threads()) { - if (JvmtiExport::should_post_vthread_start()) { - JvmtiExport::post_vthread_start(vthread); - } + // If interp_only_mode has been enabled then we must eagerly create JvmtiThreadState + // objects for globally enabled virtual thread filtered events. Otherwise, + // it is an important optimization to create JvmtiThreadState objects lazily. + if (JvmtiThreadState::seen_interp_only_mode()) { + JvmtiEventController::thread_started(thread); + } + if (JvmtiExport::should_post_vthread_start()) { + JvmtiExport::post_vthread_start(vthread); } // post VirtualThreadMount event after VirtualThreadStart if (JvmtiExport::should_post_vthread_mount()) { @@ -576,10 +580,8 @@ JvmtiVTMSTransitionDisabler::VTMS_vthread_end(jobject vthread) { if (JvmtiExport::should_post_vthread_unmount()) { JvmtiExport::post_vthread_unmount(vthread); } - if (JvmtiExport::can_support_virtual_threads()) { - if (JvmtiExport::should_post_vthread_end()) { - JvmtiExport::post_vthread_end(vthread); - } + if (JvmtiExport::should_post_vthread_end()) { + JvmtiExport::post_vthread_end(vthread); } VTMS_unmount_begin(vthread, /* last_unmount */ true); if (thread->jvmti_thread_state() != nullptr) { @@ -629,9 +631,10 @@ JvmtiVTMSTransitionDisabler::VTMS_mount_end(jobject vthread) { thread->rebind_to_jvmti_thread_state_of(vt); - { + JvmtiThreadState* state = thread->jvmti_thread_state(); + if (state != nullptr && state->is_pending_interp_only_mode()) { MutexLocker mu(JvmtiThreadState_lock); - JvmtiThreadState* state = thread->jvmti_thread_state(); + state = thread->jvmti_thread_state(); if (state != nullptr && state->is_pending_interp_only_mode()) { JvmtiEventController::enter_interp_only_mode(); } @@ -770,6 +773,7 @@ void JvmtiThreadState::add_env(JvmtiEnvBase *env) { void JvmtiThreadState::enter_interp_only_mode() { assert(_thread != nullptr, "sanity check"); + _seen_interp_only_mode = true; _thread->increment_interp_only_mode(); invalidate_cur_stack_depth(); } diff --git a/src/hotspot/share/prims/jvmtiThreadState.hpp b/src/hotspot/share/prims/jvmtiThreadState.hpp index c15e328f36388..4bba0691e40d6 100644 --- a/src/hotspot/share/prims/jvmtiThreadState.hpp +++ b/src/hotspot/share/prims/jvmtiThreadState.hpp @@ -240,6 +240,8 @@ class JvmtiThreadState : public CHeapObj { inline JvmtiEnvThreadState* head_env_thread_state(); inline void set_head_env_thread_state(JvmtiEnvThreadState* ets); + static bool _seen_interp_only_mode; // interp_only_mode was requested at least once + public: ~JvmtiThreadState(); @@ -259,6 +261,11 @@ class JvmtiThreadState : public CHeapObj { static void periodic_clean_up(); + // Return true if any thread has entered interp_only_mode at any point during the JVMs execution. + static bool seen_interp_only_mode() { + return _seen_interp_only_mode; + } + void add_env(JvmtiEnvBase *env); // The pending_interp_only_mode is set when the interp_only_mode is triggered. From 3a09a052bcc67a7994677fd2a73e7afcf331a89e Mon Sep 17 00:00:00 2001 From: Erik Gahlin Date: Fri, 1 Dec 2023 20:54:35 +0000 Subject: [PATCH 168/250] 8313722: JFR: Avoid unnecessary calls to Events.from(Recording) Reviewed-by: mgronlun --- test/jdk/jdk/jfr/api/event/TestExtends.java | 18 ++++++++++-------- .../gc/detailed/TestZAllocationStallEvent.java | 4 ++-- .../gc/detailed/TestZPageAllocationEvent.java | 4 ++-- .../gc/heapsummary/HeapSummaryEventAllGcs.java | 11 ++++++----- .../objectcount/ObjectCountAfterGCEvent.java | 6 +++--- .../event/oldobject/TestMetadataRetention.java | 6 +++--- .../jfr/event/runtime/TestSafepointEvents.java | 7 ++++--- .../TestSyncOnValueBasedClassEvent.java | 4 ++-- .../jdk/jfr/event/runtime/TestVMOperation.java | 4 ++-- .../jdk/jfr/startupargs/TestRetransform.java | 9 ++++++--- test/lib/jdk/test/lib/jfr/Events.java | 7 ++++++- 11 files changed, 46 insertions(+), 34 deletions(-) diff --git a/test/jdk/jdk/jfr/api/event/TestExtends.java b/test/jdk/jdk/jfr/api/event/TestExtends.java index 294edf9f16293..eae47911ba091 100644 --- a/test/jdk/jdk/jfr/api/event/TestExtends.java +++ b/test/jdk/jdk/jfr/api/event/TestExtends.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,6 +23,7 @@ package jdk.jfr.api.event; +import java.util.List; import jdk.jfr.Event; import jdk.jfr.EventType; import jdk.jfr.Recording; @@ -88,7 +89,8 @@ public static void main(String[] args) throws Exception { m.commit(); r.stop(); - for (RecordedEvent re : Events.fromRecording(r)) { + List events = Events.fromRecording(r); + for (RecordedEvent re : events) { System.out.println(re); } // Grandpa @@ -127,18 +129,18 @@ public static void main(String[] args) throws Exception { verifyField(meType, "hiddenField"); verifyFieldCount(meType, 11); - for (RecordedEvent re : Events.fromRecording(r)) { + for (RecordedEvent re : events) { System.out.println(re); } - RecordedEvent grandpa = findEvent(r, GrandpaEvent.class.getName()); + RecordedEvent grandpa = findEvent(events, GrandpaEvent.class.getName()); Asserts.assertEquals(grandpa.getValue("gPublicField"), 4); Asserts.assertEquals(grandpa.getValue("gProtectedField"), 3); Asserts.assertEquals(grandpa.getValue("gPrivateField"), 2); Asserts.assertEquals(grandpa.getValue("gDefaultField"), 1); Asserts.assertEquals(grandpa.getValue("hiddenField"), 4711); - RecordedEvent parent = findEvent(r, ParentEvent.class.getName()); + RecordedEvent parent = findEvent(events, ParentEvent.class.getName()); Asserts.assertEquals(parent.getValue("gPublicField"), 4); Asserts.assertEquals(parent.getValue("gProtectedField"), 3); Asserts.assertEquals(parent.getValue("gDefaultField"), 1); @@ -148,7 +150,7 @@ public static void main(String[] args) throws Exception { Asserts.assertEquals(parent.getValue("pDefaultField"), 10); Asserts.assertEquals(parent.getValue("hiddenField"), true); - RecordedEvent me = findEvent(r, MeEvent.class.getName()); + RecordedEvent me = findEvent(events, MeEvent.class.getName()); Asserts.assertEquals(me.getValue("gPublicField"), 4); Asserts.assertEquals(me.getValue("gProtectedField"), 3); Asserts.assertEquals(me.getValue("gDefaultField"), 1); @@ -162,8 +164,8 @@ public static void main(String[] args) throws Exception { Asserts.assertEquals(me.getValue("hiddenField"), "Hidden"); } - private static RecordedEvent findEvent(Recording r, String name) throws Exception { - for (RecordedEvent re : Events.fromRecording(r)) { + private static RecordedEvent findEvent(List events, String name) throws Exception { + for (RecordedEvent re : events) { if (re.getEventType().getName().equals(name)) { return re; } diff --git a/test/jdk/jdk/jfr/event/gc/detailed/TestZAllocationStallEvent.java b/test/jdk/jdk/jfr/event/gc/detailed/TestZAllocationStallEvent.java index 2306d33b65107..7e0cc11173370 100644 --- a/test/jdk/jdk/jfr/event/gc/detailed/TestZAllocationStallEvent.java +++ b/test/jdk/jdk/jfr/event/gc/detailed/TestZAllocationStallEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2023, 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 @@ -65,7 +65,7 @@ public static void main(String[] args) throws Exception { List events = Events.fromRecording(recording); System.out.println("Events: " + events.size()); Events.hasEvents(events); - for (RecordedEvent event : Events.fromRecording(recording)) { + for (RecordedEvent event : events) { Events.assertField(event, "size").atLeast(2L * 1024 * 1024); } } diff --git a/test/jdk/jdk/jfr/event/gc/detailed/TestZPageAllocationEvent.java b/test/jdk/jdk/jfr/event/gc/detailed/TestZPageAllocationEvent.java index 910fdd80eb43d..182f7b3d509f3 100644 --- a/test/jdk/jdk/jfr/event/gc/detailed/TestZPageAllocationEvent.java +++ b/test/jdk/jdk/jfr/event/gc/detailed/TestZPageAllocationEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2023, 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 @@ -65,7 +65,7 @@ public static void main(String[] args) throws Exception { List events = Events.fromRecording(recording); System.out.println("Events: " + events.size()); Events.hasEvents(events); - for (RecordedEvent event : Events.fromRecording(recording)) { + for (RecordedEvent event : events) { Events.assertField(event, "size").atLeast(2L * 1024 * 1024); } } diff --git a/test/jdk/jdk/jfr/event/gc/heapsummary/HeapSummaryEventAllGcs.java b/test/jdk/jdk/jfr/event/gc/heapsummary/HeapSummaryEventAllGcs.java index 8946df90f814e..674270b044911 100644 --- a/test/jdk/jdk/jfr/event/gc/heapsummary/HeapSummaryEventAllGcs.java +++ b/test/jdk/jdk/jfr/event/gc/heapsummary/HeapSummaryEventAllGcs.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2023, 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 @@ -48,10 +48,11 @@ public static void test(String expectedYoungCollector, String expectedOldCollect GCHelper.callSystemGc(5, true); recording.stop(); - if (!checkCollectors(recording, expectedYoungCollector, expectedOldCollector)) { + List allEvents = Events.fromRecording(recording); + if (!checkCollectors(allEvents, expectedYoungCollector, expectedOldCollector)) { return; } - List events = GCHelper.removeFirstAndLastGC(Events.fromRecording(recording)); + List events = GCHelper.removeFirstAndLastGC(allEvents); for (RecordedEvent event : events) { System.out.println("Event:" + event); } @@ -190,8 +191,8 @@ private static void checkSpace(RecordedEvent event, String structName) { Asserts.assertEquals(size, end - start, "Size mismatch"); } - private static boolean checkCollectors(Recording recording, String expectedYoung, String expectedOld) throws Exception { - for (RecordedEvent event : Events.fromRecording(recording)) { + private static boolean checkCollectors(List events, String expectedYoung, String expectedOld) throws Exception { + for (RecordedEvent event : events) { if (Events.isEventType(event, EventNames.GCConfiguration)) { final String young = Events.assertField(event, "youngCollector").notEmpty().getValue(); final String old = Events.assertField(event, "oldCollector").notEmpty().getValue(); diff --git a/test/jdk/jdk/jfr/event/gc/objectcount/ObjectCountAfterGCEvent.java b/test/jdk/jdk/jfr/event/gc/objectcount/ObjectCountAfterGCEvent.java index 4646992f4643e..f5ee4b73a5e6e 100644 --- a/test/jdk/jdk/jfr/event/gc/objectcount/ObjectCountAfterGCEvent.java +++ b/test/jdk/jdk/jfr/event/gc/objectcount/ObjectCountAfterGCEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2023, 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 @@ -53,11 +53,11 @@ public static void test(String gcName) throws Exception { recording.stop(); System.out.println("gcName=" + gcName); - for (RecordedEvent event : Events.fromRecording(recording)) { + List events = Events.fromRecording(recording); + for (RecordedEvent event : events) { System.out.println("Event: " + event); } - List events= Events.fromRecording(recording); Optional gcEvent = events.stream() .filter(e -> isMySystemGc(e, gcName)) .findFirst(); diff --git a/test/jdk/jdk/jfr/event/oldobject/TestMetadataRetention.java b/test/jdk/jdk/jfr/event/oldobject/TestMetadataRetention.java index 82d324f5b55e2..b84160a0ac5a4 100644 --- a/test/jdk/jdk/jfr/event/oldobject/TestMetadataRetention.java +++ b/test/jdk/jdk/jfr/event/oldobject/TestMetadataRetention.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 2023, 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 @@ -100,10 +100,10 @@ public static void main(String[] args) throws Throwable { RecordedEvent chunkRotation = findChunkRotationEvent(events); try { // Sanity check that class was unloaded - Events.hasEvent(recording, EventNames.ClassUnload); + Events.hasEvent(events, EventNames.ClassUnload); validateClassUnloadEvent(events); // Validate that metadata for old object event has survived chunk rotation - Events.hasEvent(recording, EventNames.OldObjectSample); + Events.hasEvent(events, EventNames.OldObjectSample); validateOldObjectEvent(events, chunkRotation.getStartTime()); } catch (Throwable t) { t.printStackTrace(); diff --git a/test/jdk/jdk/jfr/event/runtime/TestSafepointEvents.java b/test/jdk/jdk/jfr/event/runtime/TestSafepointEvents.java index f590ebed8987c..285592bce1699 100644 --- a/test/jdk/jdk/jfr/event/runtime/TestSafepointEvents.java +++ b/test/jdk/jdk/jfr/event/runtime/TestSafepointEvents.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2023, 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 @@ -68,9 +68,10 @@ public static void main(String[] args) throws Exception { try { // Verify that each event type was seen at least once + List events = Events.fromRecording(recording); for (String name : EVENT_NAMES) { boolean found = false; - for (RecordedEvent event : Events.fromRecording(recording)) { + for (RecordedEvent event : events) { found = event.getEventType().getName().equals(name); if (found) { break; @@ -81,7 +82,7 @@ public static void main(String[] args) throws Exception { // Collect all events grouped by safepoint id SortedMap> safepointIds = new TreeMap<>(); - for (RecordedEvent event : Events.fromRecording(recording)) { + for (RecordedEvent event : events) { Long safepointId = event.getValue("safepointId"); if (!safepointIds.containsKey(safepointId)) { safepointIds.put(safepointId, new HashSet<>()); diff --git a/test/jdk/jdk/jfr/event/runtime/TestSyncOnValueBasedClassEvent.java b/test/jdk/jdk/jfr/event/runtime/TestSyncOnValueBasedClassEvent.java index 36ef4bf29bf19..f20175da37fd9 100644 --- a/test/jdk/jdk/jfr/event/runtime/TestSyncOnValueBasedClassEvent.java +++ b/test/jdk/jdk/jfr/event/runtime/TestSyncOnValueBasedClassEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2023, 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,7 +77,7 @@ public static void main(String[] args) throws Throwable { List classesFound = new ArrayList(); List events = Events.fromRecording(recording); Events.hasEvents(events); - for (RecordedEvent event : Events.fromRecording(recording)) { + for (RecordedEvent event : events) { String className = Events.assertField(event, "valueBasedClass.name").notEmpty().getValue(); RecordedThread jt = event.getThread(); if (Thread.currentThread().getName().equals(jt.getJavaName())) { diff --git a/test/jdk/jdk/jfr/event/runtime/TestVMOperation.java b/test/jdk/jdk/jfr/event/runtime/TestVMOperation.java index 61ec9677df6a8..ae6f1f27191af 100644 --- a/test/jdk/jdk/jfr/event/runtime/TestVMOperation.java +++ b/test/jdk/jdk/jfr/event/runtime/TestVMOperation.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2023, 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 @@ -54,7 +54,7 @@ public static void main(String[] args) throws Throwable { List events = Events.fromRecording(recording); Events.hasEvents(events); - for (RecordedEvent event : Events.fromRecording(recording)) { + for (RecordedEvent event : events) { String operation = Events.assertField(event, "operation").notEmpty().getValue(); if (operation.equals(VM_OPERATION)) { Events.assertField(event, "safepoint").equal(true); diff --git a/test/jdk/jdk/jfr/startupargs/TestRetransform.java b/test/jdk/jdk/jfr/startupargs/TestRetransform.java index 6e516afe7ebd6..2e4067ae5441d 100644 --- a/test/jdk/jdk/jfr/startupargs/TestRetransform.java +++ b/test/jdk/jdk/jfr/startupargs/TestRetransform.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,9 +23,11 @@ package jdk.jfr.startupargs; +import java.util.List; import jdk.jfr.Event; import jdk.jfr.EventType; import jdk.jfr.Recording; +import jdk.jfr.consumer.RecordedEvent; import jdk.test.lib.Asserts; import jdk.test.lib.jfr.Events; import jdk.test.lib.jfr.SimpleEvent; @@ -58,8 +60,9 @@ public static void main(String[] args) throws Exception { if (type.isEnabled()) { Asserts.fail("Expected event to be disabled after recording stopped"); } - Events.hasEvent(r, SimpleEvent.class.getName()); - Events.hasEvent(r, TestEvent.class.getName()); + List events = Events.fromRecording(r); + Events.hasEvent(events, SimpleEvent.class.getName()); + Events.hasEvent(events, TestEvent.class.getName()); } // Classes that are loaded during a recording diff --git a/test/lib/jdk/test/lib/jfr/Events.java b/test/lib/jdk/test/lib/jfr/Events.java index e3e5979817962..5a180659f9fcf 100644 --- a/test/lib/jdk/test/lib/jfr/Events.java +++ b/test/lib/jdk/test/lib/jfr/Events.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2023, 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 @@ -271,7 +271,12 @@ public static boolean isEventType(RecordedEvent event, String typeName) { * @throws IOException if an event set could not be created due to I/O * errors. */ + private static long lastId = -1; public static List fromRecording(Recording recording) throws IOException { + if (recording.getId() == lastId) { + throw new IOException("Recording with id " + lastId + " has already been dumped. Store the results in a List instead of dumping the recording again"); + } + lastId = recording.getId(); return RecordingFile.readAllEvents(makeCopy(recording)); } From 2f299e4a732a945175a9d334d69fedafbe0ca25b Mon Sep 17 00:00:00 2001 From: Eirik Bjorsnos Date: Fri, 1 Dec 2023 21:15:46 +0000 Subject: [PATCH 169/250] 8321182: SourceExample.SOURCE_14 comment should refer to 'switch expressions' instead of 'text blocks' Reviewed-by: darcy --- .../tools/javac/versions/Versions.java | 55 ++++++++----------- 1 file changed, 23 insertions(+), 32 deletions(-) diff --git a/test/langtools/tools/javac/versions/Versions.java b/test/langtools/tools/javac/versions/Versions.java index 554d384948b67..297995e921ae4 100644 --- a/test/langtools/tools/javac/versions/Versions.java +++ b/test/langtools/tools/javac/versions/Versions.java @@ -42,9 +42,7 @@ import javax.tools.StandardJavaFileManager; import java.util.List; import java.util.ArrayList; -import java.util.Arrays; import java.util.Set; -import java.util.function.BiConsumer; import java.util.function.Consumer; /* @@ -240,16 +238,8 @@ protected void check(String major) { protected void check(String major, List args) { printargs("check", args); - List jcargs = new ArrayList<>(); - jcargs.add("-Xlint:-options"); - // add in args conforming to List requrements of JavaCompiler - for (String onearg : args) { - String[] fields = onearg.split(" "); - for (String onefield : fields) { - jcargs.add(onefield); - } - } + List jcargs = javaCompilerOptions(args); boolean creturn = compile("Base.java", jcargs); if (!creturn) { @@ -264,6 +254,25 @@ protected void check(String major, List args) { } } + /** + * Create a list of options suitable for use with {@link JavaCompiler} + * @param args a list of space-delimited options, such as "-source 11" + * @return a list of arguments suitable for use with {@link JavaCompiler} + */ + private static List javaCompilerOptions(List args) { + List jcargs = new ArrayList<>(); + jcargs.add("-Xlint:-options"); + + // add in args conforming to List requirements of JavaCompiler + for (String onearg : args) { + String[] fields = onearg.split(" "); + for (String onefield : fields) { + jcargs.add(onefield); + } + } + return jcargs; + } + /** * The BASE source example is expected to compile on all source * levels. Otherwise, an example is expected to compile on its @@ -311,7 +320,7 @@ void m(String name) { """), SOURCE_14(14, "New14.java", - // New feature in 14: text blocks + // New feature in 14: switch expressions """ public class New14 { static { @@ -427,16 +436,7 @@ protected void expectedFail(List args, List fileNames) { protected void pass(List args) { printargs("pass", args); - List jcargs = new ArrayList<>(); - jcargs.add("-Xlint:-options"); - - // add in args conforming to List requrements of JavaCompiler - for (String onearg : args) { - String[] fields = onearg.split(" "); - for (String onefield : fields) { - jcargs.add(onefield); - } - } + List jcargs = javaCompilerOptions(args); // empty list is error if (jcargs.isEmpty()) { @@ -464,16 +464,7 @@ protected void pass(List args) { protected void fail(List args) { printargs("fail", args); - List jcargs = new ArrayList<>(); - jcargs.add("-Xlint:-options"); - - // add in args conforming to List requrements of JavaCompiler - for (String onearg : args) { - String[] fields = onearg.split(" "); - for (String onefield : fields) { - jcargs.add(onefield); - } - } + List jcargs = javaCompilerOptions(args); // empty list is error if (jcargs.isEmpty()) { From 8be3e39220cd64521f4e370011958e17e5fdeaf3 Mon Sep 17 00:00:00 2001 From: Leonid Mesnik Date: Sat, 2 Dec 2023 02:58:03 +0000 Subject: [PATCH 170/250] 8320129: "top" command during jtreg failure handler does not display CPU usage on OSX Reviewed-by: cjplummer, jpai --- test/failure_handler/src/share/conf/mac.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/failure_handler/src/share/conf/mac.properties b/test/failure_handler/src/share/conf/mac.properties index f075178e7ebb8..1a5d48f2bdc91 100644 --- a/test/failure_handler/src/share/conf/mac.properties +++ b/test/failure_handler/src/share/conf/mac.properties @@ -116,7 +116,7 @@ system.sysctl.args=-a process.ps.app=ps process.ps.args=-Meo pid,pcpu,cputime,start,pmem,vsz,rss,state,wchan,user,args process.top.app=top -process.top.args=-l 1 +process.top.args=-l 2 memory.vmstat.app=vm_stat memory.vmstat.args=-c 3 3 From 6f7bb79a5b543ebd9ccd72d7b1b289b1f6e4cedb Mon Sep 17 00:00:00 2001 From: Jaikiran Pai Date: Sat, 2 Dec 2023 05:38:07 +0000 Subject: [PATCH 171/250] 8320931: [REDO] dsymutil command leaves around temporary directories Reviewed-by: ihse, clanger --- make/autoconf/basic_tools.m4 | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/make/autoconf/basic_tools.m4 b/make/autoconf/basic_tools.m4 index 92a4582ecddc9..f9ecbab7ac099 100644 --- a/make/autoconf/basic_tools.m4 +++ b/make/autoconf/basic_tools.m4 @@ -390,6 +390,17 @@ AC_DEFUN_ONCE([BASIC_SETUP_COMPLEX_TOOLS], if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then UTIL_REQUIRE_PROGS(DSYMUTIL, dsymutil) + AC_MSG_CHECKING([if dsymutil supports --reproducer option]) + if $DSYMUTIL --help | $GREP -q '\--reproducer '; then + AC_MSG_RESULT([yes]) + # --reproducer option is supported + # set "--reproducer Off" to prevent unnecessary temporary + # directories creation + DSYMUTIL="$DSYMUTIL --reproducer Off" + else + # --reproducer option isn't supported + AC_MSG_RESULT([no]) + fi UTIL_REQUIRE_PROGS(MIG, mig) UTIL_REQUIRE_PROGS(XATTR, xattr) UTIL_LOOKUP_PROGS(CODESIGN, codesign) From 5dee2a36756caba28cf12920dc562278576f6de0 Mon Sep 17 00:00:00 2001 From: Alan Bateman Date: Sat, 2 Dec 2023 09:05:16 +0000 Subject: [PATCH 172/250] 8320440: Implementation of Structured Concurrency (Second Preview) Reviewed-by: iris, jpai, mchung, mcimadamore --- .../share/classes/jdk/internal/javac/PreviewFeature.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/java.base/share/classes/jdk/internal/javac/PreviewFeature.java b/src/java.base/share/classes/jdk/internal/javac/PreviewFeature.java index 6f96e7e6840eb..e4218f9bd5d10 100644 --- a/src/java.base/share/classes/jdk/internal/javac/PreviewFeature.java +++ b/src/java.base/share/classes/jdk/internal/javac/PreviewFeature.java @@ -75,7 +75,7 @@ public enum Feature { IMPLICIT_CLASSES, @JEP(number=446, title="Scoped Values", status="Preview") SCOPED_VALUES, - @JEP(number=453, title="Structured Concurrency", status="Preview") + @JEP(number=462, title="Structured Concurrency", status="Second Preview") STRUCTURED_CONCURRENCY, @JEP(number=461, title="Stream Gatherers", status="Preview") STREAM_GATHERERS, From 4dcbd13f99b62de16d6ed13cdf422e6bf9b03a63 Mon Sep 17 00:00:00 2001 From: Erik Gahlin Date: Sat, 2 Dec 2023 17:03:15 +0000 Subject: [PATCH 173/250] 8314905: jdk/jfr/tool/TestView.java fails with RuntimeException 'Invoked Concurrent' missing from stdout/stderr Reviewed-by: mgronlun --- test/jdk/jdk/jfr/tool/TestView.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/jdk/jdk/jfr/tool/TestView.java b/test/jdk/jdk/jfr/tool/TestView.java index fda82939c373d..89c74133286f9 100644 --- a/test/jdk/jdk/jfr/tool/TestView.java +++ b/test/jdk/jdk/jfr/tool/TestView.java @@ -91,13 +91,13 @@ private static void testTableView(String recording) throws Throwable { private static void testEventType(String recording) throws Throwable { OutputAnalyzer output = ExecuteHelper.jfr( - "view", "--verbose", "--width", "300", "--cell-height", "100", "SystemGC", recording); + "view", "--verbose", "--width", "300", "--cell-height", "100", "ThreadSleep", recording); // Verify title - output.shouldContain("System GC"); + output.shouldContain("Thread Sleep"); // Verify headings - output.shouldContain("Invoked Concurrent"); + output.shouldContain("Sleep Time"); // Verify verbose headings - output.shouldContain("invokedConcurrent"); + output.shouldContain("time"); // Verify thread value output.shouldContain(Thread.currentThread().getName()); // Verify stack frame From 949846986f572dfb82912e7d71e7bfd37a90871e Mon Sep 17 00:00:00 2001 From: Gregor Purdy Date: Sat, 2 Dec 2023 21:13:37 +0000 Subject: [PATCH 174/250] 8318983: Fix comment typo in PKCS12Passwd.java Reviewed-by: weijun --- test/jdk/sun/security/tools/keytool/PKCS12Passwd.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/jdk/sun/security/tools/keytool/PKCS12Passwd.java b/test/jdk/sun/security/tools/keytool/PKCS12Passwd.java index e5a60b5c06cd8..9f381cf49bf0a 100644 --- a/test/jdk/sun/security/tools/keytool/PKCS12Passwd.java +++ b/test/jdk/sun/security/tools/keytool/PKCS12Passwd.java @@ -108,7 +108,7 @@ public static void main(String[] args) throws Exception { check("p12", "newpass", "newpass"); - // Conversely, a JKS keystore can be laoded as a PKCS12, and it follows + // Conversely, a JKS keystore can be loaded as a PKCS12, and it follows // PKCS12 rules that both passwords are changed at the same time and // some commands are rejected. From b9df827adc92cb1fc65f6b1efdf82dcae00a4e2d Mon Sep 17 00:00:00 2001 From: Erik Gahlin Date: Sun, 3 Dec 2023 19:46:37 +0000 Subject: [PATCH 175/250] 8309871: jdk/jfr/api/consumer/recordingstream/TestSetEndTime.java timed out Reviewed-by: mgronlun --- .../jdk/jfr/api/consumer/recordingstream/TestSetEndTime.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/jdk/jdk/jfr/api/consumer/recordingstream/TestSetEndTime.java b/test/jdk/jdk/jfr/api/consumer/recordingstream/TestSetEndTime.java index ee1c9d379223e..478e7a7f77edb 100644 --- a/test/jdk/jdk/jfr/api/consumer/recordingstream/TestSetEndTime.java +++ b/test/jdk/jdk/jfr/api/consumer/recordingstream/TestSetEndTime.java @@ -47,7 +47,7 @@ * @key jfr * @requires vm.hasJFR * @library /test/lib - * @run main/othervm jdk.jfr.api.consumer.recordingstream.TestSetEndTime + * @run main/othervm -XX:+UnlockExperimentalVMOptions -XX:-UseFastUnorderedTimeStamps jdk.jfr.api.consumer.recordingstream.TestSetEndTime */ public final class TestSetEndTime { From 2b00ac0d02a110326846c75ea7ea535dccbb1924 Mon Sep 17 00:00:00 2001 From: Adam Sotona Date: Mon, 4 Dec 2023 07:07:57 +0000 Subject: [PATCH 176/250] 8308753: Class-File API transition to Preview Reviewed-by: ihse, mchung, vromero --- .../tools/module/GenModuleInfoSource.java | 5 + make/modules/java.base/Java.gmk | 4 +- make/test/BuildMicrobenchmark.gmk | 5 - .../share/classes/java/lang/Module.java | 16 +- .../lang}/classfile/AccessFlags.java | 6 +- .../lang}/classfile/Annotation.java | 17 +- .../lang}/classfile/AnnotationElement.java | 8 +- .../lang}/classfile/AnnotationValue.java | 130 ++- .../lang}/classfile/Attribute.java | 83 +- .../lang}/classfile/AttributeMapper.java | 24 +- .../lang}/classfile/AttributedElement.java | 13 +- .../lang}/classfile/Attributes.java | 158 ++-- .../lang}/classfile/BootstrapMethodEntry.java | 12 +- .../lang}/classfile/BufWriter.java | 14 +- .../lang}/classfile/ClassBuilder.java | 21 +- .../lang}/classfile/ClassElement.java | 63 +- .../lang/classfile/ClassFile.java} | 769 +++++++++--------- .../lang/classfile/ClassFileBuilder.java} | 25 +- .../lang/classfile/ClassFileElement.java} | 10 +- .../lang/classfile/ClassFileTransform.java} | 42 +- .../lang/classfile/ClassFileVersion.java} | 20 +- .../classfile/ClassHierarchyResolver.java | 21 +- .../lang}/classfile/ClassModel.java | 10 +- .../lang}/classfile/ClassReader.java | 29 +- .../lang}/classfile/ClassSignature.java | 10 +- .../lang}/classfile/ClassTransform.java | 23 +- .../lang}/classfile/CodeBuilder.java | 120 +-- .../lang}/classfile/CodeElement.java | 19 +- .../lang}/classfile/CodeModel.java | 10 +- .../lang}/classfile/CodeTransform.java | 21 +- .../lang}/classfile/CompoundElement.java | 13 +- .../lang}/classfile/CustomAttribute.java | 36 +- .../lang}/classfile/FieldBuilder.java | 12 +- .../lang}/classfile/FieldElement.java | 31 +- .../lang}/classfile/FieldModel.java | 8 +- .../lang}/classfile/FieldTransform.java | 21 +- .../lang}/classfile/Instruction.java | 56 +- .../lang}/classfile/Interfaces.java | 10 +- .../lang}/classfile/Label.java | 8 +- .../lang}/classfile/MethodBuilder.java | 12 +- .../lang}/classfile/MethodElement.java | 39 +- .../lang}/classfile/MethodModel.java | 8 +- .../lang}/classfile/MethodSignature.java | 12 +- .../lang}/classfile/MethodTransform.java | 21 +- .../lang}/classfile/Opcode.java | 457 ++++++----- .../lang}/classfile/PseudoInstruction.java | 22 +- .../lang}/classfile/Signature.java | 38 +- .../lang}/classfile/Superclass.java | 10 +- .../lang}/classfile/TypeAnnotation.java | 120 ++- .../lang}/classfile/TypeKind.java | 6 +- .../lang}/classfile/WritableElement.java | 13 +- .../attribute/AnnotationDefaultAttribute.java | 16 +- .../attribute/BootstrapMethodsAttribute.java | 14 +- .../attribute/CharacterRangeInfo.java | 24 +- .../CharacterRangeTableAttribute.java | 8 +- .../classfile/attribute/CodeAttribute.java | 16 +- .../attribute/CompilationIDAttribute.java | 16 +- .../attribute/ConstantValueAttribute.java | 16 +- .../attribute/DeprecatedAttribute.java | 14 +- .../attribute/EnclosingMethodAttribute.java | 30 +- .../attribute/ExceptionsAttribute.java | 14 +- .../classfile/attribute/InnerClassInfo.java | 12 +- .../attribute/InnerClassesAttribute.java | 14 +- .../classfile/attribute/LineNumberInfo.java | 6 +- .../attribute/LineNumberTableAttribute.java | 14 +- .../attribute/LocalVariableInfo.java | 8 +- .../LocalVariableTableAttribute.java | 14 +- .../attribute/LocalVariableTypeInfo.java | 8 +- .../LocalVariableTypeTableAttribute.java | 16 +- .../attribute/MethodParameterInfo.java | 14 +- .../attribute/MethodParametersAttribute.java | 16 +- .../classfile/attribute/ModuleAttribute.java | 32 +- .../classfile/attribute/ModuleExportInfo.java | 16 +- .../classfile/attribute/ModuleHashInfo.java | 8 +- .../attribute/ModuleHashesAttribute.java | 16 +- .../attribute/ModuleMainClassAttribute.java | 19 +- .../classfile/attribute/ModuleOpenInfo.java | 14 +- .../attribute/ModulePackagesAttribute.java | 18 +- .../attribute/ModuleProvideInfo.java | 10 +- .../attribute/ModuleRequireInfo.java | 18 +- .../attribute/ModuleResolutionAttribute.java | 17 +- .../attribute/ModuleTargetAttribute.java | 16 +- .../attribute/NestHostAttribute.java | 19 +- .../attribute/NestMembersAttribute.java | 18 +- .../PermittedSubclassesAttribute.java | 18 +- .../classfile/attribute/RecordAttribute.java | 16 +- .../attribute/RecordComponentInfo.java | 14 +- .../RuntimeInvisibleAnnotationsAttribute.java | 14 +- ...nvisibleParameterAnnotationsAttribute.java | 18 +- ...timeInvisibleTypeAnnotationsAttribute.java | 24 +- .../RuntimeVisibleAnnotationsAttribute.java | 14 +- ...eVisibleParameterAnnotationsAttribute.java | 18 +- ...untimeVisibleTypeAnnotationsAttribute.java | 24 +- .../attribute/SignatureAttribute.java | 28 +- .../SourceDebugExtensionAttribute.java | 16 +- .../attribute/SourceFileAttribute.java | 16 +- .../attribute/SourceIDAttribute.java | 16 +- .../attribute/StackMapFrameInfo.java | 25 +- .../attribute/StackMapTableAttribute.java | 12 +- .../attribute/SyntheticAttribute.java | 14 +- .../classfile/attribute/UnknownAttribute.java | 14 +- .../classfile/attribute/package-info.java | 36 + .../classfile/components/ClassPrinter.java | 37 +- .../classfile/components/ClassRemapper.java | 22 +- .../components/CodeLocalsShifter.java | 12 +- .../classfile/components/CodeRelabeler.java | 20 +- .../components/CodeStackTracker.java | 12 +- .../classfile/components/package-info.java | 37 +- .../snippet-files/PackageSnippets.java | 46 +- .../AnnotationConstantValueEntry.java | 7 +- .../classfile/constantpool/ClassEntry.java | 6 +- .../constantpool/ConstantDynamicEntry.java | 8 +- .../classfile/constantpool/ConstantPool.java | 13 +- .../constantpool/ConstantPoolBuilder.java | 26 +- .../constantpool/ConstantPoolException.java | 7 +- .../constantpool/ConstantValueEntry.java | 7 +- .../classfile/constantpool/DoubleEntry.java | 8 +- .../DynamicConstantPoolEntry.java | 10 +- .../classfile/constantpool/FieldRefEntry.java | 7 +- .../classfile/constantpool/FloatEntry.java | 8 +- .../classfile/constantpool/IntegerEntry.java | 8 +- .../constantpool/InterfaceMethodRefEntry.java | 7 +- .../constantpool/InvokeDynamicEntry.java | 6 +- .../constantpool/LoadableConstantEntry.java | 9 +- .../classfile/constantpool/LongEntry.java | 8 +- .../constantpool/MemberRefEntry.java | 7 +- .../constantpool/MethodHandleEntry.java | 6 +- .../constantpool/MethodRefEntry.java | 7 +- .../constantpool/MethodTypeEntry.java | 6 +- .../classfile/constantpool/ModuleEntry.java | 6 +- .../constantpool/NameAndTypeEntry.java | 6 +- .../classfile/constantpool/PackageEntry.java | 6 +- .../classfile/constantpool/PoolEntry.java | 9 +- .../classfile/constantpool/StringEntry.java | 6 +- .../classfile/constantpool/Utf8Entry.java | 6 +- .../classfile/constantpool/package-info.java | 36 + .../instruction/ArrayLoadInstruction.java | 16 +- .../instruction/ArrayStoreInstruction.java | 16 +- .../instruction/BranchInstruction.java | 16 +- .../classfile/instruction/CharacterRange.java | 44 +- .../instruction/ConstantInstruction.java | 27 +- .../instruction/ConvertInstruction.java | 16 +- .../instruction/DiscontinuedInstruction.java | 22 +- .../classfile/instruction/ExceptionCatch.java | 16 +- .../instruction/FieldInstruction.java | 23 +- .../instruction/IncrementInstruction.java | 14 +- .../instruction/InvokeDynamicInstruction.java | 19 +- .../instruction/InvokeInstruction.java | 30 +- .../classfile/instruction/LabelTarget.java | 14 +- .../classfile/instruction/LineNumber.java | 18 +- .../instruction/LoadInstruction.java | 16 +- .../classfile/instruction/LocalVariable.java | 24 +- .../instruction/LocalVariableType.java | 26 +- .../instruction/LookupSwitchInstruction.java | 14 +- .../instruction/MonitorInstruction.java | 14 +- .../instruction/NewMultiArrayInstruction.java | 14 +- .../instruction/NewObjectInstruction.java | 14 +- .../NewPrimitiveArrayInstruction.java | 14 +- .../NewReferenceArrayInstruction.java | 14 +- .../classfile/instruction/NopInstruction.java | 12 +- .../instruction/OperatorInstruction.java | 16 +- .../instruction/ReturnInstruction.java | 16 +- .../instruction/StackInstruction.java | 14 +- .../instruction/StoreInstruction.java | 16 +- .../classfile/instruction/SwitchCase.java | 8 +- .../instruction/TableSwitchInstruction.java | 14 +- .../instruction/ThrowInstruction.java | 12 +- .../instruction/TypeCheckInstruction.java | 16 +- .../classfile/instruction/package-info.java | 36 + .../lang}/classfile/package-info.java | 202 +++-- .../snippet-files/PackageSnippets.java | 159 +++- .../java/lang/invoke/MethodHandleProxies.java | 12 +- .../java/lang/runtime/SwitchBootstraps.java | 10 +- .../impl/AbstractAttributeMapper.java | 30 +- .../impl/AbstractBoundLocalVariable.java | 6 +- .../classfile/impl/AbstractDirectBuilder.java | 6 +- .../classfile/impl/AbstractInstruction.java | 78 +- .../classfile/impl/AbstractPoolEntry.java | 95 ++- .../impl/AbstractPseudoInstruction.java | 18 +- .../classfile/impl/AbstractUnboundModel.java | 10 +- .../classfile/impl/AccessFlagsImpl.java | 2 +- .../classfile/impl/AnnotationImpl.java | 6 +- .../classfile/impl/AnnotationReader.java | 20 +- .../classfile/impl/AttributeHolder.java | 6 +- .../classfile/impl/BlockCodeBuilderImpl.java | 12 +- .../impl/BootstrapMethodEntryImpl.java | 10 +- .../classfile/impl/BoundAttribute.java | 20 +- .../classfile/impl/BoundCharacterRange.java | 4 +- .../classfile/impl/BoundLocalVariable.java | 6 +- .../impl/BoundLocalVariableType.java | 6 +- .../impl/BoundRecordComponentInfo.java | 8 +- .../classfile/impl/BufWriterImpl.java | 22 +- .../classfile/impl/BufferedCodeBuilder.java | 28 +- .../classfile/impl/BufferedFieldBuilder.java | 10 +- .../classfile/impl/BufferedMethodBuilder.java | 28 +- .../classfile/impl/BytecodeHelpers.java | 20 +- .../classfile/impl/CatchBuilderImpl.java | 6 +- .../classfile/impl/ChainedClassBuilder.java | 6 +- .../classfile/impl/ChainedCodeBuilder.java | 8 +- .../classfile/impl/ChainedFieldBuilder.java | 8 +- .../classfile/impl/ChainedMethodBuilder.java | 14 +- ...{ClassfileImpl.java => ClassFileImpl.java} | 30 +- ...ionImpl.java => ClassFileVersionImpl.java} | 10 +- .../classfile/impl/ClassHierarchyImpl.java | 4 +- .../internal/classfile/impl/ClassImpl.java | 42 +- .../classfile/impl/ClassPrinterImpl.java | 40 +- .../classfile/impl/ClassReaderImpl.java | 59 +- .../classfile/impl/ClassRemapperImpl.java | 110 +-- .../jdk/internal/classfile/impl/CodeImpl.java | 26 +- .../classfile/impl/CodeLocalsShifterImpl.java | 20 +- .../classfile/impl/CodeRelabelerImpl.java | 26 +- .../classfile/impl/CodeStackTrackerImpl.java | 62 +- .../classfile/impl/DirectClassBuilder.java | 47 +- .../classfile/impl/DirectCodeBuilder.java | 107 +-- .../classfile/impl/DirectFieldBuilder.java | 21 +- .../classfile/impl/DirectMethodBuilder.java | 33 +- .../internal/classfile/impl/FieldImpl.java | 4 +- .../classfile/impl/InterfacesImpl.java | 4 +- .../internal/classfile/impl/LabelContext.java | 2 +- .../internal/classfile/impl/LabelImpl.java | 4 +- .../classfile/impl/LineNumberImpl.java | 2 +- .../internal/classfile/impl/MethodImpl.java | 4 +- .../internal/classfile/impl/MethodInfo.java | 4 +- .../impl/ModuleAttributeBuilderImpl.java | 10 +- .../impl/NonterminalCodeBuilder.java | 8 +- .../classfile/impl/RawBytecodeHelper.java | 10 +- .../classfile/impl/SignaturesImpl.java | 8 +- .../classfile/impl/SplitConstantPool.java | 76 +- .../internal/classfile/impl/StackCounter.java | 10 +- .../classfile/impl/StackMapDecoder.java | 16 +- .../classfile/impl/StackMapGenerator.java | 36 +- .../classfile/impl/SuperclassImpl.java | 4 +- .../classfile/impl/TargetInfoImpl.java | 6 +- .../classfile/impl/TemporaryConstantPool.java | 46 +- .../classfile/impl/TerminalCodeBuilder.java | 2 +- .../classfile/impl/TerminalFieldBuilder.java | 2 +- .../classfile/impl/TerminalMethodBuilder.java | 4 +- .../classfile/impl/TransformImpl.java | 38 +- .../impl/TransformingCodeBuilder.java | 12 +- .../classfile/impl/UnboundAttribute.java | 137 ++-- .../jdk/internal/classfile/impl/Util.java | 20 +- .../impl/verifier/VerificationBytecodes.java | 484 +++++------ .../impl/verifier/VerificationWrapper.java | 18 +- .../classfile/impl/verifier/VerifierImpl.java | 484 +++++------ .../foreign/abi/BindingSpecializer.java | 18 +- .../jdk/internal/javac/PreviewFeature.java | 2 + .../internal/module/ModuleInfoExtender.java | 20 +- src/java.base/share/classes/module-info.java | 35 +- .../share/classes/module-info.java | 3 + .../classes/sun/tools/jar/FingerPrint.java | 20 +- .../com/sun/tools/javap/AnnotationWriter.java | 14 +- .../com/sun/tools/javap/AttributeWriter.java | 10 +- .../com/sun/tools/javap/ClassWriter.java | 68 +- .../com/sun/tools/javap/CodeWriter.java | 18 +- .../com/sun/tools/javap/ConstantWriter.java | 4 +- .../tools/javap/InstructionDetailWriter.java | 2 +- .../com/sun/tools/javap/JavapTask.java | 12 +- .../tools/javap/LocalVariableTableWriter.java | 10 +- .../javap/LocalVariableTypeTableWriter.java | 10 +- .../classes/com/sun/tools/javap/Options.java | 2 +- .../com/sun/tools/javap/SourceWriter.java | 8 +- .../com/sun/tools/javap/StackMapWriter.java | 14 +- .../com/sun/tools/javap/TryBlockWriter.java | 6 +- .../sun/tools/javap/TypeAnnotationWriter.java | 10 +- src/jdk.jdeps/share/classes/module-info.java | 3 + .../jdk/jfr/internal/EventClassBuilder.java | 26 +- .../jfr/internal/EventInstrumentation.java | 32 +- .../jdk/jfr/internal/util/Bytecode.java | 10 +- src/jdk.jfr/share/classes/module-info.java | 3 + .../classes/jdk/tools/jimage/JImageTask.java | 10 +- .../internal/plugins/AbstractPlugin.java | 12 +- .../plugins/IncludeLocalesPlugin.java | 2 +- .../internal/plugins/StringSharingPlugin.java | 14 +- .../StripJavaDebugAttributesPlugin.java | 20 +- .../internal/plugins/SystemModulesPlugin.java | 18 +- .../internal/plugins/VersionPropsPlugin.java | 16 +- src/jdk.jlink/share/classes/module-info.java | 3 + .../execution/LocalExecutionControl.java | 16 +- src/jdk.jshell/share/classes/module-info.java | 3 + .../runtime/test/TestResolvedJavaMethod.java | 22 +- .../dcmd/framework/VMVersionTest.java | 6 +- .../securityManager/ClassLoaderTest.java | 6 +- .../lang/ModuleTests/AnnotationsTest.java | 4 +- .../invoke/MethodHandleProxies/BasicTest.java | 12 +- .../WrapperHiddenClassTest.java | 10 +- .../lang/invoke/lib/InstructionHelper.java | 16 +- .../condy/BootstrapMethodJumboArgsTest.java | 6 +- .../lang/invoke/condy/CondyBSMException.java | 6 +- .../lang/invoke/condy/CondyBSMInvocation.java | 6 +- .../invoke/condy/CondyBSMValidationTest.java | 6 +- .../CondyInterfaceWithOverpassMethods.java | 14 +- .../invoke/condy/CondyNameValidationTest.java | 6 +- .../lang/invoke/condy/CondyNestedTest.java | 22 +- .../condy/CondyRepeatFailedResolution.java | 42 +- .../condy/CondyReturnPrimitiveTest.java | 42 +- .../condy/CondyStaticArgumentsTest.java | 6 +- .../invoke/condy/CondyTypeValidationTest.java | 6 +- .../invoke/condy/CondyWithGarbageTest.java | 22 +- .../lang/invoke/condy/CondyWrongType.java | 6 +- .../invoke/condy/ConstantBootstrapsTest.java | 6 +- .../lang/module/ClassFileVersionsTest.java | 6 +- .../java/lang/module/ConfigurationTest.java | 4 +- .../lang/module/ModuleDescriptorTest.java | 10 +- .../java/lang/module/ModuleFinderTest.java | 6 +- .../jdk/java/lang/module/ModuleNamesTest.java | 4 +- .../java/lang/module/MultiReleaseJarTest.java | 6 +- .../lang/runtime/SwitchBootstrapsTest.java | 7 +- .../Provider/SecurityProviderModularTest.java | 6 +- .../java/time/chrono/HijrahConfigTest.java | 6 +- .../login/modules/JaasModularClientTest.java | 6 +- .../JaasModularDefaultHandlerTest.java | 6 +- test/jdk/jdk/classfile/AccessFlagsTest.java | 4 +- test/jdk/jdk/classfile/AdaptCodeTest.java | 18 +- .../AdvancedTransformationsTest.java | 56 +- .../jdk/classfile/AnnotationModelTest.java | 8 +- test/jdk/jdk/classfile/AnnotationTest.java | 12 +- test/jdk/jdk/classfile/ArrayTest.java | 22 +- test/jdk/jdk/classfile/BSMTest.java | 18 +- test/jdk/jdk/classfile/BasicBlockTest.java | 6 +- .../jdk/jdk/classfile/BoundAttributeTest.java | 14 +- test/jdk/jdk/classfile/BuilderBlockTest.java | 42 +- test/jdk/jdk/classfile/BuilderParamTest.java | 8 +- .../jdk/classfile/BuilderTryCatchTest.java | 26 +- test/jdk/jdk/classfile/ClassBuildingTest.java | 16 +- .../jdk/classfile/ClassHierarchyInfoTest.java | 25 +- test/jdk/jdk/classfile/ClassPrinterTest.java | 20 +- .../jdk/classfile/ConstantPoolCopyTest.java | 56 +- test/jdk/jdk/classfile/CorpusTest.java | 38 +- .../DiscontinuedInstructionsTest.java | 12 +- .../jdk/classfile/FilterDeadLabelsTest.java | 12 +- test/jdk/jdk/classfile/LDCTest.java | 16 +- test/jdk/jdk/classfile/LimitsTest.java | 20 +- test/jdk/jdk/classfile/LowAdaptTest.java | 16 +- .../jdk/classfile/LowJCovAttributeTest.java | 20 +- test/jdk/jdk/classfile/LowModuleTest.java | 22 +- test/jdk/jdk/classfile/LvtTest.java | 38 +- .../jdk/classfile/MassAdaptCopyCodeTest.java | 16 +- .../MassAdaptCopyPrimitiveMatchCodeTest.java | 22 +- test/jdk/jdk/classfile/ModuleBuilderTest.java | 28 +- test/jdk/jdk/classfile/OneToOneTest.java | 36 +- .../jdk/classfile/OpcodesValidationTest.java | 12 +- test/jdk/jdk/classfile/OptionsTest.java | 33 +- .../classfile/PreviewMinorVersionTest.java | 12 +- .../classfile/PrimitiveClassConstantTest.java | 6 +- test/jdk/jdk/classfile/ShortJumpsFixTest.java | 36 +- test/jdk/jdk/classfile/SignaturesTest.java | 16 +- test/jdk/jdk/classfile/SnippetsTest.java | 13 +- test/jdk/jdk/classfile/StackMapsTest.java | 36 +- test/jdk/jdk/classfile/StackTrackerTest.java | 10 +- .../jdk/jdk/classfile/StreamedVsListTest.java | 44 +- test/jdk/jdk/classfile/SwapTest.java | 6 +- test/jdk/jdk/classfile/TEST.properties | 6 +- .../TempConstantPoolBuilderTest.java | 14 +- .../jdk/classfile/TestRecordComponent.java | 22 +- test/jdk/jdk/classfile/TransformTests.java | 22 +- test/jdk/jdk/classfile/Utf8EntryTest.java | 28 +- test/jdk/jdk/classfile/UtilTest.java | 2 +- test/jdk/jdk/classfile/VerifierSelfTest.java | 16 +- test/jdk/jdk/classfile/WriteTest.java | 24 +- .../examples/AnnotationsExamples.java | 32 +- .../classfile/examples/ExampleGallery.java | 94 +-- .../ExperimentalTransformExamples.java | 10 +- .../classfile/examples/ModuleExamples.java | 26 +- .../classfile/examples/TransformExamples.java | 24 +- .../jdk/classfile/helpers/ClassRecord.java | 26 +- .../InstructionModelToCodeBuilder.java | 6 +- .../helpers/RebuildingTransformation.java | 14 +- test/jdk/jdk/classfile/helpers/TestUtil.java | 4 +- .../jdk/jdk/classfile/helpers/Transforms.java | 54 +- test/jdk/jdk/lambda/TEST.properties | 6 +- .../separate/ClassToInterfaceConverter.java | 10 +- .../jdk/modules/incubator/ServiceBinding.java | 6 +- .../jdk/sun/tools/jcmd/TestProcessHelper.java | 4 +- .../tools/jimage/JImageNonAsciiNameTest.java | 6 +- test/jdk/tools/jimage/JImageTest.java | 6 +- test/jdk/tools/jlink/DefaultProviderTest.java | 6 +- .../tools/jlink/ExplodedModuleNameTest.java | 6 +- test/jdk/tools/jlink/IntegrationTest.java | 6 +- test/jdk/tools/jlink/JLink100Modules.java | 6 +- test/jdk/tools/jlink/JLink2Test.java | 6 +- .../jlink/JLinkDedupTestBatchSizeOne.java | 6 +- test/jdk/tools/jlink/JLinkNegativeTest.java | 11 +- test/jdk/tools/jlink/JLinkOptionsTest.java | 6 +- test/jdk/tools/jlink/JLinkPluginsTest.java | 6 +- test/jdk/tools/jlink/JLinkTest.java | 6 +- .../jdk/tools/jlink/ModuleNamesOrderTest.java | 6 +- test/jdk/tools/jlink/NativeTest.java | 6 +- .../jlink/plugins/AddOptionsPluginTest.java | 6 +- .../tools/jlink/plugins/CDSPluginTest.java | 6 +- .../plugins/GenerateJLIClassesPluginTest.java | 6 +- .../plugins/IncludeLocalesPluginTest.java | 6 +- .../plugins/SaveJlinkArgfilesPluginTest.java | 6 +- .../plugins/StringSharingPluginTest.java | 6 +- .../StripJavaDebugAttributesPluginTest.java | 12 +- .../jlink/plugins/VendorInfoPluginsTest.java | 6 +- test/jdk/tools/lib/tests/JImageValidator.java | 6 +- .../classfile/ClassfileInspector.java | 6 +- .../tools/javac/4241573/T4241573.java | 16 +- .../tools/javac/7003595/T7003595.java | 14 +- .../CPoolRefClassContainingInlinedCts.java | 16 +- .../CheckACC_STRICTFlagOnclinitTest.java | 52 +- .../8000518/DuplicateConstantPoolEntry.java | 16 +- ...eckACC_STRICTFlagOnPkgAccessClassTest.java | 14 +- .../8009170/RedundantByteCodeInArrayTest.java | 14 +- .../AnonymousClass/AnonymousClassFlags.java | 24 +- .../MethodParameters/AnnotationTest.java | 8 +- .../MethodParameters/AnonymousClass.java | 8 +- .../MethodParameters/ClassFileVisitor.java | 26 +- .../javac/MethodParameters/Constructors.java | 8 +- .../javac/MethodParameters/EnumTest.java | 8 +- .../MethodParameters/InstanceMethods.java | 8 +- .../javac/MethodParameters/LambdaTest.java | 8 +- .../LegacyOutputTest/LegacyOutputTest.java | 16 +- .../MethodParameters/LocalClassTest.java | 8 +- .../MethodParameters/MemberClassTest.java | 8 +- .../javac/MethodParameters/StaticMethods.java | 8 +- .../MethodParameters/UncommonParamNames.java | 8 +- .../tools/javac/MethodParametersTest.java | 22 +- .../tools/javac/NoStringToLower.java | 14 +- .../ImplicitParameters.java | 32 +- .../StringConcat/TestIndyStringConcat.java | 75 +- .../StringConcat/WellKnownTypeSignatures.java | 18 +- .../javac/StringConcat/WellKnownTypes.java | 6 +- .../tools/javac/StringConcat/access/Test.java | 16 +- ...ationsAreNotCopiedToBridgeMethodsTest.java | 16 +- .../DebugPointerAtBadPositionTest.java | 14 +- .../InlinedFinallyConfuseDebuggersTest.java | 14 +- .../tools/javac/T7053059/DoubleCastTest.java | 18 +- test/langtools/tools/javac/T7093325.java | 18 +- ...rClassAttrMustNotHaveStrictFPFlagTest.java | 16 +- .../T8003967/DetectMutableStaticFields.java | 20 +- ...rNamesAreNotCopiedToAnonymousInitTest.java | 19 +- .../EmptyUTF8ForInnerClassNameTest.java | 14 +- .../javac/T8019486/WrongLNTForLambdaTest.java | 12 +- .../DeadCodeGeneratedForEmptyTryTest.java | 18 +- .../NoDeadCodeGenerationOnTrySmtTest.java | 14 +- .../DontGenerateLVTForGNoneOpTest.java | 12 +- .../MissingLNTEntryForBreakContinueTest.java | 14 +- .../MissingLNTEntryForFinalizerTest.java | 14 +- .../T8187805/BogusRTTAForUnusedVarTest.java | 16 +- ...TargetIsNotAddedAsMarkerInterfaceTest.java | 16 +- .../T8209173/CodeCompletionExceptTest.java | 8 +- ...oLocalsMustBeReservedForDCEedVarsTest.java | 14 +- .../javac/T8222949/TestConstantDynamic.java | 18 +- .../TryWithResources/TwrSimpleClose.java | 18 +- .../ApplicableAnnotationsOnRecords.java | 10 +- .../annotations/SyntheticParameters.java | 10 +- .../TypeAnnotationsPositionsOnRecords.java | 12 +- .../VariablesDeclaredWithVarTest.java | 12 +- .../classfile/AnonymousClassTest.java | 24 +- .../classfile/ClassfileTestHelper.java | 8 +- .../classfile/CombinationsTargetTest1.java | 12 +- .../classfile/CombinationsTargetTest2.java | 12 +- .../classfile/CombinationsTargetTest3.java | 6 +- .../typeAnnotations/classfile/DeadCode.java | 10 +- .../classfile/InstanceInitializer.java | 10 +- .../classfile/NewTypeArguments.java | 10 +- .../classfile/NoTargetAnnotations.java | 14 +- .../typeAnnotations/classfile/Scopes.java | 12 +- .../classfile/StaticInitializer.java | 10 +- .../classfile/SyntheticParameters.java | 12 +- .../typeAnnotations/classfile/T8008762.java | 10 +- .../typeAnnotations/classfile/T8008769.java | 10 +- .../typeAnnotations/classfile/T8010015.java | 10 +- .../classfile/TestAnonInnerClasses.java | 14 +- .../classfile/TestNewCastArray.java | 14 +- .../TypeAnnotationPropagationTest.java | 14 +- .../typeAnnotations/classfile/TypeCasts.java | 8 +- .../typeAnnotations/classfile/Wildcards.java | 8 +- .../referenceinfos/ClassExtends.java | 10 +- .../referenceinfos/ClassTypeParam.java | 10 +- .../ConstructorInvocationTypeArgument.java | 10 +- .../referenceinfos/Constructors.java | 10 +- .../referenceinfos/Driver.java | 4 +- .../referenceinfos/ExceptionParameters.java | 10 +- .../referenceinfos/Fields.java | 10 +- .../referenceinfos/FromSpecification.java | 10 +- .../referenceinfos/Initializers.java | 10 +- .../referenceinfos/Lambda.java | 10 +- .../MethodInvocationTypeArgument.java | 10 +- .../referenceinfos/MethodParameters.java | 10 +- .../referenceinfos/MethodReceivers.java | 10 +- .../referenceinfos/MethodReturns.java | 10 +- .../referenceinfos/MethodThrows.java | 10 +- .../referenceinfos/MethodTypeParam.java | 10 +- .../referenceinfos/MultiCatch.java | 10 +- .../referenceinfos/NestedTypes.java | 10 +- .../referenceinfos/NewObjects.java | 10 +- .../referenceinfos/ReferenceInfoUtil.java | 4 +- .../RepeatingTypeAnnotations.java | 10 +- .../referenceinfos/ResourceVariable.java | 10 +- .../referenceinfos/TypeCasts.java | 10 +- .../referenceinfos/TypeTests.java | 10 +- .../intersection/DuplicatedCheckcastTest.java | 16 +- .../InnerClasses/SyntheticClasses.java | 14 +- .../javac/classfiles/T8255757/T8255757.java | 12 +- .../AnnotationDefaultTest.java | 10 +- .../AnnotationDefaultVerifier.java | 8 +- .../EnclosingMethod/EnclosingMethodTest.java | 10 +- .../LineNumberTable/LineNumberTest.java | 6 +- .../LineNumberTable/LineNumberTestBase.java | 6 +- .../MultipleRecordPatterns.java | 6 +- .../LineNumberTable/RuleSwitchBreaks.java | 6 +- .../LineNumberTable/StringSwitchBreaks.java | 6 +- .../attributes/LineNumberTable/T8050993.java | 14 +- .../LocalVariableTableTest.java | 8 +- .../LocalVariableTestBase.java | 6 +- .../LocalVariableTypeTableTest.java | 8 +- .../attributes/Module/ModuleFlagTest.java | 14 +- .../attributes/Module/ModuleTest.java | 6 +- .../attributes/Module/ModuleTestBase.java | 20 +- .../attributes/Signature/ConstructorTest.java | 6 +- .../attributes/Signature/Driver.java | 4 +- .../attributes/Signature/EnumTest.java | 6 +- .../attributes/Signature/ExceptionTest.java | 6 +- .../attributes/Signature/FieldTest.java | 6 +- .../attributes/Signature/InnerClassTest.java | 6 +- .../Signature/MethodParameterTest.java | 6 +- .../Signature/MethodTypeBoundTest.java | 6 +- .../attributes/Signature/ReturnTypeTest.java | 6 +- .../SourceFile/AnonymousClassTest.java | 6 +- .../attributes/SourceFile/InnerClassTest.java | 6 +- .../attributes/SourceFile/LocalClassTest.java | 6 +- .../attributes/SourceFile/MixTest.java | 6 +- .../attributes/SourceFile/ModuleInfoTest.java | 6 +- .../SourceFile/NoSourceFileAttribute.java | 12 +- .../SourceFile/SourceFileTestBase.java | 12 +- .../SourceFile/SourceFileTestBase_legacy.java | 117 +++ .../SourceFile/SyntheticClassTest.java | 13 +- .../TopLevelClassesOneFileTest.java | 6 +- ...ssToPrivateInnerClassConstructorsTest.java | 6 +- .../AccessToPrivateInnerClassMembersTest.java | 6 +- .../AccessToPrivateSiblingsTest.java | 6 +- .../attributes/Synthetic/AssertFieldTest.java | 6 +- .../BridgeMethodForGenericMethodTest.java | 6 +- ...geMethodsForLambdaTargetRelease14Test.java | 13 +- .../Synthetic/BridgeMethodsForLambdaTest.java | 6 +- .../attributes/Synthetic/EnumTest.java | 6 +- .../attributes/Synthetic/PackageInfoTest.java | 6 +- .../Synthetic/SyntheticTestDriver.java | 4 +- .../Synthetic/SyntheticTestDriver_legacy.java | 212 +++++ .../attributes/Synthetic/ThisFieldTest.java | 6 +- .../annotations/AnnotationsTestBase.java | 2 +- ...untimeAnnotationsForGenericMethodTest.java | 8 +- ...timeAnnotationsForInnerAnnotationTest.java | 8 +- .../RuntimeAnnotationsForInnerClassTest.java | 8 +- .../RuntimeAnnotationsForInnerEnumTest.java | 8 +- ...ntimeAnnotationsForInnerInterfaceTest.java | 8 +- ...untimeAnnotationsForTopLevelClassTest.java | 8 +- .../RuntimeAnnotationsTestBase.java | 4 +- ...ameterAnnotationsForGenericMethodTest.java | 8 +- ...timeParameterAnnotationsForLambdaTest.java | 18 +- .../RuntimeParameterAnnotationsTest.java | 8 +- .../RuntimeParameterAnnotationsTestBase.java | 4 +- .../annotations/TestAnnotationInfo.java | 4 +- .../deprecated/DeprecatedPackageTest.java | 12 +- .../attributes/deprecated/DeprecatedTest.java | 10 +- ...InnerAnnotationsInInnerAnnotationTest.java | 6 +- .../InnerAnnotationsInInnerClassTest.java | 6 +- .../InnerAnnotationsInInnerEnumTest.java | 6 +- .../InnerAnnotationsInInnerInterfaceTest.java | 6 +- .../InnerClassesHierarchyTest.java | 12 +- .../InnerClassesInAnonymousClassTest.java | 6 +- .../InnerClassesInInnerAnnotationTest.java | 6 +- .../InnerClassesInInnerClassTest.java | 6 +- .../InnerClassesInInnerEnumTest.java | 6 +- .../InnerClassesInInnerInterfaceTest.java | 6 +- .../InnerClassesInLocalClassTest.java | 8 +- .../innerclasses/InnerClassesIndexTest.java | 12 +- .../innerclasses/InnerClassesTest.java | 6 +- .../innerclasses/InnerClassesTestBase.java | 6 +- .../InnerEnumInInnerAnnotationTest.java | 6 +- .../InnerEnumInInnerEnumTest.java | 6 +- .../InnerEnumInInnerInterfaceTest.java | 6 +- .../InnerEnumsInInnerClassTest.java | 6 +- .../InnerInterfacesInInnerAnnotationTest.java | 6 +- .../InnerInterfacesInInnerClassTest.java | 6 +- .../InnerInterfacesInInnerEnumTest.java | 6 +- .../InnerInterfacesInInnerInterfaceTest.java | 6 +- .../innerclasses/NoInnerClassesTest.java | 10 +- .../classfiles/attributes/lib/TestBase.java | 4 +- .../attributes/lib_legacy/TestBase.java | 284 +++++++ .../attributes/lib_legacy/TestResult.java | 191 +++++ .../classreader/8171132/BadConstantValue.java | 16 +- .../IndyCorrectInvocationName.java | 16 +- .../tools/javac/code/CharImmediateValue.java | 12 +- .../javac/constDebug/ConstDebugTest.java | 10 +- .../javac/defaultMethods/BadClassfile.java | 14 +- ...heckACC_STRICTFlagOnDefaultMethodTest.java | 57 +- .../javac/defaultMethods/TestDefaultBody.java | 20 +- .../TestNoBridgeOnDefaults.java | 12 +- .../super/TestDirectSuperInterfaceInvoke.java | 18 +- .../tools/javac/diags/CheckResourceKeys.java | 12 +- test/langtools/tools/javac/diags/Example.java | 8 +- .../BadConstantValueType.java | 2 +- .../processors/CreateBadClassFile.java | 6 +- .../InvalidDefaultInterface.java | 2 +- .../processors/CreateBadClassFile.java | 6 +- .../InvalidStaticInterface.java | 2 +- .../processors/CreateBadClassFile.java | 6 +- .../_super/NonDirectSuper/NonDirectSuper.java | 20 +- .../tools/javac/file/SymLinkArchiveTest.java | 6 +- .../javac/file/SymLinkShortNameTest.java | 6 +- .../tools/javac/file/SymLinkTest.java | 12 +- .../tools/javac/flow/LVTHarness.java | 14 +- .../javac/generics/bridges/BridgeHarness.java | 14 +- .../tools/javac/importscope/T8193717.java | 14 +- .../jvm/ClassRefDupInConstantPoolTest.java | 12 +- .../tools/javac/lambda/ByteCodeTest.java | 16 +- .../javac/lambda/LambdaTestStrictFPFlag.java | 44 +- .../javac/lambda/LocalVariableTable.java | 14 +- .../lambda/TestBootstrapMethodsCount.java | 14 +- .../tools/javac/lambda/TestInvokeDynamic.java | 18 +- .../lambda/bytecode/TestLambdaBytecode.java | 18 +- .../TestLambdaBytecodeTargetRelease14.java | 20 +- .../deduplication/DeduplicationTest.java | 17 +- ...estNonSerializableLambdaNameStability.java | 12 +- .../tools/javac/launcher/GetResourceTest.java | 4 +- .../javac/launcher/SourceLauncherTest.java | 20 +- .../tools/javac/launcher/src/CLTest.java | 8 +- .../ConditionalLineNumberTest.java | 12 +- .../linenumbers/FinallyLineNumberTest.java | 12 +- .../linenumbers/NestedLineNumberTest.java | 16 +- .../linenumbers/NullCheckLineNumberTest.java | 30 +- test/langtools/tools/javac/meth/TestCP.java | 18 +- .../javac/modules/AnnotationsOnModules.java | 24 +- .../tools/javac/modules/IncubatingTest.java | 16 +- .../tools/javac/modules/JavaBaseTest.java | 18 +- .../tools/javac/modules/ModuleVersion.java | 12 +- .../tools/javac/modules/OpenModulesTest.java | 16 +- .../javac/multicatch/7005371/T7005371.java | 16 +- .../tools/javac/multicatch/Pos05.java | 16 +- .../tools/javac/patterns/Annotations.java | 16 +- .../javac/patterns/LocalVariableTable.java | 14 +- .../javac/patterns/MatchExceptionTest.java | 16 +- .../NestedPatternVariablesBytecode.java | 12 +- .../javac/patterns/NoUnnecessaryCast.java | 16 +- .../javac/platform/ModuleVersionTest.java | 16 +- .../javac/preview/PreviewAutoSuppress.java | 10 +- .../tools/javac/preview/PreviewErrors.java | 12 +- .../tools/javac/preview/PreviewTest.java | 12 +- .../model/element/TestFileObjectOf.java | 6 +- .../processing/model/element/TestOrigin.java | 26 +- .../javac/records/RecordCompilationTests.java | 36 +- .../RecordsBinaryCompatibilityTests.java | 6 +- .../RecordComponentTypeTest.java | 12 +- .../javac/recovery/AnnotationRecovery.java | 6 +- .../tools/javac/recovery/AttrRecovery.java | 6 +- .../tools/javac/recovery/LambdaRecovery.java | 6 +- .../tools/javac/recovery/MethodModifiers.java | 6 +- .../tools/javac/resolve/NoObjectToString.java | 12 +- .../sealed/BinaryCompatibilityTests.java | 6 +- .../sealed/CheckSubtypesOfSealedTest.java | 12 +- .../sealed/SealedDiffConfigurationsTest.java | 22 +- .../tools/javac/sym/ElementStructureTest.java | 10 +- .../tools/javac/varargs/6199075/T6199075.java | 18 +- .../tools/javac/varargs/7042566/T7042566.java | 20 +- test/langtools/tools/javap/T6716452.java | 12 +- .../tools/javap/TestClassNameWarning.java | 12 +- .../javap/classfile/6888367/T6888367.java | 16 +- .../tools/javap/classfile/T6887895.java | 12 +- .../typeAnnotations/JSR175Annotations.java | 16 +- .../tools/javap/typeAnnotations/NewArray.java | 12 +- .../tools/javap/typeAnnotations/Presence.java | 12 +- .../javap/typeAnnotations/PresenceInner.java | 14 +- .../javap/typeAnnotations/TypeCasts.java | 12 +- .../javap/typeAnnotations/Visibility.java | 14 +- .../javap/typeAnnotations/Wildcards.java | 12 +- .../jdk/test/lib/util/ModuleInfoWriter.java | 44 +- .../java/lang/invoke/LazyStaticColdStart.java | 12 +- .../classfile/AbstractCorpusBenchmark.java | 6 +- .../bench/jdk/classfile/AdHocAdapt.java | 8 +- .../jdk/classfile/ClassfileBenchmark.java | 26 +- .../jdk/classfile/GenerateStackMaps.java | 22 +- .../bench/jdk/classfile/ParseOptions.java | 10 +- .../openjdk/bench/jdk/classfile/ReadDeep.java | 22 +- .../bench/jdk/classfile/ReadMetadata.java | 16 +- .../jdk/classfile/RebuildMethodBodies.java | 32 +- .../jdk/classfile/RepeatedModelTraversal.java | 11 +- .../bench/jdk/classfile/Transforms.java | 48 +- .../openjdk/bench/jdk/classfile/Write.java | 30 +- 681 files changed, 7528 insertions(+), 6512 deletions(-) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/AccessFlags.java (96%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/Annotation.java (87%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/AnnotationElement.java (96%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/AnnotationValue.java (83%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/Attribute.java (58%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/AttributeMapper.java (90%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/AttributedElement.java (89%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/Attributes.java (90%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/BootstrapMethodEntry.java (86%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/BufWriter.java (94%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/ClassBuilder.java (94%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/ClassElement.java (51%) rename src/java.base/share/classes/{jdk/internal/classfile/Classfile.java => java/lang/classfile/ClassFile.java} (50%) rename src/java.base/share/classes/{jdk/internal/classfile/ClassfileBuilder.java => java/lang/classfile/ClassFileBuilder.java} (78%) rename src/java.base/share/classes/{jdk/internal/classfile/ClassfileElement.java => java/lang/classfile/ClassFileElement.java} (89%) rename src/java.base/share/classes/{jdk/internal/classfile/ClassfileTransform.java => java/lang/classfile/ClassFileTransform.java} (83%) rename src/java.base/share/classes/{jdk/internal/classfile/ClassfileVersion.java => java/lang/classfile/ClassFileVersion.java} (75%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/ClassHierarchyResolver.java (90%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/ClassModel.java (93%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/ClassReader.java (93%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/ClassSignature.java (93%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/ClassTransform.java (88%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/CodeBuilder.java (94%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/CodeElement.java (74%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/CodeModel.java (89%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/CodeTransform.java (82%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/CompoundElement.java (91%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/CustomAttribute.java (69%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/FieldBuilder.java (90%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/FieldElement.java (62%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/FieldModel.java (91%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/FieldTransform.java (84%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/Instruction.java (57%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/Interfaces.java (90%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/Label.java (92%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/MethodBuilder.java (92%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/MethodElement.java (60%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/MethodModel.java (92%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/MethodSignature.java (93%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/MethodTransform.java (85%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/Opcode.java (62%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/PseudoInstruction.java (76%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/Signature.java (91%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/Superclass.java (86%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/TypeAnnotation.java (89%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/TypeKind.java (97%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/WritableElement.java (84%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/AnnotationDefaultAttribute.java (86%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/BootstrapMethodsAttribute.java (86%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/CharacterRangeInfo.java (88%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/CharacterRangeTableAttribute.java (95%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/CodeAttribute.java (84%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/CompilationIDAttribute.java (86%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/ConstantValueAttribute.java (87%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/DeprecatedAttribute.java (86%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/EnclosingMethodAttribute.java (79%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/ExceptionsAttribute.java (90%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/InnerClassInfo.java (90%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/InnerClassesAttribute.java (86%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/LineNumberInfo.java (92%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/LineNumberTableAttribute.java (83%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/LocalVariableInfo.java (91%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/LocalVariableTableAttribute.java (83%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/LocalVariableTypeInfo.java (91%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/LocalVariableTypeTableAttribute.java (81%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/MethodParameterInfo.java (90%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/MethodParametersAttribute.java (85%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/ModuleAttribute.java (91%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/ModuleExportInfo.java (94%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/ModuleHashInfo.java (91%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/ModuleHashesAttribute.java (90%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/ModuleMainClassAttribute.java (81%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/ModuleOpenInfo.java (94%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/ModulePackagesAttribute.java (87%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/ModuleProvideInfo.java (89%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/ModuleRequireInfo.java (89%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/ModuleResolutionAttribute.java (88%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/ModuleTargetAttribute.java (87%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/NestHostAttribute.java (81%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/NestMembersAttribute.java (86%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/PermittedSubclassesAttribute.java (86%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/RecordAttribute.java (84%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/RecordComponentInfo.java (91%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/RuntimeInvisibleAnnotationsAttribute.java (85%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/RuntimeInvisibleParameterAnnotationsAttribute.java (84%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/RuntimeInvisibleTypeAnnotationsAttribute.java (81%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/RuntimeVisibleAnnotationsAttribute.java (85%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/RuntimeVisibleParameterAnnotationsAttribute.java (84%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/RuntimeVisibleTypeAnnotationsAttribute.java (81%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/SignatureAttribute.java (84%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/SourceDebugExtensionAttribute.java (82%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/SourceFileAttribute.java (85%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/SourceIDAttribute.java (86%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/StackMapFrameInfo.java (87%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/StackMapTableAttribute.java (87%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/SyntheticAttribute.java (86%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/attribute/UnknownAttribute.java (83%) create mode 100644 src/java.base/share/classes/java/lang/classfile/attribute/package-info.java rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/components/ClassPrinter.java (87%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/components/ClassRemapper.java (88%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/components/CodeLocalsShifter.java (89%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/components/CodeRelabeler.java (82%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/components/CodeStackTracker.java (92%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/components/package-info.java (78%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/components/snippet-files/PackageSnippets.java (91%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/constantpool/AnnotationConstantValueEntry.java (90%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/constantpool/ClassEntry.java (92%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/constantpool/ConstantDynamicEntry.java (93%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/constantpool/ConstantPool.java (90%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/constantpool/ConstantPoolBuilder.java (96%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/constantpool/ConstantPoolException.java (94%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/constantpool/ConstantValueEntry.java (91%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/constantpool/DoubleEntry.java (90%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/constantpool/DynamicConstantPoolEntry.java (86%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/constantpool/FieldRefEntry.java (91%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/constantpool/FloatEntry.java (90%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/constantpool/IntegerEntry.java (90%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/constantpool/InterfaceMethodRefEntry.java (92%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/constantpool/InvokeDynamicEntry.java (93%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/constantpool/LoadableConstantEntry.java (89%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/constantpool/LongEntry.java (89%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/constantpool/MemberRefEntry.java (91%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/constantpool/MethodHandleEntry.java (92%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/constantpool/MethodRefEntry.java (91%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/constantpool/MethodTypeEntry.java (92%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/constantpool/ModuleEntry.java (91%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/constantpool/NameAndTypeEntry.java (91%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/constantpool/PackageEntry.java (91%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/constantpool/PoolEntry.java (89%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/constantpool/StringEntry.java (91%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/constantpool/Utf8Entry.java (91%) create mode 100644 src/java.base/share/classes/java/lang/classfile/constantpool/package-info.java rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/instruction/ArrayLoadInstruction.java (86%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/instruction/ArrayStoreInstruction.java (86%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/instruction/BranchInstruction.java (86%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/instruction/CharacterRange.java (74%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/instruction/ConstantInstruction.java (89%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/instruction/ConvertInstruction.java (88%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/instruction/DiscontinuedInstruction.java (89%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/instruction/ExceptionCatch.java (90%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/instruction/FieldInstruction.java (88%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/instruction/IncrementInstruction.java (87%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/instruction/InvokeDynamicInstruction.java (88%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/instruction/InvokeInstruction.java (85%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/instruction/LabelTarget.java (84%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/instruction/LineNumber.java (80%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/instruction/LoadInstruction.java (88%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/instruction/LocalVariable.java (87%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/instruction/LocalVariableType.java (86%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/instruction/LookupSwitchInstruction.java (87%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/instruction/MonitorInstruction.java (86%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/instruction/NewMultiArrayInstruction.java (87%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/instruction/NewObjectInstruction.java (85%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/instruction/NewPrimitiveArrayInstruction.java (86%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/instruction/NewReferenceArrayInstruction.java (86%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/instruction/NopInstruction.java (86%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/instruction/OperatorInstruction.java (86%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/instruction/ReturnInstruction.java (87%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/instruction/StackInstruction.java (86%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/instruction/StoreInstruction.java (88%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/instruction/SwitchCase.java (91%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/instruction/TableSwitchInstruction.java (89%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/instruction/ThrowInstruction.java (86%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/instruction/TypeCheckInstruction.java (88%) create mode 100644 src/java.base/share/classes/java/lang/classfile/instruction/package-info.java rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/package-info.java (70%) rename src/java.base/share/classes/{jdk/internal => java/lang}/classfile/snippet-files/PackageSnippets.java (75%) rename src/java.base/share/classes/jdk/internal/classfile/impl/{ClassfileImpl.java => ClassFileImpl.java} (87%) rename src/java.base/share/classes/jdk/internal/classfile/impl/{ClassfileVersionImpl.java => ClassFileVersionImpl.java} (87%) create mode 100644 test/langtools/tools/javac/classfiles/attributes/SourceFile/SourceFileTestBase_legacy.java create mode 100644 test/langtools/tools/javac/classfiles/attributes/Synthetic/SyntheticTestDriver_legacy.java create mode 100644 test/langtools/tools/javac/classfiles/attributes/lib_legacy/TestBase.java create mode 100644 test/langtools/tools/javac/classfiles/attributes/lib_legacy/TestResult.java diff --git a/make/jdk/src/classes/build/tools/module/GenModuleInfoSource.java b/make/jdk/src/classes/build/tools/module/GenModuleInfoSource.java index ce9b94db7a627..82bd065efcefb 100644 --- a/make/jdk/src/classes/build/tools/module/GenModuleInfoSource.java +++ b/make/jdk/src/classes/build/tools/module/GenModuleInfoSource.java @@ -473,6 +473,11 @@ private void process(Parser parser, boolean extraFile) throws IOException { if (parser.peekToken() != null) { // must be EOF throw parser.newError("is malformed"); } + } else if (token.equals("import")) { + nextIdentifier(parser); + skipTokenOrThrow(parser, ";", "missing semicolon"); + } else if (token.startsWith("@")) { + continue; } else { throw parser.newError("missing keyword"); } diff --git a/make/modules/java.base/Java.gmk b/make/modules/java.base/Java.gmk index 9d960402f76c5..8621ff945ccf6 100644 --- a/make/modules/java.base/Java.gmk +++ b/make/modules/java.base/Java.gmk @@ -36,8 +36,8 @@ EXCLUDE_FILES += \ $(TOPDIR)/src/java.base/share/classes/jdk/internal/module/ModuleLoaderMap.java EXCLUDES += java/lang/doc-files \ - jdk/internal/classfile/snippet-files \ - jdk/internal/classfile/components/snippet-files + java/lang/classfile/snippet-files \ + java/lang/classfile/components/snippet-files # Exclude BreakIterator classes that are just used in compile process to generate # data files and shouldn't go in the product diff --git a/make/test/BuildMicrobenchmark.gmk b/make/test/BuildMicrobenchmark.gmk index 0785688f09c30..7660de061d21d 100644 --- a/make/test/BuildMicrobenchmark.gmk +++ b/make/test/BuildMicrobenchmark.gmk @@ -98,11 +98,6 @@ $(eval $(call SetupJavaCompilation, BUILD_JDK_MICROBENCHMARK, \ BIN := $(MICROBENCHMARK_CLASSES), \ JAVAC_FLAGS := --add-exports java.base/sun.security.util=ALL-UNNAMED \ --add-exports java.base/sun.invoke.util=ALL-UNNAMED \ - --add-exports java.base/jdk.internal.classfile=ALL-UNNAMED \ - --add-exports java.base/jdk.internal.classfile.attribute=ALL-UNNAMED \ - --add-exports java.base/jdk.internal.classfile.constantpool=ALL-UNNAMED \ - --add-exports java.base/jdk.internal.classfile.instruction=ALL-UNNAMED \ - --add-exports java.base/jdk.internal.classfile.components=ALL-UNNAMED \ --add-exports java.base/jdk.internal.classfile.impl=ALL-UNNAMED \ --add-exports java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED \ --add-exports java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED \ diff --git a/src/java.base/share/classes/java/lang/Module.java b/src/java.base/share/classes/java/lang/Module.java index 694281bcca846..7157ace8c4735 100644 --- a/src/java.base/share/classes/java/lang/Module.java +++ b/src/java.base/share/classes/java/lang/Module.java @@ -52,13 +52,13 @@ import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; -import jdk.internal.classfile.AccessFlags; -import jdk.internal.classfile.Attribute; -import jdk.internal.classfile.ClassModel; -import jdk.internal.classfile.ClassTransform; -import jdk.internal.classfile.Classfile; -import jdk.internal.classfile.attribute.ModuleAttribute; -import jdk.internal.classfile.attribute.RuntimeVisibleAnnotationsAttribute; +import java.lang.classfile.AccessFlags; +import java.lang.classfile.Attribute; +import java.lang.classfile.ClassModel; +import java.lang.classfile.ClassTransform; +import java.lang.classfile.ClassFile; +import java.lang.classfile.attribute.ModuleAttribute; +import java.lang.classfile.attribute.RuntimeVisibleAnnotationsAttribute; import jdk.internal.javac.PreviewFeature; import jdk.internal.loader.BuiltinClassLoader; @@ -1591,7 +1591,7 @@ private Class loadModuleInfoClass() { */ private Class loadModuleInfoClass(InputStream in) throws IOException { final String MODULE_INFO = "module-info"; - var cc = Classfile.of(Classfile.ConstantPoolSharingOption.NEW_POOL); + var cc = ClassFile.of(ClassFile.ConstantPoolSharingOption.NEW_POOL); byte[] bytes = cc.transform(cc.parse(in.readAllBytes()), (clb, cle) -> { switch (cle) { case AccessFlags af -> clb.withFlags(AccessFlag.INTERFACE, diff --git a/src/java.base/share/classes/jdk/internal/classfile/AccessFlags.java b/src/java.base/share/classes/java/lang/classfile/AccessFlags.java similarity index 96% rename from src/java.base/share/classes/jdk/internal/classfile/AccessFlags.java rename to src/java.base/share/classes/java/lang/classfile/AccessFlags.java index 5eb98f8295fc4..283094b81d629 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/AccessFlags.java +++ b/src/java.base/share/classes/java/lang/classfile/AccessFlags.java @@ -22,17 +22,21 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; import java.util.Set; import jdk.internal.classfile.impl.AccessFlagsImpl; import java.lang.reflect.AccessFlag; +import jdk.internal.javac.PreviewFeature; /** * Models the access flags for a class, method, or field. Delivered as a * {@link ClassElement}, {@link FieldElement}, or {@link MethodElement} * when traversing the corresponding model type. + * + * @since 22 */ +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public sealed interface AccessFlags extends ClassElement, MethodElement, FieldElement permits AccessFlagsImpl { diff --git a/src/java.base/share/classes/jdk/internal/classfile/Annotation.java b/src/java.base/share/classes/java/lang/classfile/Annotation.java similarity index 87% rename from src/java.base/share/classes/jdk/internal/classfile/Annotation.java rename to src/java.base/share/classes/java/lang/classfile/Annotation.java index 116bedf16ed91..3e7548d0859bc 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/Annotation.java +++ b/src/java.base/share/classes/java/lang/classfile/Annotation.java @@ -22,18 +22,19 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; -import jdk.internal.classfile.attribute.RuntimeInvisibleAnnotationsAttribute; -import jdk.internal.classfile.attribute.RuntimeInvisibleParameterAnnotationsAttribute; -import jdk.internal.classfile.attribute.RuntimeVisibleAnnotationsAttribute; -import jdk.internal.classfile.attribute.RuntimeVisibleParameterAnnotationsAttribute; -import jdk.internal.classfile.constantpool.Utf8Entry; +import java.lang.classfile.attribute.RuntimeInvisibleAnnotationsAttribute; +import java.lang.classfile.attribute.RuntimeInvisibleParameterAnnotationsAttribute; +import java.lang.classfile.attribute.RuntimeVisibleAnnotationsAttribute; +import java.lang.classfile.attribute.RuntimeVisibleParameterAnnotationsAttribute; +import java.lang.classfile.constantpool.Utf8Entry; import jdk.internal.classfile.impl.AnnotationImpl; import jdk.internal.classfile.impl.TemporaryConstantPool; import java.lang.constant.ClassDesc; import java.util.List; +import jdk.internal.javac.PreviewFeature; /** * Models an annotation on a declaration. @@ -44,7 +45,11 @@ * @see RuntimeInvisibleAnnotationsAttribute * @see RuntimeVisibleParameterAnnotationsAttribute * @see RuntimeInvisibleParameterAnnotationsAttribute + * + * @sealedGraph + * @since 22 */ +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public sealed interface Annotation extends WritableElement permits TypeAnnotation, AnnotationImpl { diff --git a/src/java.base/share/classes/jdk/internal/classfile/AnnotationElement.java b/src/java.base/share/classes/java/lang/classfile/AnnotationElement.java similarity index 96% rename from src/java.base/share/classes/jdk/internal/classfile/AnnotationElement.java rename to src/java.base/share/classes/java/lang/classfile/AnnotationElement.java index 4f21be3bc2eba..41acb18e788e8 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/AnnotationElement.java +++ b/src/java.base/share/classes/java/lang/classfile/AnnotationElement.java @@ -22,20 +22,24 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; import java.lang.constant.ClassDesc; -import jdk.internal.classfile.constantpool.Utf8Entry; +import java.lang.classfile.constantpool.Utf8Entry; import jdk.internal.classfile.impl.AnnotationImpl; import jdk.internal.classfile.impl.TemporaryConstantPool; +import jdk.internal.javac.PreviewFeature; /** * Models a key-value pair of an annotation. * * @see Annotation * @see AnnotationValue + * + * @since 22 */ +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public sealed interface AnnotationElement extends WritableElement permits AnnotationImpl.AnnotationElementImpl { diff --git a/src/java.base/share/classes/jdk/internal/classfile/AnnotationValue.java b/src/java.base/share/classes/java/lang/classfile/AnnotationValue.java similarity index 83% rename from src/java.base/share/classes/jdk/internal/classfile/AnnotationValue.java rename to src/java.base/share/classes/java/lang/classfile/AnnotationValue.java index 1401b8b4e8118..2882296b6bc51 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/AnnotationValue.java +++ b/src/java.base/share/classes/java/lang/classfile/AnnotationValue.java @@ -22,14 +22,14 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package jdk.internal.classfile; - -import jdk.internal.classfile.constantpool.AnnotationConstantValueEntry; -import jdk.internal.classfile.constantpool.DoubleEntry; -import jdk.internal.classfile.constantpool.FloatEntry; -import jdk.internal.classfile.constantpool.IntegerEntry; -import jdk.internal.classfile.constantpool.LongEntry; -import jdk.internal.classfile.constantpool.Utf8Entry; +package java.lang.classfile; + +import java.lang.classfile.constantpool.AnnotationConstantValueEntry; +import java.lang.classfile.constantpool.DoubleEntry; +import java.lang.classfile.constantpool.FloatEntry; +import java.lang.classfile.constantpool.IntegerEntry; +import java.lang.classfile.constantpool.LongEntry; +import java.lang.classfile.constantpool.Utf8Entry; import jdk.internal.classfile.impl.AnnotationImpl; import jdk.internal.classfile.impl.TemporaryConstantPool; @@ -37,34 +37,54 @@ import java.lang.constant.ConstantDesc; import java.util.ArrayList; import java.util.List; +import jdk.internal.javac.PreviewFeature; /** * Models the value of a key-value pair of an annotation. * * @see Annotation * @see AnnotationElement + * + * @sealedGraph + * @since 22 */ - +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public sealed interface AnnotationValue extends WritableElement permits AnnotationValue.OfAnnotation, AnnotationValue.OfArray, AnnotationValue.OfConstant, AnnotationValue.OfClass, AnnotationValue.OfEnum { - /** Models an annotation-valued element */ + /** + * Models an annotation-valued element + * + * @since 22 + */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) sealed interface OfAnnotation extends AnnotationValue permits AnnotationImpl.OfAnnotationImpl { /** {@return the annotation} */ Annotation annotation(); } - /** Models an array-valued element */ + /** + * Models an array-valued element + * + * @since 22 + */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) sealed interface OfArray extends AnnotationValue permits AnnotationImpl.OfArrayImpl { /** {@return the values} */ List values(); } - /** Models a constant-valued element */ + /** + * Models a constant-valued element + * + * @sealedGraph + * @since 22 + */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) sealed interface OfConstant extends AnnotationValue permits AnnotationValue.OfString, AnnotationValue.OfDouble, AnnotationValue.OfFloat, AnnotationValue.OfLong, @@ -77,70 +97,120 @@ sealed interface OfConstant extends AnnotationValue ConstantDesc constantValue(); } - /** Models a constant-valued element */ + /** + * Models a constant-valued element + * + * @since 22 + */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) sealed interface OfString extends AnnotationValue.OfConstant permits AnnotationImpl.OfStringImpl { /** {@return the constant} */ String stringValue(); } - /** Models a constant-valued element */ + /** + * Models a constant-valued element + * + * @since 22 + */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) sealed interface OfDouble extends AnnotationValue.OfConstant permits AnnotationImpl.OfDoubleImpl { /** {@return the constant} */ double doubleValue(); } - /** Models a constant-valued element */ + /** + * Models a constant-valued element + * + * @since 22 + */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) sealed interface OfFloat extends AnnotationValue.OfConstant permits AnnotationImpl.OfFloatImpl { /** {@return the constant} */ float floatValue(); } - /** Models a constant-valued element */ + /** + * Models a constant-valued element + * + * @since 22 + */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) sealed interface OfLong extends AnnotationValue.OfConstant permits AnnotationImpl.OfLongImpl { /** {@return the constant} */ long longValue(); } - /** Models a constant-valued element */ + /** + * Models a constant-valued element + * + * @since 22 + */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) sealed interface OfInteger extends AnnotationValue.OfConstant permits AnnotationImpl.OfIntegerImpl { /** {@return the constant} */ int intValue(); } - /** Models a constant-valued element */ + /** + * Models a constant-valued element + * + * @since 22 + */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) sealed interface OfShort extends AnnotationValue.OfConstant permits AnnotationImpl.OfShortImpl { /** {@return the constant} */ short shortValue(); } - /** Models a constant-valued element */ + /** + * Models a constant-valued element + * + * @since 22 + */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) sealed interface OfCharacter extends AnnotationValue.OfConstant permits AnnotationImpl.OfCharacterImpl { /** {@return the constant} */ char charValue(); } - /** Models a constant-valued element */ + /** + * Models a constant-valued element + * + * @since 22 + */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) sealed interface OfByte extends AnnotationValue.OfConstant permits AnnotationImpl.OfByteImpl { /** {@return the constant} */ byte byteValue(); } - /** Models a constant-valued element */ + /** + * Models a constant-valued element + * + * @since 22 + */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) sealed interface OfBoolean extends AnnotationValue.OfConstant permits AnnotationImpl.OfBooleanImpl { /** {@return the constant} */ boolean booleanValue(); } - /** Models a class-valued element */ + /** + * Models a class-valued element + * + * @since 22 + */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) sealed interface OfClass extends AnnotationValue permits AnnotationImpl.OfClassImpl { /** {@return the class name} */ @@ -152,7 +222,12 @@ default ClassDesc classSymbol() { } } - /** Models an enum-valued element */ + /** + * Models an enum-valued element + * + * @since 22 + */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) sealed interface OfEnum extends AnnotationValue permits AnnotationImpl.OfEnumImpl { /** {@return the enum class name} */ @@ -168,7 +243,7 @@ default ClassDesc classSymbol() { } /** - * @return the tag character for this type as per {@jvms 4.7.16.1} + * {@return the tag character for this type as per {@jvms 4.7.16.1}} */ char tag(); @@ -379,10 +454,13 @@ static OfArray ofArray(AnnotationValue... values) { /** * {@return an annotation element} The {@code value} parameter must be - * a primitive, a String, a ClassDesc, an enum constant, or an array of - * one of these. + * a primitive, a wrapper of primitive, a String, a ClassDesc, an enum + * constant, or an array of one of these. * * @param value the annotation value + * @throws IllegalArgumentException when the {@code value} parameter is not + * a primitive, a wrapper of primitive, a String, a ClassDesc, + * an enum constant, or an array of one of these. */ static AnnotationValue of(Object value) { if (value instanceof String s) { diff --git a/src/java.base/share/classes/jdk/internal/classfile/Attribute.java b/src/java.base/share/classes/java/lang/classfile/Attribute.java similarity index 58% rename from src/java.base/share/classes/jdk/internal/classfile/Attribute.java rename to src/java.base/share/classes/java/lang/classfile/Attribute.java index 13df75e151451..ad67bdf53652d 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/Attribute.java +++ b/src/java.base/share/classes/java/lang/classfile/Attribute.java @@ -22,47 +22,48 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; -import jdk.internal.classfile.attribute.AnnotationDefaultAttribute; -import jdk.internal.classfile.attribute.BootstrapMethodsAttribute; -import jdk.internal.classfile.attribute.CharacterRangeTableAttribute; -import jdk.internal.classfile.attribute.CodeAttribute; -import jdk.internal.classfile.attribute.CompilationIDAttribute; -import jdk.internal.classfile.attribute.ConstantValueAttribute; -import jdk.internal.classfile.attribute.DeprecatedAttribute; -import jdk.internal.classfile.attribute.EnclosingMethodAttribute; -import jdk.internal.classfile.attribute.ExceptionsAttribute; -import jdk.internal.classfile.attribute.InnerClassesAttribute; -import jdk.internal.classfile.attribute.LineNumberTableAttribute; -import jdk.internal.classfile.attribute.LocalVariableTableAttribute; -import jdk.internal.classfile.attribute.LocalVariableTypeTableAttribute; -import jdk.internal.classfile.attribute.MethodParametersAttribute; -import jdk.internal.classfile.attribute.ModuleAttribute; -import jdk.internal.classfile.attribute.ModuleHashesAttribute; -import jdk.internal.classfile.attribute.ModuleMainClassAttribute; -import jdk.internal.classfile.attribute.ModulePackagesAttribute; -import jdk.internal.classfile.attribute.ModuleResolutionAttribute; -import jdk.internal.classfile.attribute.ModuleTargetAttribute; -import jdk.internal.classfile.attribute.NestHostAttribute; -import jdk.internal.classfile.attribute.NestMembersAttribute; -import jdk.internal.classfile.attribute.PermittedSubclassesAttribute; -import jdk.internal.classfile.attribute.RecordAttribute; -import jdk.internal.classfile.attribute.RuntimeInvisibleAnnotationsAttribute; -import jdk.internal.classfile.attribute.RuntimeInvisibleParameterAnnotationsAttribute; -import jdk.internal.classfile.attribute.RuntimeInvisibleTypeAnnotationsAttribute; -import jdk.internal.classfile.attribute.RuntimeVisibleAnnotationsAttribute; -import jdk.internal.classfile.attribute.RuntimeVisibleParameterAnnotationsAttribute; -import jdk.internal.classfile.attribute.RuntimeVisibleTypeAnnotationsAttribute; -import jdk.internal.classfile.attribute.SignatureAttribute; -import jdk.internal.classfile.attribute.SourceDebugExtensionAttribute; -import jdk.internal.classfile.attribute.SourceFileAttribute; -import jdk.internal.classfile.attribute.SourceIDAttribute; -import jdk.internal.classfile.attribute.StackMapTableAttribute; -import jdk.internal.classfile.attribute.SyntheticAttribute; -import jdk.internal.classfile.attribute.UnknownAttribute; +import java.lang.classfile.attribute.AnnotationDefaultAttribute; +import java.lang.classfile.attribute.BootstrapMethodsAttribute; +import java.lang.classfile.attribute.CharacterRangeTableAttribute; +import java.lang.classfile.attribute.CodeAttribute; +import java.lang.classfile.attribute.CompilationIDAttribute; +import java.lang.classfile.attribute.ConstantValueAttribute; +import java.lang.classfile.attribute.DeprecatedAttribute; +import java.lang.classfile.attribute.EnclosingMethodAttribute; +import java.lang.classfile.attribute.ExceptionsAttribute; +import java.lang.classfile.attribute.InnerClassesAttribute; +import java.lang.classfile.attribute.LineNumberTableAttribute; +import java.lang.classfile.attribute.LocalVariableTableAttribute; +import java.lang.classfile.attribute.LocalVariableTypeTableAttribute; +import java.lang.classfile.attribute.MethodParametersAttribute; +import java.lang.classfile.attribute.ModuleAttribute; +import java.lang.classfile.attribute.ModuleHashesAttribute; +import java.lang.classfile.attribute.ModuleMainClassAttribute; +import java.lang.classfile.attribute.ModulePackagesAttribute; +import java.lang.classfile.attribute.ModuleResolutionAttribute; +import java.lang.classfile.attribute.ModuleTargetAttribute; +import java.lang.classfile.attribute.NestHostAttribute; +import java.lang.classfile.attribute.NestMembersAttribute; +import java.lang.classfile.attribute.PermittedSubclassesAttribute; +import java.lang.classfile.attribute.RecordAttribute; +import java.lang.classfile.attribute.RuntimeInvisibleAnnotationsAttribute; +import java.lang.classfile.attribute.RuntimeInvisibleParameterAnnotationsAttribute; +import java.lang.classfile.attribute.RuntimeInvisibleTypeAnnotationsAttribute; +import java.lang.classfile.attribute.RuntimeVisibleAnnotationsAttribute; +import java.lang.classfile.attribute.RuntimeVisibleParameterAnnotationsAttribute; +import java.lang.classfile.attribute.RuntimeVisibleTypeAnnotationsAttribute; +import java.lang.classfile.attribute.SignatureAttribute; +import java.lang.classfile.attribute.SourceDebugExtensionAttribute; +import java.lang.classfile.attribute.SourceFileAttribute; +import java.lang.classfile.attribute.SourceIDAttribute; +import java.lang.classfile.attribute.StackMapTableAttribute; +import java.lang.classfile.attribute.SyntheticAttribute; +import java.lang.classfile.attribute.UnknownAttribute; import jdk.internal.classfile.impl.BoundAttribute; import jdk.internal.classfile.impl.UnboundAttribute; +import jdk.internal.javac.PreviewFeature; /** * Models a classfile attribute {@jvms 4.7}. Many, though not all, subtypes of @@ -73,7 +74,11 @@ * directly from the corresponding model type through {@link * AttributedElement#findAttribute(AttributeMapper)}. * @param the attribute type + * + * @sealedGraph + * @since 22 */ +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public sealed interface Attribute> extends WritableElement permits AnnotationDefaultAttribute, BootstrapMethodsAttribute, @@ -91,7 +96,7 @@ public sealed interface Attribute> RuntimeVisibleTypeAnnotationsAttribute, SignatureAttribute, SourceDebugExtensionAttribute, SourceFileAttribute, SourceIDAttribute, StackMapTableAttribute, SyntheticAttribute, - UnknownAttribute, BoundAttribute, UnboundAttribute { + UnknownAttribute, BoundAttribute, UnboundAttribute, CustomAttribute { /** * {@return the name of the attribute} */ diff --git a/src/java.base/share/classes/jdk/internal/classfile/AttributeMapper.java b/src/java.base/share/classes/java/lang/classfile/AttributeMapper.java similarity index 90% rename from src/java.base/share/classes/jdk/internal/classfile/AttributeMapper.java rename to src/java.base/share/classes/java/lang/classfile/AttributeMapper.java index 2914a9d511063..0e7d625290e5c 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/AttributeMapper.java +++ b/src/java.base/share/classes/java/lang/classfile/AttributeMapper.java @@ -22,7 +22,9 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; + +import jdk.internal.javac.PreviewFeature; /** * Bidirectional mapper between the classfile representation of an attribute and @@ -34,12 +36,18 @@ * Classes that model nonstandard attributes should extend {@link * CustomAttribute}. * @param the attribute type + * + * @since 22 */ +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public interface AttributeMapper { /** * Attribute stability indicator + * + * @since 22 */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) enum AttributeStability { /** @@ -60,13 +68,13 @@ enum AttributeStability { /** * The attribute may contain indexes into structured not managed by the library (type variable lists, etc) - * and so we consult the {@link Classfile.AttributesProcessingOption} option to determine whether to preserve + * and so we consult the {@link ClassFile.AttributesProcessingOption} option to determine whether to preserve * or drop it during transformation. */ UNSTABLE, /** - * The attribute is completely unknown and so we consult the {@link Classfile.AttributesProcessingOption} option + * The attribute is completely unknown and so we consult the {@link ClassFile.AttributesProcessingOption} option * to determine whether to preserve or drop it during transformation. */ UNKNOWN @@ -96,16 +104,10 @@ enum AttributeStability { */ void writeAttribute(BufWriter buf, A attr); - /** - * {@return The earliest classfile version for which this attribute is - * applicable} - */ - default int validSince() { - return Classfile.JAVA_1_VERSION; - } - /** * {@return whether this attribute may appear more than once in a given location} + * + * @implSpec The default implementation returns {@code false} */ default boolean allowMultiple() { return false; diff --git a/src/java.base/share/classes/jdk/internal/classfile/AttributedElement.java b/src/java.base/share/classes/java/lang/classfile/AttributedElement.java similarity index 89% rename from src/java.base/share/classes/jdk/internal/classfile/AttributedElement.java rename to src/java.base/share/classes/java/lang/classfile/AttributedElement.java index f3f497f30089f..63b2f1e03a939 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/AttributedElement.java +++ b/src/java.base/share/classes/java/lang/classfile/AttributedElement.java @@ -22,20 +22,25 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; import java.util.ArrayList; import java.util.List; import java.util.Optional; -import jdk.internal.classfile.attribute.RecordComponentInfo; +import java.lang.classfile.attribute.RecordComponentInfo; import jdk.internal.classfile.impl.AbstractUnboundModel; +import jdk.internal.javac.PreviewFeature; /** - * A {@link ClassfileElement} describing an entity that has attributes, such + * A {@link ClassFileElement} describing an entity that has attributes, such * as a class, field, method, code attribute, or record component. + * + * @sealedGraph + * @since 22 */ -public sealed interface AttributedElement extends ClassfileElement +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) +public sealed interface AttributedElement extends ClassFileElement permits ClassModel, CodeModel, FieldModel, MethodModel, RecordComponentInfo, AbstractUnboundModel { diff --git a/src/java.base/share/classes/jdk/internal/classfile/Attributes.java b/src/java.base/share/classes/java/lang/classfile/Attributes.java similarity index 90% rename from src/java.base/share/classes/jdk/internal/classfile/Attributes.java rename to src/java.base/share/classes/java/lang/classfile/Attributes.java index 4e230a161acbd..75e06e7c3f31e 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/Attributes.java +++ b/src/java.base/share/classes/java/lang/classfile/Attributes.java @@ -22,7 +22,7 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; import java.util.Collections; import java.util.HashMap; @@ -30,66 +30,70 @@ import java.util.Map; import java.util.Set; -import jdk.internal.classfile.attribute.AnnotationDefaultAttribute; -import jdk.internal.classfile.attribute.BootstrapMethodsAttribute; -import jdk.internal.classfile.attribute.CharacterRangeInfo; -import jdk.internal.classfile.attribute.CharacterRangeTableAttribute; -import jdk.internal.classfile.attribute.CodeAttribute; -import jdk.internal.classfile.attribute.CompilationIDAttribute; -import jdk.internal.classfile.attribute.ConstantValueAttribute; -import jdk.internal.classfile.attribute.DeprecatedAttribute; -import jdk.internal.classfile.attribute.EnclosingMethodAttribute; -import jdk.internal.classfile.attribute.ExceptionsAttribute; -import jdk.internal.classfile.attribute.InnerClassInfo; -import jdk.internal.classfile.attribute.InnerClassesAttribute; -import jdk.internal.classfile.attribute.LineNumberInfo; -import jdk.internal.classfile.attribute.LineNumberTableAttribute; -import jdk.internal.classfile.attribute.LocalVariableInfo; -import jdk.internal.classfile.attribute.LocalVariableTableAttribute; -import jdk.internal.classfile.attribute.LocalVariableTypeInfo; -import jdk.internal.classfile.attribute.LocalVariableTypeTableAttribute; -import jdk.internal.classfile.attribute.MethodParameterInfo; -import jdk.internal.classfile.attribute.MethodParametersAttribute; -import jdk.internal.classfile.attribute.ModuleAttribute; -import jdk.internal.classfile.attribute.ModuleExportInfo; -import jdk.internal.classfile.attribute.ModuleHashInfo; -import jdk.internal.classfile.attribute.ModuleHashesAttribute; -import jdk.internal.classfile.attribute.ModuleMainClassAttribute; -import jdk.internal.classfile.attribute.ModuleOpenInfo; -import jdk.internal.classfile.attribute.ModulePackagesAttribute; -import jdk.internal.classfile.attribute.ModuleProvideInfo; -import jdk.internal.classfile.attribute.ModuleRequireInfo; -import jdk.internal.classfile.attribute.ModuleResolutionAttribute; -import jdk.internal.classfile.attribute.ModuleTargetAttribute; -import jdk.internal.classfile.attribute.NestHostAttribute; -import jdk.internal.classfile.attribute.NestMembersAttribute; -import jdk.internal.classfile.attribute.PermittedSubclassesAttribute; -import jdk.internal.classfile.attribute.RecordAttribute; -import jdk.internal.classfile.attribute.RecordComponentInfo; -import jdk.internal.classfile.attribute.RuntimeInvisibleAnnotationsAttribute; -import jdk.internal.classfile.attribute.RuntimeInvisibleParameterAnnotationsAttribute; -import jdk.internal.classfile.attribute.RuntimeInvisibleTypeAnnotationsAttribute; -import jdk.internal.classfile.attribute.RuntimeVisibleAnnotationsAttribute; -import jdk.internal.classfile.attribute.RuntimeVisibleParameterAnnotationsAttribute; -import jdk.internal.classfile.attribute.RuntimeVisibleTypeAnnotationsAttribute; -import jdk.internal.classfile.attribute.SignatureAttribute; -import jdk.internal.classfile.attribute.SourceDebugExtensionAttribute; -import jdk.internal.classfile.attribute.SourceFileAttribute; -import jdk.internal.classfile.attribute.SourceIDAttribute; -import jdk.internal.classfile.attribute.StackMapTableAttribute; -import jdk.internal.classfile.attribute.SyntheticAttribute; -import jdk.internal.classfile.constantpool.Utf8Entry; +import java.lang.classfile.attribute.AnnotationDefaultAttribute; +import java.lang.classfile.attribute.BootstrapMethodsAttribute; +import java.lang.classfile.attribute.CharacterRangeInfo; +import java.lang.classfile.attribute.CharacterRangeTableAttribute; +import java.lang.classfile.attribute.CodeAttribute; +import java.lang.classfile.attribute.CompilationIDAttribute; +import java.lang.classfile.attribute.ConstantValueAttribute; +import java.lang.classfile.attribute.DeprecatedAttribute; +import java.lang.classfile.attribute.EnclosingMethodAttribute; +import java.lang.classfile.attribute.ExceptionsAttribute; +import java.lang.classfile.attribute.InnerClassInfo; +import java.lang.classfile.attribute.InnerClassesAttribute; +import java.lang.classfile.attribute.LineNumberInfo; +import java.lang.classfile.attribute.LineNumberTableAttribute; +import java.lang.classfile.attribute.LocalVariableInfo; +import java.lang.classfile.attribute.LocalVariableTableAttribute; +import java.lang.classfile.attribute.LocalVariableTypeInfo; +import java.lang.classfile.attribute.LocalVariableTypeTableAttribute; +import java.lang.classfile.attribute.MethodParameterInfo; +import java.lang.classfile.attribute.MethodParametersAttribute; +import java.lang.classfile.attribute.ModuleAttribute; +import java.lang.classfile.attribute.ModuleExportInfo; +import java.lang.classfile.attribute.ModuleHashInfo; +import java.lang.classfile.attribute.ModuleHashesAttribute; +import java.lang.classfile.attribute.ModuleMainClassAttribute; +import java.lang.classfile.attribute.ModuleOpenInfo; +import java.lang.classfile.attribute.ModulePackagesAttribute; +import java.lang.classfile.attribute.ModuleProvideInfo; +import java.lang.classfile.attribute.ModuleRequireInfo; +import java.lang.classfile.attribute.ModuleResolutionAttribute; +import java.lang.classfile.attribute.ModuleTargetAttribute; +import java.lang.classfile.attribute.NestHostAttribute; +import java.lang.classfile.attribute.NestMembersAttribute; +import java.lang.classfile.attribute.PermittedSubclassesAttribute; +import java.lang.classfile.attribute.RecordAttribute; +import java.lang.classfile.attribute.RecordComponentInfo; +import java.lang.classfile.attribute.RuntimeInvisibleAnnotationsAttribute; +import java.lang.classfile.attribute.RuntimeInvisibleParameterAnnotationsAttribute; +import java.lang.classfile.attribute.RuntimeInvisibleTypeAnnotationsAttribute; +import java.lang.classfile.attribute.RuntimeVisibleAnnotationsAttribute; +import java.lang.classfile.attribute.RuntimeVisibleParameterAnnotationsAttribute; +import java.lang.classfile.attribute.RuntimeVisibleTypeAnnotationsAttribute; +import java.lang.classfile.attribute.SignatureAttribute; +import java.lang.classfile.attribute.SourceDebugExtensionAttribute; +import java.lang.classfile.attribute.SourceFileAttribute; +import java.lang.classfile.attribute.SourceIDAttribute; +import java.lang.classfile.attribute.StackMapTableAttribute; +import java.lang.classfile.attribute.SyntheticAttribute; +import java.lang.classfile.constantpool.Utf8Entry; import jdk.internal.classfile.impl.AbstractAttributeMapper; import jdk.internal.classfile.impl.BoundAttribute; import jdk.internal.classfile.impl.CodeImpl; import jdk.internal.classfile.impl.AbstractPoolEntry; import jdk.internal.classfile.impl.StackMapDecoder; +import jdk.internal.javac.PreviewFeature; /** * Attribute mappers for standard classfile attributes. * * @see AttributeMapper + * + * @since 22 */ +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public class Attributes { /** AnnotationDefault */ @@ -167,10 +171,10 @@ public class Attributes { /** RuntimeInvisibleAnnotations */ public static final String NAME_RUNTIME_INVISIBLE_ANNOTATIONS = "RuntimeInvisibleAnnotations"; - /** RuntimeInvisibleTypeAnnotations */ + /** RuntimeInvisibleParameterAnnotations */ public static final String NAME_RUNTIME_INVISIBLE_PARAMETER_ANNOTATIONS = "RuntimeInvisibleParameterAnnotations"; - /** */ + /** RuntimeInvisibleTypeAnnotations */ public static final String NAME_RUNTIME_INVISIBLE_TYPE_ANNOTATIONS = "RuntimeInvisibleTypeAnnotations"; /** RuntimeVisibleAnnotations */ @@ -205,7 +209,7 @@ private Attributes() { /** Attribute mapper for the {@code AnnotationDefault} attribute */ public static final AttributeMapper - ANNOTATION_DEFAULT = new AbstractAttributeMapper<>(NAME_ANNOTATION_DEFAULT, Classfile.JAVA_5_VERSION) { + ANNOTATION_DEFAULT = new AbstractAttributeMapper<>(NAME_ANNOTATION_DEFAULT) { @Override public AnnotationDefaultAttribute readAttribute(AttributedElement e, ClassReader cf, int p) { return new BoundAttribute.BoundAnnotationDefaultAttr(cf, this, p); @@ -224,7 +228,7 @@ public AttributeMapper.AttributeStability stability() { /** Attribute mapper for the {@code BootstrapMethods} attribute */ public static final AttributeMapper - BOOTSTRAP_METHODS = new AbstractAttributeMapper<>(NAME_BOOTSTRAP_METHODS, Classfile.JAVA_17_VERSION) { + BOOTSTRAP_METHODS = new AbstractAttributeMapper<>(NAME_BOOTSTRAP_METHODS) { @Override public BootstrapMethodsAttribute readAttribute(AttributedElement e, ClassReader cf, int p) { return new BoundAttribute.BoundBootstrapMethodsAttribute(cf, this, p); @@ -243,7 +247,7 @@ public AttributeMapper.AttributeStability stability() { /** Attribute mapper for the {@code CharacterRangeTable} attribute */ public static final AttributeMapper - CHARACTER_RANGE_TABLE = new AbstractAttributeMapper<>(NAME_CHARACTER_RANGE_TABLE, true, Classfile.JAVA_4_VERSION) { + CHARACTER_RANGE_TABLE = new AbstractAttributeMapper<>(NAME_CHARACTER_RANGE_TABLE, true) { @Override public CharacterRangeTableAttribute readAttribute(AttributedElement e, ClassReader cf, int p) { return new BoundAttribute.BoundCharacterRangeTableAttribute(cf, this, p); @@ -347,7 +351,7 @@ public AttributeMapper.AttributeStability stability() { /** Attribute mapper for the {@code EnclosingMethod} attribute */ public static final AttributeMapper - ENCLOSING_METHOD = new AbstractAttributeMapper<>(NAME_ENCLOSING_METHOD, Classfile.JAVA_5_VERSION) { + ENCLOSING_METHOD = new AbstractAttributeMapper<>(NAME_ENCLOSING_METHOD) { @Override public EnclosingMethodAttribute readAttribute(AttributedElement e, ClassReader cf, int p) { return new BoundAttribute.BoundEnclosingMethodAttribute(cf, this, p); @@ -463,7 +467,7 @@ public AttributeMapper.AttributeStability stability() { /** Attribute mapper for the {@code LocalVariableTypeTable} attribute */ public static final AttributeMapper - LOCAL_VARIABLE_TYPE_TABLE = new AbstractAttributeMapper<>(NAME_LOCAL_VARIABLE_TYPE_TABLE, true, Classfile.JAVA_5_VERSION) { + LOCAL_VARIABLE_TYPE_TABLE = new AbstractAttributeMapper<>(NAME_LOCAL_VARIABLE_TYPE_TABLE, true) { @Override public LocalVariableTypeTableAttribute readAttribute(AttributedElement e, ClassReader cf, int p) { return new BoundAttribute.BoundLocalVariableTypeTableAttribute(e, cf, this, p); @@ -490,7 +494,7 @@ public AttributeMapper.AttributeStability stability() { /** Attribute mapper for the {@code MethodParameters} attribute */ public static final AttributeMapper - METHOD_PARAMETERS = new AbstractAttributeMapper<>(NAME_METHOD_PARAMETERS, Classfile.JAVA_8_VERSION) { + METHOD_PARAMETERS = new AbstractAttributeMapper<>(NAME_METHOD_PARAMETERS) { @Override public MethodParametersAttribute readAttribute(AttributedElement e, ClassReader cf, int p) { return new BoundAttribute.BoundMethodParametersAttribute(cf, this, p); @@ -514,7 +518,7 @@ public AttributeMapper.AttributeStability stability() { /** Attribute mapper for the {@code Module} attribute */ public static final AttributeMapper - MODULE = new AbstractAttributeMapper<>(NAME_MODULE, Classfile.JAVA_9_VERSION) { + MODULE = new AbstractAttributeMapper<>(NAME_MODULE) { @Override public ModuleAttribute readAttribute(AttributedElement e, ClassReader cf, int p) { return new BoundAttribute.BoundModuleAttribute(cf, this, p); @@ -559,7 +563,7 @@ public AttributeMapper.AttributeStability stability() { /** Attribute mapper for the {@code ModuleHashes} attribute */ public static final AttributeMapper - MODULE_HASHES = new AbstractAttributeMapper<>(NAME_MODULE_HASHES, Classfile.JAVA_9_VERSION) { + MODULE_HASHES = new AbstractAttributeMapper<>(NAME_MODULE_HASHES) { @Override public ModuleHashesAttribute readAttribute(AttributedElement e, ClassReader cf, int p) { return new BoundAttribute.BoundModuleHashesAttribute(cf, this, p); @@ -585,7 +589,7 @@ public AttributeMapper.AttributeStability stability() { /** Attribute mapper for the {@code ModuleMainClass} attribute */ public static final AttributeMapper - MODULE_MAIN_CLASS = new AbstractAttributeMapper<>(NAME_MODULE_MAIN_CLASS, Classfile.JAVA_9_VERSION) { + MODULE_MAIN_CLASS = new AbstractAttributeMapper<>(NAME_MODULE_MAIN_CLASS) { @Override public ModuleMainClassAttribute readAttribute(AttributedElement e, ClassReader cf, int p) { return new BoundAttribute.BoundModuleMainClassAttribute(cf, this, p); @@ -604,7 +608,7 @@ public AttributeMapper.AttributeStability stability() { /** Attribute mapper for the {@code ModulePackages} attribute */ public static final AttributeMapper - MODULE_PACKAGES = new AbstractAttributeMapper<>(NAME_MODULE_PACKAGES, Classfile.JAVA_9_VERSION) { + MODULE_PACKAGES = new AbstractAttributeMapper<>(NAME_MODULE_PACKAGES) { @Override public ModulePackagesAttribute readAttribute(AttributedElement e, ClassReader cf, int p) { return new BoundAttribute.BoundModulePackagesAttribute(cf, this, p); @@ -623,7 +627,7 @@ public AttributeMapper.AttributeStability stability() { /** Attribute mapper for the {@code ModuleResolution} attribute */ public static final AttributeMapper - MODULE_RESOLUTION = new AbstractAttributeMapper<>(NAME_MODULE_RESOLUTION, Classfile.JAVA_9_VERSION) { + MODULE_RESOLUTION = new AbstractAttributeMapper<>(NAME_MODULE_RESOLUTION) { @Override public ModuleResolutionAttribute readAttribute(AttributedElement e, ClassReader cf, int p) { return new BoundAttribute.BoundModuleResolutionAttribute(cf, this, p); @@ -642,7 +646,7 @@ public AttributeMapper.AttributeStability stability() { /** Attribute mapper for the {@code ModuleTarget} attribute */ public static final AttributeMapper - MODULE_TARGET = new AbstractAttributeMapper<>(NAME_MODULE_TARGET, Classfile.JAVA_9_VERSION) { + MODULE_TARGET = new AbstractAttributeMapper<>(NAME_MODULE_TARGET) { @Override public ModuleTargetAttribute readAttribute(AttributedElement e, ClassReader cf, int p) { return new BoundAttribute.BoundModuleTargetAttribute(cf, this, p); @@ -661,7 +665,7 @@ public AttributeMapper.AttributeStability stability() { /** Attribute mapper for the {@code NestHost} attribute */ public static final AttributeMapper - NEST_HOST = new AbstractAttributeMapper<>(NAME_NEST_HOST, Classfile.JAVA_11_VERSION) { + NEST_HOST = new AbstractAttributeMapper<>(NAME_NEST_HOST) { @Override public NestHostAttribute readAttribute(AttributedElement e, ClassReader cf, int p) { return new BoundAttribute.BoundNestHostAttribute(cf, this, p); @@ -680,7 +684,7 @@ public AttributeMapper.AttributeStability stability() { /** Attribute mapper for the {@code NestMembers} attribute */ public static final AttributeMapper - NEST_MEMBERS = new AbstractAttributeMapper<>(NAME_NEST_MEMBERS, Classfile.JAVA_11_VERSION) { + NEST_MEMBERS = new AbstractAttributeMapper<>(NAME_NEST_MEMBERS) { @Override public NestMembersAttribute readAttribute(AttributedElement e, ClassReader cf, int p) { return new BoundAttribute.BoundNestMembersAttribute(cf, this, p); @@ -699,7 +703,7 @@ public AttributeMapper.AttributeStability stability() { /** Attribute mapper for the {@code PermittedSubclasses} attribute */ public static final AttributeMapper - PERMITTED_SUBCLASSES = new AbstractAttributeMapper<>(NAME_PERMITTED_SUBCLASSES, Classfile.JAVA_15_VERSION) { + PERMITTED_SUBCLASSES = new AbstractAttributeMapper<>(NAME_PERMITTED_SUBCLASSES) { @Override public PermittedSubclassesAttribute readAttribute(AttributedElement e, ClassReader cf, int p) { return new BoundAttribute.BoundPermittedSubclassesAttribute(cf, this, p); @@ -718,7 +722,7 @@ public AttributeMapper.AttributeStability stability() { /** Attribute mapper for the {@code Record} attribute */ public static final AttributeMapper - RECORD = new AbstractAttributeMapper<>(NAME_RECORD, Classfile.JAVA_16_VERSION) { + RECORD = new AbstractAttributeMapper<>(NAME_RECORD) { @Override public RecordAttribute readAttribute(AttributedElement e, ClassReader cf, int p) { return new BoundAttribute.BoundRecordAttribute(cf, this, p); @@ -743,7 +747,7 @@ public AttributeMapper.AttributeStability stability() { /** Attribute mapper for the {@code RuntimeInvisibleAnnotations} attribute */ public static final AttributeMapper - RUNTIME_INVISIBLE_ANNOTATIONS = new AbstractAttributeMapper<>(NAME_RUNTIME_INVISIBLE_ANNOTATIONS, Classfile.JAVA_5_VERSION) { + RUNTIME_INVISIBLE_ANNOTATIONS = new AbstractAttributeMapper<>(NAME_RUNTIME_INVISIBLE_ANNOTATIONS) { @Override public RuntimeInvisibleAnnotationsAttribute readAttribute(AttributedElement enclosing, ClassReader cf, int pos) { return new BoundAttribute.BoundRuntimeInvisibleAnnotationsAttribute(cf, pos); @@ -762,7 +766,7 @@ public AttributeMapper.AttributeStability stability() { /** Attribute mapper for the {@code RuntimeInvisibleParameterAnnotations} attribute */ public static final AttributeMapper - RUNTIME_INVISIBLE_PARAMETER_ANNOTATIONS = new AbstractAttributeMapper<>(NAME_RUNTIME_INVISIBLE_PARAMETER_ANNOTATIONS, Classfile.JAVA_5_VERSION) { + RUNTIME_INVISIBLE_PARAMETER_ANNOTATIONS = new AbstractAttributeMapper<>(NAME_RUNTIME_INVISIBLE_PARAMETER_ANNOTATIONS) { @Override public RuntimeInvisibleParameterAnnotationsAttribute readAttribute(AttributedElement e, ClassReader cf, int p) { return new BoundAttribute.BoundRuntimeInvisibleParameterAnnotationsAttribute(cf, this, p); @@ -784,7 +788,7 @@ public AttributeMapper.AttributeStability stability() { /** Attribute mapper for the {@code RuntimeInvisibleTypeAnnotations} attribute */ public static final AttributeMapper - RUNTIME_INVISIBLE_TYPE_ANNOTATIONS = new AbstractAttributeMapper<>(NAME_RUNTIME_INVISIBLE_TYPE_ANNOTATIONS, Classfile.JAVA_8_VERSION) { + RUNTIME_INVISIBLE_TYPE_ANNOTATIONS = new AbstractAttributeMapper<>(NAME_RUNTIME_INVISIBLE_TYPE_ANNOTATIONS) { @Override public RuntimeInvisibleTypeAnnotationsAttribute readAttribute(AttributedElement e, ClassReader cf, int p) { return new BoundAttribute.BoundRuntimeInvisibleTypeAnnotationsAttribute(e, cf, this, p); @@ -803,7 +807,7 @@ public AttributeMapper.AttributeStability stability() { /** Attribute mapper for the {@code RuntimeVisibleAnnotations} attribute */ public static final AttributeMapper - RUNTIME_VISIBLE_ANNOTATIONS = new AbstractAttributeMapper<>(NAME_RUNTIME_VISIBLE_ANNOTATIONS, Classfile.JAVA_5_VERSION) { + RUNTIME_VISIBLE_ANNOTATIONS = new AbstractAttributeMapper<>(NAME_RUNTIME_VISIBLE_ANNOTATIONS) { @Override public RuntimeVisibleAnnotationsAttribute readAttribute(AttributedElement enclosing, ClassReader cf, int pos) { return new BoundAttribute.BoundRuntimeVisibleAnnotationsAttribute(cf, pos); @@ -822,7 +826,7 @@ public AttributeMapper.AttributeStability stability() { /** Attribute mapper for the {@code RuntimeVisibleParameterAnnotations} attribute */ public static final AttributeMapper - RUNTIME_VISIBLE_PARAMETER_ANNOTATIONS = new AbstractAttributeMapper<>(NAME_RUNTIME_VISIBLE_PARAMETER_ANNOTATIONS, Classfile.JAVA_5_VERSION) { + RUNTIME_VISIBLE_PARAMETER_ANNOTATIONS = new AbstractAttributeMapper<>(NAME_RUNTIME_VISIBLE_PARAMETER_ANNOTATIONS) { @Override public RuntimeVisibleParameterAnnotationsAttribute readAttribute(AttributedElement e, ClassReader cf, int p) { return new BoundAttribute.BoundRuntimeVisibleParameterAnnotationsAttribute(cf, this, p); @@ -844,7 +848,7 @@ public AttributeMapper.AttributeStability stability() { /** Attribute mapper for the {@code RuntimeVisibleTypeAnnotations} attribute */ public static final AttributeMapper - RUNTIME_VISIBLE_TYPE_ANNOTATIONS = new AbstractAttributeMapper<>(NAME_RUNTIME_VISIBLE_TYPE_ANNOTATIONS, Classfile.JAVA_8_VERSION) { + RUNTIME_VISIBLE_TYPE_ANNOTATIONS = new AbstractAttributeMapper<>(NAME_RUNTIME_VISIBLE_TYPE_ANNOTATIONS) { @Override public RuntimeVisibleTypeAnnotationsAttribute readAttribute(AttributedElement e, ClassReader cf, int p) { return new BoundAttribute.BoundRuntimeVisibleTypeAnnotationsAttribute(e, cf, this, p); @@ -863,7 +867,7 @@ public AttributeMapper.AttributeStability stability() { /** Attribute mapper for the {@code Signature} attribute */ public static final AttributeMapper - SIGNATURE = new AbstractAttributeMapper<>(NAME_SIGNATURE, Classfile.JAVA_5_VERSION) { + SIGNATURE = new AbstractAttributeMapper<>(NAME_SIGNATURE) { @Override public SignatureAttribute readAttribute(AttributedElement e, ClassReader cf, int p) { return new BoundAttribute.BoundSignatureAttribute(cf, this, p); @@ -882,7 +886,7 @@ public AttributeMapper.AttributeStability stability() { /** Attribute mapper for the {@code SourceDebugExtension} attribute */ public static final AttributeMapper - SOURCE_DEBUG_EXTENSION = new AbstractAttributeMapper<>(NAME_SOURCE_DEBUG_EXTENSION, Classfile.JAVA_5_VERSION) { + SOURCE_DEBUG_EXTENSION = new AbstractAttributeMapper<>(NAME_SOURCE_DEBUG_EXTENSION) { @Override public SourceDebugExtensionAttribute readAttribute(AttributedElement e, ClassReader cf, int p) { return new BoundAttribute.BoundSourceDebugExtensionAttribute(cf, this, p); @@ -939,7 +943,7 @@ public AttributeMapper.AttributeStability stability() { /** Attribute mapper for the {@code StackMapTable} attribute */ public static final AttributeMapper - STACK_MAP_TABLE = new AbstractAttributeMapper<>(NAME_STACK_MAP_TABLE, Classfile.JAVA_6_VERSION) { + STACK_MAP_TABLE = new AbstractAttributeMapper<>(NAME_STACK_MAP_TABLE) { @Override public StackMapTableAttribute readAttribute(AttributedElement e, ClassReader cf, int p) { return new BoundAttribute.BoundStackMapTableAttribute((CodeImpl)e, cf, this, p); diff --git a/src/java.base/share/classes/jdk/internal/classfile/BootstrapMethodEntry.java b/src/java.base/share/classes/java/lang/classfile/BootstrapMethodEntry.java similarity index 86% rename from src/java.base/share/classes/jdk/internal/classfile/BootstrapMethodEntry.java rename to src/java.base/share/classes/java/lang/classfile/BootstrapMethodEntry.java index fb7a8d1401f38..c472dca8530d7 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/BootstrapMethodEntry.java +++ b/src/java.base/share/classes/java/lang/classfile/BootstrapMethodEntry.java @@ -23,21 +23,25 @@ * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; import java.util.List; -import jdk.internal.classfile.constantpool.ConstantPool; -import jdk.internal.classfile.constantpool.LoadableConstantEntry; -import jdk.internal.classfile.constantpool.MethodHandleEntry; +import java.lang.classfile.constantpool.ConstantPool; +import java.lang.classfile.constantpool.LoadableConstantEntry; +import java.lang.classfile.constantpool.MethodHandleEntry; import jdk.internal.classfile.impl.BootstrapMethodEntryImpl; +import jdk.internal.javac.PreviewFeature; /** * Models an entry in the bootstrap method table. The bootstrap method table * is stored in the {@code BootstrapMethods} attribute, but is modeled by * the {@link ConstantPool}, since the bootstrap method table is logically * part of the constant pool. + * + * @since 22 */ +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public sealed interface BootstrapMethodEntry extends WritableElement permits BootstrapMethodEntryImpl { diff --git a/src/java.base/share/classes/jdk/internal/classfile/BufWriter.java b/src/java.base/share/classes/java/lang/classfile/BufWriter.java similarity index 94% rename from src/java.base/share/classes/jdk/internal/classfile/BufWriter.java rename to src/java.base/share/classes/java/lang/classfile/BufWriter.java index a572dd16a53a8..bab8ebda4b87c 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/BufWriter.java +++ b/src/java.base/share/classes/java/lang/classfile/BufWriter.java @@ -22,21 +22,25 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; import java.nio.ByteBuffer; import java.util.List; -import jdk.internal.classfile.constantpool.ConstantPool; -import jdk.internal.classfile.constantpool.ConstantPoolBuilder; -import jdk.internal.classfile.constantpool.PoolEntry; +import java.lang.classfile.constantpool.ConstantPool; +import java.lang.classfile.constantpool.ConstantPoolBuilder; +import java.lang.classfile.constantpool.PoolEntry; import jdk.internal.classfile.impl.BufWriterImpl; +import jdk.internal.javac.PreviewFeature; /** - * Supports writing portions of a classfile to a growable buffer. Method + * Supports writing portions of a classfile to a growable buffer. Methods * are provided to write various standard entities (e.g., {@code u2}, {@code u4}) * to the end of the buffer, as well as to create constant pool entries. + * + * @since 22 */ +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public sealed interface BufWriter permits BufWriterImpl { diff --git a/src/java.base/share/classes/jdk/internal/classfile/ClassBuilder.java b/src/java.base/share/classes/java/lang/classfile/ClassBuilder.java similarity index 94% rename from src/java.base/share/classes/jdk/internal/classfile/ClassBuilder.java rename to src/java.base/share/classes/java/lang/classfile/ClassBuilder.java index 13af4df047aba..f1b8bb13d27e5 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/ClassBuilder.java +++ b/src/java.base/share/classes/java/lang/classfile/ClassBuilder.java @@ -23,7 +23,7 @@ * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; import java.lang.constant.ClassDesc; @@ -33,25 +33,29 @@ import java.util.Optional; import java.util.function.Consumer; -import jdk.internal.classfile.constantpool.ClassEntry; -import jdk.internal.classfile.constantpool.Utf8Entry; +import java.lang.classfile.constantpool.ClassEntry; +import java.lang.classfile.constantpool.Utf8Entry; import jdk.internal.classfile.impl.ChainedClassBuilder; import jdk.internal.classfile.impl.DirectClassBuilder; import jdk.internal.classfile.impl.Util; import java.lang.reflect.AccessFlag; -import jdk.internal.classfile.attribute.CodeAttribute; +import java.lang.classfile.attribute.CodeAttribute; +import jdk.internal.javac.PreviewFeature; /** * A builder for classfiles. Builders are not created directly; they are passed - * to handlers by methods such as {@link Classfile#build(ClassDesc, Consumer)} + * to handlers by methods such as {@link ClassFile#build(ClassDesc, Consumer)} * or to class transforms. The elements of a classfile can be specified - * abstractly (by passing a {@link ClassElement} to {@link #with(ClassfileElement)}) + * abstractly (by passing a {@link ClassElement} to {@link #with(ClassFileElement)}) * or concretely by calling the various {@code withXxx} methods. * * @see ClassTransform + * + * @since 22 */ +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public sealed interface ClassBuilder - extends ClassfileBuilder + extends ClassFileBuilder permits ChainedClassBuilder, DirectClassBuilder { /** @@ -67,7 +71,7 @@ public sealed interface ClassBuilder * @return this builder */ default ClassBuilder withVersion(int major, int minor) { - return with(ClassfileVersion.of(major, minor)); + return with(ClassFileVersion.of(major, minor)); } /** @@ -101,6 +105,7 @@ default ClassBuilder withSuperclass(ClassEntry superclassEntry) { * Sets the superclass of this class. * @param desc the superclass * @return this builder + * @throws IllegalArgumentException if {@code desc} represents a primitive type */ default ClassBuilder withSuperclass(ClassDesc desc) { return withSuperclass(constantPool().classEntry(desc)); diff --git a/src/java.base/share/classes/jdk/internal/classfile/ClassElement.java b/src/java.base/share/classes/java/lang/classfile/ClassElement.java similarity index 51% rename from src/java.base/share/classes/jdk/internal/classfile/ClassElement.java rename to src/java.base/share/classes/java/lang/classfile/ClassElement.java index 29c07cafcaaa0..3852f7d12933a 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/ClassElement.java +++ b/src/java.base/share/classes/java/lang/classfile/ClassElement.java @@ -22,39 +22,44 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; -import jdk.internal.classfile.attribute.CompilationIDAttribute; -import jdk.internal.classfile.attribute.DeprecatedAttribute; -import jdk.internal.classfile.attribute.EnclosingMethodAttribute; -import jdk.internal.classfile.attribute.InnerClassesAttribute; -import jdk.internal.classfile.attribute.ModuleAttribute; -import jdk.internal.classfile.attribute.ModuleHashesAttribute; -import jdk.internal.classfile.attribute.ModuleMainClassAttribute; -import jdk.internal.classfile.attribute.ModulePackagesAttribute; -import jdk.internal.classfile.attribute.ModuleResolutionAttribute; -import jdk.internal.classfile.attribute.ModuleTargetAttribute; -import jdk.internal.classfile.attribute.NestHostAttribute; -import jdk.internal.classfile.attribute.NestMembersAttribute; -import jdk.internal.classfile.attribute.PermittedSubclassesAttribute; -import jdk.internal.classfile.attribute.RecordAttribute; -import jdk.internal.classfile.attribute.RuntimeInvisibleAnnotationsAttribute; -import jdk.internal.classfile.attribute.RuntimeInvisibleTypeAnnotationsAttribute; -import jdk.internal.classfile.attribute.RuntimeVisibleAnnotationsAttribute; -import jdk.internal.classfile.attribute.RuntimeVisibleTypeAnnotationsAttribute; -import jdk.internal.classfile.attribute.SignatureAttribute; -import jdk.internal.classfile.attribute.SourceDebugExtensionAttribute; -import jdk.internal.classfile.attribute.SourceFileAttribute; -import jdk.internal.classfile.attribute.SourceIDAttribute; -import jdk.internal.classfile.attribute.SyntheticAttribute; -import jdk.internal.classfile.attribute.UnknownAttribute; +import java.lang.classfile.attribute.CompilationIDAttribute; +import java.lang.classfile.attribute.DeprecatedAttribute; +import java.lang.classfile.attribute.EnclosingMethodAttribute; +import java.lang.classfile.attribute.InnerClassesAttribute; +import java.lang.classfile.attribute.ModuleAttribute; +import java.lang.classfile.attribute.ModuleHashesAttribute; +import java.lang.classfile.attribute.ModuleMainClassAttribute; +import java.lang.classfile.attribute.ModulePackagesAttribute; +import java.lang.classfile.attribute.ModuleResolutionAttribute; +import java.lang.classfile.attribute.ModuleTargetAttribute; +import java.lang.classfile.attribute.NestHostAttribute; +import java.lang.classfile.attribute.NestMembersAttribute; +import java.lang.classfile.attribute.PermittedSubclassesAttribute; +import java.lang.classfile.attribute.RecordAttribute; +import java.lang.classfile.attribute.RuntimeInvisibleAnnotationsAttribute; +import java.lang.classfile.attribute.RuntimeInvisibleTypeAnnotationsAttribute; +import java.lang.classfile.attribute.RuntimeVisibleAnnotationsAttribute; +import java.lang.classfile.attribute.RuntimeVisibleTypeAnnotationsAttribute; +import java.lang.classfile.attribute.SignatureAttribute; +import java.lang.classfile.attribute.SourceDebugExtensionAttribute; +import java.lang.classfile.attribute.SourceFileAttribute; +import java.lang.classfile.attribute.SourceIDAttribute; +import java.lang.classfile.attribute.SyntheticAttribute; +import java.lang.classfile.attribute.UnknownAttribute; +import jdk.internal.javac.PreviewFeature; /** - * A {@link ClassfileElement} that can appear when traversing the elements - * of a {@link ClassModel} or be presented to a {@link ClassBuilder}. + * A marker interface for elements that can appear when traversing + * a {@link ClassModel} or be presented to a {@link ClassBuilder}. + * + * @sealedGraph + * @since 22 */ -public sealed interface ClassElement extends ClassfileElement - permits AccessFlags, Superclass, Interfaces, ClassfileVersion, +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) +public sealed interface ClassElement extends ClassFileElement + permits AccessFlags, Superclass, Interfaces, ClassFileVersion, FieldModel, MethodModel, CustomAttribute, CompilationIDAttribute, DeprecatedAttribute, EnclosingMethodAttribute, InnerClassesAttribute, diff --git a/src/java.base/share/classes/jdk/internal/classfile/Classfile.java b/src/java.base/share/classes/java/lang/classfile/ClassFile.java similarity index 50% rename from src/java.base/share/classes/jdk/internal/classfile/Classfile.java rename to src/java.base/share/classes/java/lang/classfile/ClassFile.java index 7ee9a8299caa1..7b1ef16ba6def 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/Classfile.java +++ b/src/java.base/share/classes/java/lang/classfile/ClassFile.java @@ -22,7 +22,7 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; import java.io.IOException; import java.lang.constant.ClassDesc; @@ -31,40 +31,44 @@ import java.util.function.Consumer; import java.util.function.Function; -import jdk.internal.classfile.attribute.ModuleAttribute; -import jdk.internal.classfile.attribute.UnknownAttribute; -import jdk.internal.classfile.constantpool.ClassEntry; -import jdk.internal.classfile.constantpool.ConstantPoolBuilder; -import jdk.internal.classfile.constantpool.Utf8Entry; -import jdk.internal.classfile.impl.ClassfileImpl; +import java.lang.classfile.attribute.ModuleAttribute; +import java.lang.classfile.attribute.UnknownAttribute; +import java.lang.classfile.constantpool.ClassEntry; +import java.lang.classfile.constantpool.ConstantPoolBuilder; +import java.lang.classfile.constantpool.Utf8Entry; +import jdk.internal.classfile.impl.ClassFileImpl; import jdk.internal.classfile.impl.TemporaryConstantPool; import java.lang.reflect.AccessFlag; -import jdk.internal.classfile.attribute.CharacterRangeInfo; -import jdk.internal.classfile.attribute.LocalVariableInfo; -import jdk.internal.classfile.attribute.LocalVariableTypeInfo; -import jdk.internal.classfile.instruction.ExceptionCatch; +import java.lang.classfile.attribute.CharacterRangeInfo; +import java.lang.classfile.attribute.LocalVariableInfo; +import java.lang.classfile.attribute.LocalVariableTypeInfo; +import java.lang.classfile.instruction.ExceptionCatch; import static java.util.Objects.requireNonNull; +import jdk.internal.javac.PreviewFeature; /** * Represents a context for parsing, transforming, and generating classfiles. - * A {@code Classfile} has a set of options that condition how parsing and + * A {@code ClassFile} has a set of options that condition how parsing and * generation is done. + * + * @since 22 */ -public sealed interface Classfile - permits ClassfileImpl { +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) +public sealed interface ClassFile + permits ClassFileImpl { /** * {@return a context with default options} */ - static Classfile of() { - return ClassfileImpl.DEFAULT_CONTEXT; + static ClassFile of() { + return ClassFileImpl.DEFAULT_CONTEXT; } /** * {@return a new context with options altered from the default} * @param options the desired processing options */ - static Classfile of(Option... options) { + static ClassFile of(Option... options) { return of().withOptions(options); } @@ -72,20 +76,27 @@ static Classfile of(Option... options) { * {@return a copy of the context with altered options} * @param options the desired processing options */ - Classfile withOptions(Option... options); + ClassFile withOptions(Option... options); /** * An option that affects the parsing and writing of classfiles. + * + * @sealedGraph + * @since 22 */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) sealed interface Option { } /** * Option describing attribute mappers for custom attributes. * Default is only to process standard attributes. + * + * @since 22 */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) sealed interface AttributeMapperOption extends Option - permits ClassfileImpl.AttributeMapperOptionImpl { + permits ClassFileImpl.AttributeMapperOptionImpl { /** * {@return an option describing attribute mappers for custom attributes} @@ -93,7 +104,7 @@ sealed interface AttributeMapperOption extends Option */ static AttributeMapperOption of(Function> attributeMapper) { requireNonNull(attributeMapper); - return new ClassfileImpl.AttributeMapperOptionImpl(attributeMapper); + return new ClassFileImpl.AttributeMapperOptionImpl(attributeMapper); } /** @@ -105,9 +116,12 @@ static AttributeMapperOption of(Function> attribut /** * Option describing the class hierarchy resolver to use when generating * stack maps. + * + * @since 22 */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) sealed interface ClassHierarchyResolverOption extends Option - permits ClassfileImpl.ClassHierarchyResolverOptionImpl { + permits ClassFileImpl.ClassHierarchyResolverOptionImpl { /** * {@return an option describing the class hierarchy resolver to use when @@ -116,7 +130,7 @@ sealed interface ClassHierarchyResolverOption extends Option */ static ClassHierarchyResolverOption of(ClassHierarchyResolver classHierarchyResolver) { requireNonNull(classHierarchyResolver); - return new ClassfileImpl.ClassHierarchyResolverOptionImpl(classHierarchyResolver); + return new ClassFileImpl.ClassHierarchyResolverOptionImpl(classHierarchyResolver); } /** @@ -133,7 +147,10 @@ static ClassHierarchyResolverOption of(ClassHierarchyResolver classHierarchyReso * when a classfile is significantly transformed. * Default is {@code SHARED_POOL} to preserve the original constant * pool. + * + * @since 22 */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) enum ConstantPoolSharingOption implements Option { /** Preserves the original constant pool when transforming classfile */ @@ -144,10 +161,13 @@ enum ConstantPoolSharingOption implements Option { } /** - * Option describing whether or not to patch out unreachable code. + * Option describing whether to patch out unreachable code. * Default is {@code PATCH_DEAD_CODE} to automatically patch out unreachable * code with NOPs. + * + * @since 22 */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) enum DeadCodeOption implements Option { /** Patch unreachable code */ @@ -158,14 +178,17 @@ enum DeadCodeOption implements Option { } /** - * Option describing whether or not to filter unresolved labels. + * Option describing whether to filter unresolved labels. * Default is {@code FAIL_ON_DEAD_LABELS} to throw IllegalStateException * when any {@link ExceptionCatch}, {@link LocalVariableInfo}, * {@link LocalVariableTypeInfo}, or {@link CharacterRangeInfo} * reference to unresolved {@link Label} during bytecode serialization. * Setting this option to {@code DROP_DEAD_LABELS} filters the above * elements instead. + * + * @since 22 */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) enum DeadLabelsOption implements Option { /** Fail on unresolved labels */ @@ -181,7 +204,10 @@ enum DeadLabelsOption implements Option { * table, and character range table. Discarding debug elements may * reduce the overhead of parsing or transforming classfiles. * Default is {@code PASS_DEBUG} to process debug elements. + * + * @since 22 */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) enum DebugElementsOption implements Option { /** Process debug elements */ @@ -196,7 +222,10 @@ enum DebugElementsOption implements Option { * Discarding line numbers may reduce the overhead of parsing or transforming * classfiles. * Default is {@code PASS_LINE_NUMBERS} to process line numbers. + * + * @since 22 */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) enum LineNumbersOption implements Option { /** Process line numbers */ @@ -207,11 +236,14 @@ enum LineNumbersOption implements Option { } /** - * Option describing whether or not to automatically rewrite short jumps to + * Option describing whether to automatically rewrite short jumps to * long when necessary. * Default is {@code FIX_SHORT_JUMPS} to automatically rewrite jump * instructions. + * + * @since 22 */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) enum ShortJumpsOption implements Option { /** Automatically convert short jumps to long when necessary */ @@ -222,12 +254,15 @@ enum ShortJumpsOption implements Option { } /** - * Option describing whether or not to generate stackmaps. + * Option describing whether to generate stackmaps. * Default is {@code STACK_MAPS_WHEN_REQUIRED} to generate stack * maps for {@link #JAVA_6_VERSION} or above, where specifically for * {@link #JAVA_6_VERSION} the stack maps may not be generated. * @jvms 4.10.1 Verification by Type Checking + * + * @since 22 */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) enum StackMapsOption implements Option { /** Generate stack maps when required */ @@ -246,7 +281,10 @@ enum StackMapsOption implements Option { * transformed in its exploded form. * Default is {@code PASS_ALL_ATTRIBUTES} to process all original attributes. * @see AttributeMapper.AttributeStability + * + * @since 22 */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) enum AttributesProcessingOption implements Option { /** Process all original attributes during transformation */ @@ -263,6 +301,8 @@ enum AttributesProcessingOption implements Option { * Parse a classfile into a {@link ClassModel}. * @param bytes the bytes of the classfile * @return the class model + * @throws IllegalArgumentException or its subclass if the classfile format is + * not supported or an incompatibility prevents parsing of the classfile */ ClassModel parse(byte[] bytes); @@ -270,7 +310,9 @@ enum AttributesProcessingOption implements Option { * Parse a classfile into a {@link ClassModel}. * @param path the path to the classfile * @return the class model - * @throws java.io.IOException + * @throws java.io.IOException if an I/O error occurs + * @throws IllegalArgumentException or its subclass if the classfile format is + * not supported or an incompatibility prevents parsing of the classfile */ default ClassModel parse(Path path) throws IOException { return parse(Files.readAllBytes(path)); @@ -281,6 +323,7 @@ default ClassModel parse(Path path) throws IOException { * @param thisClass the name of the class to build * @param handler a handler that receives a {@link ClassBuilder} * @return the classfile bytes + * @throws IllegalArgumentException if {@code thisClass} represents a primitive type */ default byte[] build(ClassDesc thisClass, Consumer handler) { @@ -306,7 +349,7 @@ byte[] build(ClassEntry thisClassEntry, * @param path the path to the file to write * @param thisClass the name of the class to build * @param handler a handler that receives a {@link ClassBuilder} - * @throws java.io.IOException + * @throws java.io.IOException if an I/O error occurs */ default void buildTo(Path path, ClassDesc thisClass, @@ -322,7 +365,7 @@ default void buildTo(Path path, * @param thisClassEntry the name of the class to build * @param constantPool the constant pool builder * @param handler a handler that receives a {@link ClassBuilder} - * @throws java.io.IOException + * @throws java.io.IOException if an I/O error occurs */ default void buildTo(Path path, ClassEntry thisClassEntry, @@ -359,7 +402,7 @@ default byte[] buildModule(ModuleAttribute moduleAttribute, * Build a module descriptor into a file. * @param path the file to write * @param moduleAttribute the {@code Module} attribute - * @throws java.io.IOException + * @throws java.io.IOException if an I/O error occurs */ default void buildModuleTo(Path path, ModuleAttribute moduleAttribute) throws IOException { @@ -371,7 +414,7 @@ default void buildModuleTo(Path path, * @param path the file to write * @param moduleAttribute the {@code Module} attribute * @param handler a handler that receives a {@link ClassBuilder} - * @throws java.io.IOException + * @throws java.io.IOException if an I/O error occurs */ default void buildModuleTo(Path path, ModuleAttribute moduleAttribute, @@ -441,967 +484,967 @@ default byte[] transform(ClassModel model, ClassDesc newClassName, ClassTransfor /** 0xCAFEBABE */ int MAGIC_NUMBER = 0xCAFEBABE; - /** 0 */ + /** The integer value used to encode the NOP instruction. */ int NOP = 0; - /** 1 */ + /** The integer value used to encode the ACONST_NULL instruction. */ int ACONST_NULL = 1; - /** 2 */ + /** The integer value used to encode the ICONST_M1 instruction. */ int ICONST_M1 = 2; - /** 3 */ + /** The integer value used to encode the ICONST_0 instruction. */ int ICONST_0 = 3; - /** 4 */ + /** The integer value used to encode the ICONST_1 instruction. */ int ICONST_1 = 4; - /** 5 */ + /** The integer value used to encode the ICONST_2 instruction. */ int ICONST_2 = 5; - /** 6 */ + /** The integer value used to encode the ICONST_3 instruction. */ int ICONST_3 = 6; - /** 7 */ + /** The integer value used to encode the ICONST_4 instruction. */ int ICONST_4 = 7; - /** 8 */ + /** The integer value used to encode the ICONST_5 instruction. */ int ICONST_5 = 8; - /** 9 */ + /** The integer value used to encode the LCONST_0 instruction. */ int LCONST_0 = 9; - /** 10 */ + /** The integer value used to encode the LCONST_1 instruction. */ int LCONST_1 = 10; - /** 11 */ + /** The integer value used to encode the FCONST_0 instruction. */ int FCONST_0 = 11; - /** 12 */ + /** The integer value used to encode the FCONST_1 instruction. */ int FCONST_1 = 12; - /** 13 */ + /** The integer value used to encode the FCONST_2 instruction. */ int FCONST_2 = 13; - /** 14 */ + /** The integer value used to encode the DCONST_0 instruction. */ int DCONST_0 = 14; - /** 15 */ + /** The integer value used to encode the DCONST_1 instruction. */ int DCONST_1 = 15; - /** 16 */ + /** The integer value used to encode the BIPUSH instruction. */ int BIPUSH = 16; - /** 17 */ + /** The integer value used to encode the SIPUSH instruction. */ int SIPUSH = 17; - /** 18 */ + /** The integer value used to encode the LDC instruction. */ int LDC = 18; - /** 19 */ + /** The integer value used to encode the LDC_W instruction. */ int LDC_W = 19; - /** 20 */ + /** The integer value used to encode the LDC2_W instruction. */ int LDC2_W = 20; - /** 21 */ + /** The integer value used to encode the ILOAD instruction. */ int ILOAD = 21; - /** 22 */ + /** The integer value used to encode the LLOAD instruction. */ int LLOAD = 22; - /** 23 */ + /** The integer value used to encode the FLOAD instruction. */ int FLOAD = 23; - /** 24 */ + /** The integer value used to encode the DLOAD instruction. */ int DLOAD = 24; - /** 25 */ + /** The integer value used to encode the ALOAD instruction. */ int ALOAD = 25; - /** 26 */ + /** The integer value used to encode the ILOAD_0 instruction. */ int ILOAD_0 = 26; - /** 27 */ + /** The integer value used to encode the ILOAD_1 instruction. */ int ILOAD_1 = 27; - /** 28 */ + /** The integer value used to encode the ILOAD_2 instruction. */ int ILOAD_2 = 28; - /** 29 */ + /** The integer value used to encode the ILOAD_3 instruction. */ int ILOAD_3 = 29; - /** 30 */ + /** The integer value used to encode the LLOAD_0 instruction. */ int LLOAD_0 = 30; - /** 31 */ + /** The integer value used to encode the LLOAD_1 instruction. */ int LLOAD_1 = 31; - /** 32 */ + /** The integer value used to encode the LLOAD_2 instruction. */ int LLOAD_2 = 32; - /** 33 */ + /** The integer value used to encode the LLOAD_3 instruction. */ int LLOAD_3 = 33; - /** 34 */ + /** The integer value used to encode the FLOAD_0 instruction. */ int FLOAD_0 = 34; - /** 35 */ + /** The integer value used to encode the FLOAD_1 instruction. */ int FLOAD_1 = 35; - /** 36 */ + /** The integer value used to encode the FLOAD_2 instruction. */ int FLOAD_2 = 36; - /** 37 */ + /** The integer value used to encode the FLOAD_3 instruction. */ int FLOAD_3 = 37; - /** 38 */ + /** The integer value used to encode the DLOAD_0 instruction. */ int DLOAD_0 = 38; - /** 39 */ + /** The integer value used to encode the DLOAD_1 instruction. */ int DLOAD_1 = 39; - /** 40 */ + /** The integer value used to encode the DLOAD_2 instruction. */ int DLOAD_2 = 40; - /** 41 */ + /** The integer value used to encode the DLOAD_3 instruction. */ int DLOAD_3 = 41; - /** 42 */ + /** The integer value used to encode the ALOAD_0 instruction. */ int ALOAD_0 = 42; - /** 43 */ + /** The integer value used to encode the ALOAD_1 instruction. */ int ALOAD_1 = 43; - /** 44 */ + /** The integer value used to encode the ALOAD_2 instruction. */ int ALOAD_2 = 44; - /** 45 */ + /** The integer value used to encode the ALOAD_3 instruction. */ int ALOAD_3 = 45; - /** 46 */ + /** The integer value used to encode the IALOAD instruction. */ int IALOAD = 46; - /** 47 */ + /** The integer value used to encode the LALOAD instruction. */ int LALOAD = 47; - /** 48 */ + /** The integer value used to encode the FALOAD instruction. */ int FALOAD = 48; - /** 49 */ + /** The integer value used to encode the DALOAD instruction. */ int DALOAD = 49; - /** 50 */ + /** The integer value used to encode the AALOAD instruction. */ int AALOAD = 50; - /** 51 */ + /** The integer value used to encode the BALOAD instruction. */ int BALOAD = 51; - /** 52 */ + /** The integer value used to encode the CALOAD instruction. */ int CALOAD = 52; - /** 53 */ + /** The integer value used to encode the SALOAD instruction. */ int SALOAD = 53; - /** 54 */ + /** The integer value used to encode the ISTORE instruction. */ int ISTORE = 54; - /** 55 */ + /** The integer value used to encode the LSTORE instruction. */ int LSTORE = 55; - /** 56 */ + /** The integer value used to encode the FSTORE instruction. */ int FSTORE = 56; - /** 57 */ + /** The integer value used to encode the DSTORE instruction. */ int DSTORE = 57; - /** 58 */ + /** The integer value used to encode the ASTORE instruction. */ int ASTORE = 58; - /** 59 */ + /** The integer value used to encode the ISTORE_0 instruction. */ int ISTORE_0 = 59; - /** 60 */ + /** The integer value used to encode the ISTORE_1 instruction. */ int ISTORE_1 = 60; - /** 61 */ + /** The integer value used to encode the ISTORE_2 instruction. */ int ISTORE_2 = 61; - /** 62 */ + /** The integer value used to encode the ISTORE_3 instruction. */ int ISTORE_3 = 62; - /** 63 */ + /** The integer value used to encode the LSTORE_0 instruction. */ int LSTORE_0 = 63; - /** 64 */ + /** The integer value used to encode the LSTORE_1 instruction. */ int LSTORE_1 = 64; - /** 65 */ + /** The integer value used to encode the LSTORE_2 instruction. */ int LSTORE_2 = 65; - /** 66 */ + /** The integer value used to encode the LSTORE_3 instruction. */ int LSTORE_3 = 66; - /** 67 */ + /** The integer value used to encode the FSTORE_0 instruction. */ int FSTORE_0 = 67; - /** 68 */ + /** The integer value used to encode the FSTORE_1 instruction. */ int FSTORE_1 = 68; - /** 69 */ + /** The integer value used to encode the FSTORE_2 instruction. */ int FSTORE_2 = 69; - /** 70 */ + /** The integer value used to encode the FSTORE_3 instruction. */ int FSTORE_3 = 70; - /** 71 */ + /** The integer value used to encode the DSTORE_0 instruction. */ int DSTORE_0 = 71; - /** 72 */ + /** The integer value used to encode the DSTORE_1 instruction. */ int DSTORE_1 = 72; - /** 73 */ + /** The integer value used to encode the DSTORE_2 instruction. */ int DSTORE_2 = 73; - /** 74 */ + /** The integer value used to encode the DSTORE_3 instruction. */ int DSTORE_3 = 74; - /** 75 */ + /** The integer value used to encode the ASTORE_0 instruction. */ int ASTORE_0 = 75; - /** 76 */ + /** The integer value used to encode the ASTORE_1 instruction. */ int ASTORE_1 = 76; - /** 77 */ + /** The integer value used to encode the ASTORE_2 instruction. */ int ASTORE_2 = 77; - /** 78 */ + /** The integer value used to encode the ASTORE_3 instruction. */ int ASTORE_3 = 78; - /** 79 */ + /** The integer value used to encode the IASTORE instruction. */ int IASTORE = 79; - /** 80 */ + /** The integer value used to encode the LASTORE instruction. */ int LASTORE = 80; - /** 81 */ + /** The integer value used to encode the FASTORE instruction. */ int FASTORE = 81; - /** 82 */ + /** The integer value used to encode the DASTORE instruction. */ int DASTORE = 82; - /** 83 */ + /** The integer value used to encode the AASTORE instruction. */ int AASTORE = 83; - /** 84 */ + /** The integer value used to encode the BASTORE instruction. */ int BASTORE = 84; - /** 85 */ + /** The integer value used to encode the CASTORE instruction. */ int CASTORE = 85; - /** 86 */ + /** The integer value used to encode the SASTORE instruction. */ int SASTORE = 86; - /** 87 */ + /** The integer value used to encode the POP instruction. */ int POP = 87; - /** 88 */ + /** The integer value used to encode the POP2 instruction. */ int POP2 = 88; - /** 89 */ + /** The integer value used to encode the DUP instruction. */ int DUP = 89; - /** 90 */ + /** The integer value used to encode the DUP_X1 instruction. */ int DUP_X1 = 90; - /** 91 */ + /** The integer value used to encode the DUP_X2 instruction. */ int DUP_X2 = 91; - /** 92 */ + /** The integer value used to encode the DUP2 instruction. */ int DUP2 = 92; - /** 93 */ + /** The integer value used to encode the DUP2_X1 instruction. */ int DUP2_X1 = 93; - /** 94 */ + /** The integer value used to encode the DUP2_X2 instruction. */ int DUP2_X2 = 94; - /** 95 */ + /** The integer value used to encode the SWAP instruction. */ int SWAP = 95; - /** 96 */ + /** The integer value used to encode the IADD instruction. */ int IADD = 96; - /** 97 */ + /** The integer value used to encode the LADD instruction. */ int LADD = 97; - /** 98 */ + /** The integer value used to encode the FADD instruction. */ int FADD = 98; - /** 99 */ + /** The integer value used to encode the DADD instruction. */ int DADD = 99; - /** 100 */ + /** The integer value used to encode the ISUB instruction. */ int ISUB = 100; - /** 101 */ + /** The integer value used to encode the LSUB instruction. */ int LSUB = 101; - /** 102 */ + /** The integer value used to encode the FSUB instruction. */ int FSUB = 102; - /** 103 */ + /** The integer value used to encode the DSUB instruction. */ int DSUB = 103; - /** 104 */ + /** The integer value used to encode the IMUL instruction. */ int IMUL = 104; - /** 105 */ + /** The integer value used to encode the LMUL instruction. */ int LMUL = 105; - /** 106 */ + /** The integer value used to encode the FMUL instruction. */ int FMUL = 106; - /** 107 */ + /** The integer value used to encode the DMUL instruction. */ int DMUL = 107; - /** 108 */ + /** The integer value used to encode the IDIV instruction. */ int IDIV = 108; - /** 109 */ + /** The integer value used to encode the LDIV instruction. */ int LDIV = 109; - /** 110 */ + /** The integer value used to encode the FDIV instruction. */ int FDIV = 110; - /** 111 */ + /** The integer value used to encode the DDIV instruction. */ int DDIV = 111; - /** 112 */ + /** The integer value used to encode the IREM instruction. */ int IREM = 112; - /** 113 */ + /** The integer value used to encode the LREM instruction. */ int LREM = 113; - /** 114 */ + /** The integer value used to encode the FREM instruction. */ int FREM = 114; - /** 115 */ + /** The integer value used to encode the DREM instruction. */ int DREM = 115; - /** 116 */ + /** The integer value used to encode the INEG instruction. */ int INEG = 116; - /** 117 */ + /** The integer value used to encode the LNEG instruction. */ int LNEG = 117; - /** 118 */ + /** The integer value used to encode the FNEG instruction. */ int FNEG = 118; - /** 119 */ + /** The integer value used to encode the DNEG instruction. */ int DNEG = 119; - /** 120 */ + /** The integer value used to encode the ISHL instruction. */ int ISHL = 120; - /** 121 */ + /** The integer value used to encode the LSHL instruction. */ int LSHL = 121; - /** 122 */ + /** The integer value used to encode the ISHR instruction. */ int ISHR = 122; - /** 123 */ + /** The integer value used to encode the LSHR instruction. */ int LSHR = 123; - /** 124 */ + /** The integer value used to encode the IUSHR instruction. */ int IUSHR = 124; - /** 125 */ + /** The integer value used to encode the LUSHR instruction. */ int LUSHR = 125; - /** 126 */ + /** The integer value used to encode the IAND instruction. */ int IAND = 126; - /** 127 */ + /** The integer value used to encode the LAND instruction. */ int LAND = 127; - /** 128 */ + /** The integer value used to encode the IOR instruction. */ int IOR = 128; - /** 129 */ + /** The integer value used to encode the LOR instruction. */ int LOR = 129; - /** 130 */ + /** The integer value used to encode the IXOR instruction. */ int IXOR = 130; - /** 131 */ + /** The integer value used to encode the LXOR instruction. */ int LXOR = 131; - /** 132 */ + /** The integer value used to encode the IINC instruction. */ int IINC = 132; - /** 133 */ + /** The integer value used to encode the I2L instruction. */ int I2L = 133; - /** 134 */ + /** The integer value used to encode the I2F instruction. */ int I2F = 134; - /** 135 */ + /** The integer value used to encode the I2D instruction. */ int I2D = 135; - /** 136 */ + /** The integer value used to encode the L2I instruction. */ int L2I = 136; - /** 137 */ + /** The integer value used to encode the L2F instruction. */ int L2F = 137; - /** 138 */ + /** The integer value used to encode the L2D instruction. */ int L2D = 138; - /** 139 */ + /** The integer value used to encode the F2I instruction. */ int F2I = 139; - /** 140 */ + /** The integer value used to encode the F2L instruction. */ int F2L = 140; - /** 141 */ + /** The integer value used to encode the F2D instruction. */ int F2D = 141; - /** 142 */ + /** The integer value used to encode the D2I instruction. */ int D2I = 142; - /** 143 */ + /** The integer value used to encode the D2L instruction. */ int D2L = 143; - /** 144 */ + /** The integer value used to encode the D2F instruction. */ int D2F = 144; - /** 145 */ + /** The integer value used to encode the I2B instruction. */ int I2B = 145; - /** 146 */ + /** The integer value used to encode the I2C instruction. */ int I2C = 146; - /** 147 */ + /** The integer value used to encode the I2S instruction. */ int I2S = 147; - /** 148 */ + /** The integer value used to encode the LCMP instruction. */ int LCMP = 148; - /** 149 */ + /** The integer value used to encode the FCMPL instruction. */ int FCMPL = 149; - /** 150 */ + /** The integer value used to encode the FCMPG instruction. */ int FCMPG = 150; - /** 151 */ + /** The integer value used to encode the DCMPL instruction. */ int DCMPL = 151; - /** 152 */ + /** The integer value used to encode the DCMPG instruction. */ int DCMPG = 152; - /** 153 */ + /** The integer value used to encode the IFEQ instruction. */ int IFEQ = 153; - /** 154 */ + /** The integer value used to encode the IFNE instruction. */ int IFNE = 154; - /** 155 */ + /** The integer value used to encode the IFLT instruction. */ int IFLT = 155; - /** 156 */ + /** The integer value used to encode the IFGE instruction. */ int IFGE = 156; - /** 157 */ + /** The integer value used to encode the IFGT instruction. */ int IFGT = 157; - /** 158 */ + /** The integer value used to encode the IFLE instruction. */ int IFLE = 158; - /** 159 */ + /** The integer value used to encode the IF_ICMPEQ instruction. */ int IF_ICMPEQ = 159; - /** 160 */ + /** The integer value used to encode the IF_ICMPNE instruction. */ int IF_ICMPNE = 160; - /** 161 */ + /** The integer value used to encode the IF_ICMPLT instruction. */ int IF_ICMPLT = 161; - /** 162 */ + /** The integer value used to encode the IF_ICMPGE instruction. */ int IF_ICMPGE = 162; - /** 163 */ + /** The integer value used to encode the IF_ICMPGT instruction. */ int IF_ICMPGT = 163; - /** 164 */ + /** The integer value used to encode the IF_ICMPLE instruction. */ int IF_ICMPLE = 164; - /** 165 */ + /** The integer value used to encode the IF_ACMPEQ instruction. */ int IF_ACMPEQ = 165; - /** 166 */ + /** The integer value used to encode the IF_ACMPNE instruction. */ int IF_ACMPNE = 166; - /** 167 */ + /** The integer value used to encode the GOTO instruction. */ int GOTO = 167; - /** 168 */ + /** The integer value used to encode the JSR instruction. */ int JSR = 168; - /** 169 */ + /** The integer value used to encode the RET instruction. */ int RET = 169; - /** 170 */ + /** The integer value used to encode the TABLESWITCH instruction. */ int TABLESWITCH = 170; - /** 171 */ + /** The integer value used to encode the LOOKUPSWITCH instruction. */ int LOOKUPSWITCH = 171; - /** 172 */ + /** The integer value used to encode the IRETURN instruction. */ int IRETURN = 172; - /** 173 */ + /** The integer value used to encode the LRETURN instruction. */ int LRETURN = 173; - /** 174 */ + /** The integer value used to encode the FRETURN instruction. */ int FRETURN = 174; - /** 175 */ + /** The integer value used to encode the DRETURN instruction. */ int DRETURN = 175; - /** 176 */ + /** The integer value used to encode the ARETURN instruction. */ int ARETURN = 176; - /** 177 */ + /** The integer value used to encode the RETURN instruction. */ int RETURN = 177; - /** 178 */ + /** The integer value used to encode the GETSTATIC instruction. */ int GETSTATIC = 178; - /** 179 */ + /** The integer value used to encode the PUTSTATIC instruction. */ int PUTSTATIC = 179; - /** 180 */ + /** The integer value used to encode the GETFIELD instruction. */ int GETFIELD = 180; - /** 181 */ + /** The integer value used to encode the PUTFIELD instruction. */ int PUTFIELD = 181; - /** 182 */ + /** The integer value used to encode the INVOKEVIRTUAL instruction. */ int INVOKEVIRTUAL = 182; - /** 183 */ + /** The integer value used to encode the INVOKESPECIAL instruction. */ int INVOKESPECIAL = 183; - /** 184 */ + /** The integer value used to encode the INVOKESTATIC instruction. */ int INVOKESTATIC = 184; - /** 185 */ + /** The integer value used to encode the INVOKEINTERFACE instruction. */ int INVOKEINTERFACE = 185; - /** 186 */ + /** The integer value used to encode the INVOKEDYNAMIC instruction. */ int INVOKEDYNAMIC = 186; - /** 187 */ + /** The integer value used to encode the NEW instruction. */ int NEW = 187; - /** 188 */ + /** The integer value used to encode the NEWARRAY instruction. */ int NEWARRAY = 188; - /** 189 */ + /** The integer value used to encode the ANEWARRAY instruction. */ int ANEWARRAY = 189; - /** 190 */ + /** The integer value used to encode the ARRAYLENGTH instruction. */ int ARRAYLENGTH = 190; - /** 191 */ + /** The integer value used to encode the ATHROW instruction. */ int ATHROW = 191; - /** 192 */ + /** The integer value used to encode the CHECKCAST instruction. */ int CHECKCAST = 192; - /** 193 */ + /** The integer value used to encode the INSTANCEOF instruction. */ int INSTANCEOF = 193; - /** 194 */ + /** The integer value used to encode the MONITORENTER instruction. */ int MONITORENTER = 194; - /** 195 */ + /** The integer value used to encode the MONITOREXIT instruction. */ int MONITOREXIT = 195; - /** 196 */ + /** The integer value used to encode the WIDE instruction. */ int WIDE = 196; - /** 197 */ + /** The integer value used to encode the MULTIANEWARRAY instruction. */ int MULTIANEWARRAY = 197; - /** 198 */ + /** The integer value used to encode the IFNULL instruction. */ int IFNULL = 198; - /** 199 */ + /** The integer value used to encode the IFNONNULL instruction. */ int IFNONNULL = 199; - /** 200 */ + /** The integer value used to encode the GOTO_W instruction. */ int GOTO_W = 200; - /** 201 */ + /** The integer value used to encode the JSR_W instruction. */ int JSR_W = 201; - /** 0x0001 */ + /** The value of PUBLIC access and property modifier. */ int ACC_PUBLIC = 0x0001; - /** 0x0004 */ + /** The value of PROTECTED access and property modifier. */ int ACC_PROTECTED = 0x0004; - /** 0x0002 */ + /** The value of PRIVATE access and property modifier. */ int ACC_PRIVATE = 0x0002; - /** 0x0200 */ + /** The value of INTERFACE access and property modifier. */ int ACC_INTERFACE = 0x0200; - /** 0x4000 */ + /** The value of ENUM access and property modifier. */ int ACC_ENUM = 0x4000; - /** 0x2000 */ + /** The value of ANNOTATION access and property modifier. */ int ACC_ANNOTATION = 0x2000; - /** 0x0020 */ + /** The value of SUPER access and property modifier. */ int ACC_SUPER = 0x0020; - /** 0x0400 */ + /** The value of ABSTRACT access and property modifier. */ int ACC_ABSTRACT = 0x0400; - /** 0x0040 */ + /** The value of VOLATILE access and property modifier. */ int ACC_VOLATILE = 0x0040; - /** 0x0080 */ + /** The value of TRANSIENT access and property modifier. */ int ACC_TRANSIENT = 0x0080; - /** 0x1000 */ + /** The value of SYNTHETIC access and property modifier. */ int ACC_SYNTHETIC = 0x1000; - /** 0x0008 */ + /** The value of STATIC access and property modifier. */ int ACC_STATIC = 0x0008; - /** 0x0010 */ + /** The value of FINAL access and property modifier. */ int ACC_FINAL = 0x0010; - /** 0x0020 */ + /** The value of SYNCHRONIZED access and property modifier. */ int ACC_SYNCHRONIZED = 0x0020; - /** 0x0040 */ + /** The value of BRIDGE access and property modifier. */ int ACC_BRIDGE = 0x0040; - /** 0x0080 */ + /** The value of VARARGS access and property modifier. */ int ACC_VARARGS = 0x0080; - /** 0x0100 */ + /** The value of NATIVE access and property modifier. */ int ACC_NATIVE = 0x0100; - /** 0x0800 */ + /** The value of STRICT access and property modifier. */ int ACC_STRICT = 0x0800; - /** 0x8000 */ + /** The value of MODULE access and property modifier. */ int ACC_MODULE = 0x8000; - /** 0x20 */ + /** The value of OPEN access and property modifier. */ int ACC_OPEN = 0x20; - /** 0x8000 */ + /** The value of MANDATED access and property modifier. */ int ACC_MANDATED = 0x8000; - /** 0x20 */ + /** The value of TRANSITIVE access and property modifier. */ int ACC_TRANSITIVE = 0x20; - /** 0x40 */ + /** The value of STATIC_PHASE access and property modifier. */ int ACC_STATIC_PHASE = 0x40; - /** 0x0001 */ + /** The value of STATEMENT {@link CharacterRangeInfo} kind. */ int CRT_STATEMENT = 0x0001; - /** 0x0002 */ + /** The value of BLOCK {@link CharacterRangeInfo} kind. */ int CRT_BLOCK = 0x0002; - /** 0x0004 */ + /** The value of ASSIGNMENT {@link CharacterRangeInfo} kind. */ int CRT_ASSIGNMENT = 0x0004; - /** 0x0008 */ + /** The value of FLOW_CONTROLLER {@link CharacterRangeInfo} kind. */ int CRT_FLOW_CONTROLLER = 0x0008; - /** 0x0010 */ + /** The value of FLOW_TARGET {@link CharacterRangeInfo} kind. */ int CRT_FLOW_TARGET = 0x0010; - /** 0x0020 */ + /** The value of INVOKE {@link CharacterRangeInfo} kind. */ int CRT_INVOKE = 0x0020; - /** 0x0040 */ + /** The value of CREATE {@link CharacterRangeInfo} kind. */ int CRT_CREATE = 0x0040; - /** 0x0080 */ + /** The value of BRANCH_TRUE {@link CharacterRangeInfo} kind. */ int CRT_BRANCH_TRUE = 0x0080; - /** 0x0100 */ + /** The value of BRANCH_FALSE {@link CharacterRangeInfo} kind. */ int CRT_BRANCH_FALSE = 0x0100; - /** 7 */ + /** The value of constant pool tag CLASS. */ int TAG_CLASS = 7; - /** 17 */ + /** The value of constant pool tag CONSTANTDYNAMIC. */ int TAG_CONSTANTDYNAMIC = 17; - /** 6 */ + /** The value of constant pool tag DOUBLE. */ int TAG_DOUBLE = 6; - /** 9 */ + /** The value of constant pool tag FIELDREF. */ int TAG_FIELDREF = 9; - /** 4 */ + /** The value of constant pool tag FLOAT. */ int TAG_FLOAT = 4; - /** 3 */ + /** The value of constant pool tag INTEGER. */ int TAG_INTEGER = 3; - /** 11 */ + /** The value of constant pool tag INTERFACEMETHODREF. */ int TAG_INTERFACEMETHODREF = 11; - /** 18 */ + /** The value of constant pool tag INVOKEDYNAMIC. */ int TAG_INVOKEDYNAMIC = 18; - /** 5 */ + /** The value of constant pool tag LONG. */ int TAG_LONG = 5; - /** 15 */ + /** The value of constant pool tag METHODHANDLE. */ int TAG_METHODHANDLE = 15; - /** 10 */ + /** The value of constant pool tag METHODREF. */ int TAG_METHODREF = 10; - /** 16 */ + /** The value of constant pool tag METHODTYPE. */ int TAG_METHODTYPE = 16; - /** 19 */ + /** The value of constant pool tag MODULE. */ int TAG_MODULE = 19; - /** 12 */ + /** The value of constant pool tag NAMEANDTYPE. */ int TAG_NAMEANDTYPE = 12; - /** 20 */ + /** The value of constant pool tag PACKAGE. */ int TAG_PACKAGE = 20; - /** 8 */ + /** The value of constant pool tag STRING. */ int TAG_STRING = 8; - /** 2 */ + /** The value of constant pool tag UNICODE. */ int TAG_UNICODE = 2; - /** 1 */ + /** The value of constant pool tag UTF8. */ int TAG_UTF8 = 1; // annotation element values - /** 'B' */ - char AEV_BYTE = 'B'; + /** The value of annotation element value type AEV_BYTE. */ + int AEV_BYTE = 'B'; - /** 'C' */ - char AEV_CHAR = 'C'; + /** The value of annotation element value type AEV_CHAR. */ + int AEV_CHAR = 'C'; - /** 'D' */ - char AEV_DOUBLE = 'D'; + /** The value of annotation element value type AEV_DOUBLE. */ + int AEV_DOUBLE = 'D'; - /** 'F' */ - char AEV_FLOAT = 'F'; + /** The value of annotation element value type AEV_FLOAT. */ + int AEV_FLOAT = 'F'; - /** 'I' */ - char AEV_INT = 'I'; + /** The value of annotation element value type AEV_INT. */ + int AEV_INT = 'I'; - /** 'J' */ - char AEV_LONG = 'J'; + /** The value of annotation element value type AEV_LONG. */ + int AEV_LONG = 'J'; - /** 'S' */ - char AEV_SHORT = 'S'; + /** The value of annotation element value type AEV_SHORT. */ + int AEV_SHORT = 'S'; - /** 'Z' */ - char AEV_BOOLEAN = 'Z'; + /** The value of annotation element value type AEV_BOOLEAN. */ + int AEV_BOOLEAN = 'Z'; - /** 's' */ - char AEV_STRING = 's'; + /** The value of annotation element value type AEV_STRING. */ + int AEV_STRING = 's'; - /** 'e' */ - char AEV_ENUM = 'e'; + /** The value of annotation element value type AEV_ENUM. */ + int AEV_ENUM = 'e'; - /** 'c' */ - char AEV_CLASS = 'c'; + /** The value of annotation element value type AEV_CLASS. */ + int AEV_CLASS = 'c'; - /** '@' */ - char AEV_ANNOTATION = '@'; + /** The value of annotation element value type AEV_ANNOTATION. */ + int AEV_ANNOTATION = '@'; - /** '[' */ - char AEV_ARRAY = '['; + /** The value of annotation element value type AEV_ARRAY. */ + int AEV_ARRAY = '['; //type annotations - /** 0x00 */ + /** The value of type annotation target type CLASS_TYPE_PARAMETER. */ int TAT_CLASS_TYPE_PARAMETER = 0x00; - /** 0x01 */ + /** The value of type annotation target type METHOD_TYPE_PARAMETER. */ int TAT_METHOD_TYPE_PARAMETER = 0x01; - /** 0x10 */ + /** The value of type annotation target type CLASS_EXTENDS. */ int TAT_CLASS_EXTENDS = 0x10; - /** 0x11 */ + /** The value of type annotation target type CLASS_TYPE_PARAMETER_BOUND. */ int TAT_CLASS_TYPE_PARAMETER_BOUND = 0x11; - /** 0x12 */ + /** The value of type annotation target type METHOD_TYPE_PARAMETER_BOUND. */ int TAT_METHOD_TYPE_PARAMETER_BOUND = 0x12; - /** 0x13 */ + /** The value of type annotation target type FIELD. */ int TAT_FIELD = 0x13; - /** 0x14 */ + /** The value of type annotation target type METHOD_RETURN. */ int TAT_METHOD_RETURN = 0x14; - /** 0x15 */ + /** The value of type annotation target type METHOD_RECEIVER. */ int TAT_METHOD_RECEIVER = 0x15; - /** 0x16 */ + /** The value of type annotation target type METHOD_FORMAL_PARAMETER. */ int TAT_METHOD_FORMAL_PARAMETER = 0x16; - /** 0x17 */ + /** The value of type annotation target type THROWS. */ int TAT_THROWS = 0x17; - /** 0x40 */ + /** The value of type annotation target type LOCAL_VARIABLE. */ int TAT_LOCAL_VARIABLE = 0x40; - /** 0x41 */ + /** The value of type annotation target type RESOURCE_VARIABLE. */ int TAT_RESOURCE_VARIABLE = 0x41; - /** 0x42 */ + /** The value of type annotation target type EXCEPTION_PARAMETER. */ int TAT_EXCEPTION_PARAMETER = 0x42; - /** 0x43 */ + /** The value of type annotation target type INSTANCEOF. */ int TAT_INSTANCEOF = 0x43; - /** 0x44 */ + /** The value of type annotation target type NEW. */ int TAT_NEW = 0x44; - /** 0x45 */ + /** The value of type annotation target type CONSTRUCTOR_REFERENCE. */ int TAT_CONSTRUCTOR_REFERENCE = 0x45; - /** 0x46 */ + /** The value of type annotation target type METHOD_REFERENCE. */ int TAT_METHOD_REFERENCE = 0x46; - /** 0x47 */ + /** The value of type annotation target type CAST. */ int TAT_CAST = 0x47; - /** 0x48 */ + /** The value of type annotation target type CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT. */ int TAT_CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT = 0x48; - /** 0x49 */ + /** The value of type annotation target type METHOD_INVOCATION_TYPE_ARGUMENT. */ int TAT_METHOD_INVOCATION_TYPE_ARGUMENT = 0x49; - /** 0x4A */ + /** The value of type annotation target type CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT. */ int TAT_CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT = 0x4A; - /** 0x4B */ + /** The value of type annotation target type METHOD_REFERENCE_TYPE_ARGUMENT. */ int TAT_METHOD_REFERENCE_TYPE_ARGUMENT = 0x4B; //stackmap verification types - /** 0 */ + /** The value of verification type TOP. */ int VT_TOP = 0; - /** 1 */ + /** The value of verification type INTEGER. */ int VT_INTEGER = 1; - /** 2 */ + /** The value of verification type FLOAT. */ int VT_FLOAT = 2; - /** 3 */ + /** The value of verification type DOUBLE. */ int VT_DOUBLE = 3; - /** 4 */ + /** The value of verification type LONG. */ int VT_LONG = 4; - /** 5 */ + /** The value of verification type NULL. */ int VT_NULL = 5; - /** 6 */ + /** The value of verification type UNINITIALIZED_THIS. */ int VT_UNINITIALIZED_THIS = 6; - /** 7 */ + /** The value of verification type OBJECT. */ int VT_OBJECT = 7; - /** 8 */ + /** The value of verification type UNINITIALIZED. */ int VT_UNINITIALIZED = 8; - /** ACC_PUBLIC */ + /** The value of default class access flags */ int DEFAULT_CLASS_FLAGS = ACC_PUBLIC; - /** 45 */ + /** The class major version of JAVA_1. */ int JAVA_1_VERSION = 45; - /** 46 */ + /** The class major version of JAVA_2. */ int JAVA_2_VERSION = 46; - /** 47 */ + /** The class major version of JAVA_3. */ int JAVA_3_VERSION = 47; - /** 48 */ + /** The class major version of JAVA_4. */ int JAVA_4_VERSION = 48; - /** 49 */ + /** The class major version of JAVA_5. */ int JAVA_5_VERSION = 49; - /** 50 */ + /** The class major version of JAVA_6. */ int JAVA_6_VERSION = 50; - /** 51 */ + /** The class major version of JAVA_7. */ int JAVA_7_VERSION = 51; - /** 52 */ + /** The class major version of JAVA_8. */ int JAVA_8_VERSION = 52; - /** 53 */ + /** The class major version of JAVA_9. */ int JAVA_9_VERSION = 53; - /** 54 */ + /** The class major version of JAVA_10. */ int JAVA_10_VERSION = 54; - /** 55 */ + /** The class major version of JAVA_11. */ int JAVA_11_VERSION = 55; - /** 56 */ + /** The class major version of JAVA_12. */ int JAVA_12_VERSION = 56; - /** 57 */ + /** The class major version of JAVA_13. */ int JAVA_13_VERSION = 57; - /** 58 */ + /** The class major version of JAVA_14. */ int JAVA_14_VERSION = 58; - /** 59 */ + /** The class major version of JAVA_15. */ int JAVA_15_VERSION = 59; - /** 60 */ + /** The class major version of JAVA_16. */ int JAVA_16_VERSION = 60; - /** 61 */ + /** The class major version of JAVA_17. */ int JAVA_17_VERSION = 61; - /** 62 */ + /** The class major version of JAVA_18. */ int JAVA_18_VERSION = 62; - /** 63 */ + /** The class major version of JAVA_19. */ int JAVA_19_VERSION = 63; - /** 64 */ + /** The class major version of JAVA_20. */ int JAVA_20_VERSION = 64; - /** 65 */ + /** The class major version of JAVA_21. */ int JAVA_21_VERSION = 65; - /** 66 */ + /** The class major version of JAVA_22. */ int JAVA_22_VERSION = 66; /** diff --git a/src/java.base/share/classes/jdk/internal/classfile/ClassfileBuilder.java b/src/java.base/share/classes/java/lang/classfile/ClassFileBuilder.java similarity index 78% rename from src/java.base/share/classes/jdk/internal/classfile/ClassfileBuilder.java rename to src/java.base/share/classes/java/lang/classfile/ClassFileBuilder.java index 965bfb293e739..9381c0510ef87 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/ClassfileBuilder.java +++ b/src/java.base/share/classes/java/lang/classfile/ClassFileBuilder.java @@ -22,31 +22,36 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; import java.lang.constant.ClassDesc; import java.util.function.Consumer; -import jdk.internal.classfile.constantpool.ConstantPool; -import jdk.internal.classfile.constantpool.ConstantPoolBuilder; +import java.lang.classfile.constantpool.ConstantPool; +import java.lang.classfile.constantpool.ConstantPoolBuilder; +import jdk.internal.javac.PreviewFeature; /** * A builder for a classfile or portion of a classfile. Builders are rarely * created directly; they are passed to handlers by methods such as - * {@link Classfile#build(ClassDesc, Consumer)} or to transforms. + * {@link ClassFile#build(ClassDesc, Consumer)} or to transforms. * Elements of the newly built entity can be specified - * abstractly (by passing a {@link ClassfileElement} to {@link #with(ClassfileElement)} + * abstractly (by passing a {@link ClassFileElement} to {@link #with(ClassFileElement)} * or concretely by calling the various {@code withXxx} methods. * * @param the element type * @param the builder type - * @see ClassfileTransform + * @see ClassFileTransform + * + * @sealedGraph + * @since 22 */ -public sealed interface ClassfileBuilder> +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) +public sealed interface ClassFileBuilder> extends Consumer permits ClassBuilder, FieldBuilder, MethodBuilder, CodeBuilder { /** - * Integrate the {@link ClassfileElement} into the entity being built. + * Integrate the {@link ClassFileElement} into the entity being built. * @param e the element */ @Override @@ -55,7 +60,7 @@ default void accept(E e) { } /** - * Integrate the {@link ClassfileElement} into the entity being built. + * Integrate the {@link ClassFileElement} into the entity being built. * @param e the element * @return this builder */ @@ -79,7 +84,7 @@ default boolean canWriteDirect(ConstantPool source) { * @param model the model to transform * @param transform the transform to apply */ - default void transform(CompoundElement model, ClassfileTransform transform) { + default void transform(CompoundElement model, ClassFileTransform transform) { @SuppressWarnings("unchecked") B builder = (B) this; var resolved = transform.resolve(builder); diff --git a/src/java.base/share/classes/jdk/internal/classfile/ClassfileElement.java b/src/java.base/share/classes/java/lang/classfile/ClassFileElement.java similarity index 89% rename from src/java.base/share/classes/jdk/internal/classfile/ClassfileElement.java rename to src/java.base/share/classes/java/lang/classfile/ClassFileElement.java index 7b100da4e422b..6452f52e04226 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/ClassfileElement.java +++ b/src/java.base/share/classes/java/lang/classfile/ClassFileElement.java @@ -22,7 +22,9 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; + +import jdk.internal.javac.PreviewFeature; /** * Immutable model for a portion of (or the entirety of) a classfile. Elements @@ -31,8 +33,12 @@ * themselves contain their own child elements will implement {@link * CompoundElement}. Elements specific to various locations in the classfile * will implement {@link ClassElement}, {@link MethodElement}, etc. + * + * @sealedGraph + * @since 22 */ -public sealed interface ClassfileElement +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) +public sealed interface ClassFileElement permits AttributedElement, CompoundElement, WritableElement, ClassElement, CodeElement, FieldElement, MethodElement { } diff --git a/src/java.base/share/classes/jdk/internal/classfile/ClassfileTransform.java b/src/java.base/share/classes/java/lang/classfile/ClassFileTransform.java similarity index 83% rename from src/java.base/share/classes/jdk/internal/classfile/ClassfileTransform.java rename to src/java.base/share/classes/java/lang/classfile/ClassFileTransform.java index 299e5153835f7..677478ec650a4 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/ClassfileTransform.java +++ b/src/java.base/share/classes/java/lang/classfile/ClassFileTransform.java @@ -22,33 +22,34 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; import java.util.function.Consumer; import java.util.function.Supplier; -import jdk.internal.classfile.attribute.RuntimeVisibleAnnotationsAttribute; +import java.lang.classfile.attribute.RuntimeVisibleAnnotationsAttribute; +import jdk.internal.javac.PreviewFeature; /** * A transformation on streams of elements. Transforms are used during * transformation of classfile entities; a transform is provided to a method like - * {@link Classfile#transform(ClassModel, ClassTransform)}, and the elements of the class, + * {@link ClassFile#transform(ClassModel, ClassTransform)}, and the elements of the class, * along with a builder, are presented to the transform. * *

    The subtypes of {@linkplain - * ClassfileTransform} (e.g., {@link ClassTransform}) are functional interfaces + * ClassFileTransform} (e.g., {@link ClassTransform}) are functional interfaces * that accept an element and a corresponding builder. Since any element can be - * reproduced on the builder via {@link ClassBuilder#with(ClassfileElement)}, a + * reproduced on the builder via {@link ClassBuilder#with(ClassFileElement)}, a * transform can easily leave elements in place, remove them, replace them, or * augment them with other elements. This enables localized transforms to be * represented concisely. * - *

    Transforms also have an {@link #atEnd(ClassfileBuilder)} method, for + *

    Transforms also have an {@link #atEnd(ClassFileBuilder)} method, for * which the default implementation does nothing, so that a transform can * perform additional building after the stream of elements is exhausted. * *

    Transforms can be chained together via the {@link - * #andThen(ClassfileTransform)} method, so that the output of one becomes the + * #andThen(ClassFileTransform)} method, so that the output of one becomes the * input to another. This allows smaller units of transformation to be captured * and reused. * @@ -56,7 +57,7 @@ * annotation on a class may watch for the {@link RuntimeVisibleAnnotationsAttribute} * element and transform it if found, but if it is not found, will generate a * {@linkplain RuntimeVisibleAnnotationsAttribute} element containing the - * injected annotation from the {@linkplain #atEnd(ClassfileBuilder)} handler. + * injected annotation from the {@linkplain #atEnd(ClassFileBuilder)} handler. * To do this, the transform must accumulate some state during the traversal so * that the end handler knows what to do. If such a transform is to be reused, * its state must be reset for each traversal; this will happen automatically if @@ -71,17 +72,21 @@ * @param the transform type * @param the element type * @param the builder type + * + * @sealedGraph + * @since 22 */ -public sealed interface ClassfileTransform< - C extends ClassfileTransform, - E extends ClassfileElement, - B extends ClassfileBuilder> +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) +public sealed interface ClassFileTransform< + C extends ClassFileTransform, + E extends ClassFileElement, + B extends ClassFileBuilder> permits ClassTransform, FieldTransform, MethodTransform, CodeTransform { /** * Transform an element by taking the appropriate actions on the builder. * Used when transforming a classfile entity (class, method, field, method * body.) If no transformation is desired, the element can be presented to - * {@link B#with(ClassfileElement)}. If the element is to be dropped, no + * {@link B#with(ClassFileElement)}. If the element is to be dropped, no * action is required. * * @param builder the builder for the new entity @@ -92,7 +97,7 @@ public sealed interface ClassfileTransform< /** * Take any final action during transformation of a classfile entity. Called * after all elements of the class are presented to {@link - * #accept(ClassfileBuilder, ClassfileElement)}. + * #accept(ClassFileBuilder, ClassFileElement)}. * * @param builder the builder for the new entity * @implSpec The default implementation does nothing. @@ -103,7 +108,7 @@ default void atEnd(B builder) { /** * Take any preliminary action during transformation of a classfile entity. * Called before any elements of the class are presented to {@link - * #accept(ClassfileBuilder, ClassfileElement)}. + * #accept(ClassFileBuilder, ClassFileElement)}. * * @param builder the builder for the new entity * @implSpec The default implementation does nothing. @@ -125,8 +130,11 @@ default void atStart(B builder) { * the implementation to perform transformation. * * @param the element type + * + * @since 22 */ - interface ResolvedTransform { + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) + interface ResolvedTransform { /** * {@return a {@link Consumer} to receive elements} */ @@ -151,7 +159,7 @@ interface ResolvedTransform { * *

    This method is a low-level method that should rarely be used by * user code; most of the time, user code should prefer - * {@link ClassfileBuilder#transform(CompoundElement, ClassfileTransform)}, + * {@link ClassFileBuilder#transform(CompoundElement, ClassFileTransform)}, * which resolves the transform and executes it on the current builder. * * @param builder the builder to bind to diff --git a/src/java.base/share/classes/jdk/internal/classfile/ClassfileVersion.java b/src/java.base/share/classes/java/lang/classfile/ClassFileVersion.java similarity index 75% rename from src/java.base/share/classes/jdk/internal/classfile/ClassfileVersion.java rename to src/java.base/share/classes/java/lang/classfile/ClassFileVersion.java index a3989e92b2686..b6ef3e57f6118 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/ClassfileVersion.java +++ b/src/java.base/share/classes/java/lang/classfile/ClassFileVersion.java @@ -22,18 +22,22 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; -import jdk.internal.classfile.impl.ClassfileVersionImpl; +import jdk.internal.classfile.impl.ClassFileVersionImpl; +import jdk.internal.javac.PreviewFeature; /** * Models the classfile version information for a class. Delivered as a {@link - * jdk.internal.classfile.ClassElement} when traversing the elements of a {@link + * java.lang.classfile.ClassElement} when traversing the elements of a {@link * ClassModel}. + * + * @since 22 */ -public sealed interface ClassfileVersion +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) +public sealed interface ClassFileVersion extends ClassElement - permits ClassfileVersionImpl { + permits ClassFileVersionImpl { /** * {@return the major classfile version} */ @@ -45,11 +49,11 @@ public sealed interface ClassfileVersion int minorVersion(); /** - * {@return a {@link ClassfileVersion} element} + * {@return a {@link ClassFileVersion} element} * @param majorVersion the major classfile version * @param minorVersion the minor classfile version */ - static ClassfileVersion of(int majorVersion, int minorVersion) { - return new ClassfileVersionImpl(majorVersion, minorVersion); + static ClassFileVersion of(int majorVersion, int minorVersion) { + return new ClassFileVersionImpl(majorVersion, minorVersion); } } diff --git a/src/java.base/share/classes/jdk/internal/classfile/ClassHierarchyResolver.java b/src/java.base/share/classes/java/lang/classfile/ClassHierarchyResolver.java similarity index 90% rename from src/java.base/share/classes/jdk/internal/classfile/ClassHierarchyResolver.java rename to src/java.base/share/classes/java/lang/classfile/ClassHierarchyResolver.java index f1c072a2f415b..589713c8e95c8 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/ClassHierarchyResolver.java +++ b/src/java.base/share/classes/java/lang/classfile/ClassHierarchyResolver.java @@ -22,7 +22,7 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; import java.io.InputStream; import java.lang.constant.ClassDesc; @@ -39,11 +39,15 @@ import jdk.internal.classfile.impl.Util; import static java.lang.constant.ConstantDescs.CD_Object; +import jdk.internal.javac.PreviewFeature; /** * Provides class hierarchy information for generating correct stack maps * during code building. + * + * @since 22 */ +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) @FunctionalInterface public interface ClassHierarchyResolver { @@ -65,7 +69,10 @@ static ClassHierarchyResolver defaultResolver() { /** * Information about a resolved class. + * + * @since 22 */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) sealed interface ClassHierarchyInfo permits ClassHierarchyImpl.ClassHierarchyInfoImpl { /** @@ -94,6 +101,9 @@ static ClassHierarchyInfo ofInterface() { * * @param other the other resolver * @return the chained resolver + * + * @implSpec The default implementation returns resolver implemented to ask + * other resolver in cases where this resolver returns {@code null}. */ default ClassHierarchyResolver orElse(ClassHierarchyResolver other) { return new ClassHierarchyResolver() { @@ -115,6 +125,12 @@ public ClassHierarchyInfo getClassInfo(ClassDesc classDesc) { * * @param cacheFactory the factory for the cache * @return the ClassHierarchyResolver with caching + * + * @implSpec The default implementation returns resolver holding an instance + * of the cache map provided by the {@code cacheFactory}. It asks + * the cache map always first and fills the cache map with all + * resolved and also unresolved class info. The cache map may refuse + * {@code null} keys and values. */ default ClassHierarchyResolver cached(Supplier> cacheFactory) { return new ClassHierarchyImpl.CachedClassHierarchyResolver(this, cacheFactory.get()); @@ -127,6 +143,9 @@ default ClassHierarchyResolver cached(Supplier> { diff --git a/src/java.base/share/classes/jdk/internal/classfile/ClassModel.java b/src/java.base/share/classes/java/lang/classfile/ClassModel.java similarity index 93% rename from src/java.base/share/classes/jdk/internal/classfile/ClassModel.java rename to src/java.base/share/classes/java/lang/classfile/ClassModel.java index 200f5e8cb781a..e0ce7e3386598 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/ClassModel.java +++ b/src/java.base/share/classes/java/lang/classfile/ClassModel.java @@ -23,22 +23,26 @@ * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; import java.util.List; import java.util.Optional; import java.util.function.Consumer; -import jdk.internal.classfile.constantpool.ClassEntry; -import jdk.internal.classfile.constantpool.ConstantPool; +import java.lang.classfile.constantpool.ClassEntry; +import java.lang.classfile.constantpool.ConstantPool; import jdk.internal.classfile.impl.ClassImpl; import jdk.internal.classfile.impl.verifier.VerifierImpl; +import jdk.internal.javac.PreviewFeature; /** * Models a classfile. The contents of the classfile can be traversed via * a streaming view (e.g., {@link #elements()}), or via random access (e.g., * {@link #flags()}), or by freely mixing the two. + * + * @since 22 */ +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public sealed interface ClassModel extends CompoundElement, AttributedElement permits ClassImpl { diff --git a/src/java.base/share/classes/jdk/internal/classfile/ClassReader.java b/src/java.base/share/classes/java/lang/classfile/ClassReader.java similarity index 93% rename from src/java.base/share/classes/jdk/internal/classfile/ClassReader.java rename to src/java.base/share/classes/java/lang/classfile/ClassReader.java index 7884714dfdeff..a8678715080fe 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/ClassReader.java +++ b/src/java.base/share/classes/java/lang/classfile/ClassReader.java @@ -22,21 +22,22 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package jdk.internal.classfile; - -import jdk.internal.classfile.constantpool.ClassEntry; -import jdk.internal.classfile.constantpool.ConstantPool; -import jdk.internal.classfile.constantpool.ConstantPoolException; -import jdk.internal.classfile.constantpool.MethodHandleEntry; -import jdk.internal.classfile.constantpool.ModuleEntry; -import jdk.internal.classfile.constantpool.NameAndTypeEntry; -import jdk.internal.classfile.constantpool.PackageEntry; -import jdk.internal.classfile.constantpool.PoolEntry; -import jdk.internal.classfile.constantpool.Utf8Entry; +package java.lang.classfile; + +import java.lang.classfile.constantpool.ClassEntry; +import java.lang.classfile.constantpool.ConstantPool; +import java.lang.classfile.constantpool.ConstantPoolException; +import java.lang.classfile.constantpool.MethodHandleEntry; +import java.lang.classfile.constantpool.ModuleEntry; +import java.lang.classfile.constantpool.NameAndTypeEntry; +import java.lang.classfile.constantpool.PackageEntry; +import java.lang.classfile.constantpool.PoolEntry; +import java.lang.classfile.constantpool.Utf8Entry; import jdk.internal.classfile.impl.ClassReaderImpl; import java.util.Optional; import java.util.function.Function; +import jdk.internal.javac.PreviewFeature; /** * Supports reading from a classfile. Methods are provided to read data of @@ -44,7 +45,10 @@ * the classfile, copying raw bytes, and reading constant pool entries. * Encapsulates additional reading context such as mappers for custom attributes * and processing options. + * + * @since 22 */ +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public sealed interface ClassReader extends ConstantPool permits ClassReaderImpl { @@ -52,7 +56,7 @@ public sealed interface ClassReader extends ConstantPool /** * {@return the table of custom attribute mappers} This is derived from - * the processing option {@link Classfile.AttributeMapperOption}. + * the processing option {@link ClassFile.AttributeMapperOption}. */ Function> customAttributes(); @@ -105,6 +109,7 @@ public sealed interface ClassReader extends ConstantPool /** * {@return the constant pool entry of a given type whose index is given * at the specified offset within the classfile} + * @param the entry type * @param offset the offset of the index within the classfile * @param cls the entry type * @throws ConstantPoolException if the index is out of range of the diff --git a/src/java.base/share/classes/jdk/internal/classfile/ClassSignature.java b/src/java.base/share/classes/java/lang/classfile/ClassSignature.java similarity index 93% rename from src/java.base/share/classes/jdk/internal/classfile/ClassSignature.java rename to src/java.base/share/classes/java/lang/classfile/ClassSignature.java index 8199d67ed096d..10fbdd2045fc5 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/ClassSignature.java +++ b/src/java.base/share/classes/java/lang/classfile/ClassSignature.java @@ -22,15 +22,19 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; import java.util.List; import jdk.internal.classfile.impl.SignaturesImpl; import static java.util.Objects.requireNonNull; +import jdk.internal.javac.PreviewFeature; /** * Models the generic signature of a class file, as defined by {@jvms 4.7.9}. + * + * @since 22 */ +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public sealed interface ClassSignature permits SignaturesImpl.ClassSignatureImpl { @@ -47,7 +51,7 @@ public sealed interface ClassSignature String signatureString(); /** - * @return class signature + * {@return a class signature} * @param superclassSignature the superclass * @param superinterfaceSignatures the interfaces */ @@ -57,7 +61,7 @@ public static ClassSignature of(Signature.RefTypeSig superclassSignature, } /** - * @return class signature + * {@return a class signature} * @param typeParameters the type parameters * @param superclassSignature the superclass * @param superinterfaceSignatures the interfaces diff --git a/src/java.base/share/classes/jdk/internal/classfile/ClassTransform.java b/src/java.base/share/classes/java/lang/classfile/ClassTransform.java similarity index 88% rename from src/java.base/share/classes/jdk/internal/classfile/ClassTransform.java rename to src/java.base/share/classes/java/lang/classfile/ClassTransform.java index 8d714ebed61c7..a2391b320f909 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/ClassTransform.java +++ b/src/java.base/share/classes/java/lang/classfile/ClassTransform.java @@ -22,23 +22,27 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; import java.util.function.Consumer; import java.util.function.Predicate; import java.util.function.Supplier; -import jdk.internal.classfile.attribute.CodeAttribute; +import java.lang.classfile.attribute.CodeAttribute; import jdk.internal.classfile.impl.TransformImpl; +import jdk.internal.javac.PreviewFeature; /** * A transformation on streams of {@link ClassElement}. * - * @see ClassfileTransform + * @see ClassFileTransform + * + * @since 22 */ +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) @FunctionalInterface public non-sealed interface ClassTransform - extends ClassfileTransform { + extends ClassFileTransform { /** * A class transform that sends all elements to the builder. @@ -156,11 +160,22 @@ static ClassTransform transformingFields(FieldTransform xform) { return new TransformImpl.ClassFieldTransform(xform, f -> true); } + /** + * @implSpec + * The default implementation returns this class transform chained with another + * class transform from the argument. Chaining of two transforms requires to + * involve a chained builder serving as a target builder for this transform + * and also as a source of elements for the downstream transform. + */ @Override default ClassTransform andThen(ClassTransform t) { return new TransformImpl.ChainedClassTransform(this, t); } + /** + * @implSpec The default implementation returns a resolved transform bound + * to the given class builder. + */ @Override default ResolvedTransform resolve(ClassBuilder builder) { return new TransformImpl.ResolvedTransformImpl<>(e -> accept(builder, e), diff --git a/src/java.base/share/classes/jdk/internal/classfile/CodeBuilder.java b/src/java.base/share/classes/java/lang/classfile/CodeBuilder.java similarity index 94% rename from src/java.base/share/classes/jdk/internal/classfile/CodeBuilder.java rename to src/java.base/share/classes/java/lang/classfile/CodeBuilder.java index 3379e673e739e..544d7322c1c1a 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/CodeBuilder.java +++ b/src/java.base/share/classes/java/lang/classfile/CodeBuilder.java @@ -23,7 +23,7 @@ * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; import java.lang.constant.ClassDesc; import java.lang.constant.ConstantDesc; @@ -36,16 +36,16 @@ import java.util.Optional; import java.util.function.Consumer; -import jdk.internal.classfile.constantpool.ClassEntry; -import jdk.internal.classfile.constantpool.FieldRefEntry; -import jdk.internal.classfile.constantpool.InterfaceMethodRefEntry; -import jdk.internal.classfile.constantpool.InvokeDynamicEntry; -import jdk.internal.classfile.constantpool.LoadableConstantEntry; -import jdk.internal.classfile.constantpool.MemberRefEntry; -import jdk.internal.classfile.constantpool.MethodRefEntry; -import jdk.internal.classfile.constantpool.MethodHandleEntry; -import jdk.internal.classfile.constantpool.NameAndTypeEntry; -import jdk.internal.classfile.constantpool.Utf8Entry; +import java.lang.classfile.constantpool.ClassEntry; +import java.lang.classfile.constantpool.FieldRefEntry; +import java.lang.classfile.constantpool.InterfaceMethodRefEntry; +import java.lang.classfile.constantpool.InvokeDynamicEntry; +import java.lang.classfile.constantpool.LoadableConstantEntry; +import java.lang.classfile.constantpool.MemberRefEntry; +import java.lang.classfile.constantpool.MethodRefEntry; +import java.lang.classfile.constantpool.MethodHandleEntry; +import java.lang.classfile.constantpool.NameAndTypeEntry; +import java.lang.classfile.constantpool.Utf8Entry; import jdk.internal.classfile.impl.BlockCodeBuilderImpl; import jdk.internal.classfile.impl.BytecodeHelpers; import jdk.internal.classfile.impl.CatchBuilderImpl; @@ -53,53 +53,57 @@ import jdk.internal.classfile.impl.LabelImpl; import jdk.internal.classfile.impl.NonterminalCodeBuilder; import jdk.internal.classfile.impl.TerminalCodeBuilder; -import jdk.internal.classfile.instruction.ArrayLoadInstruction; -import jdk.internal.classfile.instruction.ArrayStoreInstruction; -import jdk.internal.classfile.instruction.BranchInstruction; -import jdk.internal.classfile.instruction.CharacterRange; -import jdk.internal.classfile.instruction.ConstantInstruction; -import jdk.internal.classfile.instruction.ConvertInstruction; -import jdk.internal.classfile.instruction.ExceptionCatch; -import jdk.internal.classfile.instruction.FieldInstruction; -import jdk.internal.classfile.instruction.IncrementInstruction; -import jdk.internal.classfile.instruction.InvokeDynamicInstruction; -import jdk.internal.classfile.instruction.InvokeInstruction; -import jdk.internal.classfile.instruction.LineNumber; -import jdk.internal.classfile.instruction.LoadInstruction; -import jdk.internal.classfile.instruction.LocalVariable; -import jdk.internal.classfile.instruction.LocalVariableType; -import jdk.internal.classfile.instruction.LookupSwitchInstruction; -import jdk.internal.classfile.instruction.MonitorInstruction; -import jdk.internal.classfile.instruction.NewMultiArrayInstruction; -import jdk.internal.classfile.instruction.NewObjectInstruction; -import jdk.internal.classfile.instruction.NewPrimitiveArrayInstruction; -import jdk.internal.classfile.instruction.NewReferenceArrayInstruction; -import jdk.internal.classfile.instruction.NopInstruction; -import jdk.internal.classfile.instruction.OperatorInstruction; -import jdk.internal.classfile.instruction.ReturnInstruction; -import jdk.internal.classfile.instruction.StackInstruction; -import jdk.internal.classfile.instruction.StoreInstruction; -import jdk.internal.classfile.instruction.SwitchCase; -import jdk.internal.classfile.instruction.TableSwitchInstruction; -import jdk.internal.classfile.instruction.ThrowInstruction; -import jdk.internal.classfile.instruction.TypeCheckInstruction; +import java.lang.classfile.instruction.ArrayLoadInstruction; +import java.lang.classfile.instruction.ArrayStoreInstruction; +import java.lang.classfile.instruction.BranchInstruction; +import java.lang.classfile.instruction.CharacterRange; +import java.lang.classfile.instruction.ConstantInstruction; +import java.lang.classfile.instruction.ConvertInstruction; +import java.lang.classfile.instruction.ExceptionCatch; +import java.lang.classfile.instruction.FieldInstruction; +import java.lang.classfile.instruction.IncrementInstruction; +import java.lang.classfile.instruction.InvokeDynamicInstruction; +import java.lang.classfile.instruction.InvokeInstruction; +import java.lang.classfile.instruction.LineNumber; +import java.lang.classfile.instruction.LoadInstruction; +import java.lang.classfile.instruction.LocalVariable; +import java.lang.classfile.instruction.LocalVariableType; +import java.lang.classfile.instruction.LookupSwitchInstruction; +import java.lang.classfile.instruction.MonitorInstruction; +import java.lang.classfile.instruction.NewMultiArrayInstruction; +import java.lang.classfile.instruction.NewObjectInstruction; +import java.lang.classfile.instruction.NewPrimitiveArrayInstruction; +import java.lang.classfile.instruction.NewReferenceArrayInstruction; +import java.lang.classfile.instruction.NopInstruction; +import java.lang.classfile.instruction.OperatorInstruction; +import java.lang.classfile.instruction.ReturnInstruction; +import java.lang.classfile.instruction.StackInstruction; +import java.lang.classfile.instruction.StoreInstruction; +import java.lang.classfile.instruction.SwitchCase; +import java.lang.classfile.instruction.TableSwitchInstruction; +import java.lang.classfile.instruction.ThrowInstruction; +import java.lang.classfile.instruction.TypeCheckInstruction; import static java.util.Objects.requireNonNull; import static jdk.internal.classfile.impl.BytecodeHelpers.handleDescToHandleInfo; import jdk.internal.classfile.impl.TransformingCodeBuilder; +import jdk.internal.javac.PreviewFeature; /** * A builder for code attributes (method bodies). Builders are not created * directly; they are passed to handlers by methods such as {@link * MethodBuilder#withCode(Consumer)} or to code transforms. The elements of a * code can be specified abstractly, by passing a {@link CodeElement} to {@link - * #with(ClassfileElement)} or concretely by calling the various {@code withXxx} + * #with(ClassFileElement)} or concretely by calling the various {@code withXxx} * methods. * * @see CodeTransform + * + * @since 22 */ +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public sealed interface CodeBuilder - extends ClassfileBuilder + extends ClassFileBuilder permits CodeBuilder.BlockCodeBuilder, ChainedCodeBuilder, TerminalCodeBuilder, NonterminalCodeBuilder { /** @@ -174,7 +178,10 @@ default CodeBuilder transforming(CodeTransform transform, Consumer /** * A builder for blocks of code. + * + * @since 22 */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) sealed interface BlockCodeBuilder extends CodeBuilder permits BlockCodeBuilderImpl { /** @@ -315,7 +322,10 @@ default CodeBuilder ifThenElse(Opcode opcode, * A builder to add catch blocks. * * @see #trying + * + * @since 22 */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) sealed interface CatchBuilder permits CatchBuilderImpl { /** * Adds a catch block that catches an exception of the given type. @@ -328,7 +338,8 @@ sealed interface CatchBuilder permits CatchBuilderImpl { * @param catchHandler handler that receives a {@linkplain CodeBuilder} to * generate the body of the catch block. * @return this builder - * @throws IllegalArgumentException if an existing catch block catches an exception of the given type. + * @throws IllegalArgumentException if an existing catch block catches an exception of the given type + * or {@code exceptionType} represents a primitive type * @see #catchingMulti * @see #catchingAll */ @@ -582,6 +593,7 @@ default CodeBuilder newObjectInstruction(ClassEntry type) { * Generate an instruction to create a new object * @param type the object type * @return this builder + * @throws IllegalArgumentException if {@code type} represents a primitive type */ default CodeBuilder newObjectInstruction(ClassDesc type) { return newObjectInstruction(constantPool().classEntry(type)); @@ -611,6 +623,7 @@ default CodeBuilder newReferenceArrayInstruction(ClassEntry type) { * Generate an instruction to create a new array of reference * @param type the component type * @return this builder + * @throws IllegalArgumentException if {@code type} represents a primitive type */ default CodeBuilder newReferenceArrayInstruction(ClassDesc type) { return newReferenceArrayInstruction(constantPool().classEntry(type)); @@ -1005,6 +1018,7 @@ default CodeBuilder anewarray(ClassEntry classEntry) { * Generate an instruction to create a new array of reference * @param className the component type * @return this builder + * @throws IllegalArgumentException if {@code className} represents a primitive type */ default CodeBuilder anewarray(ClassDesc className) { return newReferenceArrayInstruction(constantPool().classEntry(className)); @@ -1097,6 +1111,7 @@ default CodeBuilder checkcast(ClassEntry type) { * Generate an instruction to check whether an object is of the given type * @param type the object type * @return this builder + * @throws IllegalArgumentException if {@code type} represents a primitive type */ default CodeBuilder checkcast(ClassDesc type) { return typeCheckInstruction(Opcode.CHECKCAST, type); @@ -1467,6 +1482,7 @@ default CodeBuilder getfield(FieldRefEntry ref) { * @param name the field name * @param type the field type * @return this builder + * @throws IllegalArgumentException if {@code owner} represents a primitive type */ default CodeBuilder getfield(ClassDesc owner, String name, ClassDesc type) { return fieldInstruction(Opcode.GETFIELD, owner, name, type); @@ -1487,6 +1503,7 @@ default CodeBuilder getstatic(FieldRefEntry ref) { * @param name the field name * @param type the field type * @return this builder + * @throws IllegalArgumentException if {@code owner} represents a primitive type */ default CodeBuilder getstatic(ClassDesc owner, String name, ClassDesc type) { return fieldInstruction(Opcode.GETSTATIC, owner, name, type); @@ -1655,7 +1672,7 @@ default CodeBuilder idiv() { } /** - * Generate an instruction to branch if int comparison succeeds + * Generate an instruction to branch if reference comparison succeeds * @param target the branch target * @return this builder */ @@ -1664,7 +1681,7 @@ default CodeBuilder if_acmpeq(Label target) { } /** - * Generate an instruction to branch if int comparison succeeds + * Generate an instruction to branch if reference comparison succeeds * @param target the branch target * @return this builder */ @@ -1846,6 +1863,7 @@ default CodeBuilder instanceof_(ClassEntry target) { * Generate an instruction to determine if an object is of the given type * @param target the target type * @return this builder + * @throws IllegalArgumentException if {@code target} represents a primitive type */ default CodeBuilder instanceof_(ClassDesc target) { return typeCheckInstruction(Opcode.INSTANCEOF, constantPool().classEntry(target)); @@ -1884,6 +1902,7 @@ default CodeBuilder invokeinterface(InterfaceMethodRefEntry ref) { * @param name the method name * @param type the method type * @return this builder + * @throws IllegalArgumentException if {@code owner} represents a primitive type */ default CodeBuilder invokeinterface(ClassDesc owner, String name, MethodTypeDesc type) { return invokeInstruction(Opcode.INVOKEINTERFACE, constantPool().interfaceMethodRefEntry(owner, name, type)); @@ -1916,6 +1935,7 @@ default CodeBuilder invokespecial(MethodRefEntry ref) { * @param name the method name * @param type the method type * @return this builder + * @throws IllegalArgumentException if {@code owner} represents a primitive type */ default CodeBuilder invokespecial(ClassDesc owner, String name, MethodTypeDesc type) { return invokeInstruction(Opcode.INVOKESPECIAL, owner, name, type, false); @@ -1929,6 +1949,7 @@ default CodeBuilder invokespecial(ClassDesc owner, String name, MethodTypeDesc t * @param type the method type * @param isInterface the interface method invocation indication * @return this builder + * @throws IllegalArgumentException if {@code owner} represents a primitive type */ default CodeBuilder invokespecial(ClassDesc owner, String name, MethodTypeDesc type, boolean isInterface) { return invokeInstruction(Opcode.INVOKESPECIAL, owner, name, type, isInterface); @@ -1958,6 +1979,7 @@ default CodeBuilder invokestatic(MethodRefEntry ref) { * @param name the method name * @param type the method type * @return this builder + * @throws IllegalArgumentException if {@code owner} represents a primitive type */ default CodeBuilder invokestatic(ClassDesc owner, String name, MethodTypeDesc type) { return invokeInstruction(Opcode.INVOKESTATIC, owner, name, type, false); @@ -1970,6 +1992,7 @@ default CodeBuilder invokestatic(ClassDesc owner, String name, MethodTypeDesc ty * @param type the method type * @param isInterface the interface method invocation indication * @return this builder + * @throws IllegalArgumentException if {@code owner} represents a primitive type */ default CodeBuilder invokestatic(ClassDesc owner, String name, MethodTypeDesc type, boolean isInterface) { return invokeInstruction(Opcode.INVOKESTATIC, owner, name, type, isInterface); @@ -1990,6 +2013,7 @@ default CodeBuilder invokevirtual(MethodRefEntry ref) { * @param name the method name * @param type the method type * @return this builder + * @throws IllegalArgumentException if {@code owner} represents a primitive type */ default CodeBuilder invokevirtual(ClassDesc owner, String name, MethodTypeDesc type) { return invokeInstruction(Opcode.INVOKEVIRTUAL, owner, name, type, false); @@ -2316,6 +2340,7 @@ default CodeBuilder multianewarray(ClassEntry array, int dims) { * @param array the array type * @param dims the number of dimensions * @return this builder + * @throws IllegalArgumentException if {@code array} represents a primitive type */ default CodeBuilder multianewarray(ClassDesc array, int dims) { return newMultidimensionalArrayInstruction(dims, constantPool().classEntry(array)); @@ -2334,6 +2359,7 @@ default CodeBuilder new_(ClassEntry clazz) { * Generate an instruction to create a new object * @param clazz the new class type * @return this builder + * @throws IllegalArgumentException if {@code clazz} represents a primitive type */ default CodeBuilder new_(ClassDesc clazz) { return newObjectInstruction(constantPool().classEntry(clazz)); @@ -2379,6 +2405,7 @@ default CodeBuilder putfield(FieldRefEntry ref) { * @param name the field name * @param type the field type * @return this builder + * @throws IllegalArgumentException if {@code owner} represents a primitive type */ default CodeBuilder putfield(ClassDesc owner, String name, ClassDesc type) { return fieldInstruction(Opcode.PUTFIELD, owner, name, type); @@ -2399,6 +2426,7 @@ default CodeBuilder putstatic(FieldRefEntry ref) { * @param name the field name * @param type the field type * @return this builder + * @throws IllegalArgumentException if {@code owner} represents a primitive type */ default CodeBuilder putstatic(ClassDesc owner, String name, ClassDesc type) { return fieldInstruction(Opcode.PUTSTATIC, owner, name, type); diff --git a/src/java.base/share/classes/jdk/internal/classfile/CodeElement.java b/src/java.base/share/classes/java/lang/classfile/CodeElement.java similarity index 74% rename from src/java.base/share/classes/jdk/internal/classfile/CodeElement.java rename to src/java.base/share/classes/java/lang/classfile/CodeElement.java index 8578e19fcac97..cd4fafdd5bb9c 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/CodeElement.java +++ b/src/java.base/share/classes/java/lang/classfile/CodeElement.java @@ -22,21 +22,26 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; -import jdk.internal.classfile.attribute.RuntimeInvisibleTypeAnnotationsAttribute; -import jdk.internal.classfile.attribute.RuntimeVisibleTypeAnnotationsAttribute; -import jdk.internal.classfile.attribute.StackMapTableAttribute; +import java.lang.classfile.attribute.RuntimeInvisibleTypeAnnotationsAttribute; +import java.lang.classfile.attribute.RuntimeVisibleTypeAnnotationsAttribute; +import java.lang.classfile.attribute.StackMapTableAttribute; +import jdk.internal.javac.PreviewFeature; /** - * A {@link ClassfileElement} that can appear when traversing the elements - * of a {@link CodeModel} or be presented to a {@link CodeBuilder}. Code elements + * A marker interface for elements that can appear when traversing + * a {@link CodeModel} or be presented to a {@link CodeBuilder}. Code elements * are either an {@link Instruction}, which models an instruction in the body * of a method, or a {@link PseudoInstruction}, which models metadata from * the code attribute, such as line number metadata, local variable metadata, * exception metadata, label target metadata, etc. + * + * @sealedGraph + * @since 22 */ -public sealed interface CodeElement extends ClassfileElement +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) +public sealed interface CodeElement extends ClassFileElement permits Instruction, PseudoInstruction, CustomAttribute, RuntimeVisibleTypeAnnotationsAttribute, RuntimeInvisibleTypeAnnotationsAttribute, StackMapTableAttribute { diff --git a/src/java.base/share/classes/jdk/internal/classfile/CodeModel.java b/src/java.base/share/classes/java/lang/classfile/CodeModel.java similarity index 89% rename from src/java.base/share/classes/jdk/internal/classfile/CodeModel.java rename to src/java.base/share/classes/java/lang/classfile/CodeModel.java index 8f52f9196a121..b48802d02acc4 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/CodeModel.java +++ b/src/java.base/share/classes/java/lang/classfile/CodeModel.java @@ -23,21 +23,25 @@ * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; import java.util.List; import java.util.Optional; -import jdk.internal.classfile.attribute.CodeAttribute; +import java.lang.classfile.attribute.CodeAttribute; import jdk.internal.classfile.impl.BufferedCodeBuilder; import jdk.internal.classfile.impl.CodeImpl; -import jdk.internal.classfile.instruction.ExceptionCatch; +import java.lang.classfile.instruction.ExceptionCatch; +import jdk.internal.javac.PreviewFeature; /** * Models the body of a method (the {@code Code} attribute). The instructions * of the method body are accessed via a streaming view (e.g., {@link * #elements()}). + * + * @since 22 */ +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public sealed interface CodeModel extends CompoundElement, AttributedElement, MethodElement permits CodeAttribute, BufferedCodeBuilder.Model, CodeImpl { diff --git a/src/java.base/share/classes/jdk/internal/classfile/CodeTransform.java b/src/java.base/share/classes/java/lang/classfile/CodeTransform.java similarity index 82% rename from src/java.base/share/classes/jdk/internal/classfile/CodeTransform.java rename to src/java.base/share/classes/java/lang/classfile/CodeTransform.java index 3aa41baea6c02..a0996a9cb3403 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/CodeTransform.java +++ b/src/java.base/share/classes/java/lang/classfile/CodeTransform.java @@ -22,21 +22,25 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; import java.util.function.Consumer; import java.util.function.Supplier; import jdk.internal.classfile.impl.TransformImpl; +import jdk.internal.javac.PreviewFeature; /** * A transformation on streams of {@link CodeElement}. * - * @see ClassfileTransform + * @see ClassFileTransform + * + * @since 22 */ +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) @FunctionalInterface public non-sealed interface CodeTransform - extends ClassfileTransform { + extends ClassFileTransform { /** * A code transform that sends all elements to the builder. @@ -81,11 +85,22 @@ public void atEnd(CodeBuilder builder) { }; } + /** + * @implSpec + * The default implementation returns this code transform chained with another + * code transform from the argument. Chaining of two transforms requires to + * involve a chained builder serving as a target builder for this transform + * and also as a source of elements for the downstream transform. + */ @Override default CodeTransform andThen(CodeTransform t) { return new TransformImpl.ChainedCodeTransform(this, t); } + /** + * @implSpec The default implementation returns a resolved transform bound + * to the given code builder. + */ @Override default ResolvedTransform resolve(CodeBuilder builder) { return new TransformImpl.ResolvedTransformImpl<>(e -> accept(builder, e), diff --git a/src/java.base/share/classes/jdk/internal/classfile/CompoundElement.java b/src/java.base/share/classes/java/lang/classfile/CompoundElement.java similarity index 91% rename from src/java.base/share/classes/jdk/internal/classfile/CompoundElement.java rename to src/java.base/share/classes/java/lang/classfile/CompoundElement.java index 40f85aea705a2..42f0fabadc6bb 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/CompoundElement.java +++ b/src/java.base/share/classes/java/lang/classfile/CompoundElement.java @@ -22,7 +22,7 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; import java.util.ArrayList; import java.util.Iterator; @@ -32,18 +32,23 @@ import java.util.function.Consumer; import java.util.stream.Stream; import java.util.stream.StreamSupport; +import jdk.internal.javac.PreviewFeature; /** - * A {@link ClassfileElement} that has complex structure defined in terms of + * A {@link ClassFileElement} that has complex structure defined in terms of * other classfile elements, such as a method, field, method body, or entire * class. When encountering a {@linkplain CompoundElement}, clients have the * option to treat the element as a single entity (e.g., an entire method) * or to traverse the contents of that element with the methods in this class * (e.g., {@link #elements()}, {@link #forEachElement(Consumer)}, etc.) * @param the element type + * + * @sealedGraph + * @since 22 */ -public sealed interface CompoundElement - extends ClassfileElement, Iterable +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) +public sealed interface CompoundElement + extends ClassFileElement, Iterable permits ClassModel, CodeModel, FieldModel, MethodModel, jdk.internal.classfile.impl.AbstractUnboundModel { /** * Invoke the provided handler with each element contained in this diff --git a/src/java.base/share/classes/jdk/internal/classfile/CustomAttribute.java b/src/java.base/share/classes/java/lang/classfile/CustomAttribute.java similarity index 69% rename from src/java.base/share/classes/jdk/internal/classfile/CustomAttribute.java rename to src/java.base/share/classes/java/lang/classfile/CustomAttribute.java index cd4d430403abf..31544a0ba92bf 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/CustomAttribute.java +++ b/src/java.base/share/classes/java/lang/classfile/CustomAttribute.java @@ -22,9 +22,9 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; -import jdk.internal.classfile.impl.UnboundAttribute; +import jdk.internal.javac.PreviewFeature; /** * Models a non-standard attribute of a classfile. Clients should extend @@ -32,17 +32,41 @@ * and provide an {@link AttributeMapper} to mediate between the classfile * format and the {@linkplain CustomAttribute} representation. * @param the custom attribute type + * + * @since 22 */ -@SuppressWarnings("exports") +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public abstract non-sealed class CustomAttribute> - extends UnboundAttribute.CustomAttribute - implements CodeElement, ClassElement, MethodElement, FieldElement { + implements Attribute, CodeElement, ClassElement, MethodElement, FieldElement { + + private final AttributeMapper mapper; /** * Construct a {@linkplain CustomAttribute}. * @param mapper the attribute mapper */ protected CustomAttribute(AttributeMapper mapper) { - super(mapper); + this.mapper = mapper; + } + + @Override + public final AttributeMapper attributeMapper() { + return mapper; + } + + @Override + public final String attributeName() { + return mapper.name(); + } + + @Override + @SuppressWarnings("unchecked") + public final void writeTo(BufWriter buf) { + mapper.writeAttribute(buf, (T) this); + } + + @Override + public String toString() { + return String.format("CustomAttribute[name=%s]", mapper.name()); } } diff --git a/src/java.base/share/classes/jdk/internal/classfile/FieldBuilder.java b/src/java.base/share/classes/java/lang/classfile/FieldBuilder.java similarity index 90% rename from src/java.base/share/classes/jdk/internal/classfile/FieldBuilder.java rename to src/java.base/share/classes/java/lang/classfile/FieldBuilder.java index 610a8aae76fe2..18a598398ec9a 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/FieldBuilder.java +++ b/src/java.base/share/classes/java/lang/classfile/FieldBuilder.java @@ -23,27 +23,31 @@ * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; -import jdk.internal.classfile.constantpool.Utf8Entry; +import java.lang.classfile.constantpool.Utf8Entry; import jdk.internal.classfile.impl.ChainedFieldBuilder; import jdk.internal.classfile.impl.TerminalFieldBuilder; import java.lang.reflect.AccessFlag; import java.util.Optional; import java.util.function.Consumer; +import jdk.internal.javac.PreviewFeature; /** * A builder for fields. Builders are not created directly; they are passed * to handlers by methods such as {@link ClassBuilder#withField(Utf8Entry, Utf8Entry, Consumer)} * or to field transforms. The elements of a field can be specified - * abstractly (by passing a {@link FieldElement} to {@link #with(ClassfileElement)} + * abstractly (by passing a {@link FieldElement} to {@link #with(ClassFileElement)} * or concretely by calling the various {@code withXxx} methods. * * @see FieldTransform + * + * @since 22 */ +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public sealed interface FieldBuilder - extends ClassfileBuilder + extends ClassFileBuilder permits TerminalFieldBuilder, ChainedFieldBuilder { /** diff --git a/src/java.base/share/classes/jdk/internal/classfile/FieldElement.java b/src/java.base/share/classes/java/lang/classfile/FieldElement.java similarity index 62% rename from src/java.base/share/classes/jdk/internal/classfile/FieldElement.java rename to src/java.base/share/classes/java/lang/classfile/FieldElement.java index 6a25045482cce..c41c9224bd39b 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/FieldElement.java +++ b/src/java.base/share/classes/java/lang/classfile/FieldElement.java @@ -22,23 +22,28 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; -import jdk.internal.classfile.attribute.ConstantValueAttribute; -import jdk.internal.classfile.attribute.DeprecatedAttribute; -import jdk.internal.classfile.attribute.RuntimeInvisibleAnnotationsAttribute; -import jdk.internal.classfile.attribute.RuntimeInvisibleTypeAnnotationsAttribute; -import jdk.internal.classfile.attribute.RuntimeVisibleAnnotationsAttribute; -import jdk.internal.classfile.attribute.RuntimeVisibleTypeAnnotationsAttribute; -import jdk.internal.classfile.attribute.SignatureAttribute; -import jdk.internal.classfile.attribute.SyntheticAttribute; -import jdk.internal.classfile.attribute.UnknownAttribute; +import java.lang.classfile.attribute.ConstantValueAttribute; +import java.lang.classfile.attribute.DeprecatedAttribute; +import java.lang.classfile.attribute.RuntimeInvisibleAnnotationsAttribute; +import java.lang.classfile.attribute.RuntimeInvisibleTypeAnnotationsAttribute; +import java.lang.classfile.attribute.RuntimeVisibleAnnotationsAttribute; +import java.lang.classfile.attribute.RuntimeVisibleTypeAnnotationsAttribute; +import java.lang.classfile.attribute.SignatureAttribute; +import java.lang.classfile.attribute.SyntheticAttribute; +import java.lang.classfile.attribute.UnknownAttribute; +import jdk.internal.javac.PreviewFeature; /** - * A {@link ClassfileElement} that can appear when traversing the elements - * of a {@link FieldModel} or be presented to a {@link FieldBuilder}. + * A marker interface for elements that can appear when traversing + * a {@link FieldModel} or be presented to a {@link FieldBuilder}. + * + * @sealedGraph + * @since 22 */ -public sealed interface FieldElement extends ClassfileElement +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) +public sealed interface FieldElement extends ClassFileElement permits AccessFlags, CustomAttribute, ConstantValueAttribute, DeprecatedAttribute, RuntimeInvisibleAnnotationsAttribute, RuntimeInvisibleTypeAnnotationsAttribute, diff --git a/src/java.base/share/classes/jdk/internal/classfile/FieldModel.java b/src/java.base/share/classes/java/lang/classfile/FieldModel.java similarity index 91% rename from src/java.base/share/classes/jdk/internal/classfile/FieldModel.java rename to src/java.base/share/classes/java/lang/classfile/FieldModel.java index c12098cfd8226..cb2e167b9cfac 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/FieldModel.java +++ b/src/java.base/share/classes/java/lang/classfile/FieldModel.java @@ -23,20 +23,24 @@ * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; import java.lang.constant.ClassDesc; import java.util.Optional; -import jdk.internal.classfile.constantpool.Utf8Entry; +import java.lang.classfile.constantpool.Utf8Entry; import jdk.internal.classfile.impl.BufferedFieldBuilder; import jdk.internal.classfile.impl.FieldImpl; +import jdk.internal.javac.PreviewFeature; /** * Models a field. The contents of the field can be traversed via * a streaming view (e.g., {@link #elements()}), or via random access (e.g., * {@link #flags()}), or by freely mixing the two. + * + * @since 22 */ +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public sealed interface FieldModel extends WritableElement, CompoundElement, AttributedElement, ClassElement permits BufferedFieldBuilder.Model, FieldImpl { diff --git a/src/java.base/share/classes/jdk/internal/classfile/FieldTransform.java b/src/java.base/share/classes/java/lang/classfile/FieldTransform.java similarity index 84% rename from src/java.base/share/classes/jdk/internal/classfile/FieldTransform.java rename to src/java.base/share/classes/java/lang/classfile/FieldTransform.java index 05ffa167a0821..1a27a1d6ee6fb 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/FieldTransform.java +++ b/src/java.base/share/classes/java/lang/classfile/FieldTransform.java @@ -22,22 +22,26 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; import java.util.function.Consumer; import java.util.function.Predicate; import java.util.function.Supplier; import jdk.internal.classfile.impl.TransformImpl; +import jdk.internal.javac.PreviewFeature; /** * A transformation on streams of {@link FieldElement}. * - * @see ClassfileTransform + * @see ClassFileTransform + * + * @since 22 */ +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) @FunctionalInterface public non-sealed interface FieldTransform - extends ClassfileTransform { + extends ClassFileTransform { /** * A field transform that sends all elements to the builder. @@ -96,11 +100,22 @@ static FieldTransform dropping(Predicate filter) { }; } + /** + * @implSpec + * The default implementation returns this field transform chained with another + * field transform from the argument. Chaining of two transforms requires to + * involve a chained builder serving as a target builder for this transform + * and also as a source of elements for the downstream transform. + */ @Override default FieldTransform andThen(FieldTransform t) { return new TransformImpl.ChainedFieldTransform(this, t); } + /** + * @implSpec The default implementation returns a resolved transform bound + * to the given field builder. + */ @Override default ResolvedTransform resolve(FieldBuilder builder) { return new TransformImpl.ResolvedTransformImpl<>(e -> accept(builder, e), diff --git a/src/java.base/share/classes/jdk/internal/classfile/Instruction.java b/src/java.base/share/classes/java/lang/classfile/Instruction.java similarity index 57% rename from src/java.base/share/classes/jdk/internal/classfile/Instruction.java rename to src/java.base/share/classes/java/lang/classfile/Instruction.java index 9a1a81d548ee3..08255d8a5b106 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/Instruction.java +++ b/src/java.base/share/classes/java/lang/classfile/Instruction.java @@ -23,38 +23,42 @@ * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; import jdk.internal.classfile.impl.AbstractInstruction; -import jdk.internal.classfile.instruction.ArrayLoadInstruction; -import jdk.internal.classfile.instruction.ArrayStoreInstruction; -import jdk.internal.classfile.instruction.BranchInstruction; -import jdk.internal.classfile.instruction.ConstantInstruction; -import jdk.internal.classfile.instruction.ConvertInstruction; -import jdk.internal.classfile.instruction.DiscontinuedInstruction; -import jdk.internal.classfile.instruction.FieldInstruction; -import jdk.internal.classfile.instruction.IncrementInstruction; -import jdk.internal.classfile.instruction.InvokeDynamicInstruction; -import jdk.internal.classfile.instruction.InvokeInstruction; -import jdk.internal.classfile.instruction.LoadInstruction; -import jdk.internal.classfile.instruction.LookupSwitchInstruction; -import jdk.internal.classfile.instruction.MonitorInstruction; -import jdk.internal.classfile.instruction.NewMultiArrayInstruction; -import jdk.internal.classfile.instruction.NewObjectInstruction; -import jdk.internal.classfile.instruction.NewPrimitiveArrayInstruction; -import jdk.internal.classfile.instruction.NewReferenceArrayInstruction; -import jdk.internal.classfile.instruction.NopInstruction; -import jdk.internal.classfile.instruction.OperatorInstruction; -import jdk.internal.classfile.instruction.ReturnInstruction; -import jdk.internal.classfile.instruction.StackInstruction; -import jdk.internal.classfile.instruction.StoreInstruction; -import jdk.internal.classfile.instruction.TableSwitchInstruction; -import jdk.internal.classfile.instruction.ThrowInstruction; -import jdk.internal.classfile.instruction.TypeCheckInstruction; +import java.lang.classfile.instruction.ArrayLoadInstruction; +import java.lang.classfile.instruction.ArrayStoreInstruction; +import java.lang.classfile.instruction.BranchInstruction; +import java.lang.classfile.instruction.ConstantInstruction; +import java.lang.classfile.instruction.ConvertInstruction; +import java.lang.classfile.instruction.DiscontinuedInstruction; +import java.lang.classfile.instruction.FieldInstruction; +import java.lang.classfile.instruction.IncrementInstruction; +import java.lang.classfile.instruction.InvokeDynamicInstruction; +import java.lang.classfile.instruction.InvokeInstruction; +import java.lang.classfile.instruction.LoadInstruction; +import java.lang.classfile.instruction.LookupSwitchInstruction; +import java.lang.classfile.instruction.MonitorInstruction; +import java.lang.classfile.instruction.NewMultiArrayInstruction; +import java.lang.classfile.instruction.NewObjectInstruction; +import java.lang.classfile.instruction.NewPrimitiveArrayInstruction; +import java.lang.classfile.instruction.NewReferenceArrayInstruction; +import java.lang.classfile.instruction.NopInstruction; +import java.lang.classfile.instruction.OperatorInstruction; +import java.lang.classfile.instruction.ReturnInstruction; +import java.lang.classfile.instruction.StackInstruction; +import java.lang.classfile.instruction.StoreInstruction; +import java.lang.classfile.instruction.TableSwitchInstruction; +import java.lang.classfile.instruction.ThrowInstruction; +import java.lang.classfile.instruction.TypeCheckInstruction; +import jdk.internal.javac.PreviewFeature; /** * Models an executable instruction in a method body. + * + * @since 22 */ +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public sealed interface Instruction extends CodeElement permits ArrayLoadInstruction, ArrayStoreInstruction, BranchInstruction, ConstantInstruction, ConvertInstruction, DiscontinuedInstruction, diff --git a/src/java.base/share/classes/jdk/internal/classfile/Interfaces.java b/src/java.base/share/classes/java/lang/classfile/Interfaces.java similarity index 90% rename from src/java.base/share/classes/jdk/internal/classfile/Interfaces.java rename to src/java.base/share/classes/java/lang/classfile/Interfaces.java index f6e6fa7ed558c..9092334bfb483 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/Interfaces.java +++ b/src/java.base/share/classes/java/lang/classfile/Interfaces.java @@ -22,20 +22,24 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; import java.lang.constant.ClassDesc; import java.util.Arrays; import java.util.List; -import jdk.internal.classfile.constantpool.ClassEntry; +import java.lang.classfile.constantpool.ClassEntry; import jdk.internal.classfile.impl.InterfacesImpl; import jdk.internal.classfile.impl.Util; +import jdk.internal.javac.PreviewFeature; /** * Models the interfaces of a class. Delivered as a {@link - * jdk.internal.classfile.ClassElement} when traversing a {@link ClassModel}. + * java.lang.classfile.ClassElement} when traversing a {@link ClassModel}. + * + * @since 22 */ +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public sealed interface Interfaces extends ClassElement permits InterfacesImpl { diff --git a/src/java.base/share/classes/jdk/internal/classfile/Label.java b/src/java.base/share/classes/java/lang/classfile/Label.java similarity index 92% rename from src/java.base/share/classes/jdk/internal/classfile/Label.java rename to src/java.base/share/classes/java/lang/classfile/Label.java index 0ef6ea9248caf..5069b9359357c 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/Label.java +++ b/src/java.base/share/classes/java/lang/classfile/Label.java @@ -22,9 +22,10 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; import jdk.internal.classfile.impl.LabelImpl; +import jdk.internal.javac.PreviewFeature; /** * A marker for a position within the instructions of a method body. The @@ -37,8 +38,11 @@ * traversing the elements of a {@linkplain CodeModel}, {@linkplain Label} * markers will be delivered at the position to which they correspond. A label * can be bound to the current position within a {@linkplain CodeBuilder} via - * {@link CodeBuilder#labelBinding(Label)} or {@link CodeBuilder#with(ClassfileElement)}. + * {@link CodeBuilder#labelBinding(Label)} or {@link CodeBuilder#with(ClassFileElement)}. + * + * @since 22 */ +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public sealed interface Label permits LabelImpl { } diff --git a/src/java.base/share/classes/jdk/internal/classfile/MethodBuilder.java b/src/java.base/share/classes/java/lang/classfile/MethodBuilder.java similarity index 92% rename from src/java.base/share/classes/jdk/internal/classfile/MethodBuilder.java rename to src/java.base/share/classes/java/lang/classfile/MethodBuilder.java index 6b57d0599d1ae..ece292c361b21 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/MethodBuilder.java +++ b/src/java.base/share/classes/java/lang/classfile/MethodBuilder.java @@ -23,27 +23,31 @@ * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; import java.util.Optional; import java.util.function.Consumer; -import jdk.internal.classfile.constantpool.Utf8Entry; +import java.lang.classfile.constantpool.Utf8Entry; import jdk.internal.classfile.impl.ChainedMethodBuilder; import jdk.internal.classfile.impl.TerminalMethodBuilder; import java.lang.reflect.AccessFlag; +import jdk.internal.javac.PreviewFeature; /** * A builder for methods. Builders are not created directly; they are passed * to handlers by methods such as {@link ClassBuilder#withMethod(Utf8Entry, Utf8Entry, int, Consumer)} * or to method transforms. The elements of a method can be specified - * abstractly (by passing a {@link MethodElement} to {@link #with(ClassfileElement)} + * abstractly (by passing a {@link MethodElement} to {@link #with(ClassFileElement)} * or concretely by calling the various {@code withXxx} methods. * * @see MethodTransform + * + * @since 22 */ +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public sealed interface MethodBuilder - extends ClassfileBuilder + extends ClassFileBuilder permits ChainedMethodBuilder, TerminalMethodBuilder { /** diff --git a/src/java.base/share/classes/jdk/internal/classfile/MethodElement.java b/src/java.base/share/classes/java/lang/classfile/MethodElement.java similarity index 60% rename from src/java.base/share/classes/jdk/internal/classfile/MethodElement.java rename to src/java.base/share/classes/java/lang/classfile/MethodElement.java index 28334b57e8fc1..a744952de7a99 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/MethodElement.java +++ b/src/java.base/share/classes/java/lang/classfile/MethodElement.java @@ -22,28 +22,33 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; -import jdk.internal.classfile.attribute.AnnotationDefaultAttribute; -import jdk.internal.classfile.attribute.DeprecatedAttribute; -import jdk.internal.classfile.attribute.ExceptionsAttribute; -import jdk.internal.classfile.attribute.MethodParametersAttribute; -import jdk.internal.classfile.attribute.RuntimeInvisibleAnnotationsAttribute; -import jdk.internal.classfile.attribute.RuntimeInvisibleParameterAnnotationsAttribute; -import jdk.internal.classfile.attribute.RuntimeInvisibleTypeAnnotationsAttribute; -import jdk.internal.classfile.attribute.RuntimeVisibleAnnotationsAttribute; -import jdk.internal.classfile.attribute.RuntimeVisibleParameterAnnotationsAttribute; -import jdk.internal.classfile.attribute.RuntimeVisibleTypeAnnotationsAttribute; -import jdk.internal.classfile.attribute.SignatureAttribute; -import jdk.internal.classfile.attribute.SyntheticAttribute; -import jdk.internal.classfile.attribute.UnknownAttribute; +import java.lang.classfile.attribute.AnnotationDefaultAttribute; +import java.lang.classfile.attribute.DeprecatedAttribute; +import java.lang.classfile.attribute.ExceptionsAttribute; +import java.lang.classfile.attribute.MethodParametersAttribute; +import java.lang.classfile.attribute.RuntimeInvisibleAnnotationsAttribute; +import java.lang.classfile.attribute.RuntimeInvisibleParameterAnnotationsAttribute; +import java.lang.classfile.attribute.RuntimeInvisibleTypeAnnotationsAttribute; +import java.lang.classfile.attribute.RuntimeVisibleAnnotationsAttribute; +import java.lang.classfile.attribute.RuntimeVisibleParameterAnnotationsAttribute; +import java.lang.classfile.attribute.RuntimeVisibleTypeAnnotationsAttribute; +import java.lang.classfile.attribute.SignatureAttribute; +import java.lang.classfile.attribute.SyntheticAttribute; +import java.lang.classfile.attribute.UnknownAttribute; +import jdk.internal.javac.PreviewFeature; /** - * A {@link ClassfileElement} that can appear when traversing the elements - * of a {@link MethodModel} or be presented to a {@link MethodBuilder}. + * A marker interface for elements that can appear when traversing + * a {@link MethodModel} or be presented to a {@link MethodBuilder}. + * + * @sealedGraph + * @since 22 */ +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public sealed interface MethodElement - extends ClassfileElement + extends ClassFileElement permits AccessFlags, CodeModel, CustomAttribute, AnnotationDefaultAttribute, DeprecatedAttribute, ExceptionsAttribute, MethodParametersAttribute, diff --git a/src/java.base/share/classes/jdk/internal/classfile/MethodModel.java b/src/java.base/share/classes/java/lang/classfile/MethodModel.java similarity index 92% rename from src/java.base/share/classes/jdk/internal/classfile/MethodModel.java rename to src/java.base/share/classes/java/lang/classfile/MethodModel.java index 84d0aeb69c86d..49cbb6ac7fdc8 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/MethodModel.java +++ b/src/java.base/share/classes/java/lang/classfile/MethodModel.java @@ -23,20 +23,24 @@ * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; import java.lang.constant.MethodTypeDesc; import java.util.Optional; -import jdk.internal.classfile.constantpool.Utf8Entry; +import java.lang.classfile.constantpool.Utf8Entry; import jdk.internal.classfile.impl.BufferedMethodBuilder; import jdk.internal.classfile.impl.MethodImpl; +import jdk.internal.javac.PreviewFeature; /** * Models a method. The contents of the method can be traversed via * a streaming view (e.g., {@link #elements()}), or via random access (e.g., * {@link #flags()}), or by freely mixing the two. + * + * @since 22 */ +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public sealed interface MethodModel extends WritableElement, CompoundElement, AttributedElement, ClassElement permits BufferedMethodBuilder.Model, MethodImpl { diff --git a/src/java.base/share/classes/jdk/internal/classfile/MethodSignature.java b/src/java.base/share/classes/java/lang/classfile/MethodSignature.java similarity index 93% rename from src/java.base/share/classes/jdk/internal/classfile/MethodSignature.java rename to src/java.base/share/classes/java/lang/classfile/MethodSignature.java index e08b0bd392b57..4c331ec51564c 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/MethodSignature.java +++ b/src/java.base/share/classes/java/lang/classfile/MethodSignature.java @@ -22,17 +22,21 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; import java.lang.constant.MethodTypeDesc; import java.util.List; import jdk.internal.classfile.impl.SignaturesImpl; import static java.util.Objects.requireNonNull; import jdk.internal.classfile.impl.Util; +import jdk.internal.javac.PreviewFeature; /** * Models the generic signature of a method, as defined by {@jvms 4.7.9}. + * + * @since 22 */ +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public sealed interface MethodSignature permits SignaturesImpl.MethodSignatureImpl { @@ -52,7 +56,7 @@ public sealed interface MethodSignature String signatureString(); /** - * @return method signature for a raw (no generic information) method descriptor + * {@return a method signature for a raw (no generic information) method descriptor} * @param methodDescriptor the method descriptor */ public static MethodSignature of(MethodTypeDesc methodDescriptor) { @@ -66,7 +70,7 @@ public static MethodSignature of(MethodTypeDesc methodDescriptor) { } /** - * @return method signature + * {@return a method signature} * @param result signature for the return type * @param arguments signatures for the method arguments */ @@ -80,7 +84,7 @@ public static MethodSignature of(Signature result, } /** - * @return method signature + * {@return a method signature} * @param typeParameters signatures for the type parameters * @param exceptions signatures for the exceptions * @param result signature for the return type diff --git a/src/java.base/share/classes/jdk/internal/classfile/MethodTransform.java b/src/java.base/share/classes/java/lang/classfile/MethodTransform.java similarity index 85% rename from src/java.base/share/classes/jdk/internal/classfile/MethodTransform.java rename to src/java.base/share/classes/java/lang/classfile/MethodTransform.java index 1aa1f5e6a08ef..829ca041c5a82 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/MethodTransform.java +++ b/src/java.base/share/classes/java/lang/classfile/MethodTransform.java @@ -22,22 +22,26 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; import java.util.function.Consumer; import java.util.function.Predicate; import java.util.function.Supplier; import jdk.internal.classfile.impl.TransformImpl; +import jdk.internal.javac.PreviewFeature; /** * A transformation on streams of {@link MethodElement}. * - * @see ClassfileTransform + * @see ClassFileTransform + * + * @since 22 */ +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) @FunctionalInterface public non-sealed interface MethodTransform - extends ClassfileTransform { + extends ClassFileTransform { /** * A method transform that sends all elements to the builder. @@ -107,6 +111,10 @@ static MethodTransform transformingCode(CodeTransform xform) { return new TransformImpl.MethodCodeTransform(xform); } + /** + * @implSpec The default implementation returns a resolved transform bound + * to the given method builder. + */ @Override default ResolvedTransform resolve(MethodBuilder builder) { return new TransformImpl.ResolvedTransformImpl<>(e -> accept(builder, e), @@ -114,6 +122,13 @@ default ResolvedTransform resolve(MethodBuilder builder) { () -> atStart(builder)); } + /** + * @implSpec + * The default implementation returns this method transform chained with another + * method transform from the argument. Chaining of two transforms requires to + * involve a chained builder serving as a target builder for this transform + * and also as a source of elements for the downstream transform. + */ @Override default MethodTransform andThen(MethodTransform t) { return new TransformImpl.ChainedMethodTransform(this, t); diff --git a/src/java.base/share/classes/jdk/internal/classfile/Opcode.java b/src/java.base/share/classes/java/lang/classfile/Opcode.java similarity index 62% rename from src/java.base/share/classes/jdk/internal/classfile/Opcode.java rename to src/java.base/share/classes/java/lang/classfile/Opcode.java index af1027baeca70..9c4a1a8062588 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/Opcode.java +++ b/src/java.base/share/classes/java/lang/classfile/Opcode.java @@ -22,10 +22,11 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; import java.lang.constant.ConstantDesc; import java.lang.constant.ConstantDescs; +import jdk.internal.javac.PreviewFeature; /** * Describes the opcodes of the JVM instruction set, as described in {@jvms 6.5}. @@ -34,654 +35,672 @@ * * @see Instruction * @see PseudoInstruction + * + * @since 22 */ +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public enum Opcode { /** Do nothing */ - NOP(Classfile.NOP, 1, Kind.NOP), + NOP(ClassFile.NOP, 1, Kind.NOP), /** Push null */ - ACONST_NULL(Classfile.ACONST_NULL, 1, Kind.CONSTANT, TypeKind.ReferenceType, 0, ConstantDescs.NULL), + ACONST_NULL(ClassFile.ACONST_NULL, 1, Kind.CONSTANT, TypeKind.ReferenceType, 0, ConstantDescs.NULL), /** Push int constant -1 */ - ICONST_M1(Classfile.ICONST_M1, 1, Kind.CONSTANT, TypeKind.IntType, 0, -1), + ICONST_M1(ClassFile.ICONST_M1, 1, Kind.CONSTANT, TypeKind.IntType, 0, -1), /** Push int constant 0 */ - ICONST_0(Classfile.ICONST_0, 1, Kind.CONSTANT, TypeKind.IntType, 0, 0), + ICONST_0(ClassFile.ICONST_0, 1, Kind.CONSTANT, TypeKind.IntType, 0, 0), /** Push int constant 1 */ - ICONST_1(Classfile.ICONST_1, 1, Kind.CONSTANT, TypeKind.IntType, 0, 1), + ICONST_1(ClassFile.ICONST_1, 1, Kind.CONSTANT, TypeKind.IntType, 0, 1), /** Push int constant 2 */ - ICONST_2(Classfile.ICONST_2, 1, Kind.CONSTANT, TypeKind.IntType, 0, 2), + ICONST_2(ClassFile.ICONST_2, 1, Kind.CONSTANT, TypeKind.IntType, 0, 2), /** Push int constant 3 */ - ICONST_3(Classfile.ICONST_3, 1, Kind.CONSTANT, TypeKind.IntType, 0, 3), + ICONST_3(ClassFile.ICONST_3, 1, Kind.CONSTANT, TypeKind.IntType, 0, 3), /** Push int constant 4 */ - ICONST_4(Classfile.ICONST_4, 1, Kind.CONSTANT, TypeKind.IntType, 0, 4), + ICONST_4(ClassFile.ICONST_4, 1, Kind.CONSTANT, TypeKind.IntType, 0, 4), /** Push int constant 5 */ - ICONST_5(Classfile.ICONST_5, 1, Kind.CONSTANT, TypeKind.IntType, 0, 5), + ICONST_5(ClassFile.ICONST_5, 1, Kind.CONSTANT, TypeKind.IntType, 0, 5), /** Push long constant 0 */ - LCONST_0(Classfile.LCONST_0, 1, Kind.CONSTANT, TypeKind.LongType, 0, 0L), + LCONST_0(ClassFile.LCONST_0, 1, Kind.CONSTANT, TypeKind.LongType, 0, 0L), /** Push long constant 1 */ - LCONST_1(Classfile.LCONST_1, 1, Kind.CONSTANT, TypeKind.LongType, 0, 1L), + LCONST_1(ClassFile.LCONST_1, 1, Kind.CONSTANT, TypeKind.LongType, 0, 1L), /** Push float constant 0 */ - FCONST_0(Classfile.FCONST_0, 1, Kind.CONSTANT, TypeKind.FloatType, 0, 0.0f), + FCONST_0(ClassFile.FCONST_0, 1, Kind.CONSTANT, TypeKind.FloatType, 0, 0.0f), /** Push float constant 1 */ - FCONST_1(Classfile.FCONST_1, 1, Kind.CONSTANT, TypeKind.FloatType, 0, 1.0f), + FCONST_1(ClassFile.FCONST_1, 1, Kind.CONSTANT, TypeKind.FloatType, 0, 1.0f), /** Push float constant 2 */ - FCONST_2(Classfile.FCONST_2, 1, Kind.CONSTANT, TypeKind.FloatType, 0, 2.0f), + FCONST_2(ClassFile.FCONST_2, 1, Kind.CONSTANT, TypeKind.FloatType, 0, 2.0f), /** Push double constant 0 */ - DCONST_0(Classfile.DCONST_0, 1, Kind.CONSTANT, TypeKind.DoubleType, 0, 0.0d), + DCONST_0(ClassFile.DCONST_0, 1, Kind.CONSTANT, TypeKind.DoubleType, 0, 0.0d), /** Push double constant 1 */ - DCONST_1(Classfile.DCONST_1, 1, Kind.CONSTANT, TypeKind.DoubleType, 0, 1.0d), + DCONST_1(ClassFile.DCONST_1, 1, Kind.CONSTANT, TypeKind.DoubleType, 0, 1.0d), /** Push byte */ - BIPUSH(Classfile.BIPUSH, 2, Kind.CONSTANT, TypeKind.ByteType), + BIPUSH(ClassFile.BIPUSH, 2, Kind.CONSTANT, TypeKind.ByteType), /** Push short */ - SIPUSH(Classfile.SIPUSH, 3, Kind.CONSTANT, TypeKind.ShortType), + SIPUSH(ClassFile.SIPUSH, 3, Kind.CONSTANT, TypeKind.ShortType), /** Push item from run-time constant pool */ - LDC(Classfile.LDC, 2, Kind.CONSTANT), + LDC(ClassFile.LDC, 2, Kind.CONSTANT), /** Push item from run-time constant pool (wide index) */ - LDC_W(Classfile.LDC_W, 3, Kind.CONSTANT), + LDC_W(ClassFile.LDC_W, 3, Kind.CONSTANT), /** Push long or double from run-time constant pool (wide index) */ - LDC2_W(Classfile.LDC2_W, 3, Kind.CONSTANT), + LDC2_W(ClassFile.LDC2_W, 3, Kind.CONSTANT), /** Load int from local variable */ - ILOAD(Classfile.ILOAD, 2, Kind.LOAD, TypeKind.IntType, -1), + ILOAD(ClassFile.ILOAD, 2, Kind.LOAD, TypeKind.IntType, -1), /** Load long from local variable */ - LLOAD(Classfile.LLOAD, 2, Kind.LOAD, TypeKind.LongType, -1), + LLOAD(ClassFile.LLOAD, 2, Kind.LOAD, TypeKind.LongType, -1), /** Load float from local variable */ - FLOAD(Classfile.FLOAD, 2, Kind.LOAD, TypeKind.FloatType, -1), + FLOAD(ClassFile.FLOAD, 2, Kind.LOAD, TypeKind.FloatType, -1), /** Load double from local variable */ - DLOAD(Classfile.DLOAD, 2, Kind.LOAD, TypeKind.DoubleType, -1), + DLOAD(ClassFile.DLOAD, 2, Kind.LOAD, TypeKind.DoubleType, -1), /** Load reference from local variable */ - ALOAD(Classfile.ALOAD, 2, Kind.LOAD, TypeKind.ReferenceType, -1), + ALOAD(ClassFile.ALOAD, 2, Kind.LOAD, TypeKind.ReferenceType, -1), /** Load int from local variable 0 */ - ILOAD_0(Classfile.ILOAD_0, 1, Kind.LOAD, TypeKind.IntType, 0), + ILOAD_0(ClassFile.ILOAD_0, 1, Kind.LOAD, TypeKind.IntType, 0), /** Load int from local variable 1 */ - ILOAD_1(Classfile.ILOAD_1, 1, Kind.LOAD, TypeKind.IntType, 1), + ILOAD_1(ClassFile.ILOAD_1, 1, Kind.LOAD, TypeKind.IntType, 1), /** Load int from local variable 2 */ - ILOAD_2(Classfile.ILOAD_2, 1, Kind.LOAD, TypeKind.IntType, 2), + ILOAD_2(ClassFile.ILOAD_2, 1, Kind.LOAD, TypeKind.IntType, 2), /** Load int from local variable3 */ - ILOAD_3(Classfile.ILOAD_3, 1, Kind.LOAD, TypeKind.IntType, 3), + ILOAD_3(ClassFile.ILOAD_3, 1, Kind.LOAD, TypeKind.IntType, 3), /** Load long from local variable 0 */ - LLOAD_0(Classfile.LLOAD_0, 1, Kind.LOAD, TypeKind.LongType, 0), + LLOAD_0(ClassFile.LLOAD_0, 1, Kind.LOAD, TypeKind.LongType, 0), /** Load long from local variable 1 */ - LLOAD_1(Classfile.LLOAD_1, 1, Kind.LOAD, TypeKind.LongType, 1), + LLOAD_1(ClassFile.LLOAD_1, 1, Kind.LOAD, TypeKind.LongType, 1), /** Load long from local variable 2 */ - LLOAD_2(Classfile.LLOAD_2, 1, Kind.LOAD, TypeKind.LongType, 2), + LLOAD_2(ClassFile.LLOAD_2, 1, Kind.LOAD, TypeKind.LongType, 2), /** Load long from local variable 3 */ - LLOAD_3(Classfile.LLOAD_3, 1, Kind.LOAD, TypeKind.LongType, 3), + LLOAD_3(ClassFile.LLOAD_3, 1, Kind.LOAD, TypeKind.LongType, 3), /** Load float from local variable 0 */ - FLOAD_0(Classfile.FLOAD_0, 1, Kind.LOAD, TypeKind.FloatType, 0), + FLOAD_0(ClassFile.FLOAD_0, 1, Kind.LOAD, TypeKind.FloatType, 0), /** Load float from local variable 1 */ - FLOAD_1(Classfile.FLOAD_1, 1, Kind.LOAD, TypeKind.FloatType, 1), + FLOAD_1(ClassFile.FLOAD_1, 1, Kind.LOAD, TypeKind.FloatType, 1), /** Load float from local variable 2 */ - FLOAD_2(Classfile.FLOAD_2, 1, Kind.LOAD, TypeKind.FloatType, 2), + FLOAD_2(ClassFile.FLOAD_2, 1, Kind.LOAD, TypeKind.FloatType, 2), /** Load float from local variable 3 */ - FLOAD_3(Classfile.FLOAD_3, 1, Kind.LOAD, TypeKind.FloatType, 3), + FLOAD_3(ClassFile.FLOAD_3, 1, Kind.LOAD, TypeKind.FloatType, 3), /** Load double from local variable 0 */ - DLOAD_0(Classfile.DLOAD_0, 1, Kind.LOAD, TypeKind.DoubleType, 0), + DLOAD_0(ClassFile.DLOAD_0, 1, Kind.LOAD, TypeKind.DoubleType, 0), /** Load double from local variable 1 */ - DLOAD_1(Classfile.DLOAD_1, 1, Kind.LOAD, TypeKind.DoubleType, 1), + DLOAD_1(ClassFile.DLOAD_1, 1, Kind.LOAD, TypeKind.DoubleType, 1), /** Load double from local variable 2 */ - DLOAD_2(Classfile.DLOAD_2, 1, Kind.LOAD, TypeKind.DoubleType, 2), + DLOAD_2(ClassFile.DLOAD_2, 1, Kind.LOAD, TypeKind.DoubleType, 2), /** Load double from local variable 3 */ - DLOAD_3(Classfile.DLOAD_3, 1, Kind.LOAD, TypeKind.DoubleType, 3), + DLOAD_3(ClassFile.DLOAD_3, 1, Kind.LOAD, TypeKind.DoubleType, 3), /** Load reference from local variable 0 */ - ALOAD_0(Classfile.ALOAD_0, 1, Kind.LOAD, TypeKind.ReferenceType, 0), + ALOAD_0(ClassFile.ALOAD_0, 1, Kind.LOAD, TypeKind.ReferenceType, 0), /** Load reference from local variable 1 */ - ALOAD_1(Classfile.ALOAD_1, 1, Kind.LOAD, TypeKind.ReferenceType, 1), + ALOAD_1(ClassFile.ALOAD_1, 1, Kind.LOAD, TypeKind.ReferenceType, 1), /** Load reference from local variable 2 */ - ALOAD_2(Classfile.ALOAD_2, 1, Kind.LOAD, TypeKind.ReferenceType, 2), + ALOAD_2(ClassFile.ALOAD_2, 1, Kind.LOAD, TypeKind.ReferenceType, 2), /** Load reference from local variable 3 */ - ALOAD_3(Classfile.ALOAD_3, 1, Kind.LOAD, TypeKind.ReferenceType, 3), + ALOAD_3(ClassFile.ALOAD_3, 1, Kind.LOAD, TypeKind.ReferenceType, 3), /** Load int from array */ - IALOAD(Classfile.IALOAD, 1, Kind.ARRAY_LOAD, TypeKind.IntType), + IALOAD(ClassFile.IALOAD, 1, Kind.ARRAY_LOAD, TypeKind.IntType), /** Load long from array */ - LALOAD(Classfile.LALOAD, 1, Kind.ARRAY_LOAD, TypeKind.LongType), + LALOAD(ClassFile.LALOAD, 1, Kind.ARRAY_LOAD, TypeKind.LongType), /** Load float from array */ - FALOAD(Classfile.FALOAD, 1, Kind.ARRAY_LOAD, TypeKind.FloatType), + FALOAD(ClassFile.FALOAD, 1, Kind.ARRAY_LOAD, TypeKind.FloatType), /** Load double from array */ - DALOAD(Classfile.DALOAD, 1, Kind.ARRAY_LOAD, TypeKind.DoubleType), + DALOAD(ClassFile.DALOAD, 1, Kind.ARRAY_LOAD, TypeKind.DoubleType), /** Load reference from array */ - AALOAD(Classfile.AALOAD, 1, Kind.ARRAY_LOAD, TypeKind.ReferenceType), + AALOAD(ClassFile.AALOAD, 1, Kind.ARRAY_LOAD, TypeKind.ReferenceType), /** Load byte from array */ - BALOAD(Classfile.BALOAD, 1, Kind.ARRAY_LOAD, TypeKind.ByteType), + BALOAD(ClassFile.BALOAD, 1, Kind.ARRAY_LOAD, TypeKind.ByteType), /** Load char from array */ - CALOAD(Classfile.CALOAD, 1, Kind.ARRAY_LOAD, TypeKind.CharType), + CALOAD(ClassFile.CALOAD, 1, Kind.ARRAY_LOAD, TypeKind.CharType), /** Load short from array */ - SALOAD(Classfile.SALOAD, 1, Kind.ARRAY_LOAD, TypeKind.ShortType), + SALOAD(ClassFile.SALOAD, 1, Kind.ARRAY_LOAD, TypeKind.ShortType), /** Store int into local variable */ - ISTORE(Classfile.ISTORE, 2, Kind.STORE, TypeKind.IntType, -1), + ISTORE(ClassFile.ISTORE, 2, Kind.STORE, TypeKind.IntType, -1), /** Store long into local variable */ - LSTORE(Classfile.LSTORE, 2, Kind.STORE, TypeKind.LongType, -1), + LSTORE(ClassFile.LSTORE, 2, Kind.STORE, TypeKind.LongType, -1), /** Store float into local variable */ - FSTORE(Classfile.FSTORE, 2, Kind.STORE, TypeKind.FloatType, -1), + FSTORE(ClassFile.FSTORE, 2, Kind.STORE, TypeKind.FloatType, -1), /** Store double into local variable */ - DSTORE(Classfile.DSTORE, 2, Kind.STORE, TypeKind.DoubleType, -1), + DSTORE(ClassFile.DSTORE, 2, Kind.STORE, TypeKind.DoubleType, -1), /** Store reference into local variable */ - ASTORE(Classfile.ASTORE, 2, Kind.STORE, TypeKind.ReferenceType, -1), + ASTORE(ClassFile.ASTORE, 2, Kind.STORE, TypeKind.ReferenceType, -1), /** Store int into local variable 0 */ - ISTORE_0(Classfile.ISTORE_0, 1, Kind.STORE, TypeKind.IntType, 0), + ISTORE_0(ClassFile.ISTORE_0, 1, Kind.STORE, TypeKind.IntType, 0), /** Store int into local variable 1 */ - ISTORE_1(Classfile.ISTORE_1, 1, Kind.STORE, TypeKind.IntType, 1), + ISTORE_1(ClassFile.ISTORE_1, 1, Kind.STORE, TypeKind.IntType, 1), /** Store int into local variable 2 */ - ISTORE_2(Classfile.ISTORE_2, 1, Kind.STORE, TypeKind.IntType, 2), + ISTORE_2(ClassFile.ISTORE_2, 1, Kind.STORE, TypeKind.IntType, 2), /** Store int into local variable 3 */ - ISTORE_3(Classfile.ISTORE_3, 1, Kind.STORE, TypeKind.IntType, 3), + ISTORE_3(ClassFile.ISTORE_3, 1, Kind.STORE, TypeKind.IntType, 3), /** Store long into local variable 0 */ - LSTORE_0(Classfile.LSTORE_0, 1, Kind.STORE, TypeKind.LongType, 0), + LSTORE_0(ClassFile.LSTORE_0, 1, Kind.STORE, TypeKind.LongType, 0), /** Store long into local variable 1 */ - LSTORE_1(Classfile.LSTORE_1, 1, Kind.STORE, TypeKind.LongType, 1), + LSTORE_1(ClassFile.LSTORE_1, 1, Kind.STORE, TypeKind.LongType, 1), /** Store long into local variable 2 */ - LSTORE_2(Classfile.LSTORE_2, 1, Kind.STORE, TypeKind.LongType, 2), + LSTORE_2(ClassFile.LSTORE_2, 1, Kind.STORE, TypeKind.LongType, 2), /** Store long into local variable 3 */ - LSTORE_3(Classfile.LSTORE_3, 1, Kind.STORE, TypeKind.LongType, 3), + LSTORE_3(ClassFile.LSTORE_3, 1, Kind.STORE, TypeKind.LongType, 3), /** Store float into local variable 0 */ - FSTORE_0(Classfile.FSTORE_0, 1, Kind.STORE, TypeKind.FloatType, 0), + FSTORE_0(ClassFile.FSTORE_0, 1, Kind.STORE, TypeKind.FloatType, 0), /** Store float into local variable 1 */ - FSTORE_1(Classfile.FSTORE_1, 1, Kind.STORE, TypeKind.FloatType, 1), + FSTORE_1(ClassFile.FSTORE_1, 1, Kind.STORE, TypeKind.FloatType, 1), /** Store float into local variable 2 */ - FSTORE_2(Classfile.FSTORE_2, 1, Kind.STORE, TypeKind.FloatType, 2), + FSTORE_2(ClassFile.FSTORE_2, 1, Kind.STORE, TypeKind.FloatType, 2), /** Store float into local variable 3 */ - FSTORE_3(Classfile.FSTORE_3, 1, Kind.STORE, TypeKind.FloatType, 3), + FSTORE_3(ClassFile.FSTORE_3, 1, Kind.STORE, TypeKind.FloatType, 3), /** Store double into local variable 0 */ - DSTORE_0(Classfile.DSTORE_0, 1, Kind.STORE, TypeKind.DoubleType, 0), + DSTORE_0(ClassFile.DSTORE_0, 1, Kind.STORE, TypeKind.DoubleType, 0), /** Store double into local variable 1 */ - DSTORE_1(Classfile.DSTORE_1, 1, Kind.STORE, TypeKind.DoubleType, 1), + DSTORE_1(ClassFile.DSTORE_1, 1, Kind.STORE, TypeKind.DoubleType, 1), /** Store double into local variable 2 */ - DSTORE_2(Classfile.DSTORE_2, 1, Kind.STORE, TypeKind.DoubleType, 2), + DSTORE_2(ClassFile.DSTORE_2, 1, Kind.STORE, TypeKind.DoubleType, 2), /** Store double into local variable 3 */ - DSTORE_3(Classfile.DSTORE_3, 1, Kind.STORE, TypeKind.DoubleType, 3), + DSTORE_3(ClassFile.DSTORE_3, 1, Kind.STORE, TypeKind.DoubleType, 3), /** Store reference into local variable 0 */ - ASTORE_0(Classfile.ASTORE_0, 1, Kind.STORE, TypeKind.ReferenceType, 0), + ASTORE_0(ClassFile.ASTORE_0, 1, Kind.STORE, TypeKind.ReferenceType, 0), /** Store reference into local variable 1 */ - ASTORE_1(Classfile.ASTORE_1, 1, Kind.STORE, TypeKind.ReferenceType, 1), + ASTORE_1(ClassFile.ASTORE_1, 1, Kind.STORE, TypeKind.ReferenceType, 1), /** Store reference into local variable 2 */ - ASTORE_2(Classfile.ASTORE_2, 1, Kind.STORE, TypeKind.ReferenceType, 2), + ASTORE_2(ClassFile.ASTORE_2, 1, Kind.STORE, TypeKind.ReferenceType, 2), /** Store reference into local variable 3 */ - ASTORE_3(Classfile.ASTORE_3, 1, Kind.STORE, TypeKind.ReferenceType, 3), + ASTORE_3(ClassFile.ASTORE_3, 1, Kind.STORE, TypeKind.ReferenceType, 3), /** Store into int array */ - IASTORE(Classfile.IASTORE, 1, Kind.ARRAY_STORE, TypeKind.IntType), + IASTORE(ClassFile.IASTORE, 1, Kind.ARRAY_STORE, TypeKind.IntType), /** Store into long array */ - LASTORE(Classfile.LASTORE, 1, Kind.ARRAY_STORE, TypeKind.LongType), + LASTORE(ClassFile.LASTORE, 1, Kind.ARRAY_STORE, TypeKind.LongType), /** Store into float array */ - FASTORE(Classfile.FASTORE, 1, Kind.ARRAY_STORE, TypeKind.FloatType), + FASTORE(ClassFile.FASTORE, 1, Kind.ARRAY_STORE, TypeKind.FloatType), /** Store into double array */ - DASTORE(Classfile.DASTORE, 1, Kind.ARRAY_STORE, TypeKind.DoubleType), + DASTORE(ClassFile.DASTORE, 1, Kind.ARRAY_STORE, TypeKind.DoubleType), /** Store into reference array */ - AASTORE(Classfile.AASTORE, 1, Kind.ARRAY_STORE, TypeKind.ReferenceType), + AASTORE(ClassFile.AASTORE, 1, Kind.ARRAY_STORE, TypeKind.ReferenceType), /** Store into byte array */ - BASTORE(Classfile.BASTORE, 1, Kind.ARRAY_STORE, TypeKind.ByteType), + BASTORE(ClassFile.BASTORE, 1, Kind.ARRAY_STORE, TypeKind.ByteType), /** Store into char array */ - CASTORE(Classfile.CASTORE, 1, Kind.ARRAY_STORE, TypeKind.CharType), + CASTORE(ClassFile.CASTORE, 1, Kind.ARRAY_STORE, TypeKind.CharType), /** Store into short array */ - SASTORE(Classfile.SASTORE, 1, Kind.ARRAY_STORE, TypeKind.ShortType), + SASTORE(ClassFile.SASTORE, 1, Kind.ARRAY_STORE, TypeKind.ShortType), /** Pop the top operand stack value */ - POP(Classfile.POP, 1, Kind.STACK), + POP(ClassFile.POP, 1, Kind.STACK), /** Pop the top one or two operand stack values */ - POP2(Classfile.POP2, 1, Kind.STACK), + POP2(ClassFile.POP2, 1, Kind.STACK), /** Duplicate the top operand stack value */ - DUP(Classfile.DUP, 1, Kind.STACK), + DUP(ClassFile.DUP, 1, Kind.STACK), /** Duplicate the top operand stack value and insert two values down */ - DUP_X1(Classfile.DUP_X1, 1, Kind.STACK), + DUP_X1(ClassFile.DUP_X1, 1, Kind.STACK), /** Duplicate the top operand stack value and insert two or three values down */ - DUP_X2(Classfile.DUP_X2, 1, Kind.STACK), + DUP_X2(ClassFile.DUP_X2, 1, Kind.STACK), /** Duplicate the top one or two operand stack values */ - DUP2(Classfile.DUP2, 1, Kind.STACK), + DUP2(ClassFile.DUP2, 1, Kind.STACK), /** Duplicate the top one or two operand stack values and insert two or three values down */ - DUP2_X1(Classfile.DUP2_X1, 1, Kind.STACK), + DUP2_X1(ClassFile.DUP2_X1, 1, Kind.STACK), /** Duplicate the top one or two operand stack values and insert two, three, or four values down */ - DUP2_X2(Classfile.DUP2_X2, 1, Kind.STACK), + DUP2_X2(ClassFile.DUP2_X2, 1, Kind.STACK), /** Swap the top two operand stack values */ - SWAP(Classfile.SWAP, 1, Kind.STACK), + SWAP(ClassFile.SWAP, 1, Kind.STACK), /** Add int */ - IADD(Classfile.IADD, 1, Kind.OPERATOR, TypeKind.IntType), + IADD(ClassFile.IADD, 1, Kind.OPERATOR, TypeKind.IntType), /** Add long */ - LADD(Classfile.LADD, 1, Kind.OPERATOR, TypeKind.LongType), + LADD(ClassFile.LADD, 1, Kind.OPERATOR, TypeKind.LongType), /** Add float */ - FADD(Classfile.FADD, 1, Kind.OPERATOR, TypeKind.FloatType), + FADD(ClassFile.FADD, 1, Kind.OPERATOR, TypeKind.FloatType), /** Add double */ - DADD(Classfile.DADD, 1, Kind.OPERATOR, TypeKind.DoubleType), + DADD(ClassFile.DADD, 1, Kind.OPERATOR, TypeKind.DoubleType), /** Subtract int */ - ISUB(Classfile.ISUB, 1, Kind.OPERATOR, TypeKind.IntType), + ISUB(ClassFile.ISUB, 1, Kind.OPERATOR, TypeKind.IntType), /** Subtract long */ - LSUB(Classfile.LSUB, 1, Kind.OPERATOR, TypeKind.LongType), + LSUB(ClassFile.LSUB, 1, Kind.OPERATOR, TypeKind.LongType), /** Subtract float */ - FSUB(Classfile.FSUB, 1, Kind.OPERATOR, TypeKind.FloatType), + FSUB(ClassFile.FSUB, 1, Kind.OPERATOR, TypeKind.FloatType), /** Subtract double */ - DSUB(Classfile.DSUB, 1, Kind.OPERATOR, TypeKind.DoubleType), + DSUB(ClassFile.DSUB, 1, Kind.OPERATOR, TypeKind.DoubleType), /** Multiply int */ - IMUL(Classfile.IMUL, 1, Kind.OPERATOR, TypeKind.IntType), + IMUL(ClassFile.IMUL, 1, Kind.OPERATOR, TypeKind.IntType), /** Multiply long */ - LMUL(Classfile.LMUL, 1, Kind.OPERATOR, TypeKind.LongType), + LMUL(ClassFile.LMUL, 1, Kind.OPERATOR, TypeKind.LongType), /** Multiply float */ - FMUL(Classfile.FMUL, 1, Kind.OPERATOR, TypeKind.FloatType), + FMUL(ClassFile.FMUL, 1, Kind.OPERATOR, TypeKind.FloatType), /** Multiply double */ - DMUL(Classfile.DMUL, 1, Kind.OPERATOR, TypeKind.DoubleType), + DMUL(ClassFile.DMUL, 1, Kind.OPERATOR, TypeKind.DoubleType), /** Divide int */ - IDIV(Classfile.IDIV, 1, Kind.OPERATOR, TypeKind.IntType), + IDIV(ClassFile.IDIV, 1, Kind.OPERATOR, TypeKind.IntType), /** Divide long */ - LDIV(Classfile.LDIV, 1, Kind.OPERATOR, TypeKind.LongType), + LDIV(ClassFile.LDIV, 1, Kind.OPERATOR, TypeKind.LongType), /** Divide float */ - FDIV(Classfile.FDIV, 1, Kind.OPERATOR, TypeKind.FloatType), + FDIV(ClassFile.FDIV, 1, Kind.OPERATOR, TypeKind.FloatType), /** Divide double */ - DDIV(Classfile.DDIV, 1, Kind.OPERATOR, TypeKind.DoubleType), + DDIV(ClassFile.DDIV, 1, Kind.OPERATOR, TypeKind.DoubleType), /** Remainder int */ - IREM(Classfile.IREM, 1, Kind.OPERATOR, TypeKind.IntType), + IREM(ClassFile.IREM, 1, Kind.OPERATOR, TypeKind.IntType), /** Remainder long */ - LREM(Classfile.LREM, 1, Kind.OPERATOR, TypeKind.LongType), + LREM(ClassFile.LREM, 1, Kind.OPERATOR, TypeKind.LongType), /** Remainder float */ - FREM(Classfile.FREM, 1, Kind.OPERATOR, TypeKind.FloatType), + FREM(ClassFile.FREM, 1, Kind.OPERATOR, TypeKind.FloatType), /** Remainder double */ - DREM(Classfile.DREM, 1, Kind.OPERATOR, TypeKind.DoubleType), + DREM(ClassFile.DREM, 1, Kind.OPERATOR, TypeKind.DoubleType), /** Negate int */ - INEG(Classfile.INEG, 1, Kind.OPERATOR, TypeKind.IntType), + INEG(ClassFile.INEG, 1, Kind.OPERATOR, TypeKind.IntType), /** Negate long */ - LNEG(Classfile.LNEG, 1, Kind.OPERATOR, TypeKind.LongType), + LNEG(ClassFile.LNEG, 1, Kind.OPERATOR, TypeKind.LongType), /** Negate float */ - FNEG(Classfile.FNEG, 1, Kind.OPERATOR, TypeKind.FloatType), + FNEG(ClassFile.FNEG, 1, Kind.OPERATOR, TypeKind.FloatType), /** Negate double */ - DNEG(Classfile.DNEG, 1, Kind.OPERATOR, TypeKind.DoubleType), + DNEG(ClassFile.DNEG, 1, Kind.OPERATOR, TypeKind.DoubleType), /** Shift left int */ - ISHL(Classfile.ISHL, 1, Kind.OPERATOR, TypeKind.IntType), + ISHL(ClassFile.ISHL, 1, Kind.OPERATOR, TypeKind.IntType), /** Shift left long */ - LSHL(Classfile.LSHL, 1, Kind.OPERATOR, TypeKind.LongType), + LSHL(ClassFile.LSHL, 1, Kind.OPERATOR, TypeKind.LongType), /** Shift right int */ - ISHR(Classfile.ISHR, 1, Kind.OPERATOR, TypeKind.IntType), + ISHR(ClassFile.ISHR, 1, Kind.OPERATOR, TypeKind.IntType), /** Shift right long */ - LSHR(Classfile.LSHR, 1, Kind.OPERATOR, TypeKind.LongType), + LSHR(ClassFile.LSHR, 1, Kind.OPERATOR, TypeKind.LongType), /** Logical shift right int */ - IUSHR(Classfile.IUSHR, 1, Kind.OPERATOR, TypeKind.IntType), + IUSHR(ClassFile.IUSHR, 1, Kind.OPERATOR, TypeKind.IntType), /** Logical shift right long */ - LUSHR(Classfile.LUSHR, 1, Kind.OPERATOR, TypeKind.LongType), + LUSHR(ClassFile.LUSHR, 1, Kind.OPERATOR, TypeKind.LongType), /** Boolean AND int */ - IAND(Classfile.IAND, 1, Kind.OPERATOR, TypeKind.IntType), + IAND(ClassFile.IAND, 1, Kind.OPERATOR, TypeKind.IntType), /** Boolean AND long */ - LAND(Classfile.LAND, 1, Kind.OPERATOR, TypeKind.LongType), + LAND(ClassFile.LAND, 1, Kind.OPERATOR, TypeKind.LongType), /** Boolean OR int */ - IOR(Classfile.IOR, 1, Kind.OPERATOR, TypeKind.IntType), + IOR(ClassFile.IOR, 1, Kind.OPERATOR, TypeKind.IntType), /** Boolean OR long */ - LOR(Classfile.LOR, 1, Kind.OPERATOR, TypeKind.LongType), + LOR(ClassFile.LOR, 1, Kind.OPERATOR, TypeKind.LongType), /** Boolean XOR int */ - IXOR(Classfile.IXOR, 1, Kind.OPERATOR, TypeKind.IntType), + IXOR(ClassFile.IXOR, 1, Kind.OPERATOR, TypeKind.IntType), /** Boolean XOR long */ - LXOR(Classfile.LXOR, 1, Kind.OPERATOR, TypeKind.LongType), + LXOR(ClassFile.LXOR, 1, Kind.OPERATOR, TypeKind.LongType), /** Increment local variable by constant */ - IINC(Classfile.IINC, 3, Kind.INCREMENT, TypeKind.IntType, -1), + IINC(ClassFile.IINC, 3, Kind.INCREMENT, TypeKind.IntType, -1), /** Convert int to long */ - I2L(Classfile.I2L, 1, Kind.CONVERT, TypeKind.IntType, TypeKind.LongType), + I2L(ClassFile.I2L, 1, Kind.CONVERT, TypeKind.IntType, TypeKind.LongType), /** Convert int to float */ - I2F(Classfile.I2F, 1, Kind.CONVERT, TypeKind.IntType, TypeKind.FloatType), + I2F(ClassFile.I2F, 1, Kind.CONVERT, TypeKind.IntType, TypeKind.FloatType), /** Convert int to double */ - I2D(Classfile.I2D, 1, Kind.CONVERT, TypeKind.IntType, TypeKind.DoubleType), + I2D(ClassFile.I2D, 1, Kind.CONVERT, TypeKind.IntType, TypeKind.DoubleType), /** Convert long to int */ - L2I(Classfile.L2I, 1, Kind.CONVERT, TypeKind.LongType, TypeKind.IntType), + L2I(ClassFile.L2I, 1, Kind.CONVERT, TypeKind.LongType, TypeKind.IntType), /** Convert long to float */ - L2F(Classfile.L2F, 1, Kind.CONVERT, TypeKind.LongType, TypeKind.FloatType), + L2F(ClassFile.L2F, 1, Kind.CONVERT, TypeKind.LongType, TypeKind.FloatType), /** Convert long to double */ - L2D(Classfile.L2D, 1, Kind.CONVERT, TypeKind.LongType, TypeKind.DoubleType), + L2D(ClassFile.L2D, 1, Kind.CONVERT, TypeKind.LongType, TypeKind.DoubleType), /** Convert float to int */ - F2I(Classfile.F2I, 1, Kind.CONVERT, TypeKind.FloatType, TypeKind.IntType), + F2I(ClassFile.F2I, 1, Kind.CONVERT, TypeKind.FloatType, TypeKind.IntType), /** Convert float to long */ - F2L(Classfile.F2L, 1, Kind.CONVERT, TypeKind.FloatType, TypeKind.LongType), + F2L(ClassFile.F2L, 1, Kind.CONVERT, TypeKind.FloatType, TypeKind.LongType), /** Convert float to double */ - F2D(Classfile.F2D, 1, Kind.CONVERT, TypeKind.FloatType, TypeKind.DoubleType), + F2D(ClassFile.F2D, 1, Kind.CONVERT, TypeKind.FloatType, TypeKind.DoubleType), /** Convert double to int */ - D2I(Classfile.D2I, 1, Kind.CONVERT, TypeKind.DoubleType, TypeKind.IntType), + D2I(ClassFile.D2I, 1, Kind.CONVERT, TypeKind.DoubleType, TypeKind.IntType), /** Convert double to long */ - D2L(Classfile.D2L, 1, Kind.CONVERT, TypeKind.DoubleType, TypeKind.LongType), + D2L(ClassFile.D2L, 1, Kind.CONVERT, TypeKind.DoubleType, TypeKind.LongType), /** Convert double to float */ - D2F(Classfile.D2F, 1, Kind.CONVERT, TypeKind.DoubleType, TypeKind.FloatType), + D2F(ClassFile.D2F, 1, Kind.CONVERT, TypeKind.DoubleType, TypeKind.FloatType), /** Convert int to byte */ - I2B(Classfile.I2B, 1, Kind.CONVERT, TypeKind.IntType, TypeKind.ByteType), + I2B(ClassFile.I2B, 1, Kind.CONVERT, TypeKind.IntType, TypeKind.ByteType), /** Convert int to char */ - I2C(Classfile.I2C, 1, Kind.CONVERT, TypeKind.IntType, TypeKind.CharType), + I2C(ClassFile.I2C, 1, Kind.CONVERT, TypeKind.IntType, TypeKind.CharType), /** Convert int to short */ - I2S(Classfile.I2S, 1, Kind.CONVERT, TypeKind.IntType, TypeKind.ShortType), + I2S(ClassFile.I2S, 1, Kind.CONVERT, TypeKind.IntType, TypeKind.ShortType), /** Compare long */ - LCMP(Classfile.LCMP, 1, Kind.OPERATOR, TypeKind.LongType), + LCMP(ClassFile.LCMP, 1, Kind.OPERATOR, TypeKind.LongType), /** Compare float */ - FCMPL(Classfile.FCMPL, 1, Kind.OPERATOR, TypeKind.FloatType), + FCMPL(ClassFile.FCMPL, 1, Kind.OPERATOR, TypeKind.FloatType), /** Compare float */ - FCMPG(Classfile.FCMPG, 1, Kind.OPERATOR, TypeKind.FloatType), + FCMPG(ClassFile.FCMPG, 1, Kind.OPERATOR, TypeKind.FloatType), /** Compare double */ - DCMPL(Classfile.DCMPL, 1, Kind.OPERATOR, TypeKind.DoubleType), + DCMPL(ClassFile.DCMPL, 1, Kind.OPERATOR, TypeKind.DoubleType), /** Compare double */ - DCMPG(Classfile.DCMPG, 1, Kind.OPERATOR, TypeKind.DoubleType), + DCMPG(ClassFile.DCMPG, 1, Kind.OPERATOR, TypeKind.DoubleType), /** Branch if int comparison with zero succeeds */ - IFEQ(Classfile.IFEQ, 3, Kind.BRANCH, TypeKind.IntType), + IFEQ(ClassFile.IFEQ, 3, Kind.BRANCH, TypeKind.IntType), /** Branch if int comparison with zero succeeds */ - IFNE(Classfile.IFNE, 3, Kind.BRANCH, TypeKind.IntType), + IFNE(ClassFile.IFNE, 3, Kind.BRANCH, TypeKind.IntType), /** Branch if int comparison with zero succeeds */ - IFLT(Classfile.IFLT, 3, Kind.BRANCH, TypeKind.IntType), + IFLT(ClassFile.IFLT, 3, Kind.BRANCH, TypeKind.IntType), /** Branch if int comparison with zero succeeds */ - IFGE(Classfile.IFGE, 3, Kind.BRANCH, TypeKind.IntType), + IFGE(ClassFile.IFGE, 3, Kind.BRANCH, TypeKind.IntType), /** Branch if int comparison with zero succeeds */ - IFGT(Classfile.IFGT, 3, Kind.BRANCH, TypeKind.IntType), + IFGT(ClassFile.IFGT, 3, Kind.BRANCH, TypeKind.IntType), /** Branch if int comparison with zero succeeds */ - IFLE(Classfile.IFLE, 3, Kind.BRANCH, TypeKind.IntType), + IFLE(ClassFile.IFLE, 3, Kind.BRANCH, TypeKind.IntType), /** Branch if int comparison succeeds */ - IF_ICMPEQ(Classfile.IF_ICMPEQ, 3, Kind.BRANCH, TypeKind.IntType), + IF_ICMPEQ(ClassFile.IF_ICMPEQ, 3, Kind.BRANCH, TypeKind.IntType), /** Branch if int comparison succeeds */ - IF_ICMPNE(Classfile.IF_ICMPNE, 3, Kind.BRANCH, TypeKind.IntType), + IF_ICMPNE(ClassFile.IF_ICMPNE, 3, Kind.BRANCH, TypeKind.IntType), /** Branch if int comparison succeeds */ - IF_ICMPLT(Classfile.IF_ICMPLT, 3, Kind.BRANCH, TypeKind.IntType), + IF_ICMPLT(ClassFile.IF_ICMPLT, 3, Kind.BRANCH, TypeKind.IntType), /** Branch if int comparison succeeds */ - IF_ICMPGE(Classfile.IF_ICMPGE, 3, Kind.BRANCH, TypeKind.IntType), + IF_ICMPGE(ClassFile.IF_ICMPGE, 3, Kind.BRANCH, TypeKind.IntType), /** Branch if int comparison succeeds */ - IF_ICMPGT(Classfile.IF_ICMPGT, 3, Kind.BRANCH, TypeKind.IntType), + IF_ICMPGT(ClassFile.IF_ICMPGT, 3, Kind.BRANCH, TypeKind.IntType), /** Branch if int comparison succeeds */ - IF_ICMPLE(Classfile.IF_ICMPLE, 3, Kind.BRANCH, TypeKind.IntType), + IF_ICMPLE(ClassFile.IF_ICMPLE, 3, Kind.BRANCH, TypeKind.IntType), /** Branch if reference comparison succeeds */ - IF_ACMPEQ(Classfile.IF_ACMPEQ, 3, Kind.BRANCH, TypeKind.ReferenceType), + IF_ACMPEQ(ClassFile.IF_ACMPEQ, 3, Kind.BRANCH, TypeKind.ReferenceType), /** Branch if reference comparison succeeds */ - IF_ACMPNE(Classfile.IF_ACMPNE, 3, Kind.BRANCH, TypeKind.ReferenceType), + IF_ACMPNE(ClassFile.IF_ACMPNE, 3, Kind.BRANCH, TypeKind.ReferenceType), /** Branch always */ - GOTO(Classfile.GOTO, 3, Kind.BRANCH, TypeKind.VoidType), + GOTO(ClassFile.GOTO, 3, Kind.BRANCH, TypeKind.VoidType), - /** Jump subroutine */ - JSR(Classfile.JSR, 3, Kind.DISCONTINUED_JSR), + /** + * Jump subroutine is discontinued opcode + * @see java.lang.classfile.instruction.DiscontinuedInstruction + */ + JSR(ClassFile.JSR, 3, Kind.DISCONTINUED_JSR), - /** Return from subroutine */ - RET(Classfile.RET, 2, Kind.DISCONTINUED_RET), + /** + * Return from subroutine is discontinued opcode + * @see java.lang.classfile.instruction.DiscontinuedInstruction + */ + RET(ClassFile.RET, 2, Kind.DISCONTINUED_RET), /** Access jump table by index and jump */ - TABLESWITCH(Classfile.TABLESWITCH, -1, Kind.TABLE_SWITCH), + TABLESWITCH(ClassFile.TABLESWITCH, -1, Kind.TABLE_SWITCH), /** Access jump table by key match and jump */ - LOOKUPSWITCH(Classfile.LOOKUPSWITCH, -1, Kind.LOOKUP_SWITCH), + LOOKUPSWITCH(ClassFile.LOOKUPSWITCH, -1, Kind.LOOKUP_SWITCH), /** Return int from method */ - IRETURN(Classfile.IRETURN, 1, Kind.RETURN, TypeKind.IntType), + IRETURN(ClassFile.IRETURN, 1, Kind.RETURN, TypeKind.IntType), /** Return long from method */ - LRETURN(Classfile.LRETURN, 1, Kind.RETURN, TypeKind.LongType), + LRETURN(ClassFile.LRETURN, 1, Kind.RETURN, TypeKind.LongType), /** Return float from method */ - FRETURN(Classfile.FRETURN, 1, Kind.RETURN, TypeKind.FloatType), + FRETURN(ClassFile.FRETURN, 1, Kind.RETURN, TypeKind.FloatType), /** Return double from method */ - DRETURN(Classfile.DRETURN, 1, Kind.RETURN, TypeKind.DoubleType), + DRETURN(ClassFile.DRETURN, 1, Kind.RETURN, TypeKind.DoubleType), /** Return reference from method */ - ARETURN(Classfile.ARETURN, 1, Kind.RETURN, TypeKind.ReferenceType), + ARETURN(ClassFile.ARETURN, 1, Kind.RETURN, TypeKind.ReferenceType), /** Return void from method */ - RETURN(Classfile.RETURN, 1, Kind.RETURN, TypeKind.VoidType), + RETURN(ClassFile.RETURN, 1, Kind.RETURN, TypeKind.VoidType), /** Get static field from class */ - GETSTATIC(Classfile.GETSTATIC, 3, Kind.FIELD_ACCESS), + GETSTATIC(ClassFile.GETSTATIC, 3, Kind.FIELD_ACCESS), /** Set static field in class */ - PUTSTATIC(Classfile.PUTSTATIC, 3, Kind.FIELD_ACCESS), + PUTSTATIC(ClassFile.PUTSTATIC, 3, Kind.FIELD_ACCESS), /** Fetch field from object */ - GETFIELD(Classfile.GETFIELD, 3, Kind.FIELD_ACCESS), + GETFIELD(ClassFile.GETFIELD, 3, Kind.FIELD_ACCESS), /** Set field in object */ - PUTFIELD(Classfile.PUTFIELD, 3, Kind.FIELD_ACCESS), + PUTFIELD(ClassFile.PUTFIELD, 3, Kind.FIELD_ACCESS), /** Invoke instance method; dispatch based on class */ - INVOKEVIRTUAL(Classfile.INVOKEVIRTUAL, 3, Kind.INVOKE), + INVOKEVIRTUAL(ClassFile.INVOKEVIRTUAL, 3, Kind.INVOKE), /** * Invoke instance method; direct invocation of instance initialization * methods and methods of the current class and its supertypes */ - INVOKESPECIAL(Classfile.INVOKESPECIAL, 3, Kind.INVOKE), + INVOKESPECIAL(ClassFile.INVOKESPECIAL, 3, Kind.INVOKE), /** Invoke a class (static) method */ - INVOKESTATIC(Classfile.INVOKESTATIC, 3, Kind.INVOKE), + INVOKESTATIC(ClassFile.INVOKESTATIC, 3, Kind.INVOKE), /** Invoke interface method */ - INVOKEINTERFACE(Classfile.INVOKEINTERFACE, 5, Kind.INVOKE), + INVOKEINTERFACE(ClassFile.INVOKEINTERFACE, 5, Kind.INVOKE), /** Invoke a dynamically-computed call site */ - INVOKEDYNAMIC(Classfile.INVOKEDYNAMIC, 5, Kind.INVOKE_DYNAMIC), + INVOKEDYNAMIC(ClassFile.INVOKEDYNAMIC, 5, Kind.INVOKE_DYNAMIC), /** Create new object */ - NEW(Classfile.NEW, 3, Kind.NEW_OBJECT), + NEW(ClassFile.NEW, 3, Kind.NEW_OBJECT), /** Create new array */ - NEWARRAY(Classfile.NEWARRAY, 2, Kind.NEW_PRIMITIVE_ARRAY), + NEWARRAY(ClassFile.NEWARRAY, 2, Kind.NEW_PRIMITIVE_ARRAY), /** Create new array of reference */ - ANEWARRAY(Classfile.ANEWARRAY, 3, Kind.NEW_REF_ARRAY), + ANEWARRAY(ClassFile.ANEWARRAY, 3, Kind.NEW_REF_ARRAY), /** Get length of array */ - ARRAYLENGTH(Classfile.ARRAYLENGTH, 1, Kind.OPERATOR, TypeKind.IntType), + ARRAYLENGTH(ClassFile.ARRAYLENGTH, 1, Kind.OPERATOR, TypeKind.IntType), /** Throw exception or error */ - ATHROW(Classfile.ATHROW, 1, Kind.THROW_EXCEPTION), + ATHROW(ClassFile.ATHROW, 1, Kind.THROW_EXCEPTION), /** Check whether object is of given type */ - CHECKCAST(Classfile.CHECKCAST, 3, Kind.TYPE_CHECK), + CHECKCAST(ClassFile.CHECKCAST, 3, Kind.TYPE_CHECK), /** Determine if object is of given type */ - INSTANCEOF(Classfile.INSTANCEOF, 3, Kind.TYPE_CHECK), + INSTANCEOF(ClassFile.INSTANCEOF, 3, Kind.TYPE_CHECK), /** Enter monitor for object */ - MONITORENTER(Classfile.MONITORENTER, 1, Kind.MONITOR), + MONITORENTER(ClassFile.MONITORENTER, 1, Kind.MONITOR), /** Exit monitor for object */ - MONITOREXIT(Classfile.MONITOREXIT, 1, Kind.MONITOR), + MONITOREXIT(ClassFile.MONITOREXIT, 1, Kind.MONITOR), /** Create new multidimensional array */ - MULTIANEWARRAY(Classfile.MULTIANEWARRAY, 4, Kind.NEW_MULTI_ARRAY), + MULTIANEWARRAY(ClassFile.MULTIANEWARRAY, 4, Kind.NEW_MULTI_ARRAY), /** Branch if reference is null */ - IFNULL(Classfile.IFNULL, 3, Kind.BRANCH, TypeKind.ReferenceType), + IFNULL(ClassFile.IFNULL, 3, Kind.BRANCH, TypeKind.ReferenceType), /** Branch if reference not null */ - IFNONNULL(Classfile.IFNONNULL, 3, Kind.BRANCH, TypeKind.IntType), + IFNONNULL(ClassFile.IFNONNULL, 3, Kind.BRANCH, TypeKind.IntType), /** Branch always (wide index) */ - GOTO_W(Classfile.GOTO_W, 5, Kind.BRANCH, TypeKind.VoidType), + GOTO_W(ClassFile.GOTO_W, 5, Kind.BRANCH, TypeKind.VoidType), - /** Jump subroutine (wide index) */ - JSR_W(Classfile.JSR_W, 5, Kind.DISCONTINUED_JSR), + /** + * Jump subroutine (wide index) is discontinued opcode + * @see java.lang.classfile.instruction.DiscontinuedInstruction + */ + JSR_W(ClassFile.JSR_W, 5, Kind.DISCONTINUED_JSR), /** Load int from local variable (wide index) */ - ILOAD_W((Classfile.WIDE << 8) | Classfile.ILOAD, 4, Kind.LOAD, TypeKind.IntType, -1), + ILOAD_W((ClassFile.WIDE << 8) | ClassFile.ILOAD, 4, Kind.LOAD, TypeKind.IntType, -1), /** Load long from local variable (wide index) */ - LLOAD_W((Classfile.WIDE << 8) | Classfile.LLOAD, 4, Kind.LOAD, TypeKind.LongType, -1), + LLOAD_W((ClassFile.WIDE << 8) | ClassFile.LLOAD, 4, Kind.LOAD, TypeKind.LongType, -1), /** Load float from local variable (wide index) */ - FLOAD_W((Classfile.WIDE << 8) | Classfile.FLOAD, 4, Kind.LOAD, TypeKind.FloatType, -1), + FLOAD_W((ClassFile.WIDE << 8) | ClassFile.FLOAD, 4, Kind.LOAD, TypeKind.FloatType, -1), /** Load double from local variable (wide index) */ - DLOAD_W((Classfile.WIDE << 8) | Classfile.DLOAD, 4, Kind.LOAD, TypeKind.DoubleType, -1), + DLOAD_W((ClassFile.WIDE << 8) | ClassFile.DLOAD, 4, Kind.LOAD, TypeKind.DoubleType, -1), /** Load reference from local variable (wide index) */ - ALOAD_W((Classfile.WIDE << 8) | Classfile.ALOAD, 4, Kind.LOAD, TypeKind.ReferenceType, -1), + ALOAD_W((ClassFile.WIDE << 8) | ClassFile.ALOAD, 4, Kind.LOAD, TypeKind.ReferenceType, -1), /** Store int into local variable (wide index) */ - ISTORE_W((Classfile.WIDE << 8) | Classfile.ISTORE, 4, Kind.STORE, TypeKind.IntType, -1), + ISTORE_W((ClassFile.WIDE << 8) | ClassFile.ISTORE, 4, Kind.STORE, TypeKind.IntType, -1), /** Store long into local variable (wide index) */ - LSTORE_W((Classfile.WIDE << 8) | Classfile.LSTORE, 4, Kind.STORE, TypeKind.LongType, -1), + LSTORE_W((ClassFile.WIDE << 8) | ClassFile.LSTORE, 4, Kind.STORE, TypeKind.LongType, -1), /** Store float into local variable (wide index) */ - FSTORE_W((Classfile.WIDE << 8) | Classfile.FSTORE, 4, Kind.STORE, TypeKind.FloatType, -1), + FSTORE_W((ClassFile.WIDE << 8) | ClassFile.FSTORE, 4, Kind.STORE, TypeKind.FloatType, -1), /** Store double into local variable (wide index) */ - DSTORE_W((Classfile.WIDE << 8) | Classfile.DSTORE, 4, Kind.STORE, TypeKind.DoubleType, -1), + DSTORE_W((ClassFile.WIDE << 8) | ClassFile.DSTORE, 4, Kind.STORE, TypeKind.DoubleType, -1), /** Store reference into local variable (wide index) */ - ASTORE_W((Classfile.WIDE << 8) | Classfile.ASTORE, 4, Kind.STORE, TypeKind.ReferenceType, -1), + ASTORE_W((ClassFile.WIDE << 8) | ClassFile.ASTORE, 4, Kind.STORE, TypeKind.ReferenceType, -1), - /** Return from subroutine (wide index) */ - RET_W((Classfile.WIDE << 8) | Classfile.RET, 4, Kind.DISCONTINUED_RET), + /** + * Return from subroutine (wide index) is discontinued opcode + * @see java.lang.classfile.instruction.DiscontinuedInstruction + */ + RET_W((ClassFile.WIDE << 8) | ClassFile.RET, 4, Kind.DISCONTINUED_RET), /** Increment local variable by constant (wide index) */ - IINC_W((Classfile.WIDE << 8) | Classfile.IINC, 6, Kind.INCREMENT, TypeKind.IntType, -1); + IINC_W((ClassFile.WIDE << 8) | ClassFile.IINC, 6, Kind.INCREMENT, TypeKind.IntType, -1); /** * Kinds of opcodes. + * + * @since 22 */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public static enum Kind { /** @@ -1042,6 +1061,7 @@ public static enum Kind { * * @see Opcode#JSR * @see Opcode#JSR_W + * @see java.lang.classfile.instruction.DiscontinuedInstruction */ DISCONTINUED_JSR, @@ -1050,6 +1070,7 @@ public static enum Kind { * * @see Opcode#RET * @see Opcode#RET_W + * @see java.lang.classfile.instruction.DiscontinuedInstruction */ DISCONTINUED_RET; } diff --git a/src/java.base/share/classes/jdk/internal/classfile/PseudoInstruction.java b/src/java.base/share/classes/java/lang/classfile/PseudoInstruction.java similarity index 76% rename from src/java.base/share/classes/jdk/internal/classfile/PseudoInstruction.java rename to src/java.base/share/classes/java/lang/classfile/PseudoInstruction.java index d419e2314e91b..8a2db569ba0c3 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/PseudoInstruction.java +++ b/src/java.base/share/classes/java/lang/classfile/PseudoInstruction.java @@ -22,16 +22,17 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; -import jdk.internal.classfile.attribute.CodeAttribute; -import jdk.internal.classfile.instruction.CharacterRange; -import jdk.internal.classfile.instruction.ExceptionCatch; -import jdk.internal.classfile.instruction.LabelTarget; -import jdk.internal.classfile.instruction.LineNumber; -import jdk.internal.classfile.instruction.LocalVariable; -import jdk.internal.classfile.instruction.LocalVariableType; +import java.lang.classfile.attribute.CodeAttribute; +import java.lang.classfile.instruction.CharacterRange; +import java.lang.classfile.instruction.ExceptionCatch; +import java.lang.classfile.instruction.LabelTarget; +import java.lang.classfile.instruction.LineNumber; +import java.lang.classfile.instruction.LocalVariable; +import java.lang.classfile.instruction.LocalVariableType; import jdk.internal.classfile.impl.AbstractPseudoInstruction; +import jdk.internal.javac.PreviewFeature; /** * Models metadata about a {@link CodeAttribute}, such as entries in the @@ -39,8 +40,11 @@ * between instructions and labels. Pseudo-instructions are delivered as part * of the element stream of a {@link CodeModel}. Delivery of some * pseudo-instructions can be disabled by modifying the value of classfile - * options (e.g., {@link Classfile.DebugElementsOption}). + * options (e.g., {@link ClassFile.DebugElementsOption}). + * + * @since 22 */ +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public sealed interface PseudoInstruction extends CodeElement permits CharacterRange, ExceptionCatch, LabelTarget, LineNumber, LocalVariable, LocalVariableType, AbstractPseudoInstruction { diff --git a/src/java.base/share/classes/jdk/internal/classfile/Signature.java b/src/java.base/share/classes/java/lang/classfile/Signature.java similarity index 91% rename from src/java.base/share/classes/jdk/internal/classfile/Signature.java rename to src/java.base/share/classes/java/lang/classfile/Signature.java index c9c7ae1c705f1..e5ed92acb833b 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/Signature.java +++ b/src/java.base/share/classes/java/lang/classfile/Signature.java @@ -22,7 +22,7 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; import java.lang.constant.ClassDesc; import jdk.internal.classfile.impl.SignaturesImpl; @@ -31,10 +31,15 @@ import static java.util.Objects.requireNonNull; import java.util.Optional; import jdk.internal.classfile.impl.Util; +import jdk.internal.javac.PreviewFeature; /** * Models generic Java type signatures, as defined in {@jvms 4.7.9.1}. + * + * @sealedGraph + * @since 22 */ +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public sealed interface Signature { /** {@return the raw signature string} */ @@ -50,8 +55,8 @@ public static Signature parseFrom(String javaTypeSignature) { } /** + * {@return a Java type signature} * @param classDesc the symbolic description of the Java type - * @return Java type signature */ public static Signature of(ClassDesc classDesc) { requireNonNull(classDesc); @@ -64,7 +69,10 @@ public static Signature of(ClassDesc classDesc) { /** * Models the signature of a primitive type or void + * + * @since 22 */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public sealed interface BaseTypeSig extends Signature permits SignaturesImpl.BaseTypeSigImpl { @@ -97,7 +105,11 @@ public static BaseTypeSig of(char baseType) { /** * Models the signature of a reference type, which may be a class, interface, * type variable, or array type. + * + * @sealedGraph + * @since 22 */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public sealed interface RefTypeSig extends Signature permits ArrayTypeSig, ClassTypeSig, TypeVarSig { @@ -105,7 +117,10 @@ public sealed interface RefTypeSig /** * Models the signature of a possibly-parameterized class or interface type. + * + * @since 22 */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public sealed interface ClassTypeSig extends RefTypeSig, ThrowableSig permits SignaturesImpl.ClassTypeSigImpl { @@ -169,14 +184,20 @@ public static ClassTypeSig of(ClassTypeSig outerType, String className, TypeArg. /** * Models the type argument. + * + * @since 22 */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public sealed interface TypeArg permits SignaturesImpl.TypeArgImpl { /** * Indicator for whether a wildcard has default bound, no bound, * an upper bound, or a lower bound + * + * @since 22 */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public enum WildcardIndicator { /** @@ -252,7 +273,10 @@ public static TypeArg of(WildcardIndicator wildcard, Optional boundT /** * Models the signature of a type variable. + * + * @since 22 */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public sealed interface TypeVarSig extends RefTypeSig, ThrowableSig permits SignaturesImpl.TypeVarSigImpl { @@ -271,7 +295,10 @@ public static TypeVarSig of(String identifier) { /** * Models the signature of an array type. + * + * @since 22 */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public sealed interface ArrayTypeSig extends RefTypeSig permits SignaturesImpl.ArrayTypeSigImpl { @@ -304,7 +331,10 @@ public static ArrayTypeSig of(int dims, Signature componentSignature) { /** * Models a signature for a type parameter of a generic class or method. + * + * @since 22 */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public sealed interface TypeParam permits SignaturesImpl.TypeParamImpl { @@ -346,7 +376,11 @@ public static TypeParam of(String identifier, Optional classBound, R /** * Models a signature for a throwable type. + * + * @sealedGraph + * @since 22 */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public sealed interface ThrowableSig extends Signature { } } diff --git a/src/java.base/share/classes/jdk/internal/classfile/Superclass.java b/src/java.base/share/classes/java/lang/classfile/Superclass.java similarity index 86% rename from src/java.base/share/classes/jdk/internal/classfile/Superclass.java rename to src/java.base/share/classes/java/lang/classfile/Superclass.java index f8ca2359b5cf2..70b18bb14d0e2 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/Superclass.java +++ b/src/java.base/share/classes/java/lang/classfile/Superclass.java @@ -22,15 +22,19 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; -import jdk.internal.classfile.constantpool.ClassEntry; +import java.lang.classfile.constantpool.ClassEntry; import jdk.internal.classfile.impl.SuperclassImpl; +import jdk.internal.javac.PreviewFeature; /** * Models the superclass of a class. Delivered as a {@link - * jdk.internal.classfile.ClassElement} when traversing a {@link ClassModel}. + * java.lang.classfile.ClassElement} when traversing a {@link ClassModel}. + * + * @since 22 */ +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public sealed interface Superclass extends ClassElement permits SuperclassImpl { diff --git a/src/java.base/share/classes/jdk/internal/classfile/TypeAnnotation.java b/src/java.base/share/classes/java/lang/classfile/TypeAnnotation.java similarity index 89% rename from src/java.base/share/classes/jdk/internal/classfile/TypeAnnotation.java rename to src/java.base/share/classes/java/lang/classfile/TypeAnnotation.java index 4b9c1f1bbc4bb..add1872f6412a 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/TypeAnnotation.java +++ b/src/java.base/share/classes/java/lang/classfile/TypeAnnotation.java @@ -23,54 +23,61 @@ * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; import java.lang.constant.ClassDesc; import java.util.List; -import jdk.internal.classfile.attribute.RuntimeInvisibleTypeAnnotationsAttribute; -import jdk.internal.classfile.attribute.RuntimeVisibleTypeAnnotationsAttribute; -import jdk.internal.classfile.constantpool.Utf8Entry; +import java.lang.classfile.attribute.RuntimeInvisibleTypeAnnotationsAttribute; +import java.lang.classfile.attribute.RuntimeVisibleTypeAnnotationsAttribute; +import java.lang.classfile.constantpool.Utf8Entry; import jdk.internal.classfile.impl.TargetInfoImpl; import jdk.internal.classfile.impl.UnboundAttribute; -import static jdk.internal.classfile.Classfile.TAT_CAST; -import static jdk.internal.classfile.Classfile.TAT_CLASS_EXTENDS; -import static jdk.internal.classfile.Classfile.TAT_CLASS_TYPE_PARAMETER; -import static jdk.internal.classfile.Classfile.TAT_CLASS_TYPE_PARAMETER_BOUND; -import static jdk.internal.classfile.Classfile.TAT_CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT; -import static jdk.internal.classfile.Classfile.TAT_CONSTRUCTOR_REFERENCE; -import static jdk.internal.classfile.Classfile.TAT_CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT; -import static jdk.internal.classfile.Classfile.TAT_EXCEPTION_PARAMETER; -import static jdk.internal.classfile.Classfile.TAT_FIELD; -import static jdk.internal.classfile.Classfile.TAT_INSTANCEOF; -import static jdk.internal.classfile.Classfile.TAT_LOCAL_VARIABLE; -import static jdk.internal.classfile.Classfile.TAT_METHOD_FORMAL_PARAMETER; -import static jdk.internal.classfile.Classfile.TAT_METHOD_INVOCATION_TYPE_ARGUMENT; -import static jdk.internal.classfile.Classfile.TAT_METHOD_RECEIVER; -import static jdk.internal.classfile.Classfile.TAT_METHOD_REFERENCE; -import static jdk.internal.classfile.Classfile.TAT_METHOD_REFERENCE_TYPE_ARGUMENT; -import static jdk.internal.classfile.Classfile.TAT_METHOD_RETURN; -import static jdk.internal.classfile.Classfile.TAT_METHOD_TYPE_PARAMETER; -import static jdk.internal.classfile.Classfile.TAT_METHOD_TYPE_PARAMETER_BOUND; -import static jdk.internal.classfile.Classfile.TAT_NEW; -import static jdk.internal.classfile.Classfile.TAT_RESOURCE_VARIABLE; -import static jdk.internal.classfile.Classfile.TAT_THROWS; +import static java.lang.classfile.ClassFile.TAT_CAST; +import static java.lang.classfile.ClassFile.TAT_CLASS_EXTENDS; +import static java.lang.classfile.ClassFile.TAT_CLASS_TYPE_PARAMETER; +import static java.lang.classfile.ClassFile.TAT_CLASS_TYPE_PARAMETER_BOUND; +import static java.lang.classfile.ClassFile.TAT_CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT; +import static java.lang.classfile.ClassFile.TAT_CONSTRUCTOR_REFERENCE; +import static java.lang.classfile.ClassFile.TAT_CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT; +import static java.lang.classfile.ClassFile.TAT_EXCEPTION_PARAMETER; +import static java.lang.classfile.ClassFile.TAT_FIELD; +import static java.lang.classfile.ClassFile.TAT_INSTANCEOF; +import static java.lang.classfile.ClassFile.TAT_LOCAL_VARIABLE; +import static java.lang.classfile.ClassFile.TAT_METHOD_FORMAL_PARAMETER; +import static java.lang.classfile.ClassFile.TAT_METHOD_INVOCATION_TYPE_ARGUMENT; +import static java.lang.classfile.ClassFile.TAT_METHOD_RECEIVER; +import static java.lang.classfile.ClassFile.TAT_METHOD_REFERENCE; +import static java.lang.classfile.ClassFile.TAT_METHOD_REFERENCE_TYPE_ARGUMENT; +import static java.lang.classfile.ClassFile.TAT_METHOD_RETURN; +import static java.lang.classfile.ClassFile.TAT_METHOD_TYPE_PARAMETER; +import static java.lang.classfile.ClassFile.TAT_METHOD_TYPE_PARAMETER_BOUND; +import static java.lang.classfile.ClassFile.TAT_NEW; +import static java.lang.classfile.ClassFile.TAT_RESOURCE_VARIABLE; +import static java.lang.classfile.ClassFile.TAT_THROWS; import jdk.internal.classfile.impl.TemporaryConstantPool; +import jdk.internal.javac.PreviewFeature; /** * Models an annotation on a type use, as defined in {@jvms 4.7.19} and {@jvms 4.7.20}. * * @see RuntimeVisibleTypeAnnotationsAttribute * @see RuntimeInvisibleTypeAnnotationsAttribute + * + * @since 22 */ +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public sealed interface TypeAnnotation extends Annotation permits UnboundAttribute.UnboundTypeAnnotation { /** * The kind of target on which the annotation appears, as defined in {@jvms 4.7.20.1}. + * + * @since 22 */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public enum TargetType { /** For annotations on a class type parameter declaration. */ CLASS_TYPE_PARAMETER(TAT_CLASS_TYPE_PARAMETER, 1), @@ -228,7 +235,11 @@ static TypeAnnotation of(TargetInfo targetInfo, List targetPa /** * Specifies which type in a declaration or expression is being annotated. + * + * @sealedGraph + * @since 22 */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) sealed interface TargetInfo { /** @@ -392,9 +403,9 @@ static CatchTarget ofExceptionParameter(int exceptionTableIndex) { /** * {@return a target for annotations on the type in an instanceof expression or a new expression, * or the type before the :: in a method reference expression} - * {@param targetType {@link TargetType#INSTANCEOF}, {@link TargetType#NEW}, - * {@link TargetType#CONSTRUCTOR_REFERENCE}, - * or {@link TargetType#METHOD_REFERENCE}} + * @param targetType {@link TargetType#INSTANCEOF}, {@link TargetType#NEW}, + * {@link TargetType#CONSTRUCTOR_REFERENCE}, + * or {@link TargetType#METHOD_REFERENCE} * @param target the code label corresponding to the instruction */ static OffsetTarget ofOffset(TargetType targetType, Label target) { @@ -438,10 +449,10 @@ static OffsetTarget ofMethodReference(Label target) { * or on the i'th type argument in the explicit type argument list for any of the following: * a new expression, an explicit constructor invocation statement, a method invocation expression, * or a method reference expression} - * {@param targetType {@link TargetType#CAST}, {@link TargetType#CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT}, - * {@link TargetType#METHOD_INVOCATION_TYPE_ARGUMENT}, - * {@link TargetType#CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT}, - * or {@link TargetType#METHOD_REFERENCE_TYPE_ARGUMENT}} + * @param targetType {@link TargetType#CAST}, {@link TargetType#CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT}, + * {@link TargetType#METHOD_INVOCATION_TYPE_ARGUMENT}, + * {@link TargetType#CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT}, + * or {@link TargetType#METHOD_REFERENCE_TYPE_ARGUMENT} * @param target the code label corresponding to the instruction * @param typeArgumentIndex specifies which type in the cast operator or argument is annotated */ @@ -503,7 +514,10 @@ static TypeArgumentTarget ofMethodReferenceTypeArgument(Label target, int typeAr * Indicates that an annotation appears on the declaration of the i'th type * parameter of a generic class, generic interface, generic method, or * generic constructor. + * + * @since 22 */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) sealed interface TypeParameterTarget extends TargetInfo permits TargetInfoImpl.TypeParameterTargetImpl { @@ -519,7 +533,10 @@ sealed interface TypeParameterTarget extends TargetInfo /** * Indicates that an annotation appears on a type in the extends or implements * clause of a class or interface declaration. + * + * @since 22 */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) sealed interface SupertypeTarget extends TargetInfo permits TargetInfoImpl.SupertypeTargetImpl { @@ -540,7 +557,10 @@ sealed interface SupertypeTarget extends TargetInfo * Indicates that an annotation appears on the i'th bound of the j'th * type parameter declaration of a generic class, interface, method, or * constructor. + * + * @since 22 */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) sealed interface TypeParameterBoundTarget extends TargetInfo permits TargetInfoImpl.TypeParameterBoundTargetImpl { @@ -563,7 +583,10 @@ sealed interface TypeParameterBoundTarget extends TargetInfo * Indicates that an annotation appears on either the type in a field * declaration, the return type of a method, the type of a newly constructed * object, or the receiver type of a method or constructor. + * + * @since 22 */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) sealed interface EmptyTarget extends TargetInfo permits TargetInfoImpl.EmptyTargetImpl { } @@ -571,7 +594,10 @@ sealed interface EmptyTarget extends TargetInfo /** * Indicates that an annotation appears on the type in a formal parameter * declaration of a method, constructor, or lambda expression. + * + * @since 22 */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) sealed interface FormalParameterTarget extends TargetInfo permits TargetInfoImpl.FormalParameterTargetImpl { @@ -587,7 +613,10 @@ sealed interface FormalParameterTarget extends TargetInfo /** * Indicates that an annotation appears on the i'th type in the throws * clause of a method or constructor declaration. + * + * @since 22 */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) sealed interface ThrowsTarget extends TargetInfo permits TargetInfoImpl.ThrowsTargetImpl { @@ -596,7 +625,7 @@ sealed interface ThrowsTarget extends TargetInfo * Exceptions attribute of the method_info structure enclosing the * RuntimeVisibleTypeAnnotations attribute. * - * @return the index into the list jdk.internal.classfile.attribute.ExceptionsAttribute.exceptions() + * @return the index into the list java.lang.classfile.attribute.ExceptionsAttribute.exceptions() */ int throwsTargetIndex(); } @@ -604,12 +633,15 @@ sealed interface ThrowsTarget extends TargetInfo /** * Indicates that an annotation appears on the type in a local variable declaration, * including a variable declared as a resource in a try-with-resources statement. + * + * @since 22 */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) sealed interface LocalVarTarget extends TargetInfo permits TargetInfoImpl.LocalVarTargetImpl { /** - * @return the table of local variable location/indices. + * {@return the table of local variable location/indices.} */ List table(); } @@ -618,7 +650,10 @@ sealed interface LocalVarTarget extends TargetInfo * Indicates a range of code array offsets within which a local variable * has a value, and the index into the local variable array of the current * frame at which that local variable can be found. + * + * @since 22 */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) sealed interface LocalVarTargetInfo permits TargetInfoImpl.LocalVarTargetInfoImpl { @@ -662,7 +697,10 @@ static LocalVarTargetInfo of(Label startLabel, Label endLabel, int index) { /** * Indicates that an annotation appears on the i'th type in an exception parameter * declaration. + * + * @since 22 */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) sealed interface CatchTarget extends TargetInfo permits TargetInfoImpl.CatchTargetImpl { @@ -678,7 +716,10 @@ sealed interface CatchTarget extends TargetInfo /** * Indicates that an annotation appears on either the type in an instanceof expression * or a new expression, or the type before the :: in a method reference expression. + * + * @since 22 */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) sealed interface OffsetTarget extends TargetInfo permits TargetInfoImpl.OffsetTargetImpl { @@ -697,7 +738,10 @@ sealed interface OffsetTarget extends TargetInfo * expression, or on the i'th type argument in the explicit type argument list for any of the following: a new * expression, an explicit constructor invocation statement, a method invocation expression, or a method reference * expression. + * + * @since 22 */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) sealed interface TypeArgumentTarget extends TargetInfo permits TargetInfoImpl.TypeArgumentTargetImpl { @@ -730,13 +774,19 @@ sealed interface TypeArgumentTarget extends TargetInfo /** * JVMS: Type_path structure identifies which part of the type is annotated, * as defined in {@jvms 4.7.20.2} + * + * @since 22 */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) sealed interface TypePathComponent permits UnboundAttribute.TypePathComponentImpl { /** * Type path kind, as defined in {@jvms 4.7.20.2} + * + * @since 22 */ + @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public enum Kind { /** Annotation is deeper in an array type */ diff --git a/src/java.base/share/classes/jdk/internal/classfile/TypeKind.java b/src/java.base/share/classes/java/lang/classfile/TypeKind.java similarity index 97% rename from src/java.base/share/classes/jdk/internal/classfile/TypeKind.java rename to src/java.base/share/classes/java/lang/classfile/TypeKind.java index cc61c840dace3..bf2435f43ef0e 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/TypeKind.java +++ b/src/java.base/share/classes/java/lang/classfile/TypeKind.java @@ -23,13 +23,17 @@ * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; import java.lang.invoke.TypeDescriptor; +import jdk.internal.javac.PreviewFeature; /** * Describes the types that can be part of a field or method descriptor. + * + * @since 22 */ +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public enum TypeKind { /** the primitive type byte */ ByteType("byte", "B", 8), diff --git a/src/java.base/share/classes/jdk/internal/classfile/WritableElement.java b/src/java.base/share/classes/java/lang/classfile/WritableElement.java similarity index 84% rename from src/java.base/share/classes/jdk/internal/classfile/WritableElement.java rename to src/java.base/share/classes/java/lang/classfile/WritableElement.java index 8e75f996accbd..9a4db4e370f4b 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/WritableElement.java +++ b/src/java.base/share/classes/java/lang/classfile/WritableElement.java @@ -22,20 +22,25 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package jdk.internal.classfile; +package java.lang.classfile; -import jdk.internal.classfile.constantpool.ConstantPoolBuilder; -import jdk.internal.classfile.constantpool.PoolEntry; +import java.lang.classfile.constantpool.ConstantPoolBuilder; +import java.lang.classfile.constantpool.PoolEntry; import jdk.internal.classfile.impl.DirectFieldBuilder; import jdk.internal.classfile.impl.DirectMethodBuilder; +import jdk.internal.javac.PreviewFeature; /** * A classfile element that can encode itself as a stream of bytes in the * encoding expected by the classfile format. * * @param the type of the entity + * + * @sealedGraph + * @since 22 */ -public sealed interface WritableElement extends ClassfileElement +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) +public sealed interface WritableElement extends ClassFileElement permits Annotation, AnnotationElement, AnnotationValue, Attribute, PoolEntry, BootstrapMethodEntry, FieldModel, MethodModel, ConstantPoolBuilder, DirectFieldBuilder, DirectMethodBuilder { diff --git a/src/java.base/share/classes/jdk/internal/classfile/attribute/AnnotationDefaultAttribute.java b/src/java.base/share/classes/java/lang/classfile/attribute/AnnotationDefaultAttribute.java similarity index 86% rename from src/java.base/share/classes/jdk/internal/classfile/attribute/AnnotationDefaultAttribute.java rename to src/java.base/share/classes/java/lang/classfile/attribute/AnnotationDefaultAttribute.java index 3a0842cc5f6f6..16149ff66c522 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/attribute/AnnotationDefaultAttribute.java +++ b/src/java.base/share/classes/java/lang/classfile/attribute/AnnotationDefaultAttribute.java @@ -23,14 +23,15 @@ * questions. */ -package jdk.internal.classfile.attribute; +package java.lang.classfile.attribute; -import jdk.internal.classfile.AnnotationValue; -import jdk.internal.classfile.Attribute; -import jdk.internal.classfile.MethodElement; -import jdk.internal.classfile.MethodModel; +import java.lang.classfile.AnnotationValue; +import java.lang.classfile.Attribute; +import java.lang.classfile.MethodElement; +import java.lang.classfile.MethodModel; import jdk.internal.classfile.impl.BoundAttribute; import jdk.internal.classfile.impl.UnboundAttribute; +import jdk.internal.javac.PreviewFeature; /** * Models the {@code AnnotationDefault} attribute {@jvms 4.7.22}, which can @@ -41,7 +42,12 @@ * The attribute does not permit multiple instances in a given location. * Subsequent occurrence of the attribute takes precedence during the attributed * element build or transformation. + *

    + * The attribute was introduced in the Java SE Platform version 5.0. + * + * @since 22 */ +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public sealed interface AnnotationDefaultAttribute extends Attribute, MethodElement permits BoundAttribute.BoundAnnotationDefaultAttr, diff --git a/src/java.base/share/classes/jdk/internal/classfile/attribute/BootstrapMethodsAttribute.java b/src/java.base/share/classes/java/lang/classfile/attribute/BootstrapMethodsAttribute.java similarity index 86% rename from src/java.base/share/classes/jdk/internal/classfile/attribute/BootstrapMethodsAttribute.java rename to src/java.base/share/classes/java/lang/classfile/attribute/BootstrapMethodsAttribute.java index 638043f0e0940..436a7f80b1c7f 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/attribute/BootstrapMethodsAttribute.java +++ b/src/java.base/share/classes/java/lang/classfile/attribute/BootstrapMethodsAttribute.java @@ -23,15 +23,16 @@ * questions. */ -package jdk.internal.classfile.attribute; +package java.lang.classfile.attribute; import java.util.List; -import jdk.internal.classfile.Attribute; -import jdk.internal.classfile.BootstrapMethodEntry; -import jdk.internal.classfile.constantpool.ConstantPool; +import java.lang.classfile.Attribute; +import java.lang.classfile.BootstrapMethodEntry; +import java.lang.classfile.constantpool.ConstantPool; import jdk.internal.classfile.impl.BoundAttribute; import jdk.internal.classfile.impl.UnboundAttribute; +import jdk.internal.javac.PreviewFeature; /** * Models the {@code BootstrapMethods} attribute {@jvms 4.7.23}, which serves as @@ -41,7 +42,12 @@ * The attribute does not permit multiple instances in a given location. * Subsequent occurrence of the attribute takes precedence during the attributed * element build or transformation. + *

    + * The attribute was introduced in the Java SE Platform version 7. + * + * @since 22 */ +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public sealed interface BootstrapMethodsAttribute extends Attribute permits BoundAttribute.BoundBootstrapMethodsAttribute, diff --git a/src/java.base/share/classes/jdk/internal/classfile/attribute/CharacterRangeInfo.java b/src/java.base/share/classes/java/lang/classfile/attribute/CharacterRangeInfo.java similarity index 88% rename from src/java.base/share/classes/jdk/internal/classfile/attribute/CharacterRangeInfo.java rename to src/java.base/share/classes/java/lang/classfile/attribute/CharacterRangeInfo.java index cf995ef6fea53..37abcb027132e 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/attribute/CharacterRangeInfo.java +++ b/src/java.base/share/classes/java/lang/classfile/attribute/CharacterRangeInfo.java @@ -22,13 +22,17 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package jdk.internal.classfile.attribute; +package java.lang.classfile.attribute; import jdk.internal.classfile.impl.UnboundAttribute; +import jdk.internal.javac.PreviewFeature; /** * Models a single character range in the {@link CharacterRangeTableAttribute}. + * + * @since 22 */ +@PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API) public sealed interface CharacterRangeInfo permits UnboundAttribute.UnboundCharacterRangeInfo { @@ -66,17 +70,17 @@ public sealed interface CharacterRangeInfo * The value of the flags item describes the kind of range. Multiple flags * may be set within flags. *

    */ -public class PassFailJFrame { +public final class PassFailJFrame { private static final String TITLE = "Test Instruction Frame"; private static final long TEST_TIMEOUT = 5; @@ -277,12 +281,18 @@ private PassFailJFrame(Builder builder) throws InterruptedException, this(builder.title, builder.instructions, builder.testTimeOut, builder.rows, builder.columns, builder.screenCapture); - if (builder.windowCreator != null) { + if (builder.windowListCreator != null) { invokeOnEDT(() -> - builder.testWindows = builder.windowCreator.createTestUI()); + builder.testWindows = builder.windowListCreator.createTestUI()); + if (builder.testWindows == null) { + throw new IllegalStateException("Window list creator returned null list"); + } } if (builder.testWindows != null) { + if (builder.testWindows.isEmpty()) { + throw new IllegalStateException("Window list is empty"); + } addTestWindow(builder.testWindows); builder.testWindows .forEach(w -> w.addWindowListener(windowClosingHandler)); @@ -293,17 +303,15 @@ private PassFailJFrame(Builder builder) throws InterruptedException, builder.positionWindows .positionTestWindows(unmodifiableList(builder.testWindows), builder.instructionUIHandler); - - windowList.forEach(w -> w.setVisible(true)); }); } else if (builder.testWindows.size() == 1) { Window window = builder.testWindows.get(0); positionTestWindow(window, builder.position); - window.setVisible(true); } else { positionTestWindow(null, builder.position); } } + showAllWindows(); } /** @@ -369,7 +377,7 @@ private static void createUI(String title, String instructions, frame.add(buttonsPanel, BorderLayout.SOUTH); frame.pack(); frame.setLocationRelativeTo(null); - windowList.add(frame); + addTestWindow(frame); } private static JTextComponent configurePlainText(String instructions, @@ -400,14 +408,27 @@ private static JTextComponent configureHTML(String instructions, /** - * Creates one or more windows for test UI. + * Creates a test UI window. */ @FunctionalInterface public interface WindowCreator { + /** + * Creates a window for test UI. + * This method is called by the framework on the EDT. + * @return a test UI window + */ + Window createTestUI(); + } + + /** + * Creates a list of test UI windows. + */ + @FunctionalInterface + public interface WindowListCreator { /** * Creates one or more windows for test UI. * This method is called by the framework on the EDT. - * @return a list of windows. + * @return a list of test UI windows */ List createTestUI(); } @@ -423,8 +444,13 @@ public interface PositionWindows { * the instruction UI frame was positioned on the screen. *

    * The list of the test windows contains the windows - * that were passed to the framework via - * {@link Builder#testUI(WindowCreator) testUI} method. + * that were passed to the framework via the + * {@link Builder#testUI(Window...) testUI(Window...)} method or + * that were created with {@code WindowCreator} + * or {@code WindowListCreator} which were passed via + * {@link Builder#testUI(WindowCreator) testUI(WindowCreator)} or + * {@link Builder#testUI(WindowListCreator) testUI(WindowListCreator)} + * correspondingly. * * @param testWindows the list of test windows * @param instructionUI information about the instruction frame @@ -859,6 +885,29 @@ public static synchronized void addTestWindow(Collection testW windowList.addAll(testWindows); } + /** + * Displays all the windows in {@code windowList}. + * + * @throws InterruptedException if the thread is interrupted while + * waiting for the event dispatch thread to finish running + * the {@link #showUI() showUI} + * @throws InvocationTargetException if an exception is thrown while + * the event dispatch thread executes {@code showUI} + */ + private static void showAllWindows() + throws InterruptedException, InvocationTargetException { + invokeOnEDT(PassFailJFrame::showUI); + } + + /** + * Displays all the windows in {@code windowList}; it has to be called on + * the EDT — use {@link #showAllWindows() showAllWindows} to ensure it. + */ + private static synchronized void showUI() { + windowList.forEach(w -> w.setVisible(true)); + } + + /** * Forcibly pass the test. *

    The sample usage: @@ -900,7 +949,7 @@ public static final class Builder { private boolean screenCapture; private List testWindows; - private WindowCreator windowCreator; + private WindowListCreator windowListCreator; private PositionWindows positionWindows; private InstructionUI instructionUIHandler; @@ -936,39 +985,109 @@ public Builder screenCapture() { return this; } + /** + * Adds a {@code WindowCreator} which the framework will use + * to create the test UI window. + * + * @param windowCreator a {@code WindowCreator} + * to create the test UI window + * @return this builder + * @throws IllegalArgumentException if {@code windowCreator} is {@code null} + * @throws IllegalStateException if a window creator + * or a list of test windows is already set + */ + public Builder testUI(WindowCreator windowCreator) { + if (windowCreator == null) { + throw new IllegalArgumentException("The window creator can't be null"); + } + + checkWindowsLists(); + + this.windowListCreator = () -> List.of(windowCreator.createTestUI()); + return this; + } + + /** + * Adds a {@code WindowListCreator} which the framework will use + * to create a list of test UI windows. + * + * @param windowListCreator a {@code WindowListCreator} + * to create test UI windows + * @return this builder + * @throws IllegalArgumentException if {@code windowListCreator} is {@code null} + * @throws IllegalStateException if a window creator + * or a list of test windows is already set + */ + public Builder testUI(WindowListCreator windowListCreator) { + if (windowListCreator == null) { + throw new IllegalArgumentException("The window list creator can't be null"); + } + + checkWindowsLists(); + + this.windowListCreator = windowListCreator; + return this; + } + + /** + * Adds an already created test UI window. + * The window is positioned and shown automatically. + * + * @param window a test UI window + * @return this builder + */ public Builder testUI(Window window) { return testUI(List.of(window)); } + /** + * Adds an array of already created test UI windows. + * + * @param windows an array of test UI windows + * @return this builder + */ public Builder testUI(Window... windows) { return testUI(List.of(windows)); } - public Builder testUI(List windows) { + /** + * Adds a list of already created test UI windows. + * + * @param windows a list of test UI windows + * @return this builder + * @throws IllegalArgumentException if {@code windows} is {@code null} + * or the list contains {@code null} + * @throws IllegalStateException if a window creator + * or a list of test windows is already set + */ + public Builder testUI(List windows) { if (windows == null) { throw new IllegalArgumentException("The list of windows can't be null"); } if (windows.stream() .anyMatch(Objects::isNull)) { - throw new IllegalArgumentException("The windows list can't contain null"); + throw new IllegalArgumentException("The list of windows can't contain null"); } - if (windowCreator != null) { - throw new IllegalStateException("windowCreator is already set"); - } + checkWindowsLists(); + this.testWindows = windows; return this; } - public Builder testUI(WindowCreator windowCreator) { - if (windowCreator == null) { - throw new IllegalArgumentException("The window creator can't be null"); + /** + * Verifies the state of window list and window creator. + * + * @throws IllegalStateException if a windows list creator + * or a list of test windows is already set + */ + private void checkWindowsLists() { + if (windowListCreator != null) { + throw new IllegalStateException("Window list creator is already set"); } if (testWindows != null) { - throw new IllegalStateException("testWindows are already set"); + throw new IllegalStateException("The list of test windows is already set"); } - this.windowCreator = windowCreator; - return this; } public Builder positionTestUI(PositionWindows positionWindows) { @@ -1010,13 +1129,13 @@ private void validate() { } if (position == null - && (testWindows != null || windowCreator != null)) { + && (testWindows != null || windowListCreator != null)) { position = Position.HORIZONTAL; } if (positionWindows != null) { - if (testWindows == null && windowCreator == null) { + if (testWindows == null && windowListCreator == null) { throw new IllegalStateException("To position windows, " + "provide an a list of windows to the builder"); } From 18c7922781536366be93b2478251e32e261d06bb Mon Sep 17 00:00:00 2001 From: Jan Lahoda Date: Tue, 5 Dec 2023 17:24:48 +0000 Subject: [PATCH 212/250] 8321224: ct.sym for JDK 22 contains references to internal modules Reviewed-by: darcy, vromero, asotona, ihse --- .../tools/symbolgenerator/CreateSymbols.java | 299 +- make/modules/jdk.compiler/Gendata.gmk | 7 +- .../share/data/symbols/java.base-H.sym.txt | 781 ++--- .../share/data/symbols/java.base-I.sym.txt | 518 +-- .../share/data/symbols/java.base-J.sym.txt | 3086 ++++++++++++++--- .../share/data/symbols/java.base-K.sym.txt | 965 ++---- .../share/data/symbols/java.base-L.sym.txt | 1049 +++--- .../data/symbols/java.compiler-H.sym.txt | 55 +- .../data/symbols/java.compiler-I.sym.txt | 56 +- .../data/symbols/java.compiler-J.sym.txt | 56 +- .../data/symbols/java.compiler-K.sym.txt | 56 +- .../data/symbols/java.compiler-L.sym.txt | 54 - .../data/symbols/java.datatransfer-H.sym.txt | 8 +- .../data/symbols/java.datatransfer-I.sym.txt | 36 - .../data/symbols/java.datatransfer-J.sym.txt | 36 - .../data/symbols/java.datatransfer-K.sym.txt | 36 - .../data/symbols/java.datatransfer-L.sym.txt | 36 - .../share/data/symbols/java.desktop-H.sym.txt | 800 +---- .../share/data/symbols/java.desktop-I.sym.txt | 800 +---- .../share/data/symbols/java.desktop-J.sym.txt | 808 +---- .../share/data/symbols/java.desktop-K.sym.txt | 832 +---- .../share/data/symbols/java.desktop-L.sym.txt | 824 ----- .../data/symbols/java.instrument-H.sym.txt | 31 - .../data/symbols/java.instrument-I.sym.txt | 31 - .../data/symbols/java.instrument-J.sym.txt | 31 - .../data/symbols/java.instrument-K.sym.txt | 31 - .../data/symbols/java.instrument-L.sym.txt | 31 - .../share/data/symbols/java.logging-H.sym.txt | 29 +- .../share/data/symbols/java.logging-I.sym.txt | 55 - .../share/data/symbols/java.logging-J.sym.txt | 55 - .../share/data/symbols/java.logging-K.sym.txt | 55 - .../share/data/symbols/java.logging-L.sym.txt | 21 - .../data/symbols/java.management-H.sym.txt | 240 +- .../data/symbols/java.management-I.sym.txt | 240 +- .../data/symbols/java.management-J.sym.txt | 240 +- .../data/symbols/java.management-K.sym.txt | 235 +- .../data/symbols/java.management-L.sym.txt | 233 -- .../symbols/java.management.rmi-H.sym.txt | 39 - .../symbols/java.management.rmi-I.sym.txt | 39 - .../symbols/java.management.rmi-J.sym.txt | 39 - .../symbols/java.management.rmi-K.sym.txt | 39 - .../symbols/java.management.rmi-L.sym.txt | 8 - .../share/data/symbols/java.naming-H.sym.txt | 50 +- .../share/data/symbols/java.naming-I.sym.txt | 76 - .../share/data/symbols/java.naming-J.sym.txt | 76 - .../share/data/symbols/java.naming-K.sym.txt | 50 +- .../share/data/symbols/java.naming-L.sym.txt | 76 - .../share/data/symbols/java.rmi-H.sym.txt | 26 +- .../share/data/symbols/java.rmi-I.sym.txt | 52 - .../share/data/symbols/java.rmi-J.sym.txt | 52 - .../share/data/symbols/java.rmi-K.sym.txt | 52 - .../share/data/symbols/java.rmi-L.sym.txt | 52 - .../data/symbols/java.scripting-H.sym.txt | 32 - .../data/symbols/java.scripting-I.sym.txt | 32 - .../data/symbols/java.scripting-J.sym.txt | 32 - .../data/symbols/java.scripting-K.sym.txt | 32 - .../data/symbols/java.scripting-L.sym.txt | 32 - .../data/symbols/java.security.jgss-H.sym.txt | 69 - .../data/symbols/java.security.jgss-I.sym.txt | 69 - .../data/symbols/java.security.jgss-J.sym.txt | 69 - .../data/symbols/java.security.jgss-K.sym.txt | 69 - .../data/symbols/java.security.jgss-L.sym.txt | 69 - .../data/symbols/java.security.sasl-H.sym.txt | 32 - .../data/symbols/java.security.sasl-I.sym.txt | 32 - .../data/symbols/java.security.sasl-J.sym.txt | 32 - .../data/symbols/java.security.sasl-K.sym.txt | 32 - .../data/symbols/java.security.sasl-L.sym.txt | 32 - .../data/symbols/java.smartcardio-H.sym.txt | 62 - .../data/symbols/java.smartcardio-I.sym.txt | 62 - .../data/symbols/java.smartcardio-J.sym.txt | 62 - .../data/symbols/java.smartcardio-K.sym.txt | 62 - .../data/symbols/java.smartcardio-L.sym.txt | 62 - .../share/data/symbols/java.sql-H.sym.txt | 60 - .../share/data/symbols/java.sql-I.sym.txt | 60 - .../share/data/symbols/java.sql-J.sym.txt | 60 - .../share/data/symbols/java.sql-K.sym.txt | 60 - .../share/data/symbols/java.sql-L.sym.txt | 60 - .../data/symbols/java.sql.rowset-H.sym.txt | 69 - .../data/symbols/java.sql.rowset-I.sym.txt | 69 - .../data/symbols/java.sql.rowset-J.sym.txt | 69 - .../data/symbols/java.sql.rowset-K.sym.txt | 43 +- .../data/symbols/java.sql.rowset-L.sym.txt | 69 - .../share/data/symbols/java.xml-H.sym.txt | 150 - .../share/data/symbols/java.xml-I.sym.txt | 122 +- .../share/data/symbols/java.xml-J.sym.txt | 150 - .../share/data/symbols/java.xml-K.sym.txt | 150 - .../share/data/symbols/java.xml-L.sym.txt | 150 - .../data/symbols/java.xml.crypto-H.sym.txt | 20 +- .../data/symbols/java.xml.crypto-I.sym.txt | 46 - .../data/symbols/java.xml.crypto-J.sym.txt | 46 - .../data/symbols/java.xml.crypto-K.sym.txt | 46 - .../data/symbols/java.xml.crypto-L.sym.txt | 18 - .../data/symbols/jdk.accessibility-H.sym.txt | 44 - .../data/symbols/jdk.accessibility-I.sym.txt | 18 +- .../data/symbols/jdk.accessibility-J.sym.txt | 44 - .../data/symbols/jdk.accessibility-K.sym.txt | 44 - .../data/symbols/jdk.accessibility-L.sym.txt | 44 - .../share/data/symbols/jdk.attach-H.sym.txt | 55 - .../share/data/symbols/jdk.attach-I.sym.txt | 55 - .../share/data/symbols/jdk.attach-J.sym.txt | 55 - .../share/data/symbols/jdk.attach-K.sym.txt | 55 - .../share/data/symbols/jdk.attach-L.sym.txt | 55 - .../share/data/symbols/jdk.compiler-H.sym.txt | 327 +- .../share/data/symbols/jdk.compiler-I.sym.txt | 327 +- .../share/data/symbols/jdk.compiler-J.sym.txt | 331 +- .../share/data/symbols/jdk.compiler-K.sym.txt | 325 +- .../share/data/symbols/jdk.compiler-L.sym.txt | 319 -- .../share/data/symbols/jdk.dynalink-H.sym.txt | 136 - .../share/data/symbols/jdk.dynalink-I.sym.txt | 136 - .../share/data/symbols/jdk.dynalink-J.sym.txt | 136 - .../share/data/symbols/jdk.dynalink-K.sym.txt | 136 - .../share/data/symbols/jdk.dynalink-L.sym.txt | 136 - .../data/symbols/jdk.httpserver-H.sym.txt | 34 +- .../data/symbols/jdk.httpserver-I.sym.txt | 21 +- .../data/symbols/jdk.httpserver-J.sym.txt | 47 - .../data/symbols/jdk.httpserver-K.sym.txt | 47 - .../data/symbols/jdk.httpserver-L.sym.txt | 47 - .../symbols/jdk.incubator.foreign-H.sym.txt | 409 ++- .../symbols/jdk.incubator.foreign-I.sym.txt | 555 ++- .../symbols/jdk.incubator.foreign-J.sym.txt | 676 +++- .../symbols/jdk.incubator.foreign-K.sym.txt | 542 +++ .../symbols/jdk.incubator.foreign-L.sym.txt | 237 ++ .../share/data/symbols/jdk.jartool-H.sym.txt | 31 - .../share/data/symbols/jdk.jartool-I.sym.txt | 31 - .../share/data/symbols/jdk.jartool-J.sym.txt | 31 - .../share/data/symbols/jdk.jartool-K.sym.txt | 5 +- .../share/data/symbols/jdk.jartool-L.sym.txt | 3 - .../share/data/symbols/jdk.javadoc-H.sym.txt | 6 +- .../share/data/symbols/jdk.javadoc-I.sym.txt | 8 +- .../share/data/symbols/jdk.javadoc-J.sym.txt | 36 - .../share/data/symbols/jdk.javadoc-K.sym.txt | 36 - .../share/data/symbols/jdk.javadoc-L.sym.txt | 8 - .../share/data/symbols/jdk.jconsole-H.sym.txt | 31 - .../share/data/symbols/jdk.jconsole-I.sym.txt | 31 - .../share/data/symbols/jdk.jconsole-J.sym.txt | 31 - .../share/data/symbols/jdk.jconsole-K.sym.txt | 31 - .../share/data/symbols/jdk.jconsole-L.sym.txt | 31 - .../share/data/symbols/jdk.jdi-H.sym.txt | 395 --- .../share/data/symbols/jdk.jdi-I.sym.txt | 395 --- .../share/data/symbols/jdk.jdi-J.sym.txt | 362 +- .../share/data/symbols/jdk.jdi-K.sym.txt | 395 --- .../share/data/symbols/jdk.jdi-L.sym.txt | 361 -- .../share/data/symbols/jdk.jfr-J.sym.txt | 4 +- .../share/data/symbols/jdk.jfr-K.sym.txt | 5 +- .../share/data/symbols/jdk.jfr-L.sym.txt | 3 - .../share/data/symbols/jdk.jshell-H.sym.txt | 80 +- .../share/data/symbols/jdk.jshell-I.sym.txt | 108 - .../share/data/symbols/jdk.jshell-J.sym.txt | 82 +- .../share/data/symbols/jdk.jshell-K.sym.txt | 82 +- .../share/data/symbols/jdk.jshell-L.sym.txt | 78 - .../share/data/symbols/jdk.jsobject-H.sym.txt | 31 - .../share/data/symbols/jdk.jsobject-I.sym.txt | 31 - .../share/data/symbols/jdk.jsobject-J.sym.txt | 31 - .../share/data/symbols/jdk.jsobject-K.sym.txt | 31 - .../share/data/symbols/jdk.jsobject-L.sym.txt | 31 - .../data/symbols/jdk.management-H.sym.txt | 49 - .../data/symbols/jdk.management-I.sym.txt | 49 - .../data/symbols/jdk.management-J.sym.txt | 20 +- .../data/symbols/jdk.management-K.sym.txt | 46 - .../data/symbols/jdk.management-L.sym.txt | 16 - .../share/data/symbols/jdk.net-H.sym.txt | 31 - .../share/data/symbols/jdk.net-I.sym.txt | 31 - .../share/data/symbols/jdk.net-J.sym.txt | 5 +- .../share/data/symbols/jdk.net-K.sym.txt | 31 - .../share/data/symbols/jdk.net-L.sym.txt | 31 - .../share/data/symbols/jdk.sctp-H.sym.txt | 73 - .../share/data/symbols/jdk.sctp-I.sym.txt | 73 - .../share/data/symbols/jdk.sctp-J.sym.txt | 73 - .../share/data/symbols/jdk.sctp-K.sym.txt | 73 - .../share/data/symbols/jdk.sctp-L.sym.txt | 45 - .../data/symbols/jdk.security.auth-H.sym.txt | 106 - .../data/symbols/jdk.security.auth-I.sym.txt | 106 - .../data/symbols/jdk.security.auth-J.sym.txt | 106 - .../data/symbols/jdk.security.auth-K.sym.txt | 106 - .../data/symbols/jdk.security.auth-L.sym.txt | 106 - .../data/symbols/jdk.security.jgss-H.sym.txt | 19 +- .../data/symbols/jdk.security.jgss-I.sym.txt | 47 - .../data/symbols/jdk.security.jgss-J.sym.txt | 47 - .../data/symbols/jdk.security.jgss-K.sym.txt | 47 - .../data/symbols/jdk.security.jgss-L.sym.txt | 47 - .../data/symbols/jdk.unsupported-H.sym.txt | 22 +- .../data/symbols/jdk.unsupported-I.sym.txt | 22 +- .../data/symbols/jdk.unsupported-J.sym.txt | 48 - .../data/symbols/jdk.unsupported-K.sym.txt | 48 - .../data/symbols/jdk.unsupported-L.sym.txt | 16 - .../share/data/symbols/jdk.xml.dom-H.sym.txt | 295 -- .../share/data/symbols/jdk.xml.dom-I.sym.txt | 295 -- .../share/data/symbols/jdk.xml.dom-J.sym.txt | 295 -- .../share/data/symbols/jdk.xml.dom-K.sym.txt | 295 -- .../share/data/symbols/jdk.xml.dom-L.sym.txt | 295 -- src/jdk.compiler/share/data/symbols/symbols | 10 +- .../platform/CanHandleClassFilesTest.java | 5 +- .../createsymbols/CreateSymbolsTestImpl.java | 15 +- .../tools/javac/sym/PrintCTSymContent.java | 117 + 194 files changed, 6614 insertions(+), 20769 deletions(-) delete mode 100644 src/jdk.compiler/share/data/symbols/java.datatransfer-I.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.datatransfer-J.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.datatransfer-K.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.datatransfer-L.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.instrument-H.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.instrument-I.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.instrument-J.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.instrument-K.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.instrument-L.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.logging-I.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.logging-J.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.logging-K.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.management.rmi-H.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.management.rmi-I.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.management.rmi-J.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.management.rmi-K.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.naming-I.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.naming-J.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.naming-L.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.rmi-I.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.rmi-J.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.rmi-K.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.rmi-L.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.scripting-H.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.scripting-I.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.scripting-J.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.scripting-K.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.scripting-L.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.security.jgss-H.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.security.jgss-I.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.security.jgss-J.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.security.jgss-K.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.security.jgss-L.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.security.sasl-H.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.security.sasl-I.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.security.sasl-J.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.security.sasl-K.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.security.sasl-L.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.smartcardio-H.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.smartcardio-I.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.smartcardio-J.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.smartcardio-K.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.smartcardio-L.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.sql-H.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.sql-I.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.sql-J.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.sql-K.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.sql-L.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.sql.rowset-H.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.sql.rowset-I.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.sql.rowset-J.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.sql.rowset-L.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.xml-H.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.xml-J.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.xml-K.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.xml-L.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.xml.crypto-I.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.xml.crypto-J.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/java.xml.crypto-K.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.accessibility-H.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.accessibility-J.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.accessibility-K.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.accessibility-L.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.attach-H.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.attach-I.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.attach-J.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.attach-K.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.attach-L.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.dynalink-H.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.dynalink-I.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.dynalink-J.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.dynalink-K.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.dynalink-L.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.httpserver-J.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.httpserver-K.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.httpserver-L.sym.txt create mode 100644 src/jdk.compiler/share/data/symbols/jdk.incubator.foreign-K.sym.txt create mode 100644 src/jdk.compiler/share/data/symbols/jdk.incubator.foreign-L.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.jartool-H.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.jartool-I.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.jartool-J.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.javadoc-J.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.javadoc-K.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.jconsole-H.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.jconsole-I.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.jconsole-J.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.jconsole-K.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.jconsole-L.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.jdi-H.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.jdi-I.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.jdi-K.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.jshell-I.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.jsobject-H.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.jsobject-I.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.jsobject-J.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.jsobject-K.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.jsobject-L.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.management-H.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.management-I.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.management-K.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.net-H.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.net-I.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.net-K.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.net-L.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.sctp-H.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.sctp-I.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.sctp-J.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.sctp-K.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.security.auth-H.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.security.auth-I.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.security.auth-J.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.security.auth-K.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.security.auth-L.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.security.jgss-I.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.security.jgss-J.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.security.jgss-K.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.security.jgss-L.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.unsupported-J.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.unsupported-K.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.xml.dom-H.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.xml.dom-I.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.xml.dom-J.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.xml.dom-K.sym.txt delete mode 100644 src/jdk.compiler/share/data/symbols/jdk.xml.dom-L.sym.txt create mode 100644 test/langtools/tools/javac/sym/PrintCTSymContent.java diff --git a/make/langtools/src/classes/build/tools/symbolgenerator/CreateSymbols.java b/make/langtools/src/classes/build/tools/symbolgenerator/CreateSymbols.java index 860a96f2b677d..154810e20f2d2 100644 --- a/make/langtools/src/classes/build/tools/symbolgenerator/CreateSymbols.java +++ b/make/langtools/src/classes/build/tools/symbolgenerator/CreateSymbols.java @@ -230,7 +230,8 @@ public class CreateSymbols { */ @SuppressWarnings("unchecked") public void createSymbols(String ctDescriptionFileExtra, String ctDescriptionFile, String ctSymLocation, - long timestamp, String currentVersion, String preReleaseTag, String moduleClasses) throws IOException { + long timestamp, String currentVersion, String preReleaseTag, String moduleClasses, + String includedModulesFile) throws IOException { LoadDescriptions data = load(ctDescriptionFileExtra != null ? Paths.get(ctDescriptionFileExtra) : null, Paths.get(ctDescriptionFile)); @@ -246,8 +247,12 @@ public void createSymbols(String ctDescriptionFileExtra, String ctDescriptionFil //load current version classes: Path moduleClassPath = Paths.get(moduleClasses); + Set includedModules = Files.lines(Paths.get(includedModulesFile)) + .flatMap(l -> Arrays.stream(l.split(" "))) + .collect(Collectors.toSet()); - loadVersionClassesFromDirectory(data.classes, data.modules, moduleClassPath, currentVersion, previousVersion); + loadVersionClassesFromDirectory(data.classes, data.modules, moduleClassPath, + includedModules, currentVersion, previousVersion); stripNonExistentAnnotations(data); splitHeaders(data.classes); @@ -1540,7 +1545,7 @@ private void loadVersionClasses(ClassList classes, } ClassList currentVersionClasses = new ClassList(); - Map extraModulesPackagesToDerive = new HashMap<>(); + Map> extraModulesPackagesToDerive = new HashMap<>(); for (byte[] classFileData : classData) { try (InputStream in = new ByteArrayInputStream(classFileData)) { @@ -1557,7 +1562,8 @@ private void loadVersionClasses(ClassList classes, if (!currentEIList.accepts(permittedClassName, false)) { String permittedPack = permittedClassName.substring(0, permittedClassName.lastIndexOf('/')); - extraModulesPackagesToDerive.put(permittedPack, currentPack); + extraModulesPackagesToDerive.computeIfAbsent(permittedPack, x -> new HashSet<>()) + .add(currentPack); } } } catch (ConstantPoolException ex) { @@ -1576,15 +1582,18 @@ private void loadVersionClasses(ClassList classes, do { modified = false; - for (Iterator> it = extraModulesPackagesToDerive.entrySet().iterator(); it.hasNext();) { - Entry e = it.next(); - Optional module = currentVersionModules.values().stream().map(md -> md.header.get(0)).filter(d -> containsPackage(d, e.getValue())).findAny(); - if (module.isPresent()) { - if (!module.get().extraModulePackages.contains(e.getKey())) { - module.get().extraModulePackages.add(e.getKey()); + for (Iterator>> it = extraModulesPackagesToDerive.entrySet().iterator(); it.hasNext();) { + Entry> e = it.next(); + for (String basePackage : e.getValue()) { + Optional module = currentVersionModules.values().stream().map(md -> md.header.get(0)).filter(d -> containsPackage(d, basePackage)).findAny(); + if (module.isPresent()) { + if (!module.get().extraModulePackages.contains(e.getKey())) { + module.get().extraModulePackages.add(e.getKey()); + } + it.remove(); + modified = true; + break; } - it.remove(); - modified = true; } } } while (modified); @@ -1604,6 +1613,7 @@ private boolean containsPackage(ModuleHeaderDescription module, String pack) { private void loadVersionClassesFromDirectory(ClassList classes, Map modules, Path modulesDirectory, + Set includedModules, String version, String baseline) { Map currentVersionModules = @@ -1621,6 +1631,10 @@ private void loadVersionClassesFromDirectory(ClassList classes, try (DirectoryStream ds = Files.newDirectoryStream(modulesDirectory)) { for (Path p : ds) { + if (!includedModules.contains(p.getFileName().toString())) { + continue; + } + Path moduleInfo = p.resolve("module-info.class"); if (Files.isReadable(moduleInfo)) { @@ -1646,6 +1660,10 @@ private void loadVersionClassesFromDirectory(ClassList classes, includes.add(dir); pendingExportedDirectories.add(p.resolve(dir)); } + } else { + throw new IllegalArgumentException("Included module: " + + p.getFileName() + + " does not have a module-info.class"); } } } @@ -1735,41 +1753,67 @@ private void finishClassLoading(ClassList classes, Map includedClasses = new HashSet<>(); + Map> package2ModulesUsingIt = new HashMap<>(); + Map package2Module = new HashMap<>(); + currentVersionModules.values() + .forEach(md -> { + md.header.get(0).allPackages().forEach(pack -> { + package2Module.put(pack, md.name); + }); + }); boolean modified; do { modified = false; for (ClassDescription clazz : currentVersionClasses) { + Set thisClassIncludedClasses = new HashSet<>(); ClassHeaderDescription header = clazz.header.get(0); if (includeEffectiveAccess(currentVersionClasses, clazz) && currentEIList.accepts(clazz.name, false)) { - modified |= include(includedClasses, currentVersionClasses, clazz.name); + include(thisClassIncludedClasses, currentVersionClasses, clazz.name); } if (includedClasses.contains(clazz.name)) { - modified |= include(includedClasses, currentVersionClasses, header.extendsAttr); + include(thisClassIncludedClasses, currentVersionClasses, header.extendsAttr); for (String i : header.implementsAttr) { - modified |= include(includedClasses, currentVersionClasses, i); + include(thisClassIncludedClasses, currentVersionClasses, i); } if (header.permittedSubclasses != null) { for (String i : header.permittedSubclasses) { - modified |= include(includedClasses, currentVersionClasses, i); + include(thisClassIncludedClasses, currentVersionClasses, i); } } - modified |= includeOutputType(Collections.singleton(header), - h -> "", - includedClasses, - currentVersionClasses); - modified |= includeOutputType(clazz.fields, - f -> f.descriptor, - includedClasses, - currentVersionClasses); - modified |= includeOutputType(clazz.methods, - m -> m.descriptor, - includedClasses, - currentVersionClasses); + includeOutputType(Collections.singleton(header), + h -> "", + thisClassIncludedClasses, + currentVersionClasses); + includeOutputType(clazz.fields, + f -> f.descriptor, + thisClassIncludedClasses, + currentVersionClasses); + includeOutputType(clazz.methods, + m -> m.descriptor, + thisClassIncludedClasses, + currentVersionClasses); + } + + if (includedClasses.addAll(thisClassIncludedClasses)) { + modified |= true; + } + + for (String includedClass : thisClassIncludedClasses) { + int lastSlash = includedClass.lastIndexOf('/'); + String pack; + if (lastSlash != (-1)) { + pack = includedClass.substring(0, lastSlash) + .replace('.', '/'); + } else { + pack = ""; + } + package2ModulesUsingIt.computeIfAbsent(pack, p -> new HashSet<>()) + .add(package2Module.get(clazz.packge())); } } } while (modified); @@ -1834,8 +1878,24 @@ private void finishClassLoading(ClassList classes, Map ed.isQualified() && - !allIncludedPackages.contains(ed.packageName())); + for (Iterator it = header.exports.iterator(); it.hasNext();) { + ExportsDescription ed = it.next(); + + if (!ed.isQualified()) { + continue; + } + + Set usingModules = package2ModulesUsingIt.getOrDefault(ed.packageName(), Set.of()); + + ed.to.retainAll(usingModules); + + if (ed.to.isEmpty()) { + it.remove(); + if (allIncludedPackages.contains(ed.packageName())) { + header.extraModulePackages.add(ed.packageName()); + } + } + } if (header.extraModulePackages != null) { header.extraModulePackages.retainAll(allIncludedPackages); @@ -1872,17 +1932,7 @@ private void dumpDescriptions(ClassList classes, md.header .stream() .filter(h -> h.versions.contains(v.version)) - .flatMap(h -> { - List packages = new ArrayList<>(); - h.exports.stream() - .map(ExportsDescription::packageName) - .forEach(packages::add); - if (h.extraModulePackages != null) { - packages.addAll(h.extraModulePackages); - } - return packages.stream(); - }) - .map(p -> p.replace('/', '.')) + .flatMap(ModuleHeaderDescription::allPackages) .forEach(p -> package2Modules.putIfAbsent(p, md.name)); } }); @@ -2041,7 +2091,9 @@ private void incrementalUpdate(String ctDescriptionFile, ExcludeIncludeList excludeList = ExcludeIncludeList.create(excludeFile); - loadVersionClasses(classes, modules, classBytes, excludeList, "$", version); + String computedBaseline = baseline.apply(data); + + loadVersionClasses(classes, modules, classBytes, excludeList, "$", computedBaseline); removeVersion(data, version); @@ -2064,14 +2116,14 @@ private void incrementalUpdate(String ctDescriptionFile, } if (versions.stream().noneMatch(inp -> version.equals(inp.version))) { - versions.add(new PlatformInput(null, version, baseline.apply(data), null)); + versions.add(new PlatformInput(null, version, computedBaseline, null)); } Set writeVersions = new HashSet<>(); writeVersions.add(version); - //re-write all platforms that have version as their basline: + //re-write all platforms that have version as their baseline: versions.stream() .filter(inp -> version.equals(inp.basePlatform)) .map(inp -> inp.version) @@ -2091,53 +2143,66 @@ public void createIncrementalBaseLineFromDataFile(String ctDescriptionFile, public void createIncrementalBaseLine(String ctDescriptionFile, String excludeFile, String[] args) throws IOException { - String specVersion = System.getProperty("java.specification.version"); + String platformVersion = System.getProperty("java.specification.version"); + String currentVersion = + Integer.toString(Integer.parseInt(platformVersion), Character.MAX_RADIX); + String version = currentVersion.toUpperCase(Locale.ROOT); Iterable classBytes = dumpCurrentClasses(); Function baseline = data -> { if (data.versions.isEmpty()) { return null; } else { return data.versions.stream() + .filter(v -> v.version.compareTo(version) < 0) .sorted((v1, v2) -> v2.version.compareTo(v1.version)) .findFirst() .get() .version; } }; - incrementalUpdate(ctDescriptionFile, excludeFile, specVersion, classBytes, baseline, args); + incrementalUpdate(ctDescriptionFile, excludeFile, platformVersion, classBytes, baseline, args); } private List dumpCurrentClasses() throws IOException { - JavacTool tool = JavacTool.create(); - Context ctx = new Context(); + Set includedModuleNames = new HashSet<>(); String version = System.getProperty("java.specification.version"); - JavacTask task = tool.getTask(null, null, null, - List.of("--release", version), - null, null, ctx); - task.getElements().getTypeElement("java.lang.Object"); - JavaFileManager fm = ctx.get(JavaFileManager.class); + JavaFileManager moduleFM = setupJavac("--release", version); - List data = new ArrayList<>(); for (Location modLoc : LOCATIONS) { for (Set module : - fm.listLocationsForModules(modLoc)) { + moduleFM.listLocationsForModules(modLoc)) { for (JavaFileManager.Location loc : module) { - Iterable files = - fm.list(loc, - "", - EnumSet.of(Kind.CLASS), - true); - - for (JavaFileObject jfo : files) { - try (InputStream is = jfo.openInputStream(); - InputStream in = - new BufferedInputStream(is)) { - ByteArrayOutputStream baos = - new ByteArrayOutputStream(); - - in.transferTo(baos); - data.add(baos.toByteArray()); - } + includedModuleNames.add(moduleFM.inferModuleName(loc)); + } + } + } + + JavaFileManager dumpFM = setupJavac("--source", version); + List data = new ArrayList<>(); + + for (Location modLoc : LOCATIONS) { + for (String moduleName : includedModuleNames) { + Location loc = dumpFM.getLocationForModule(modLoc, moduleName); + + if (loc == null) { + continue; + } + + Iterable files = + dumpFM.list(loc, + "", + EnumSet.of(Kind.CLASS), + true); + + for (JavaFileObject jfo : files) { + try (InputStream is = jfo.openInputStream(); + InputStream in = + new BufferedInputStream(is)) { + ByteArrayOutputStream baos = + new ByteArrayOutputStream(); + + in.transferTo(baos); + data.add(baos.toByteArray()); } } } @@ -2150,6 +2215,15 @@ private List dumpCurrentClasses() throws IOException { List.of(StandardLocation.SYSTEM_MODULES, StandardLocation.UPGRADE_MODULE_PATH); + private JavaFileManager setupJavac(String... options) { + JavacTool tool = JavacTool.create(); + Context ctx = new Context(); + JavacTask task = tool.getTask(null, null, null, + List.of(options), + null, null, ctx); + task.getElements().getTypeElement("java.lang.Object"); + return ctx.get(JavaFileManager.class); + } // //non-final for tests: public static String PROFILE_ANNOTATION = "Ljdk/Profile+Annotation;"; @@ -2351,18 +2425,20 @@ private boolean include(int accessFlags) { private void addClassHeader(ClassDescription clazzDesc, ClassHeaderDescription headerDesc, String version, String baseline) { //normalize: + Iterable headers = sortedHeaders(clazzDesc.header, baseline); boolean existed = false; - for (ClassHeaderDescription existing : clazzDesc.header) { - if (existing.equals(headerDesc) && (!existed || (baseline != null && existing.versions.contains(baseline)))) { + for (ClassHeaderDescription existing : headers) { + if (existing.equals(headerDesc)) { headerDesc = existing; existed = true; + break; } } if (!existed) { //check if the only difference between the 7 and 8 version is the Profile annotation //if so, copy it to the pre-8 version, so save space - for (ClassHeaderDescription existing : clazzDesc.header) { + for (ClassHeaderDescription existing : headers) { List annots = existing.classAnnotations; if (annots != null) { @@ -2391,6 +2467,26 @@ private void addClassHeader(ClassDescription clazzDesc, ClassHeaderDescription h } } + private Iterable sortedHeaders(List headers, String baseline) { + if (baseline == null) { + return headers; + } + + //move the description whose version contains baseline to the front: + List result = new ArrayList<>(headers); + + for (Iterator it = result.iterator(); it.hasNext();) { + T fd = it.next(); + if (fd.versions.contains(baseline)) { + it.remove(); + result.add(0, fd); + break; + } + } + + return result; + } + private void addMethod(ClassDescription clazzDesc, MethodDescription methDesc, String version, String baseline) { //normalize: boolean methodExisted = false; @@ -2797,41 +2893,35 @@ protected boolean includeEffectiveAccess(ClassList classes, ClassDescription cla return true; } - boolean include(Set includedClasses, ClassList classes, String clazzName) { + void include(Set includedClasses, ClassList classes, String clazzName) { if (clazzName == null) - return false; + return ; ClassDescription desc = classes.find(clazzName, true); if (desc == null) { - return false; + return ; } - boolean modified = includedClasses.add(clazzName); + includedClasses.add(clazzName); for (ClassDescription outer : classes.enclosingClasses(desc)) { - modified |= includedClasses.add(outer.name); + includedClasses.add(outer.name); } - - return modified; } - boolean includeOutputType(Iterable features, + void includeOutputType(Iterable features, Function feature2Descriptor, Set includedClasses, ClassList classes) { - boolean modified = false; - for (T feature : features) { CharSequence sig = feature.signature != null ? feature.signature : feature2Descriptor.apply(feature); Matcher m = OUTPUT_TYPE_PATTERN.matcher(sig); while (m.find()) { - modified |= include(includedClasses, classes, m.group(1)); + include(includedClasses, classes, m.group(1)); } } - - return modified; } static final Pattern OUTPUT_TYPE_PATTERN = Pattern.compile("L([^;<]+)(;|<)"); @@ -3255,6 +3345,20 @@ public boolean read(LineBasedReader reader) throws IOException { return true; } + public Stream allPackages() { + List packages = new ArrayList<>(); + + exports.stream() + .map(ExportsDescription::packageName) + .forEach(packages::add); + if (extraModulePackages != null) { + packages.addAll(extraModulePackages); + } + + return packages.stream() + .map(p -> p.replace('/', '.')); + } + record ExportsDescription(String packageName, List to) { public String serialize() { return packageName + @@ -3660,6 +3764,7 @@ public void write(Appendable output, String baselineVersion, String version) thr } if (isSealed) { output.append(" sealed true"); + output.append(" permittedSubclasses " + serializeList(permittedSubclasses)); } writeAttributes(output); output.append("\n"); @@ -3680,6 +3785,11 @@ public boolean read(LineBasedReader reader) throws IOException { String nestMembersList = reader.attributes.get("nestMembers"); nestMembers = deserializeList(nestMembersList); isRecord = reader.attributes.containsKey("record"); + isSealed = reader.attributes.containsKey("permittedSubclasses"); + if (isSealed) { + String subclassesList = reader.attributes.get("permittedSubclasses"); + permittedSubclasses = deserializeList(subclassesList); + } readAttributes(reader); reader.moveNext(); @@ -3688,11 +3798,6 @@ public boolean read(LineBasedReader reader) throws IOException { } readInnerClasses(reader); - isSealed = reader.attributes.containsKey("permittedSubclasses"); - if (isSealed) { - String subclassesList = reader.attributes.get("permittedSubclasses"); - permittedSubclasses = deserializeList(subclassesList); - } return true; } @@ -4642,8 +4747,9 @@ public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOExce String currentVersion; String preReleaseTag; String moduleClasses; + String includedModules; - if (args.length == 7) { + if (args.length == 8) { ctDescriptionFileExtra = null; ctDescriptionFile = args[1]; ctSymLocation = args[2]; @@ -4651,7 +4757,8 @@ public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOExce currentVersion = args[4]; preReleaseTag = args[5]; moduleClasses = args[6]; - } else if (args.length == 8) { + includedModules = args[7]; + } else if (args.length == 9) { ctDescriptionFileExtra = args[1]; ctDescriptionFile = args[2]; ctSymLocation = args[3]; @@ -4659,6 +4766,7 @@ public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOExce currentVersion = args[5]; preReleaseTag = args[6]; moduleClasses = args[7]; + includedModules = args[8]; } else { help(); return ; @@ -4675,7 +4783,8 @@ public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOExce timestamp, currentVersion, preReleaseTag, - moduleClasses); + moduleClasses, + includedModules); break; } case "build-javadoc-data": { diff --git a/make/modules/jdk.compiler/Gendata.gmk b/make/modules/jdk.compiler/Gendata.gmk index df0ced743e7d6..e9ff3c439bea5 100644 --- a/make/modules/jdk.compiler/Gendata.gmk +++ b/make/modules/jdk.compiler/Gendata.gmk @@ -42,6 +42,9 @@ CT_MODULES_API_TARGETS := \ $(foreach m, $(CT_MODULES) $(CT_TRANSITIVE_MODULES), \ $(call SetupJavaCompilationApiTarget, $m, $(JDK_OUTPUTDIR)/modules/$m)) +#undocumented modules which should also be included in ct.sym: +CT_EXTRA_MODULES := jdk.unsupported + SYMBOL_FILES := $(wildcard $(MODULE_SRC)/share/data/symbols/*) CT_DATA_DESCRIPTION += $(MODULE_SRC)/share/data/symbols/symbols @@ -72,6 +75,7 @@ $(SUPPORT_OUTPUTDIR)/symbols/ct.sym: $(COMPILE_CREATE_SYMBOLS) $(SYMBOL_FILES) \ $(RM) -r $(@D) $(MKDIR) -p $(@D) $(ECHO) Creating ct.sym classes + $(ECHO) $(CT_MODULES) $(CT_TRANSITIVE_MODULES) $(CT_EXTRA_MODULES) >$(SUPPORT_OUTPUTDIR)/symbols/included-modules $(BUILD_JAVA_SMALL) \ $(COMPILECREATESYMBOLS_ADD_EXPORTS) \ -classpath $(BUILDTOOLS_OUTPUTDIR)/create_symbols_javac \ @@ -82,7 +86,8 @@ $(SUPPORT_OUTPUTDIR)/symbols/ct.sym: $(COMPILE_CREATE_SYMBOLS) $(SYMBOL_FILES) \ $(SOURCE_DATE_EPOCH) \ $(JDK_SOURCE_TARGET_VERSION) \ "$(VERSION_PRE)" \ - $(JDK_OUTPUTDIR)/modules/ + $(JDK_OUTPUTDIR)/modules/ \ + $(SUPPORT_OUTPUTDIR)/symbols/included-modules $(TOUCH) $@ # Copy ct.sym to the modules libs dir diff --git a/src/jdk.compiler/share/data/symbols/java.base-H.sym.txt b/src/jdk.compiler/share/data/symbols/java.base-H.sym.txt index c6ef0d70aeb71..990a46b40a8b2 100644 --- a/src/jdk.compiler/share/data/symbols/java.base-H.sym.txt +++ b/src/jdk.compiler/share/data/symbols/java.base-H.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2021, 2023, 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 @@ -27,7 +27,7 @@ # ########################################################## # module name java.base -header exports java/io,java/lang,java/lang/annotation,java/lang/constant,java/lang/invoke,java/lang/module,java/lang/ref,java/lang/reflect,java/lang/runtime,java/math,java/net,java/net/spi,java/nio,java/nio/channels,java/nio/channels/spi,java/nio/charset,java/nio/charset/spi,java/nio/file,java/nio/file/attribute,java/nio/file/spi,java/security,java/security/cert,java/security/interfaces,java/security/spec,java/text,java/text/spi,java/time,java/time/chrono,java/time/format,java/time/temporal,java/time/zone,java/util,java/util/concurrent,java/util/concurrent/atomic,java/util/concurrent/locks,java/util/function,java/util/jar,java/util/random,java/util/regex,java/util/spi,java/util/stream,java/util/zip,javax/crypto,javax/crypto/interfaces,javax/crypto/spec,javax/net,javax/net/ssl,javax/security/auth,javax/security/auth/callback,javax/security/auth/login,javax/security/auth/spi,javax/security/auth/x500,javax/security/cert,jdk/internal/event[jdk.jfr],jdk/internal/vm/vector[jdk.incubator.vector] uses java/lang/System$LoggerFinder,java/net/ContentHandlerFactory,java/net/spi/URLStreamHandlerProvider,java/nio/channels/spi/AsynchronousChannelProvider,java/nio/channels/spi/SelectorProvider,java/nio/charset/spi/CharsetProvider,java/nio/file/spi/FileSystemProvider,java/nio/file/spi/FileTypeDetector,java/security/Provider,java/text/spi/BreakIteratorProvider,java/text/spi/CollatorProvider,java/text/spi/DateFormatProvider,java/text/spi/DateFormatSymbolsProvider,java/text/spi/DecimalFormatSymbolsProvider,java/text/spi/NumberFormatProvider,java/time/chrono/AbstractChronology,java/time/chrono/Chronology,java/time/zone/ZoneRulesProvider,java/util/random/RandomGenerator,java/util/spi/CalendarDataProvider,java/util/spi/CalendarNameProvider,java/util/spi/CurrencyNameProvider,java/util/spi/LocaleNameProvider,java/util/spi/ResourceBundleControlProvider,java/util/spi/ResourceBundleProvider,java/util/spi/TimeZoneNameProvider,java/util/spi/ToolProvider,javax/security/auth/spi/LoginModule,jdk/internal/logger/DefaultLoggerFinder,sun/text/spi/JavaTimeDateTimePatternProvider,sun/util/locale/provider/LocaleDataMetaInfo,sun/util/resources/LocaleData$CommonResourceBundleProvider,sun/util/resources/LocaleData$SupplementaryResourceBundleProvider,sun/util/spi/CalendarProvider provides interface\u0020;java/nio/file/spi/FileSystemProvider\u0020;impls\u0020;jdk/internal/jrtfs/JrtFileSystemProvider,interface\u0020;java/util/random/RandomGenerator\u0020;impls\u0020;java/security/SecureRandom\u005C;u002C;java/util/Random\u005C;u002C;java/util/SplittableRandom target linux-amd64 flags 8000 +header exports java/io,java/lang,java/lang/annotation,java/lang/constant,java/lang/invoke,java/lang/module,java/lang/ref,java/lang/reflect,java/lang/runtime,java/math,java/net,java/net/spi,java/nio,java/nio/channels,java/nio/channels/spi,java/nio/charset,java/nio/charset/spi,java/nio/file,java/nio/file/attribute,java/nio/file/spi,java/security,java/security/cert,java/security/interfaces,java/security/spec,java/text,java/text/spi,java/time,java/time/chrono,java/time/format,java/time/temporal,java/time/zone,java/util,java/util/concurrent,java/util/concurrent/atomic,java/util/concurrent/locks,java/util/function,java/util/jar,java/util/random,java/util/regex,java/util/spi,java/util/stream,java/util/zip,javax/crypto,javax/crypto/interfaces,javax/crypto/spec,javax/net,javax/net/ssl,javax/security/auth,javax/security/auth/callback,javax/security/auth/login,javax/security/auth/spi,javax/security/auth/x500,javax/security/cert,jdk/internal/access/foreign[jdk.incubator.foreign],jdk/internal/event[jdk.jfr],jdk/internal/misc[jdk.incubator.foreign],jdk/internal/vm/vector[jdk.incubator.vector] uses java/lang/System$LoggerFinder,java/net/ContentHandlerFactory,java/net/spi/URLStreamHandlerProvider,java/nio/channels/spi/AsynchronousChannelProvider,java/nio/channels/spi/SelectorProvider,java/nio/charset/spi/CharsetProvider,java/nio/file/spi/FileSystemProvider,java/nio/file/spi/FileTypeDetector,java/security/Provider,java/text/spi/BreakIteratorProvider,java/text/spi/CollatorProvider,java/text/spi/DateFormatProvider,java/text/spi/DateFormatSymbolsProvider,java/text/spi/DecimalFormatSymbolsProvider,java/text/spi/NumberFormatProvider,java/time/chrono/AbstractChronology,java/time/chrono/Chronology,java/time/zone/ZoneRulesProvider,java/util/random/RandomGenerator,java/util/spi/CalendarDataProvider,java/util/spi/CalendarNameProvider,java/util/spi/CurrencyNameProvider,java/util/spi/LocaleNameProvider,java/util/spi/ResourceBundleControlProvider,java/util/spi/ResourceBundleProvider,java/util/spi/TimeZoneNameProvider,java/util/spi/ToolProvider,javax/security/auth/spi/LoginModule,jdk/internal/logger/DefaultLoggerFinder,sun/text/spi/JavaTimeDateTimePatternProvider,sun/util/locale/provider/LocaleDataMetaInfo,sun/util/resources/LocaleData$CommonResourceBundleProvider,sun/util/resources/LocaleData$SupplementaryResourceBundleProvider,sun/util/spi/CalendarProvider provides interface\u0020;java/nio/file/spi/FileSystemProvider\u0020;impls\u0020;jdk/internal/jrtfs/JrtFileSystemProvider,interface\u0020;java/util/random/RandomGenerator\u0020;impls\u0020;java/security/SecureRandom\u005C;u002C;java/util/Random\u005C;u002C;java/util/SplittableRandom target linux-amd64 flags 8000 class name java/io/CharArrayReader method name read descriptor (Ljava/nio/CharBuffer;)I thrownTypes java/io/IOException flags 1 @@ -52,40 +52,16 @@ class name java/io/ObjectInputFilter$Config method name getSerialFilterFactory descriptor ()Ljava/util/function/BinaryOperator; flags 9 signature ()Ljava/util/function/BinaryOperator; method name setSerialFilterFactory descriptor (Ljava/util/function/BinaryOperator;)V flags 9 signature (Ljava/util/function/BinaryOperator;)V -class name java/io/PrintStream -header extends java/io/FilterOutputStream implements java/lang/Appendable,java/io/Closeable flags 21 -innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019 - class name java/io/WriteAbortedException -field name detail descriptor Ljava/lang/Exception; field name detail descriptor Ljava/lang/Exception; flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="17") -class name java/lang/AbstractStringBuilder -header extends java/lang/Object implements java/lang/Appendable,java/lang/CharSequence flags 420 -innerclass innerClass java/util/Spliterator$OfInt outerClass java/util/Spliterator innerClassName OfInt flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name java/lang/Class -method name isSealed descriptor ()Z -method name getPermittedSubclasses descriptor ()[Ljava/lang/Class; method name getPermittedSubclasses descriptor ()[Ljava/lang/Class; flags 1 signature ()[Ljava/lang/Class<*>; runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive; method name isSealed descriptor ()Z flags 1 -class name java/lang/Compiler -header extends java/lang/Object flags 31 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9") - -class name java/lang/Deprecated -header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Documented;@Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;RUNTIME;)@Ljava/lang/annotation/Target;(value={eLjava/lang/annotation/ElementType;CONSTRUCTOR;eLjava/lang/annotation/ElementType;FIELD;eLjava/lang/annotation/ElementType;LOCAL_VARIABLE;eLjava/lang/annotation/ElementType;METHOD;eLjava/lang/annotation/ElementType;PACKAGE;eLjava/lang/annotation/ElementType;MODULE;eLjava/lang/annotation/ElementType;PARAMETER;eLjava/lang/annotation/ElementType;TYPE;}) - -class name java/lang/IllegalCallerException -header extends java/lang/RuntimeException flags 21 - -class name java/lang/LayerInstantiationException -header extends java/lang/RuntimeException flags 21 - -class name java/lang/NamedPackage -header extends java/lang/Object flags 20 - class name java/lang/Process method name inputReader descriptor ()Ljava/io/BufferedReader; flags 11 method name inputReader descriptor (Ljava/nio/charset/Charset;)Ljava/io/BufferedReader; flags 11 @@ -108,9 +84,6 @@ class name java/lang/StrictMath method name toRadians descriptor (D)D flags 9 method name toDegrees descriptor (D)D flags 9 -class name java/lang/SuppressWarnings -header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Target;(value={eLjava/lang/annotation/ElementType;TYPE;eLjava/lang/annotation/ElementType;FIELD;eLjava/lang/annotation/ElementType;METHOD;eLjava/lang/annotation/ElementType;PARAMETER;eLjava/lang/annotation/ElementType;CONSTRUCTOR;eLjava/lang/annotation/ElementType;LOCAL_VARIABLE;eLjava/lang/annotation/ElementType;MODULE;})@Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;SOURCE;) - class name java/lang/System -method name setSecurityManager descriptor (Ljava/lang/SecurityManager;)V -method name getSecurityManager descriptor ()Ljava/lang/SecurityManager; @@ -125,18 +98,43 @@ class name java/lang/ThreadGroup -method name checkAccess descriptor ()V method name checkAccess descriptor ()V flags 11 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="17") +class name java/lang/constant/AsTypeMethodHandleDesc +header extends java/lang/constant/DynamicConstantDesc implements java/lang/constant/MethodHandleDesc flags 30 signature Ljava/lang/constant/DynamicConstantDesc;Ljava/lang/constant/MethodHandleDesc; +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +method name invocationType descriptor ()Ljava/lang/constant/MethodTypeDesc; flags 1 +method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/invoke/MethodHandle; thrownTypes java/lang/ReflectiveOperationException flags 1 +method name toString descriptor ()Ljava/lang/String; flags 1 +method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Object; thrownTypes java/lang/ReflectiveOperationException flags 1041 + class name java/lang/constant/ClassDesc -header extends java/lang/Object implements java/lang/constant/ConstantDesc,java/lang/invoke/TypeDescriptor$OfField sealed true flags 601 signature Ljava/lang/Object;Ljava/lang/constant/ConstantDesc;Ljava/lang/invoke/TypeDescriptor$OfField; +header extends java/lang/Object implements java/lang/constant/ConstantDesc,java/lang/invoke/TypeDescriptor$OfField sealed true permittedSubclasses java/lang/constant/PrimitiveClassDescImpl,java/lang/constant/ReferenceClassDescImpl flags 601 signature Ljava/lang/Object;Ljava/lang/constant/ConstantDesc;Ljava/lang/invoke/TypeDescriptor$OfField; innerclass innerClass java/lang/invoke/TypeDescriptor$OfField outerClass java/lang/invoke/TypeDescriptor innerClassName OfField flags 609 class name java/lang/constant/ConstantDesc -header extends java/lang/Object sealed true flags 601 +header extends java/lang/Object sealed true permittedSubclasses java/lang/constant/ClassDesc,java/lang/constant/MethodHandleDesc,java/lang/constant/MethodTypeDesc,java/lang/Double,java/lang/constant/DynamicConstantDesc,java/lang/Float,java/lang/Integer,java/lang/Long,java/lang/String flags 601 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 class name java/lang/constant/DirectMethodHandleDesc -header extends java/lang/Object implements java/lang/constant/MethodHandleDesc nestMembers java/lang/constant/DirectMethodHandleDesc$Kind sealed true flags 601 +header extends java/lang/Object implements java/lang/constant/MethodHandleDesc nestMembers java/lang/constant/DirectMethodHandleDesc$Kind sealed true permittedSubclasses java/lang/constant/DirectMethodHandleDescImpl flags 601 innerclass innerClass java/lang/constant/DirectMethodHandleDesc$Kind outerClass java/lang/constant/DirectMethodHandleDesc innerClassName Kind flags 4019 +class name java/lang/constant/DirectMethodHandleDescImpl +header extends java/lang/Object implements java/lang/constant/DirectMethodHandleDesc flags 30 +innerclass innerClass java/lang/constant/DirectMethodHandleDesc$Kind outerClass java/lang/constant/DirectMethodHandleDesc innerClassName Kind flags 4019 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +method name kind descriptor ()Ljava/lang/constant/DirectMethodHandleDesc$Kind; flags 1 +method name refKind descriptor ()I flags 1 +method name isOwnerInterface descriptor ()Z flags 1 +method name owner descriptor ()Ljava/lang/constant/ClassDesc; flags 1 +method name methodName descriptor ()Ljava/lang/String; flags 1 +method name invocationType descriptor ()Ljava/lang/constant/MethodTypeDesc; flags 1 +method name lookupDescriptor descriptor ()Ljava/lang/String; flags 1 +method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/invoke/MethodHandle; thrownTypes java/lang/ReflectiveOperationException flags 1 +method name equals descriptor (Ljava/lang/Object;)Z flags 1 +method name hashCode descriptor ()I flags 1 +method name toString descriptor ()Ljava/lang/String; flags 1 +method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Object; thrownTypes java/lang/ReflectiveOperationException flags 1041 + class name java/lang/constant/DynamicConstantDesc header extends java/lang/Object implements java/lang/constant/ConstantDesc flags 421 signature Ljava/lang/Object;Ljava/lang/constant/ConstantDesc; innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 @@ -144,68 +142,75 @@ innerclass innerClass java/lang/Enum$EnumDesc outerClass java/lang/Enum innerCla innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19 class name java/lang/constant/MethodHandleDesc -header extends java/lang/Object implements java/lang/constant/ConstantDesc sealed true flags 601 +header extends java/lang/Object implements java/lang/constant/ConstantDesc sealed true permittedSubclasses java/lang/constant/AsTypeMethodHandleDesc,java/lang/constant/DirectMethodHandleDesc flags 601 innerclass innerClass java/lang/constant/DirectMethodHandleDesc$Kind outerClass java/lang/constant/DirectMethodHandleDesc innerClassName Kind flags 4019 class name java/lang/constant/MethodTypeDesc -header extends java/lang/Object implements java/lang/constant/ConstantDesc,java/lang/invoke/TypeDescriptor$OfMethod sealed true flags 601 signature Ljava/lang/Object;Ljava/lang/constant/ConstantDesc;Ljava/lang/invoke/TypeDescriptor$OfMethod; +header extends java/lang/Object implements java/lang/constant/ConstantDesc,java/lang/invoke/TypeDescriptor$OfMethod sealed true permittedSubclasses java/lang/constant/MethodTypeDescImpl flags 601 signature Ljava/lang/Object;Ljava/lang/constant/ConstantDesc;Ljava/lang/invoke/TypeDescriptor$OfMethod; innerclass innerClass java/lang/invoke/TypeDescriptor$OfMethod outerClass java/lang/invoke/TypeDescriptor innerClassName OfMethod flags 609 innerclass innerClass java/lang/invoke/TypeDescriptor$OfField outerClass java/lang/invoke/TypeDescriptor innerClassName OfField flags 609 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -class name java/lang/invoke/CallSite -header extends java/lang/Object flags 421 +class name java/lang/constant/MethodTypeDescImpl +header extends java/lang/Object implements java/lang/constant/MethodTypeDesc flags 30 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +innerclass innerClass java/lang/invoke/TypeDescriptor$OfField outerClass java/lang/invoke/TypeDescriptor innerClassName OfField flags 609 +innerclass innerClass java/lang/invoke/TypeDescriptor$OfMethod outerClass java/lang/invoke/TypeDescriptor innerClassName OfMethod flags 609 +method name returnType descriptor ()Ljava/lang/constant/ClassDesc; flags 1 +method name parameterCount descriptor ()I flags 1 +method name parameterType descriptor (I)Ljava/lang/constant/ClassDesc; flags 1 +method name parameterList descriptor ()Ljava/util/List; flags 1 signature ()Ljava/util/List; +method name parameterArray descriptor ()[Ljava/lang/constant/ClassDesc; flags 1 +method name changeReturnType descriptor (Ljava/lang/constant/ClassDesc;)Ljava/lang/constant/MethodTypeDesc; flags 1 +method name changeParameterType descriptor (ILjava/lang/constant/ClassDesc;)Ljava/lang/constant/MethodTypeDesc; flags 1 +method name dropParameterTypes descriptor (II)Ljava/lang/constant/MethodTypeDesc; flags 1 +method name insertParameterTypes descriptor (I[Ljava/lang/constant/ClassDesc;)Ljava/lang/constant/MethodTypeDesc; flags 81 +method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/invoke/MethodType; thrownTypes java/lang/ReflectiveOperationException flags 1 +method name equals descriptor (Ljava/lang/Object;)Z flags 1 +method name hashCode descriptor ()I flags 1 +method name toString descriptor ()Ljava/lang/String; flags 1 +method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Object; thrownTypes java/lang/ReflectiveOperationException flags 1041 +method name insertParameterTypes descriptor (I[Ljava/lang/invoke/TypeDescriptor$OfField;)Ljava/lang/invoke/TypeDescriptor$OfMethod; flags 1041 +method name dropParameterTypes descriptor (II)Ljava/lang/invoke/TypeDescriptor$OfMethod; flags 1041 +method name changeParameterType descriptor (ILjava/lang/invoke/TypeDescriptor$OfField;)Ljava/lang/invoke/TypeDescriptor$OfMethod; flags 1041 +method name changeReturnType descriptor (Ljava/lang/invoke/TypeDescriptor$OfField;)Ljava/lang/invoke/TypeDescriptor$OfMethod; flags 1041 +method name parameterArray descriptor ()[Ljava/lang/invoke/TypeDescriptor$OfField; flags 1041 +method name returnType descriptor ()Ljava/lang/invoke/TypeDescriptor$OfField; flags 1041 +method name parameterType descriptor (I)Ljava/lang/invoke/TypeDescriptor$OfField; flags 1041 + +class name java/lang/constant/PrimitiveClassDescImpl +header extends java/lang/constant/DynamicConstantDesc implements java/lang/constant/ClassDesc flags 30 signature Ljava/lang/constant/DynamicConstantDesc;>;Ljava/lang/constant/ClassDesc; +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +method name descriptorString descriptor ()Ljava/lang/String; flags 1 +method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Class; flags 1 signature (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Class<*>; +method name toString descriptor ()Ljava/lang/String; flags 1 +method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Object; thrownTypes java/lang/ReflectiveOperationException flags 1041 -class name java/lang/invoke/LambdaMetafactory -header extends java/lang/Object flags 31 +class name java/lang/constant/ReferenceClassDescImpl +header extends java/lang/Object implements java/lang/constant/ClassDesc flags 30 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +method name descriptorString descriptor ()Ljava/lang/String; flags 1 +method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Class; thrownTypes java/lang/ReflectiveOperationException flags 1 signature (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Class<*>; +method name equals descriptor (Ljava/lang/Object;)Z flags 1 +method name hashCode descriptor ()I flags 1 +method name toString descriptor ()Ljava/lang/String; flags 1 +method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Object; thrownTypes java/lang/ReflectiveOperationException flags 1041 class name java/lang/invoke/MethodHandles method name tableSwitch descriptor (Ljava/lang/invoke/MethodHandle;[Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle; flags 89 -class name java/lang/invoke/StringConcatException -header extends java/lang/Exception flags 21 - -class name java/lang/module/Configuration -header extends java/lang/Object flags 31 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/lang/module/FindException -header extends java/lang/RuntimeException flags 21 - -class name java/lang/module/InvalidModuleDescriptorException -header extends java/lang/RuntimeException flags 21 - -class name java/lang/module/ModuleReader -header extends java/lang/Object implements java/io/Closeable flags 601 - -class name java/lang/module/ModuleReference -header extends java/lang/Object flags 421 - -class name java/lang/module/ResolutionException -header extends java/lang/RuntimeException flags 21 - -class name java/lang/module/ResolvedModule -header extends java/lang/Object flags 31 +class name java/lang/ref/Reference +header extends java/lang/Object flags 421 signature Ljava/lang/Object; class name java/lang/reflect/AccessibleObject header extends java/lang/Object implements java/lang/reflect/AnnotatedElement flags 21 classAnnotations @Ljdk/Profile+Annotation;(value=I1) -method name descriptor ()V method name descriptor ()V flags 4 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="17") -class name java/lang/reflect/AnnotatedElement -header extends java/lang/Object flags 601 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name java/lang/reflect/Executable -header extends java/lang/reflect/AccessibleObject implements java/lang/reflect/Member,java/lang/reflect/GenericDeclaration sealed true flags 421 +header extends java/lang/reflect/AccessibleObject implements java/lang/reflect/Member,java/lang/reflect/GenericDeclaration sealed true permittedSubclasses java/lang/reflect/Constructor,java/lang/reflect/Method flags 421 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -class name java/lang/reflect/InaccessibleObjectException -header extends java/lang/RuntimeException flags 21 - class name java/lang/runtime/SwitchBootstraps header extends java/lang/Object flags 21 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;SWITCH_PATTERN_MATCHING;) innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 @@ -233,15 +238,39 @@ class name java/net/URLStreamHandler -method name getHostAddress descriptor (Ljava/net/URL;)Ljava/net/InetAddress; method name getHostAddress descriptor (Ljava/net/URL;)Ljava/net/InetAddress; flags 4 -class name java/net/spi/URLStreamHandlerProvider -header extends java/lang/Object implements java/net/URLStreamHandlerFactory flags 421 +class name java/nio/Buffer +header extends java/lang/Object flags 421 +innerclass innerClass jdk/internal/misc/ScopedMemoryAccess$Scope outerClass jdk/internal/misc/ScopedMemoryAccess innerClassName Scope flags 609 + +class name java/nio/ByteBuffer +header extends java/nio/Buffer implements java/lang/Comparable flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable; +innerclass innerClass jdk/internal/misc/ScopedMemoryAccess$Scope outerClass jdk/internal/misc/ScopedMemoryAccess innerClassName Scope flags 609 class name java/nio/CharBuffer header extends java/nio/Buffer implements java/lang/Comparable,java/lang/Appendable,java/lang/CharSequence,java/lang/Readable flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable;Ljava/lang/Appendable;Ljava/lang/CharSequence;Ljava/lang/Readable; +innerclass innerClass jdk/internal/misc/ScopedMemoryAccess$Scope outerClass jdk/internal/misc/ScopedMemoryAccess innerClassName Scope flags 609 innerclass innerClass java/util/Spliterator$OfInt outerClass java/util/Spliterator innerClassName OfInt flags 609 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +class name java/nio/DoubleBuffer +header extends java/nio/Buffer implements java/lang/Comparable flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable; +innerclass innerClass jdk/internal/misc/ScopedMemoryAccess$Scope outerClass jdk/internal/misc/ScopedMemoryAccess innerClassName Scope flags 609 + +class name java/nio/FloatBuffer +header extends java/nio/Buffer implements java/lang/Comparable flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable; +innerclass innerClass jdk/internal/misc/ScopedMemoryAccess$Scope outerClass jdk/internal/misc/ScopedMemoryAccess innerClassName Scope flags 609 + +class name java/nio/IntBuffer +header extends java/nio/Buffer implements java/lang/Comparable flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable; +innerclass innerClass jdk/internal/misc/ScopedMemoryAccess$Scope outerClass jdk/internal/misc/ScopedMemoryAccess innerClassName Scope flags 609 + +class name java/nio/LongBuffer +header extends java/nio/Buffer implements java/lang/Comparable flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable; +innerclass innerClass jdk/internal/misc/ScopedMemoryAccess$Scope outerClass jdk/internal/misc/ScopedMemoryAccess innerClassName Scope flags 609 + class name java/nio/MappedByteBuffer +header extends java/nio/ByteBuffer flags 421 +innerclass innerClass jdk/internal/misc/ScopedMemoryAccess$Scope outerClass jdk/internal/misc/ScopedMemoryAccess innerClassName Scope flags 609 method name slice descriptor ()Ljava/nio/MappedByteBuffer; flags 401 method name slice descriptor (II)Ljava/nio/MappedByteBuffer; flags 401 method name duplicate descriptor ()Ljava/nio/MappedByteBuffer; flags 401 @@ -254,6 +283,10 @@ method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 method name slice descriptor ()Ljava/nio/Buffer; flags 1041 +class name java/nio/ShortBuffer +header extends java/nio/Buffer implements java/lang/Comparable flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable; +innerclass innerClass jdk/internal/misc/ScopedMemoryAccess$Scope outerClass jdk/internal/misc/ScopedMemoryAccess innerClassName Scope flags 609 + class name java/security/AccessControlContext header extends java/lang/Object flags 31 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="17") @@ -263,15 +296,9 @@ header extends java/lang/SecurityException flags 21 deprecated true runtimeAnnot class name java/security/AccessController header extends java/lang/Object flags 31 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="17") -class name java/security/Certificate -header extends java/lang/Object flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="1.2") - class name java/security/DomainCombiner header extends java/lang/Object flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="17") -class name java/security/Identity -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 421 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="1.2") - class name java/security/Policy header extends java/lang/Object nestMembers java/security/Policy$Parameters flags 421 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="17") innerclass innerClass java/security/Policy$Parameters outerClass java/security/Policy innerClassName Parameters flags 609 @@ -287,70 +314,6 @@ class name java/security/SecureRandom header extends java/util/Random flags 21 runtimeAnnotations @Ljdk/internal/util/random/RandomSupport$RandomGeneratorProperties;(name="SecureRandom",isStochastic=Ztrue) innerclass innerClass java/security/Provider$Service outerClass java/security/Provider innerClassName Service flags 9 -class name java/security/SecureRandomParameters -header extends java/lang/Object flags 601 - -class name java/security/SignedObject -header extends java/lang/Object implements java/io/Serializable flags 31 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 - -class name java/security/cert/CertificateRevokedException -header extends java/security/cert/CertificateException flags 21 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 - -class name java/security/cert/URICertStoreParameters -header extends java/lang/Object implements java/security/cert/CertStoreParameters flags 31 - -class name java/security/interfaces/RSAKey --method name getParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec; -method name getParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec; 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; -field name SHA512_224 descriptor Ljava/security/spec/MGF1ParameterSpec; flags 19 -field name SHA512_256 descriptor Ljava/security/spec/MGF1ParameterSpec; flags 19 - -class name java/security/spec/PSSParameterSpec --field name TRAILER_FIELD_BC descriptor I --method name toString descriptor ()Ljava/lang/String; -field name TRAILER_FIELD_BC descriptor I constantValue 1 flags 19 -method name toString descriptor ()Ljava/lang/String; flags 1 - -class name java/security/spec/RSAKeyGenParameterSpec --method name descriptor (ILjava/math/BigInteger;Ljava/security/spec/AlgorithmParameterSpec;)V --method name getKeyParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec; -method name 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 --method name 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 -method name 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/RSAPrivateCrtKeySpec --method name 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 -method name 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 --method name descriptor (Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/security/spec/AlgorithmParameterSpec;)V --method name getParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec; -method name 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 --method name descriptor (Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/security/spec/AlgorithmParameterSpec;)V --method name getParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec; -method name 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/text/DateFormatSymbols -header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 21 -innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019 - -class name java/text/RuleBasedCollator -header extends java/text/Collator flags 21 -innerclass innerClass java/text/Normalizer$Form outerClass java/text/Normalizer innerClassName Form flags 4019 - class name java/time/Clock header extends java/lang/Object implements java/time/InstantSource flags 421 @@ -364,37 +327,8 @@ method name instant descriptor ()Ljava/time/Instant; flags 401 method name millis descriptor ()J flags 1 method name withZone descriptor (Ljava/time/ZoneId;)Ljava/time/Clock; flags 1 -class name java/time/chrono/ChronoLocalDate -header extends java/lang/Object implements java/time/temporal/Temporal,java/time/temporal/TemporalAdjuster,java/lang/Comparable flags 601 signature Ljava/lang/Object;Ljava/time/temporal/Temporal;Ljava/time/temporal/TemporalAdjuster;Ljava/lang/Comparable; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/time/chrono/ChronoLocalDateTime -header extends java/lang/Object implements java/time/temporal/Temporal,java/time/temporal/TemporalAdjuster,java/lang/Comparable flags 601 signature Ljava/lang/Object;Ljava/time/temporal/Temporal;Ljava/time/temporal/TemporalAdjuster;Ljava/lang/Comparable;>; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/time/format/DecimalStyle -header extends java/lang/Object flags 31 -innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019 - -class name java/time/temporal/TemporalAdjusters -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/Comparator -header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/DoubleSummaryStatistics -header extends java/lang/Object implements java/util/function/DoubleConsumer flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/GregorianCalendar -header extends java/util/Calendar flags 21 -innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019 - -class name java/util/HashSet -header extends java/util/AbstractSet implements java/util/Set,java/lang/Cloneable,java/io/Serializable flags 21 signature Ljava/util/AbstractSet;Ljava/util/Set;Ljava/lang/Cloneable;Ljava/io/Serializable; -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 +class name java/util/EnumSet +header extends java/util/AbstractSet implements java/lang/Cloneable,java/io/Serializable flags 421 signature ;>Ljava/util/AbstractSet;Ljava/lang/Cloneable;Ljava/io/Serializable; class name java/util/HexFormat header extends java/lang/Object flags 31 @@ -436,19 +370,13 @@ method name hashCode descriptor ()I flags 1 method name toString descriptor ()Ljava/lang/String; flags 1 class name java/util/Locale$IsoCountryCode -header extends java/lang/Enum nestHost java/util/Locale sealed true flags 4421 signature Ljava/lang/Enum; +header extends java/lang/Enum nestHost java/util/Locale sealed true permittedSubclasses java/util/Locale$IsoCountryCode$1,java/util/Locale$IsoCountryCode$2,java/util/Locale$IsoCountryCode$3 flags 4421 signature Ljava/lang/Enum; innerclass innerClass java/util/Locale$IsoCountryCode outerClass java/util/Locale innerClassName IsoCountryCode flags 4409 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 class name java/util/Map$Entry method name copyOf descriptor (Ljava/util/Map$Entry;)Ljava/util/Map$Entry; flags 9 signature (Ljava/util/Map$Entry<+TK;+TV;>;)Ljava/util/Map$Entry; -class name java/util/Observable -header extends java/lang/Object flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="9") - -class name java/util/Observer -header extends java/lang/Object flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="9") - class name java/util/Random header extends java/lang/Object implements java/util/random/RandomGenerator,java/io/Serializable flags 21 runtimeAnnotations @Ljdk/internal/util/random/RandomSupport$RandomGeneratorProperties;(name="Random",i=I48,j=I0,k=I0,equidistribution=I0) innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 @@ -473,32 +401,10 @@ method name splits descriptor (JLjava/util/random/RandomGenerator$SplittableGene method name split descriptor (Ljava/util/random/RandomGenerator$SplittableGenerator;)Ljava/util/random/RandomGenerator$SplittableGenerator; flags 1041 method name split descriptor ()Ljava/util/random/RandomGenerator$SplittableGenerator; flags 1041 -class name java/util/TimeZone -header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 421 -innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019 - class name java/util/Timer header extends java/lang/Object flags 21 innerclass innerClass java/lang/ref/Cleaner$Cleanable outerClass java/lang/ref/Cleaner innerClassName Cleanable flags 609 -class name java/util/TreeSet -header extends java/util/AbstractSet implements java/util/NavigableSet,java/lang/Cloneable,java/io/Serializable flags 21 signature Ljava/util/AbstractSet;Ljava/util/NavigableSet;Ljava/lang/Cloneable;Ljava/io/Serializable; -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 - -class name java/util/concurrent/ConcurrentMap -header extends java/lang/Object implements java/util/Map flags 601 signature Ljava/lang/Object;Ljava/util/Map; -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/concurrent/ConcurrentSkipListSet -header extends java/util/AbstractSet implements java/util/NavigableSet,java/lang/Cloneable,java/io/Serializable flags 21 signature Ljava/util/AbstractSet;Ljava/util/NavigableSet;Ljava/lang/Cloneable;Ljava/io/Serializable; -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/concurrent/CountedCompleter -header extends java/util/concurrent/ForkJoinTask flags 421 signature Ljava/util/concurrent/ForkJoinTask; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name java/util/concurrent/Executors -method name privilegedThreadFactory descriptor ()Ljava/util/concurrent/ThreadFactory; -method name privilegedCallable descriptor (Ljava/util/concurrent/Callable;)Ljava/util/concurrent/Callable; @@ -533,102 +439,6 @@ innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/Obj method name nextFloat descriptor (F)F flags 1 method name nextFloat descriptor (FF)F flags 1 -class name java/util/concurrent/atomic/AtomicBoolean -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 - -class name java/util/concurrent/atomic/AtomicReference -header extends java/lang/Object implements java/io/Serializable flags 21 signature Ljava/lang/Object;Ljava/io/Serializable; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/concurrent/atomic/AtomicReferenceArray -header extends java/lang/Object implements java/io/Serializable flags 21 signature Ljava/lang/Object;Ljava/io/Serializable; -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -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 - -class name java/util/function/BiConsumer -header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/BiFunction -header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/BiPredicate -header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/BinaryOperator -header extends java/lang/Object implements java/util/function/BiFunction flags 601 signature Ljava/lang/Object;Ljava/util/function/BiFunction; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/Consumer -header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/DoubleConsumer -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/DoublePredicate -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/DoubleUnaryOperator -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/Function -header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/IntConsumer -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/IntPredicate -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/IntUnaryOperator -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/LongConsumer -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/LongPredicate -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/LongUnaryOperator -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/Predicate -header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/UnaryOperator -header extends java/lang/Object implements java/util/function/Function flags 601 signature Ljava/lang/Object;Ljava/util/function/Function; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name java/util/random/RandomGenerator header extends java/lang/Object nestMembers java/util/random/RandomGenerator$ArbitrarilyJumpableGenerator,java/util/random/RandomGenerator$LeapableGenerator,java/util/random/RandomGenerator$JumpableGenerator,java/util/random/RandomGenerator$SplittableGenerator,java/util/random/RandomGenerator$StreamableGenerator flags 601 innerclass innerClass java/util/random/RandomGenerator$ArbitrarilyJumpableGenerator outerClass java/util/random/RandomGenerator innerClassName ArbitrarilyJumpableGenerator flags 609 @@ -769,154 +579,6 @@ method name create descriptor ()Ljava/util/random/RandomGenerator; flags 1 signa method name create descriptor (J)Ljava/util/random/RandomGenerator; flags 1 signature (J)TT; method name create descriptor ([B)Ljava/util/random/RandomGenerator; flags 1 signature ([B)TT; -class name java/util/spi/AbstractResourceBundleProvider -header extends java/lang/Object implements java/util/spi/ResourceBundleProvider flags 421 -innerclass innerClass java/util/ResourceBundle$Control outerClass java/util/ResourceBundle innerClassName Control flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/spi/CurrencyNameProvider -header extends java/util/spi/LocaleServiceProvider flags 421 -innerclass innerClass java/util/ResourceBundle$Control outerClass java/util/ResourceBundle innerClassName Control flags 9 - -class name java/util/spi/ResourceBundleProvider -header extends java/lang/Object flags 601 - -class name java/util/spi/ToolProvider -header extends java/lang/Object flags 601 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/zip/CRC32C -header extends java/lang/Object implements java/util/zip/Checksum flags 31 - -class name javax/crypto/AEADBadTagException -header extends javax/crypto/BadPaddingException flags 21 - -class name javax/crypto/BadPaddingException -header extends java/security/GeneralSecurityException flags 21 - -class name javax/crypto/CipherInputStream -header extends java/io/FilterInputStream flags 21 - -class name javax/crypto/CipherOutputStream -header extends java/io/FilterOutputStream flags 21 - -class name javax/crypto/CipherSpi -header extends java/lang/Object flags 421 - -class name javax/crypto/EncryptedPrivateKeyInfo -header extends java/lang/Object flags 21 - -class name javax/crypto/ExemptionMechanism -header extends java/lang/Object flags 21 - -class name javax/crypto/ExemptionMechanismException -header extends java/security/GeneralSecurityException flags 21 - -class name javax/crypto/ExemptionMechanismSpi -header extends java/lang/Object flags 421 - -class name javax/crypto/IllegalBlockSizeException -header extends java/security/GeneralSecurityException flags 21 - -class name javax/crypto/KeyAgreement -header extends java/lang/Object flags 21 -innerclass innerClass java/security/Provider$Service outerClass java/security/Provider innerClassName Service flags 9 - -class name javax/crypto/KeyAgreementSpi -header extends java/lang/Object flags 421 - -class name javax/crypto/KeyGenerator -header extends java/lang/Object flags 21 -innerclass innerClass java/security/Provider$Service outerClass java/security/Provider innerClassName Service flags 9 - -class name javax/crypto/KeyGeneratorSpi -header extends java/lang/Object flags 421 - -class name javax/crypto/Mac -header extends java/lang/Object implements java/lang/Cloneable flags 21 -innerclass innerClass java/security/Provider$Service outerClass java/security/Provider innerClassName Service flags 9 - -class name javax/crypto/MacSpi -header extends java/lang/Object flags 421 - -class name javax/crypto/NoSuchPaddingException -header extends java/security/GeneralSecurityException flags 21 - -class name javax/crypto/NullCipher -header extends javax/crypto/Cipher flags 21 - -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 - -class name javax/crypto/SecretKey -header extends java/lang/Object implements java/security/Key,javax/security/auth/Destroyable flags 601 - -class name javax/crypto/SecretKeyFactory -header extends java/lang/Object flags 21 -innerclass innerClass java/security/Provider$Service outerClass java/security/Provider innerClassName Service flags 9 - -class name javax/crypto/SecretKeyFactorySpi -header extends java/lang/Object flags 421 - -class name javax/crypto/ShortBufferException -header extends java/security/GeneralSecurityException flags 21 - -class name javax/crypto/interfaces/DHKey -header extends java/lang/Object flags 601 - -class name javax/crypto/interfaces/DHPrivateKey -header extends java/lang/Object implements javax/crypto/interfaces/DHKey,java/security/PrivateKey flags 601 - -class name javax/crypto/interfaces/DHPublicKey -header extends java/lang/Object implements javax/crypto/interfaces/DHKey,java/security/PublicKey flags 601 - -class name javax/crypto/interfaces/PBEKey -header extends java/lang/Object implements javax/crypto/SecretKey flags 601 - -class name javax/crypto/spec/DESKeySpec -header extends java/lang/Object implements java/security/spec/KeySpec flags 21 - -class name javax/crypto/spec/DESedeKeySpec -header extends java/lang/Object implements java/security/spec/KeySpec flags 21 - -class name javax/crypto/spec/DHGenParameterSpec -header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 - -class name javax/crypto/spec/DHParameterSpec -header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 - -class name javax/crypto/spec/DHPrivateKeySpec -header extends java/lang/Object implements java/security/spec/KeySpec flags 21 - -class name javax/crypto/spec/DHPublicKeySpec -header extends java/lang/Object implements java/security/spec/KeySpec flags 21 - -class name javax/crypto/spec/GCMParameterSpec -header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 - -class name javax/crypto/spec/IvParameterSpec -header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 - -class name javax/crypto/spec/OAEPParameterSpec -header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 -innerclass innerClass javax/crypto/spec/PSource$PSpecified outerClass javax/crypto/spec/PSource innerClassName PSpecified flags 19 - -class name javax/crypto/spec/PBEKeySpec -header extends java/lang/Object implements java/security/spec/KeySpec flags 21 - -class name javax/crypto/spec/PBEParameterSpec -header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 - -class name javax/crypto/spec/RC2ParameterSpec -header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 - -class name javax/crypto/spec/RC5ParameterSpec -header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 - -class name javax/crypto/spec/SecretKeySpec -header extends java/lang/Object implements java/security/spec/KeySpec,javax/crypto/SecretKey flags 21 - class name javax/security/auth/Subject -method name getSubject descriptor (Ljava/security/AccessControlContext;)Ljavax/security/auth/Subject; -method name doAsPrivileged descriptor (Ljavax/security/auth/Subject;Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object; @@ -928,6 +590,231 @@ method name doAsPrivileged descriptor (Ljavax/security/auth/Subject;Ljava/securi class name javax/security/auth/SubjectDomainCombiner header extends java/lang/Object implements java/security/DomainCombiner flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="17") +class name jdk/internal/access/foreign/MemorySegmentProxy +header extends java/lang/Object flags 421 +innerclass innerClass jdk/internal/misc/ScopedMemoryAccess$Scope outerClass jdk/internal/misc/ScopedMemoryAccess innerClassName Scope flags 609 +method name descriptor ()V flags 1 +method name checkAccess descriptor (JJZ)V flags 401 +method name unsafeGetOffset descriptor ()J flags 401 +method name unsafeGetBase descriptor ()Ljava/lang/Object; flags 401 +method name isSmall descriptor ()Z flags 401 +method name scope descriptor ()Ljdk/internal/misc/ScopedMemoryAccess$Scope; flags 401 +method name addOffsets descriptor (JJLjdk/internal/access/foreign/MemorySegmentProxy;)J flags 9 +method name multiplyOffsets descriptor (JJLjdk/internal/access/foreign/MemorySegmentProxy;)J flags 9 + +class name jdk/internal/misc/ScopedMemoryAccess +header extends java/lang/Object nestMembers jdk/internal/misc/ScopedMemoryAccess$Scope,jdk/internal/misc/ScopedMemoryAccess$Scope$Handle flags 21 +innerclass innerClass jdk/internal/misc/ScopedMemoryAccess$Scope outerClass jdk/internal/misc/ScopedMemoryAccess innerClassName Scope flags 609 +innerclass innerClass jdk/internal/vm/vector/VectorSupport$VectorSpecies outerClass jdk/internal/vm/vector/VectorSupport innerClassName VectorSpecies flags 9 +innerclass innerClass jdk/internal/vm/vector/VectorSupport$Vector outerClass jdk/internal/vm/vector/VectorSupport innerClassName Vector flags 9 +innerclass innerClass jdk/internal/misc/ScopedMemoryAccess$Scope$Handle outerClass jdk/internal/misc/ScopedMemoryAccess$Scope innerClassName Handle flags 609 +method name closeScope descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;)Z flags 1 +method name getScopedMemoryAccess descriptor ()Ljdk/internal/misc/ScopedMemoryAccess; flags 9 +method name copyMemory descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JLjava/lang/Object;JJ)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name copySwapMemory descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JLjava/lang/Object;JJJ)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name setMemory descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JJB)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name vectorizedMismatch descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JLjava/lang/Object;JII)I flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name isLoaded descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;JZJ)Z flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name isLoadedInternal descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;JZJ)Z flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/misc/ScopedMemoryAccess$Scoped; +method name load descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;JZJ)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name loadInternal descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;JZJ)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/misc/ScopedMemoryAccess$Scoped; +method name unload descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;JZJ)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name unloadInternal descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;JZJ)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/misc/ScopedMemoryAccess$Scoped; +method name force descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/io/FileDescriptor;JZJJ)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name forceInternal descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/io/FileDescriptor;JZJJ)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/misc/ScopedMemoryAccess$Scoped; +method name loadFromByteBuffer descriptor (Ljava/lang/Class;Ljava/lang/Class;ILjava/nio/ByteBuffer;ILjdk/internal/vm/vector/VectorSupport$VectorSpecies;Ljdk/internal/vm/vector/VectorSupport$LoadOperation;)Ljdk/internal/vm/vector/VectorSupport$Vector; flags 9 signature ;E:Ljava/lang/Object;S:Ljdk/internal/vm/vector/VectorSupport$VectorSpecies;>(Ljava/lang/Class<+TV;>;Ljava/lang/Class;ILjava/nio/ByteBuffer;ITS;Ljdk/internal/vm/vector/VectorSupport$LoadOperation;)TV; runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name storeIntoByteBuffer descriptor (Ljava/lang/Class;Ljava/lang/Class;ILjdk/internal/vm/vector/VectorSupport$Vector;Ljava/nio/ByteBuffer;ILjdk/internal/vm/vector/VectorSupport$StoreVectorOperation;)V flags 9 signature ;E:Ljava/lang/Object;>(Ljava/lang/Class<+TV;>;Ljava/lang/Class;ITV;Ljava/nio/ByteBuffer;ILjdk/internal/vm/vector/VectorSupport$StoreVectorOperation;)V runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getByte descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;J)B flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name putByte descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JB)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getByteVolatile descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;J)B flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name putByteVolatile descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JB)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getByteAcquire descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;J)B flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name putByteRelease descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JB)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getByteOpaque descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;J)B flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name putByteOpaque descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JB)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndAddByte descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JB)B flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndAddByteAcquire descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JB)B flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndAddByteRelease descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JB)B flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseOrByte descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JB)B flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseOrByteAcquire descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JB)B flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseOrByteRelease descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JB)B flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseAndByte descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JB)B flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseAndByteAcquire descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JB)B flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseAndByteRelease descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JB)B flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseXorByte descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JB)B flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseXorByteAcquire descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JB)B flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseXorByteRelease descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JB)B flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getShort descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;J)S flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name putShort descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JS)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getShortUnaligned descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JZ)S flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name putShortUnaligned descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JSZ)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getShortVolatile descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;J)S flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name putShortVolatile descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JS)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getShortAcquire descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;J)S flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name putShortRelease descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JS)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getShortOpaque descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;J)S flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name putShortOpaque descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JS)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndAddShort descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JS)S flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndAddShortAcquire descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JS)S flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndAddShortRelease descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JS)S flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseOrShort descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JS)S flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseOrShortAcquire descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JS)S flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseOrShortRelease descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JS)S flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseAndShort descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JS)S flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseAndShortAcquire descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JS)S flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseAndShortRelease descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JS)S flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseXorShort descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JS)S flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseXorShortAcquire descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JS)S flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseXorShortRelease descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JS)S flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getChar descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;J)C flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name putChar descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JC)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getCharUnaligned descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JZ)C flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name putCharUnaligned descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JCZ)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getCharVolatile descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;J)C flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name putCharVolatile descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JC)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getCharAcquire descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;J)C flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name putCharRelease descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JC)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getCharOpaque descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;J)C flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name putCharOpaque descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JC)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndAddChar descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JC)C flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndAddCharAcquire descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JC)C flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndAddCharRelease descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JC)C flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseOrChar descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JC)C flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseOrCharAcquire descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JC)C flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseOrCharRelease descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JC)C flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseAndChar descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JC)C flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseAndCharAcquire descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JC)C flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseAndCharRelease descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JC)C flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseXorChar descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JC)C flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseXorCharAcquire descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JC)C flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseXorCharRelease descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JC)C flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getInt descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;J)I flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name putInt descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JI)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getIntUnaligned descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JZ)I flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name putIntUnaligned descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JIZ)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getIntVolatile descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;J)I flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name putIntVolatile descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JI)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getIntAcquire descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;J)I flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name putIntRelease descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JI)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getIntOpaque descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;J)I flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name putIntOpaque descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JI)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name compareAndSetInt descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JII)Z flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name compareAndExchangeInt descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JII)I flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name compareAndExchangeIntAcquire descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JII)I flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name compareAndExchangeIntRelease descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JII)I flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name weakCompareAndSetIntPlain descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JII)Z flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name weakCompareAndSetInt descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JII)Z flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name weakCompareAndSetIntAcquire descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JII)Z flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name weakCompareAndSetIntRelease descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JII)Z flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndSetInt descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JI)I flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndSetIntAcquire descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JI)I flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndSetIntRelease descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JI)I flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndAddInt descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JI)I flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndAddIntAcquire descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JI)I flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndAddIntRelease descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JI)I flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseOrInt descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JI)I flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseOrIntAcquire descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JI)I flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseOrIntRelease descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JI)I flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseAndInt descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JI)I flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseAndIntAcquire descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JI)I flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseAndIntRelease descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JI)I flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseXorInt descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JI)I flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseXorIntAcquire descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JI)I flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseXorIntRelease descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JI)I flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getLong descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;J)J flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name putLong descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JJ)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getLongUnaligned descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JZ)J flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name putLongUnaligned descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JJZ)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getLongVolatile descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;J)J flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name putLongVolatile descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JJ)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getLongAcquire descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;J)J flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name putLongRelease descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JJ)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getLongOpaque descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;J)J flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name putLongOpaque descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JJ)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name compareAndSetLong descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JJJ)Z flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name compareAndExchangeLong descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JJJ)J flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name compareAndExchangeLongAcquire descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JJJ)J flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name compareAndExchangeLongRelease descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JJJ)J flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name weakCompareAndSetLongPlain descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JJJ)Z flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name weakCompareAndSetLong descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JJJ)Z flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name weakCompareAndSetLongAcquire descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JJJ)Z flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name weakCompareAndSetLongRelease descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JJJ)Z flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndSetLong descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JJ)J flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndSetLongAcquire descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JJ)J flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndSetLongRelease descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JJ)J flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndAddLong descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JJ)J flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndAddLongAcquire descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JJ)J flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndAddLongRelease descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JJ)J flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseOrLong descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JJ)J flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseOrLongAcquire descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JJ)J flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseOrLongRelease descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JJ)J flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseAndLong descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JJ)J flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseAndLongAcquire descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JJ)J flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseAndLongRelease descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JJ)J flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseXorLong descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JJ)J flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseXorLongAcquire descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JJ)J flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndBitwiseXorLongRelease descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JJ)J flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getFloat descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;J)F flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name putFloat descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JF)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getFloatVolatile descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;J)F flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name putFloatVolatile descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JF)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getFloatAcquire descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;J)F flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name putFloatRelease descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JF)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getFloatOpaque descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;J)F flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name putFloatOpaque descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JF)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name compareAndSetFloat descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JFF)Z flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name compareAndExchangeFloat descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JFF)F flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name compareAndExchangeFloatAcquire descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JFF)F flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name compareAndExchangeFloatRelease descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JFF)F flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name weakCompareAndSetFloatPlain descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JFF)Z flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name weakCompareAndSetFloat descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JFF)Z flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name weakCompareAndSetFloatAcquire descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JFF)Z flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name weakCompareAndSetFloatRelease descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JFF)Z flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndSetFloat descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JF)F flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndSetFloatAcquire descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JF)F flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndSetFloatRelease descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JF)F flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndAddFloat descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JF)F flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndAddFloatAcquire descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JF)F flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndAddFloatRelease descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JF)F flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getDouble descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;J)D flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name putDouble descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JD)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getDoubleVolatile descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;J)D flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name putDoubleVolatile descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JD)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getDoubleAcquire descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;J)D flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name putDoubleRelease descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JD)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getDoubleOpaque descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;J)D flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name putDoubleOpaque descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JD)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name compareAndSetDouble descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JDD)Z flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name compareAndExchangeDouble descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JDD)D flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name compareAndExchangeDoubleAcquire descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JDD)D flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name compareAndExchangeDoubleRelease descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JDD)D flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name weakCompareAndSetDoublePlain descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JDD)Z flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name weakCompareAndSetDouble descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JDD)Z flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name weakCompareAndSetDoubleAcquire descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JDD)Z flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name weakCompareAndSetDoubleRelease descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JDD)Z flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndSetDouble descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JD)D flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndSetDoubleAcquire descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JD)D flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndSetDoubleRelease descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JD)D flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndAddDouble descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JD)D flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndAddDoubleAcquire descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JD)D flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name getAndAddDoubleRelease descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope;Ljava/lang/Object;JD)D flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; + +class name jdk/internal/misc/ScopedMemoryAccess$Scope +header extends java/lang/Object nestHost jdk/internal/misc/ScopedMemoryAccess flags 601 +innerclass innerClass jdk/internal/misc/ScopedMemoryAccess$Scope outerClass jdk/internal/misc/ScopedMemoryAccess innerClassName Scope flags 609 +innerclass innerClass jdk/internal/misc/ScopedMemoryAccess$Scope$Handle outerClass jdk/internal/misc/ScopedMemoryAccess$Scope innerClassName Handle flags 609 +method name checkValidState descriptor ()V flags 401 +method name ownerThread descriptor ()Ljava/lang/Thread; flags 401 +method name isImplicit descriptor ()Z flags 401 +method name acquire descriptor ()Ljdk/internal/misc/ScopedMemoryAccess$Scope$Handle; flags 401 +method name release descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope$Handle;)V flags 401 + +class name jdk/internal/misc/ScopedMemoryAccess$Scope$Handle +header extends java/lang/Object nestHost jdk/internal/misc/ScopedMemoryAccess flags 601 +innerclass innerClass jdk/internal/misc/ScopedMemoryAccess$Scope outerClass jdk/internal/misc/ScopedMemoryAccess innerClassName Scope flags 609 +innerclass innerClass jdk/internal/misc/ScopedMemoryAccess$Scope$Handle outerClass jdk/internal/misc/ScopedMemoryAccess$Scope innerClassName Handle flags 609 +method name scope descriptor ()Ljdk/internal/misc/ScopedMemoryAccess$Scope; flags 401 + class name jdk/internal/vm/vector/VectorSupport field name VECTOR_OP_MASK_TRUECOUNT descriptor I constantValue 19 flags 19 field name VECTOR_OP_MASK_FIRSTTRUE descriptor I constantValue 20 flags 19 diff --git a/src/jdk.compiler/share/data/symbols/java.base-I.sym.txt b/src/jdk.compiler/share/data/symbols/java.base-I.sym.txt index bb60a7a307070..50b1ed9110ad2 100644 --- a/src/jdk.compiler/share/data/symbols/java.base-I.sym.txt +++ b/src/jdk.compiler/share/data/symbols/java.base-I.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2021, 2022, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2021, 2023, 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 @@ -27,7 +27,7 @@ # ########################################################## # module name java.base -header exports java/io,java/lang,java/lang/annotation,java/lang/constant,java/lang/invoke,java/lang/module,java/lang/ref,java/lang/reflect,java/lang/runtime,java/math,java/net,java/net/spi,java/nio,java/nio/channels,java/nio/channels/spi,java/nio/charset,java/nio/charset/spi,java/nio/file,java/nio/file/attribute,java/nio/file/spi,java/security,java/security/cert,java/security/interfaces,java/security/spec,java/text,java/text/spi,java/time,java/time/chrono,java/time/format,java/time/temporal,java/time/zone,java/util,java/util/concurrent,java/util/concurrent/atomic,java/util/concurrent/locks,java/util/function,java/util/jar,java/util/random,java/util/regex,java/util/spi,java/util/stream,java/util/zip,javax/crypto,javax/crypto/interfaces,javax/crypto/spec,javax/net,javax/net/ssl,javax/security/auth,javax/security/auth/callback,javax/security/auth/login,javax/security/auth/spi,javax/security/auth/x500,javax/security/cert,jdk/internal/event[jdk.jfr],jdk/internal/vm/vector[jdk.incubator.vector] uses java/lang/System$LoggerFinder,java/net/ContentHandlerFactory,java/net/spi/InetAddressResolverProvider,java/net/spi/URLStreamHandlerProvider,java/nio/channels/spi/AsynchronousChannelProvider,java/nio/channels/spi/SelectorProvider,java/nio/charset/spi/CharsetProvider,java/nio/file/spi/FileSystemProvider,java/nio/file/spi/FileTypeDetector,java/security/Provider,java/text/spi/BreakIteratorProvider,java/text/spi/CollatorProvider,java/text/spi/DateFormatProvider,java/text/spi/DateFormatSymbolsProvider,java/text/spi/DecimalFormatSymbolsProvider,java/text/spi/NumberFormatProvider,java/time/chrono/AbstractChronology,java/time/chrono/Chronology,java/time/zone/ZoneRulesProvider,java/util/random/RandomGenerator,java/util/spi/CalendarDataProvider,java/util/spi/CalendarNameProvider,java/util/spi/CurrencyNameProvider,java/util/spi/LocaleNameProvider,java/util/spi/ResourceBundleControlProvider,java/util/spi/ResourceBundleProvider,java/util/spi/TimeZoneNameProvider,java/util/spi/ToolProvider,javax/security/auth/spi/LoginModule,jdk/internal/logger/DefaultLoggerFinder,sun/text/spi/JavaTimeDateTimePatternProvider,sun/util/locale/provider/LocaleDataMetaInfo,sun/util/resources/LocaleData$CommonResourceBundleProvider,sun/util/resources/LocaleData$SupplementaryResourceBundleProvider,sun/util/spi/CalendarProvider provides interface\u0020;java/nio/file/spi/FileSystemProvider\u0020;impls\u0020;jdk/internal/jrtfs/JrtFileSystemProvider,interface\u0020;java/util/random/RandomGenerator\u0020;impls\u0020;java/security/SecureRandom\u005C;u002C;java/util/Random\u005C;u002C;java/util/SplittableRandom target linux-amd64 flags 8000 +header exports java/io,java/lang,java/lang/annotation,java/lang/constant,java/lang/invoke,java/lang/module,java/lang/ref,java/lang/reflect,java/lang/runtime,java/math,java/net,java/net/spi,java/nio,java/nio/channels,java/nio/channels/spi,java/nio/charset,java/nio/charset/spi,java/nio/file,java/nio/file/attribute,java/nio/file/spi,java/security,java/security/cert,java/security/interfaces,java/security/spec,java/text,java/text/spi,java/time,java/time/chrono,java/time/format,java/time/temporal,java/time/zone,java/util,java/util/concurrent,java/util/concurrent/atomic,java/util/concurrent/locks,java/util/function,java/util/jar,java/util/random,java/util/regex,java/util/spi,java/util/stream,java/util/zip,javax/crypto,javax/crypto/interfaces,javax/crypto/spec,javax/net,javax/net/ssl,javax/security/auth,javax/security/auth/callback,javax/security/auth/login,javax/security/auth/spi,javax/security/auth/x500,javax/security/cert,jdk/internal/access/foreign[jdk.incubator.foreign],jdk/internal/event[jdk.jfr],jdk/internal/misc[jdk.incubator.foreign],jdk/internal/vm/vector[jdk.incubator.vector] extraModulePackages sun/net,sun/net uses java/lang/System$LoggerFinder,java/net/ContentHandlerFactory,java/net/spi/InetAddressResolverProvider,java/net/spi/URLStreamHandlerProvider,java/nio/channels/spi/AsynchronousChannelProvider,java/nio/channels/spi/SelectorProvider,java/nio/charset/spi/CharsetProvider,java/nio/file/spi/FileSystemProvider,java/nio/file/spi/FileTypeDetector,java/security/Provider,java/text/spi/BreakIteratorProvider,java/text/spi/CollatorProvider,java/text/spi/DateFormatProvider,java/text/spi/DateFormatSymbolsProvider,java/text/spi/DecimalFormatSymbolsProvider,java/text/spi/NumberFormatProvider,java/time/chrono/AbstractChronology,java/time/chrono/Chronology,java/time/zone/ZoneRulesProvider,java/util/random/RandomGenerator,java/util/spi/CalendarDataProvider,java/util/spi/CalendarNameProvider,java/util/spi/CurrencyNameProvider,java/util/spi/LocaleNameProvider,java/util/spi/ResourceBundleControlProvider,java/util/spi/ResourceBundleProvider,java/util/spi/TimeZoneNameProvider,java/util/spi/ToolProvider,javax/security/auth/spi/LoginModule,jdk/internal/logger/DefaultLoggerFinder,sun/text/spi/JavaTimeDateTimePatternProvider,sun/util/locale/provider/LocaleDataMetaInfo,sun/util/resources/LocaleData$CommonResourceBundleProvider,sun/util/resources/LocaleData$SupplementaryResourceBundleProvider,sun/util/spi/CalendarProvider provides interface\u0020;java/nio/file/spi/FileSystemProvider\u0020;impls\u0020;jdk/internal/jrtfs/JrtFileSystemProvider,interface\u0020;java/util/random/RandomGenerator\u0020;impls\u0020;java/security/SecureRandom\u005C;u002C;java/util/Random\u005C;u002C;java/util/SplittableRandom target linux-amd64 flags 8000 class name java/io/FileInputStream method name transferTo descriptor (Ljava/io/OutputStream;)J thrownTypes java/io/IOException flags 1 @@ -37,31 +37,12 @@ class name java/io/ObjectInputStream$GetField method name get descriptor (Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object; thrownTypes java/io/IOException,java/lang/ClassNotFoundException flags 401 class name java/io/PrintStream -header extends java/io/FilterOutputStream implements java/lang/Appendable,java/io/Closeable flags 21 -innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019 method name charset descriptor ()Ljava/nio/charset/Charset; flags 1 -class name java/lang/AbstractStringBuilder -header extends java/lang/Object implements java/lang/Appendable,java/lang/CharSequence flags 420 -innerclass innerClass java/util/Spliterator$OfInt outerClass java/util/Spliterator innerClassName OfInt flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/lang/Compiler -header extends java/lang/Object flags 31 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9") - -class name java/lang/Deprecated -header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Documented;@Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;RUNTIME;)@Ljava/lang/annotation/Target;(value={eLjava/lang/annotation/ElementType;CONSTRUCTOR;eLjava/lang/annotation/ElementType;FIELD;eLjava/lang/annotation/ElementType;LOCAL_VARIABLE;eLjava/lang/annotation/ElementType;METHOD;eLjava/lang/annotation/ElementType;PACKAGE;eLjava/lang/annotation/ElementType;MODULE;eLjava/lang/annotation/ElementType;PARAMETER;eLjava/lang/annotation/ElementType;TYPE;}) - class name java/lang/Enum -method name finalize descriptor ()V method name finalize descriptor ()V flags 14 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="18") -class name java/lang/IllegalCallerException -header extends java/lang/RuntimeException flags 21 - -class name java/lang/LayerInstantiationException -header extends java/lang/RuntimeException flags 21 - class name java/lang/Math method name divideExact descriptor (II)I flags 9 method name divideExact descriptor (JJ)J flags 9 @@ -77,9 +58,6 @@ method name ceilMod descriptor (II)I flags 9 method name ceilMod descriptor (JI)I flags 9 method name ceilMod descriptor (JJ)J flags 9 -class name java/lang/NamedPackage -header extends java/lang/Object flags 20 - class name java/lang/Object -method name finalize descriptor ()V method name finalize descriptor ()V thrownTypes java/lang/Throwable flags 4 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9") @@ -109,9 +87,6 @@ method name ceilMod descriptor (II)I flags 9 method name ceilMod descriptor (JI)I flags 9 method name ceilMod descriptor (JJ)J flags 9 -class name java/lang/SuppressWarnings -header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Target;(value={eLjava/lang/annotation/ElementType;TYPE;eLjava/lang/annotation/ElementType;FIELD;eLjava/lang/annotation/ElementType;METHOD;eLjava/lang/annotation/ElementType;PARAMETER;eLjava/lang/annotation/ElementType;CONSTRUCTOR;eLjava/lang/annotation/ElementType;LOCAL_VARIABLE;eLjava/lang/annotation/ElementType;MODULE;})@Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;SOURCE;) - class name java/lang/System -method name runFinalization descriptor ()V method name runFinalization descriptor ()V flags 9 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="18") @@ -120,80 +95,10 @@ class name java/lang/Thread -method name stop descriptor ()V method name stop descriptor ()V flags 11 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="1.2") -class name java/lang/constant/ClassDesc -header extends java/lang/Object implements java/lang/constant/ConstantDesc,java/lang/invoke/TypeDescriptor$OfField sealed true flags 601 signature Ljava/lang/Object;Ljava/lang/constant/ConstantDesc;Ljava/lang/invoke/TypeDescriptor$OfField; -innerclass innerClass java/lang/invoke/TypeDescriptor$OfField outerClass java/lang/invoke/TypeDescriptor innerClassName OfField flags 609 - -class name java/lang/constant/ConstantDesc -header extends java/lang/Object sealed true flags 601 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/lang/constant/DirectMethodHandleDesc -header extends java/lang/Object implements java/lang/constant/MethodHandleDesc nestMembers java/lang/constant/DirectMethodHandleDesc$Kind sealed true flags 601 -innerclass innerClass java/lang/constant/DirectMethodHandleDesc$Kind outerClass java/lang/constant/DirectMethodHandleDesc innerClassName Kind flags 4019 - -class name java/lang/constant/MethodHandleDesc -header extends java/lang/Object implements java/lang/constant/ConstantDesc sealed true flags 601 -innerclass innerClass java/lang/constant/DirectMethodHandleDesc$Kind outerClass java/lang/constant/DirectMethodHandleDesc innerClassName Kind flags 4019 - -class name java/lang/constant/MethodTypeDesc -header extends java/lang/Object implements java/lang/constant/ConstantDesc,java/lang/invoke/TypeDescriptor$OfMethod sealed true flags 601 signature Ljava/lang/Object;Ljava/lang/constant/ConstantDesc;Ljava/lang/invoke/TypeDescriptor$OfMethod; -innerclass innerClass java/lang/invoke/TypeDescriptor$OfMethod outerClass java/lang/invoke/TypeDescriptor innerClassName OfMethod flags 609 -innerclass innerClass java/lang/invoke/TypeDescriptor$OfField outerClass java/lang/invoke/TypeDescriptor innerClassName OfField flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/lang/invoke/CallSite -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/lang/invoke/LambdaMetafactory -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name java/lang/invoke/MethodHandle -method name asType descriptor (Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; method name asType descriptor (Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; flags 11 -class name java/lang/invoke/StringConcatException -header extends java/lang/Exception flags 21 - -class name java/lang/module/Configuration -header extends java/lang/Object flags 31 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/lang/module/FindException -header extends java/lang/RuntimeException flags 21 - -class name java/lang/module/InvalidModuleDescriptorException -header extends java/lang/RuntimeException flags 21 - -class name java/lang/module/ModuleReader -header extends java/lang/Object implements java/io/Closeable flags 601 - -class name java/lang/module/ModuleReference -header extends java/lang/Object flags 421 - -class name java/lang/module/ResolutionException -header extends java/lang/RuntimeException flags 21 - -class name java/lang/module/ResolvedModule -header extends java/lang/Object flags 31 - -class name java/lang/reflect/AccessibleObject -header extends java/lang/Object implements java/lang/reflect/AnnotatedElement flags 21 classAnnotations @Ljdk/Profile+Annotation;(value=I1) - -class name java/lang/reflect/AnnotatedElement -header extends java/lang/Object flags 601 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/lang/reflect/Executable -header extends java/lang/reflect/AccessibleObject implements java/lang/reflect/Member,java/lang/reflect/GenericDeclaration sealed true flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/lang/reflect/InaccessibleObjectException -header extends java/lang/RuntimeException flags 21 - class name java/lang/reflect/Method -method name invoke descriptor (Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; method name invoke descriptor (Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; thrownTypes java/lang/IllegalAccessException,java/lang/reflect/InvocationTargetException flags 81 runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive;@Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/vm/annotation/IntrinsicCandidate; @@ -246,28 +151,14 @@ method name name descriptor ()Ljava/lang/String; flags 401 method name descriptor ()V flags 4 class name java/net/spi/InetAddressResolverProvider$Configuration -header extends java/lang/Object nestHost java/net/spi/InetAddressResolverProvider sealed true flags 601 +header extends java/lang/Object nestHost java/net/spi/InetAddressResolverProvider sealed true permittedSubclasses sun/net/ResolverProviderConfiguration flags 601 innerclass innerClass java/net/spi/InetAddressResolverProvider$Configuration outerClass java/net/spi/InetAddressResolverProvider innerClassName Configuration flags 609 method name builtinResolver descriptor ()Ljava/net/spi/InetAddressResolver; flags 401 method name lookupLocalHostName descriptor ()Ljava/lang/String; flags 401 -class name java/net/spi/URLStreamHandlerProvider -header extends java/lang/Object implements java/net/URLStreamHandlerFactory flags 421 - -class name java/nio/CharBuffer -header extends java/nio/Buffer implements java/lang/Comparable,java/lang/Appendable,java/lang/CharSequence,java/lang/Readable flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable;Ljava/lang/Appendable;Ljava/lang/CharSequence;Ljava/lang/Readable; -innerclass innerClass java/util/Spliterator$OfInt outerClass java/util/Spliterator innerClassName OfInt flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name java/nio/charset/Charset method name forName descriptor (Ljava/lang/String;Ljava/nio/charset/Charset;)Ljava/nio/charset/Charset; flags 9 -class name java/security/Certificate -header extends java/lang/Object flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="1.2") - -class name java/security/Identity -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 421 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="1.2") - class name java/security/KeyStore method name getAttributes descriptor (Ljava/lang/String;)Ljava/util/Set; thrownTypes java/security/KeyStoreException flags 11 signature (Ljava/lang/String;)Ljava/util/Set; @@ -288,101 +179,9 @@ class name java/security/Provider -method name getServices descriptor ()Ljava/util/Set; method name getServices descriptor ()Ljava/util/Set; flags 1 signature ()Ljava/util/Set; -class name java/security/SecureRandomParameters -header extends java/lang/Object flags 601 - -class name java/security/SignedObject -header extends java/lang/Object implements java/io/Serializable flags 31 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 - -class name java/security/cert/CertificateRevokedException -header extends java/security/cert/CertificateException flags 21 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 - -class name java/security/cert/URICertStoreParameters -header extends java/lang/Object implements java/security/cert/CertStoreParameters flags 31 - -class name java/security/interfaces/RSAKey --method name getParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec; -method name getParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec; 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; -field name SHA512_224 descriptor Ljava/security/spec/MGF1ParameterSpec; flags 19 -field name SHA512_256 descriptor Ljava/security/spec/MGF1ParameterSpec; flags 19 - -class name java/security/spec/PSSParameterSpec --field name TRAILER_FIELD_BC descriptor I --method name toString descriptor ()Ljava/lang/String; -field name TRAILER_FIELD_BC descriptor I constantValue 1 flags 19 -method name toString descriptor ()Ljava/lang/String; flags 1 - -class name java/security/spec/RSAKeyGenParameterSpec --method name descriptor (ILjava/math/BigInteger;Ljava/security/spec/AlgorithmParameterSpec;)V --method name getKeyParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec; -method name 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 --method name 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 -method name 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/RSAPrivateCrtKeySpec --method name 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 -method name 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 --method name descriptor (Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/security/spec/AlgorithmParameterSpec;)V --method name getParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec; -method name 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 --method name descriptor (Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/security/spec/AlgorithmParameterSpec;)V --method name getParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec; -method name 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/text/DateFormatSymbols -header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 21 -innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019 - -class name java/text/RuleBasedCollator -header extends java/text/Collator flags 21 -innerclass innerClass java/text/Normalizer$Form outerClass java/text/Normalizer innerClassName Form flags 4019 - class name java/time/Duration method name isPositive descriptor ()Z flags 1 -class name java/time/chrono/ChronoLocalDate -header extends java/lang/Object implements java/time/temporal/Temporal,java/time/temporal/TemporalAdjuster,java/lang/Comparable flags 601 signature Ljava/lang/Object;Ljava/time/temporal/Temporal;Ljava/time/temporal/TemporalAdjuster;Ljava/lang/Comparable; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/time/chrono/ChronoLocalDateTime -header extends java/lang/Object implements java/time/temporal/Temporal,java/time/temporal/TemporalAdjuster,java/lang/Comparable flags 601 signature Ljava/lang/Object;Ljava/time/temporal/Temporal;Ljava/time/temporal/TemporalAdjuster;Ljava/lang/Comparable;>; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/time/format/DecimalStyle -header extends java/lang/Object flags 31 -innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019 - -class name java/time/temporal/TemporalAdjusters -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/Comparator -header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/DoubleSummaryStatistics -header extends java/lang/Object implements java/util/function/DoubleConsumer flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/GregorianCalendar -header extends java/util/Calendar flags 21 -innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019 - class name java/util/HashMap header extends java/util/AbstractMap implements java/util/Map,java/lang/Cloneable,java/io/Serializable flags 21 signature Ljava/util/AbstractMap;Ljava/util/Map;Ljava/lang/Cloneable;Ljava/io/Serializable; innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 @@ -403,287 +202,10 @@ header extends java/util/AbstractMap implements java/util/Map,java/io/Serializab innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -class name java/util/Locale$IsoCountryCode -header extends java/lang/Enum nestHost java/util/Locale sealed true flags 4421 signature Ljava/lang/Enum; -innerclass innerClass java/util/Locale$IsoCountryCode outerClass java/util/Locale innerClassName IsoCountryCode flags 4409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/Observable -header extends java/lang/Object flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="9") - -class name java/util/Observer -header extends java/lang/Object flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="9") - -class name java/util/TimeZone -header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 421 -innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019 - -class name java/util/TreeSet -header extends java/util/AbstractSet implements java/util/NavigableSet,java/lang/Cloneable,java/io/Serializable flags 21 signature Ljava/util/AbstractSet;Ljava/util/NavigableSet;Ljava/lang/Cloneable;Ljava/io/Serializable; -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 - -class name java/util/concurrent/ConcurrentMap -header extends java/lang/Object implements java/util/Map flags 601 signature Ljava/lang/Object;Ljava/util/Map; -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/concurrent/ConcurrentSkipListSet -header extends java/util/AbstractSet implements java/util/NavigableSet,java/lang/Cloneable,java/io/Serializable flags 21 signature Ljava/util/AbstractSet;Ljava/util/NavigableSet;Ljava/lang/Cloneable;Ljava/io/Serializable; -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/concurrent/CountedCompleter -header extends java/util/concurrent/ForkJoinTask flags 421 signature Ljava/util/concurrent/ForkJoinTask; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name java/util/concurrent/ThreadPoolExecutor -method name finalize descriptor ()V method name finalize descriptor ()V flags 4 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9") -class name java/util/concurrent/atomic/AtomicBoolean -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 - -class name java/util/concurrent/atomic/AtomicReference -header extends java/lang/Object implements java/io/Serializable flags 21 signature Ljava/lang/Object;Ljava/io/Serializable; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/concurrent/atomic/AtomicReferenceArray -header extends java/lang/Object implements java/io/Serializable flags 21 signature Ljava/lang/Object;Ljava/io/Serializable; -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -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 - -class name java/util/function/BiConsumer -header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/BiFunction -header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/BiPredicate -header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/BinaryOperator -header extends java/lang/Object implements java/util/function/BiFunction flags 601 signature Ljava/lang/Object;Ljava/util/function/BiFunction; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/Consumer -header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/DoubleConsumer -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/DoublePredicate -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/DoubleUnaryOperator -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/Function -header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/IntConsumer -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/IntPredicate -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/IntUnaryOperator -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/LongConsumer -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/LongPredicate -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/LongUnaryOperator -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/Predicate -header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/UnaryOperator -header extends java/lang/Object implements java/util/function/Function flags 601 signature Ljava/lang/Object;Ljava/util/function/Function; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/spi/AbstractResourceBundleProvider -header extends java/lang/Object implements java/util/spi/ResourceBundleProvider flags 421 -innerclass innerClass java/util/ResourceBundle$Control outerClass java/util/ResourceBundle innerClassName Control flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/spi/CurrencyNameProvider -header extends java/util/spi/LocaleServiceProvider flags 421 -innerclass innerClass java/util/ResourceBundle$Control outerClass java/util/ResourceBundle innerClassName Control flags 9 - -class name java/util/spi/ResourceBundleProvider -header extends java/lang/Object flags 601 - -class name java/util/spi/ToolProvider -header extends java/lang/Object flags 601 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/zip/CRC32C -header extends java/lang/Object implements java/util/zip/Checksum flags 31 - -class name javax/crypto/AEADBadTagException -header extends javax/crypto/BadPaddingException flags 21 - -class name javax/crypto/BadPaddingException -header extends java/security/GeneralSecurityException flags 21 - -class name javax/crypto/CipherInputStream -header extends java/io/FilterInputStream flags 21 - -class name javax/crypto/CipherOutputStream -header extends java/io/FilterOutputStream flags 21 - -class name javax/crypto/CipherSpi -header extends java/lang/Object flags 421 - -class name javax/crypto/EncryptedPrivateKeyInfo -header extends java/lang/Object flags 21 - -class name javax/crypto/ExemptionMechanism -header extends java/lang/Object flags 21 - -class name javax/crypto/ExemptionMechanismException -header extends java/security/GeneralSecurityException flags 21 - -class name javax/crypto/ExemptionMechanismSpi -header extends java/lang/Object flags 421 - -class name javax/crypto/IllegalBlockSizeException -header extends java/security/GeneralSecurityException flags 21 - -class name javax/crypto/KeyAgreement -header extends java/lang/Object flags 21 -innerclass innerClass java/security/Provider$Service outerClass java/security/Provider innerClassName Service flags 9 - -class name javax/crypto/KeyAgreementSpi -header extends java/lang/Object flags 421 - -class name javax/crypto/KeyGenerator -header extends java/lang/Object flags 21 -innerclass innerClass java/security/Provider$Service outerClass java/security/Provider innerClassName Service flags 9 - -class name javax/crypto/KeyGeneratorSpi -header extends java/lang/Object flags 421 - -class name javax/crypto/Mac -header extends java/lang/Object implements java/lang/Cloneable flags 21 -innerclass innerClass java/security/Provider$Service outerClass java/security/Provider innerClassName Service flags 9 - -class name javax/crypto/MacSpi -header extends java/lang/Object flags 421 - -class name javax/crypto/NoSuchPaddingException -header extends java/security/GeneralSecurityException flags 21 - -class name javax/crypto/NullCipher -header extends javax/crypto/Cipher flags 21 - -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 - -class name javax/crypto/SecretKey -header extends java/lang/Object implements java/security/Key,javax/security/auth/Destroyable flags 601 - -class name javax/crypto/SecretKeyFactory -header extends java/lang/Object flags 21 -innerclass innerClass java/security/Provider$Service outerClass java/security/Provider innerClassName Service flags 9 - -class name javax/crypto/SecretKeyFactorySpi -header extends java/lang/Object flags 421 - -class name javax/crypto/ShortBufferException -header extends java/security/GeneralSecurityException flags 21 - -class name javax/crypto/interfaces/DHKey -header extends java/lang/Object flags 601 - -class name javax/crypto/interfaces/DHPrivateKey -header extends java/lang/Object implements javax/crypto/interfaces/DHKey,java/security/PrivateKey flags 601 - -class name javax/crypto/interfaces/DHPublicKey -header extends java/lang/Object implements javax/crypto/interfaces/DHKey,java/security/PublicKey flags 601 - -class name javax/crypto/interfaces/PBEKey -header extends java/lang/Object implements javax/crypto/SecretKey flags 601 - -class name javax/crypto/spec/DESKeySpec -header extends java/lang/Object implements java/security/spec/KeySpec flags 21 - -class name javax/crypto/spec/DESedeKeySpec -header extends java/lang/Object implements java/security/spec/KeySpec flags 21 - -class name javax/crypto/spec/DHGenParameterSpec -header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 - -class name javax/crypto/spec/DHParameterSpec -header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 - -class name javax/crypto/spec/DHPrivateKeySpec -header extends java/lang/Object implements java/security/spec/KeySpec flags 21 - -class name javax/crypto/spec/DHPublicKeySpec -header extends java/lang/Object implements java/security/spec/KeySpec flags 21 - -class name javax/crypto/spec/GCMParameterSpec -header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 - -class name javax/crypto/spec/IvParameterSpec -header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 - -class name javax/crypto/spec/OAEPParameterSpec -header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 -innerclass innerClass javax/crypto/spec/PSource$PSpecified outerClass javax/crypto/spec/PSource innerClassName PSpecified flags 19 - -class name javax/crypto/spec/PBEKeySpec -header extends java/lang/Object implements java/security/spec/KeySpec flags 21 - -class name javax/crypto/spec/PBEParameterSpec -header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 - -class name javax/crypto/spec/RC2ParameterSpec -header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 - -class name javax/crypto/spec/RC5ParameterSpec -header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 - -class name javax/crypto/spec/SecretKeySpec -header extends java/lang/Object implements java/security/spec/KeySpec,javax/crypto/SecretKey flags 21 - class name javax/security/auth/Subject header extends java/lang/Object implements java/io/Serializable flags 31 innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 @@ -701,6 +223,33 @@ innerclass innerClass javax/security/auth/login/AppConfigurationEntry$LoginModul innerclass innerClass java/util/ServiceLoader$Provider outerClass java/util/ServiceLoader innerClassName Provider flags 609 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +class name jdk/internal/access/foreign/MemorySegmentProxy +method name maxAlignMask descriptor ()J flags 401 + +class name jdk/internal/misc/ScopedMemoryAccess +header extends java/lang/Object nestMembers jdk/internal/misc/ScopedMemoryAccess$Scope flags 21 +innerclass innerClass jdk/internal/misc/ScopedMemoryAccess$Scope outerClass jdk/internal/misc/ScopedMemoryAccess innerClassName Scope flags 609 +innerclass innerClass jdk/internal/vm/vector/VectorSupport$VectorSpecies outerClass jdk/internal/vm/vector/VectorSupport innerClassName VectorSpecies flags 9 +innerclass innerClass jdk/internal/vm/vector/VectorSupport$Vector outerClass jdk/internal/vm/vector/VectorSupport innerClassName Vector flags 9 +innerclass innerClass jdk/internal/vm/vector/VectorSupport$VectorPayload outerClass jdk/internal/vm/vector/VectorSupport innerClassName VectorPayload flags 9 +innerclass innerClass jdk/internal/vm/vector/VectorSupport$VectorMask outerClass jdk/internal/vm/vector/VectorSupport innerClassName VectorMask flags 9 +-method name loadFromByteBuffer descriptor (Ljava/lang/Class;Ljava/lang/Class;ILjava/nio/ByteBuffer;ILjdk/internal/vm/vector/VectorSupport$VectorSpecies;Ljdk/internal/vm/vector/VectorSupport$LoadOperation;)Ljdk/internal/vm/vector/VectorSupport$Vector; +method name isReadOnly descriptor (Ljava/nio/ByteBuffer;)Z flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name loadFromByteBuffer descriptor (Ljava/lang/Class;Ljava/lang/Class;ILjava/nio/ByteBuffer;ILjdk/internal/vm/vector/VectorSupport$VectorSpecies;Ljdk/internal/vm/vector/VectorSupport$LoadOperation;)Ljdk/internal/vm/vector/VectorSupport$Vector; flags 9 signature ;E:Ljava/lang/Object;S:Ljdk/internal/vm/vector/VectorSupport$VectorSpecies;>(Ljava/lang/Class<+TV;>;Ljava/lang/Class;ILjava/nio/ByteBuffer;ITS;Ljdk/internal/vm/vector/VectorSupport$LoadOperation;)TV; runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name loadFromByteBufferMasked descriptor (Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/Class;ILjava/nio/ByteBuffer;ILjdk/internal/vm/vector/VectorSupport$VectorMask;Ljdk/internal/vm/vector/VectorSupport$VectorSpecies;Ljdk/internal/vm/vector/VectorSupport$LoadVectorMaskedOperation;)Ljdk/internal/vm/vector/VectorSupport$Vector; flags 9 signature ;E:Ljava/lang/Object;S:Ljdk/internal/vm/vector/VectorSupport$VectorSpecies;M:Ljdk/internal/vm/vector/VectorSupport$VectorMask;>(Ljava/lang/Class<+TV;>;Ljava/lang/Class;Ljava/lang/Class;ILjava/nio/ByteBuffer;ITM;TS;Ljdk/internal/vm/vector/VectorSupport$LoadVectorMaskedOperation;)TV; runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name storeIntoByteBufferMasked descriptor (Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/Class;ILjdk/internal/vm/vector/VectorSupport$Vector;Ljdk/internal/vm/vector/VectorSupport$VectorMask;Ljava/nio/ByteBuffer;ILjdk/internal/vm/vector/VectorSupport$StoreVectorMaskedOperation;)V flags 9 signature ;E:Ljava/lang/Object;M:Ljdk/internal/vm/vector/VectorSupport$VectorMask;>(Ljava/lang/Class<+TV;>;Ljava/lang/Class;Ljava/lang/Class;ITV;TM;Ljava/nio/ByteBuffer;ILjdk/internal/vm/vector/VectorSupport$StoreVectorMaskedOperation;)V runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; + +class name jdk/internal/misc/ScopedMemoryAccess$Scope +header extends java/lang/Object nestHost jdk/internal/misc/ScopedMemoryAccess flags 601 +innerclass innerClass jdk/internal/misc/ScopedMemoryAccess$Scope outerClass jdk/internal/misc/ScopedMemoryAccess innerClassName Scope flags 609 +-method name isImplicit descriptor ()Z +-method name acquire descriptor ()Ljdk/internal/misc/ScopedMemoryAccess$Scope$Handle; +-method name release descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope$Handle;)V +method name acquire0 descriptor ()V flags 401 +method name release0 descriptor ()V flags 401 + +-class name jdk/internal/misc/ScopedMemoryAccess$Scope$Handle + class name jdk/internal/vm/vector/VectorSupport header extends java/lang/Object nestMembers jdk/internal/vm/vector/VectorSupport$VectorMask,jdk/internal/vm/vector/VectorSupport$VectorShuffle,jdk/internal/vm/vector/VectorSupport$Vector,jdk/internal/vm/vector/VectorSupport$VectorPayload,jdk/internal/vm/vector/VectorSupport$VectorSpecies flags 21 innerclass innerClass jdk/internal/vm/vector/VectorSupport$VectorSpecies outerClass jdk/internal/vm/vector/VectorSupport innerClassName VectorSpecies flags 9 @@ -754,3 +303,10 @@ method name broadcastInt descriptor (ILjava/lang/Class;Ljava/lang/Class;Ljava/la method name maybeRebox descriptor (Ljdk/internal/vm/vector/VectorSupport$VectorPayload;)Ljdk/internal/vm/vector/VectorSupport$VectorPayload; flags 9 signature (TVP;)TVP; runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate; method name maskReductionCoerced descriptor (ILjava/lang/Class;Ljava/lang/Class;ILjdk/internal/vm/vector/VectorSupport$VectorMask;Ljdk/internal/vm/vector/VectorSupport$VectorMaskOp;)J flags 9 signature ;E:Ljava/lang/Object;>(ILjava/lang/Class<+TM;>;Ljava/lang/Class<*>;ITM;Ljdk/internal/vm/vector/VectorSupport$VectorMaskOp;)J runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate; +class name sun/net/ResolverProviderConfiguration +header extends java/lang/Object implements java/net/spi/InetAddressResolverProvider$Configuration flags 31 +innerclass innerClass java/net/spi/InetAddressResolverProvider$Configuration outerClass java/net/spi/InetAddressResolverProvider innerClassName Configuration flags 609 +method name descriptor (Ljava/net/spi/InetAddressResolver;Ljava/util/function/Supplier;)V flags 1 signature (Ljava/net/spi/InetAddressResolver;Ljava/util/function/Supplier;)V +method name builtinResolver descriptor ()Ljava/net/spi/InetAddressResolver; flags 1 +method name lookupLocalHostName descriptor ()Ljava/lang/String; flags 1 + diff --git a/src/jdk.compiler/share/data/symbols/java.base-J.sym.txt b/src/jdk.compiler/share/data/symbols/java.base-J.sym.txt index 155c9ac3eb408..97e9f6489f553 100644 --- a/src/jdk.compiler/share/data/symbols/java.base-J.sym.txt +++ b/src/jdk.compiler/share/data/symbols/java.base-J.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2022, 2023, 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 @@ -27,7 +27,7 @@ # ########################################################## # module name java.base -header exports java/io,java/lang,java/lang/annotation,java/lang/constant,java/lang/foreign,java/lang/invoke,java/lang/module,java/lang/ref,java/lang/reflect,java/lang/runtime,java/math,java/net,java/net/spi,java/nio,java/nio/channels,java/nio/channels/spi,java/nio/charset,java/nio/charset/spi,java/nio/file,java/nio/file/attribute,java/nio/file/spi,java/security,java/security/cert,java/security/interfaces,java/security/spec,java/text,java/text/spi,java/time,java/time/chrono,java/time/format,java/time/temporal,java/time/zone,java/util,java/util/concurrent,java/util/concurrent/atomic,java/util/concurrent/locks,java/util/function,java/util/jar,java/util/random,java/util/regex,java/util/spi,java/util/stream,java/util/zip,javax/crypto,javax/crypto/interfaces,javax/crypto/spec,javax/net,javax/net/ssl,javax/security/auth,javax/security/auth/callback,javax/security/auth/login,javax/security/auth/spi,javax/security/auth/x500,javax/security/cert,jdk/internal/event[jdk.jfr],jdk/internal/vm/vector[jdk.incubator.vector] uses java/lang/System$LoggerFinder,java/net/ContentHandlerFactory,java/net/spi/InetAddressResolverProvider,java/net/spi/URLStreamHandlerProvider,java/nio/channels/spi/AsynchronousChannelProvider,java/nio/channels/spi/SelectorProvider,java/nio/charset/spi/CharsetProvider,java/nio/file/spi/FileSystemProvider,java/nio/file/spi/FileTypeDetector,java/security/Provider,java/text/spi/BreakIteratorProvider,java/text/spi/CollatorProvider,java/text/spi/DateFormatProvider,java/text/spi/DateFormatSymbolsProvider,java/text/spi/DecimalFormatSymbolsProvider,java/text/spi/NumberFormatProvider,java/time/chrono/AbstractChronology,java/time/chrono/Chronology,java/time/zone/ZoneRulesProvider,java/util/random/RandomGenerator,java/util/spi/CalendarDataProvider,java/util/spi/CalendarNameProvider,java/util/spi/CurrencyNameProvider,java/util/spi/LocaleNameProvider,java/util/spi/ResourceBundleControlProvider,java/util/spi/ResourceBundleProvider,java/util/spi/TimeZoneNameProvider,java/util/spi/ToolProvider,javax/security/auth/spi/LoginModule,jdk/internal/logger/DefaultLoggerFinder,sun/text/spi/JavaTimeDateTimePatternProvider,sun/util/locale/provider/LocaleDataMetaInfo,sun/util/resources/LocaleData$CommonResourceBundleProvider,sun/util/resources/LocaleData$SupplementaryResourceBundleProvider,sun/util/spi/CalendarProvider provides interface\u0020;java/nio/file/spi/FileSystemProvider\u0020;impls\u0020;jdk/internal/jrtfs/JrtFileSystemProvider,interface\u0020;java/util/random/RandomGenerator\u0020;impls\u0020;java/security/SecureRandom\u005C;u002C;java/util/Random\u005C;u002C;java/util/SplittableRandom target linux-amd64 flags 8000 +header exports java/io,java/lang,java/lang/annotation,java/lang/constant,java/lang/foreign,java/lang/invoke,java/lang/module,java/lang/ref,java/lang/reflect,java/lang/runtime,java/math,java/net,java/net/spi,java/nio,java/nio/channels,java/nio/channels/spi,java/nio/charset,java/nio/charset/spi,java/nio/file,java/nio/file/attribute,java/nio/file/spi,java/security,java/security/cert,java/security/interfaces,java/security/spec,java/text,java/text/spi,java/time,java/time/chrono,java/time/format,java/time/temporal,java/time/zone,java/util,java/util/concurrent,java/util/concurrent/atomic,java/util/concurrent/locks,java/util/function,java/util/jar,java/util/random,java/util/regex,java/util/spi,java/util/stream,java/util/zip,javax/crypto,javax/crypto/interfaces,javax/crypto/spec,javax/net,javax/net/ssl,javax/security/auth,javax/security/auth/callback,javax/security/auth/login,javax/security/auth/spi,javax/security/auth/x500,javax/security/cert,jdk/internal/event[jdk.jfr],jdk/internal/vm/vector[jdk.incubator.vector] extraModulePackages jdk/internal/foreign/abi,jdk/internal/foreign/abi/aarch64/linux,jdk/internal/foreign/abi/aarch64/macos,jdk/internal/foreign/abi/x64/sysv,jdk/internal/foreign/abi/x64/windows,sun/net,jdk/internal/foreign,jdk/internal/foreign,sun/net,sun/nio/ch uses java/lang/System$LoggerFinder,java/net/ContentHandlerFactory,java/net/spi/InetAddressResolverProvider,java/net/spi/URLStreamHandlerProvider,java/nio/channels/spi/AsynchronousChannelProvider,java/nio/channels/spi/SelectorProvider,java/nio/charset/spi/CharsetProvider,java/nio/file/spi/FileSystemProvider,java/nio/file/spi/FileTypeDetector,java/security/Provider,java/text/spi/BreakIteratorProvider,java/text/spi/CollatorProvider,java/text/spi/DateFormatProvider,java/text/spi/DateFormatSymbolsProvider,java/text/spi/DecimalFormatSymbolsProvider,java/text/spi/NumberFormatProvider,java/time/chrono/AbstractChronology,java/time/chrono/Chronology,java/time/zone/ZoneRulesProvider,java/util/random/RandomGenerator,java/util/spi/CalendarDataProvider,java/util/spi/CalendarNameProvider,java/util/spi/CurrencyNameProvider,java/util/spi/LocaleNameProvider,java/util/spi/ResourceBundleControlProvider,java/util/spi/ResourceBundleProvider,java/util/spi/TimeZoneNameProvider,java/util/spi/ToolProvider,javax/security/auth/spi/LoginModule,jdk/internal/logger/DefaultLoggerFinder,sun/text/spi/JavaTimeDateTimePatternProvider,sun/util/locale/provider/LocaleDataMetaInfo,sun/util/resources/LocaleData$CommonResourceBundleProvider,sun/util/resources/LocaleData$SupplementaryResourceBundleProvider,sun/util/spi/CalendarProvider provides interface\u0020;java/nio/file/spi/FileSystemProvider\u0020;impls\u0020;jdk/internal/jrtfs/JrtFileSystemProvider,interface\u0020;java/util/random/RandomGenerator\u0020;impls\u0020;java/security/SecureRandom\u005C;u002C;java/util/Random\u005C;u002C;java/util/SplittableRandom target linux-amd64 flags 8000 class name java/io/BufferedInputStream -method name read descriptor ()I @@ -78,10 +78,6 @@ class name java/io/ObjectStreamException method name descriptor (Ljava/lang/String;Ljava/lang/Throwable;)V flags 4 method name descriptor (Ljava/lang/Throwable;)V flags 4 -class name java/io/PrintStream -header extends java/io/FilterOutputStream implements java/lang/Appendable,java/io/Closeable flags 21 -innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019 - class name java/io/PushbackInputStream -method name mark descriptor (I)V -method name reset descriptor ()V @@ -97,7 +93,7 @@ method name length descriptor ()J thrownTypes java/io/IOException flags 1 method name setLength descriptor (J)V thrownTypes java/io/IOException flags 1 class name java/lang/AbstractStringBuilder -header extends java/lang/Object implements java/lang/Appendable,java/lang/CharSequence sealed true flags 420 +header extends java/lang/Object implements java/lang/Appendable,java/lang/CharSequence sealed true permittedSubclasses java/lang/StringBuilder,java/lang/StringBuffer flags 420 innerclass innerClass java/util/Spliterator$OfInt outerClass java/util/Spliterator innerClassName OfInt flags 609 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 @@ -122,12 +118,6 @@ field name CYPRO_MINOAN descriptor Ljava/lang/Character$UnicodeScript; flags 401 field name TANGSA descriptor Ljava/lang/Character$UnicodeScript; flags 4019 field name TOTO descriptor Ljava/lang/Character$UnicodeScript; flags 4019 -class name java/lang/Compiler -header extends java/lang/Object flags 31 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9") - -class name java/lang/Deprecated -header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Documented;@Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;RUNTIME;)@Ljava/lang/annotation/Target;(value={eLjava/lang/annotation/ElementType;CONSTRUCTOR;eLjava/lang/annotation/ElementType;FIELD;eLjava/lang/annotation/ElementType;LOCAL_VARIABLE;eLjava/lang/annotation/ElementType;METHOD;eLjava/lang/annotation/ElementType;PACKAGE;eLjava/lang/annotation/ElementType;MODULE;eLjava/lang/annotation/ElementType;PARAMETER;eLjava/lang/annotation/ElementType;TYPE;}) - class name java/lang/Double -method name isInfinite descriptor (D)Z field name PRECISION descriptor I constantValue 53 flags 19 @@ -138,9 +128,6 @@ class name java/lang/Float field name PRECISION descriptor I constantValue 24 flags 19 method name isInfinite descriptor (F)Z flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate; -class name java/lang/IllegalCallerException -header extends java/lang/RuntimeException flags 21 - class name java/lang/Integer -method name divideUnsigned descriptor (II)I -method name remainderUnsigned descriptor (II)I @@ -149,9 +136,6 @@ method name remainderUnsigned descriptor (II)I flags 9 runtimeAnnotations @Ljdk/ method name compress descriptor (II)I flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate; method name expand descriptor (II)I flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate; -class name java/lang/LayerInstantiationException -header extends java/lang/RuntimeException flags 21 - class name java/lang/Long -method name divideUnsigned descriptor (JJ)J -method name remainderUnsigned descriptor (JJ)J @@ -171,9 +155,6 @@ field name TAU descriptor D constantValue 6.283185307179586 flags 19 method name round descriptor (F)I flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate; method name round descriptor (D)J flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate; -class name java/lang/NamedPackage -header extends java/lang/Object flags 20 - class name java/lang/Object -method name wait descriptor (J)V method name wait descriptor (J)V thrownTypes java/lang/InterruptedException flags 11 @@ -186,6 +167,8 @@ header extends java/lang/Object implements java/lang/annotation/Annotation flags class name java/lang/Thread header extends java/lang/Object implements java/lang/Runnable nestMembers java/lang/Thread$UncaughtExceptionHandler,java/lang/Thread$State,java/lang/Thread$Builder,java/lang/Thread$Builder$OfVirtual,java/lang/Thread$Builder$OfPlatform flags 21 +innerclass innerClass java/lang/ThreadBuilders$PlatformThreadBuilder outerClass java/lang/ThreadBuilders innerClassName PlatformThreadBuilder flags 18 +innerclass innerClass java/lang/ThreadBuilders$VirtualThreadBuilder outerClass java/lang/ThreadBuilders innerClassName VirtualThreadBuilder flags 18 innerclass innerClass java/lang/Thread$UncaughtExceptionHandler outerClass java/lang/Thread innerClassName UncaughtExceptionHandler flags 609 innerclass innerClass java/lang/Thread$State outerClass java/lang/Thread innerClassName State flags 4019 innerclass innerClass java/lang/Thread$Builder outerClass java/lang/Thread innerClassName Builder flags 609 @@ -215,11 +198,12 @@ method name getId descriptor ()J flags 1 deprecated true runtimeAnnotations @Lja method name threadId descriptor ()J flags 11 class name java/lang/Thread$Builder -header extends java/lang/Object nestHost java/lang/Thread sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;VIRTUAL_THREADS;) +header extends java/lang/Object nestHost java/lang/Thread sealed true permittedSubclasses java/lang/Thread$Builder$OfPlatform,java/lang/Thread$Builder$OfVirtual,java/lang/ThreadBuilders$BaseThreadBuilder flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;VIRTUAL_THREADS;) innerclass innerClass java/lang/Thread$Builder outerClass java/lang/Thread innerClassName Builder flags 609 innerclass innerClass java/lang/Thread$Builder$OfVirtual outerClass java/lang/Thread$Builder innerClassName OfVirtual flags 609 innerclass innerClass java/lang/Thread$Builder$OfPlatform outerClass java/lang/Thread$Builder innerClassName OfPlatform flags 609 innerclass innerClass java/lang/Thread$UncaughtExceptionHandler outerClass java/lang/Thread innerClassName UncaughtExceptionHandler flags 609 +innerclass innerClass java/lang/ThreadBuilders$BaseThreadBuilder outerClass java/lang/ThreadBuilders innerClassName BaseThreadBuilder flags 408 method name name descriptor (Ljava/lang/String;)Ljava/lang/Thread$Builder; flags 401 method name name descriptor (Ljava/lang/String;J)Ljava/lang/Thread$Builder; flags 401 method name allowSetThreadLocals descriptor (Z)Ljava/lang/Thread$Builder; flags 401 @@ -230,10 +214,11 @@ method name start descriptor (Ljava/lang/Runnable;)Ljava/lang/Thread; flags 401 method name factory descriptor ()Ljava/util/concurrent/ThreadFactory; flags 401 class name java/lang/Thread$Builder$OfPlatform -header extends java/lang/Object implements java/lang/Thread$Builder nestHost java/lang/Thread sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;VIRTUAL_THREADS;) +header extends java/lang/Object implements java/lang/Thread$Builder nestHost java/lang/Thread sealed true permittedSubclasses java/lang/ThreadBuilders$PlatformThreadBuilder flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;VIRTUAL_THREADS;) innerclass innerClass java/lang/Thread$Builder outerClass java/lang/Thread innerClassName Builder flags 609 innerclass innerClass java/lang/Thread$Builder$OfPlatform outerClass java/lang/Thread$Builder innerClassName OfPlatform flags 609 innerclass innerClass java/lang/Thread$UncaughtExceptionHandler outerClass java/lang/Thread innerClassName UncaughtExceptionHandler flags 609 +innerclass innerClass java/lang/ThreadBuilders$PlatformThreadBuilder outerClass java/lang/ThreadBuilders innerClassName PlatformThreadBuilder flags 18 method name name descriptor (Ljava/lang/String;)Ljava/lang/Thread$Builder$OfPlatform; flags 401 method name name descriptor (Ljava/lang/String;J)Ljava/lang/Thread$Builder$OfPlatform; flags 401 method name allowSetThreadLocals descriptor (Z)Ljava/lang/Thread$Builder$OfPlatform; flags 401 @@ -251,10 +236,11 @@ method name name descriptor (Ljava/lang/String;J)Ljava/lang/Thread$Builder; flag method name name descriptor (Ljava/lang/String;)Ljava/lang/Thread$Builder; flags 1041 class name java/lang/Thread$Builder$OfVirtual -header extends java/lang/Object implements java/lang/Thread$Builder nestHost java/lang/Thread sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;VIRTUAL_THREADS;) +header extends java/lang/Object implements java/lang/Thread$Builder nestHost java/lang/Thread sealed true permittedSubclasses java/lang/ThreadBuilders$VirtualThreadBuilder flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;VIRTUAL_THREADS;) innerclass innerClass java/lang/Thread$Builder outerClass java/lang/Thread innerClassName Builder flags 609 innerclass innerClass java/lang/Thread$Builder$OfVirtual outerClass java/lang/Thread$Builder innerClassName OfVirtual flags 609 innerclass innerClass java/lang/Thread$UncaughtExceptionHandler outerClass java/lang/Thread innerClassName UncaughtExceptionHandler flags 609 +innerclass innerClass java/lang/ThreadBuilders$VirtualThreadBuilder outerClass java/lang/ThreadBuilders innerClassName VirtualThreadBuilder flags 18 method name name descriptor (Ljava/lang/String;)Ljava/lang/Thread$Builder$OfVirtual; flags 401 method name name descriptor (Ljava/lang/String;J)Ljava/lang/Thread$Builder$OfVirtual; flags 401 method name allowSetThreadLocals descriptor (Z)Ljava/lang/Thread$Builder$OfVirtual; flags 401 @@ -266,6 +252,59 @@ method name allowSetThreadLocals descriptor (Z)Ljava/lang/Thread$Builder; flags method name name descriptor (Ljava/lang/String;J)Ljava/lang/Thread$Builder; flags 1041 method name name descriptor (Ljava/lang/String;)Ljava/lang/Thread$Builder; flags 1041 +class name java/lang/ThreadBuilders +header extends java/lang/Object nestMembers java/lang/ThreadBuilders$VirtualThreadBuilder,java/lang/ThreadBuilders$PlatformThreadBuilder,java/lang/ThreadBuilders$BaseThreadBuilder flags 20 +innerclass innerClass java/lang/ThreadBuilders$VirtualThreadBuilder outerClass java/lang/ThreadBuilders innerClassName VirtualThreadBuilder flags 18 +innerclass innerClass java/lang/ThreadBuilders$PlatformThreadBuilder outerClass java/lang/ThreadBuilders innerClassName PlatformThreadBuilder flags 18 +innerclass innerClass java/lang/ThreadBuilders$BaseThreadBuilder outerClass java/lang/ThreadBuilders innerClassName BaseThreadBuilder flags 408 + +class name java/lang/ThreadBuilders$BaseThreadBuilder +header extends java/lang/Object implements java/lang/Thread$Builder nestHost java/lang/ThreadBuilders flags 420 signature Ljava/lang/Object;Ljava/lang/Thread$Builder; +innerclass innerClass java/lang/ThreadBuilders$BaseThreadBuilder outerClass java/lang/ThreadBuilders innerClassName BaseThreadBuilder flags 408 +innerclass innerClass java/lang/Thread$UncaughtExceptionHandler outerClass java/lang/Thread innerClassName UncaughtExceptionHandler flags 609 +innerclass innerClass java/lang/Thread$Builder outerClass java/lang/Thread innerClassName Builder flags 609 +method name name descriptor (Ljava/lang/String;)Ljava/lang/Thread$Builder; flags 1 signature (Ljava/lang/String;)TT; +method name name descriptor (Ljava/lang/String;J)Ljava/lang/Thread$Builder; flags 1 signature (Ljava/lang/String;J)TT; +method name allowSetThreadLocals descriptor (Z)Ljava/lang/Thread$Builder; flags 1 signature (Z)TT; +method name inheritInheritableThreadLocals descriptor (Z)Ljava/lang/Thread$Builder; flags 1 signature (Z)TT; +method name uncaughtExceptionHandler descriptor (Ljava/lang/Thread$UncaughtExceptionHandler;)Ljava/lang/Thread$Builder; flags 1 signature (Ljava/lang/Thread$UncaughtExceptionHandler;)TT; + +class name java/lang/ThreadBuilders$PlatformThreadBuilder +header extends java/lang/ThreadBuilders$BaseThreadBuilder implements java/lang/Thread$Builder$OfPlatform nestHost java/lang/ThreadBuilders flags 30 signature Ljava/lang/ThreadBuilders$BaseThreadBuilder;Ljava/lang/Thread$Builder$OfPlatform; +innerclass innerClass java/lang/ThreadBuilders$BaseThreadBuilder outerClass java/lang/ThreadBuilders innerClassName BaseThreadBuilder flags 408 +innerclass innerClass java/lang/ThreadBuilders$PlatformThreadBuilder outerClass java/lang/ThreadBuilders innerClassName PlatformThreadBuilder flags 18 +innerclass innerClass java/lang/Thread$UncaughtExceptionHandler outerClass java/lang/Thread innerClassName UncaughtExceptionHandler flags 609 +innerclass innerClass java/lang/Thread$Builder outerClass java/lang/Thread innerClassName Builder flags 609 +innerclass innerClass java/lang/Thread$Builder$OfPlatform outerClass java/lang/Thread$Builder innerClassName OfPlatform flags 609 +method name group descriptor (Ljava/lang/ThreadGroup;)Ljava/lang/Thread$Builder$OfPlatform; flags 1 +method name daemon descriptor (Z)Ljava/lang/Thread$Builder$OfPlatform; flags 1 +method name priority descriptor (I)Ljava/lang/Thread$Builder$OfPlatform; flags 1 +method name stackSize descriptor (J)Ljava/lang/Thread$Builder$OfPlatform; flags 1 +method name unstarted descriptor (Ljava/lang/Runnable;)Ljava/lang/Thread; flags 1 +method name start descriptor (Ljava/lang/Runnable;)Ljava/lang/Thread; flags 1 +method name factory descriptor ()Ljava/util/concurrent/ThreadFactory; flags 1 +method name uncaughtExceptionHandler descriptor (Ljava/lang/Thread$UncaughtExceptionHandler;)Ljava/lang/Thread$Builder$OfPlatform; flags 1041 +method name inheritInheritableThreadLocals descriptor (Z)Ljava/lang/Thread$Builder$OfPlatform; flags 1041 +method name allowSetThreadLocals descriptor (Z)Ljava/lang/Thread$Builder$OfPlatform; flags 1041 +method name name descriptor (Ljava/lang/String;J)Ljava/lang/Thread$Builder$OfPlatform; flags 1041 +method name name descriptor (Ljava/lang/String;)Ljava/lang/Thread$Builder$OfPlatform; flags 1041 + +class name java/lang/ThreadBuilders$VirtualThreadBuilder +header extends java/lang/ThreadBuilders$BaseThreadBuilder implements java/lang/Thread$Builder$OfVirtual nestHost java/lang/ThreadBuilders flags 30 signature Ljava/lang/ThreadBuilders$BaseThreadBuilder;Ljava/lang/Thread$Builder$OfVirtual; +innerclass innerClass java/lang/ThreadBuilders$BaseThreadBuilder outerClass java/lang/ThreadBuilders innerClassName BaseThreadBuilder flags 408 +innerclass innerClass java/lang/ThreadBuilders$VirtualThreadBuilder outerClass java/lang/ThreadBuilders innerClassName VirtualThreadBuilder flags 18 +innerclass innerClass java/lang/Thread$UncaughtExceptionHandler outerClass java/lang/Thread innerClassName UncaughtExceptionHandler flags 609 +innerclass innerClass java/lang/Thread$Builder outerClass java/lang/Thread innerClassName Builder flags 609 +innerclass innerClass java/lang/Thread$Builder$OfVirtual outerClass java/lang/Thread$Builder innerClassName OfVirtual flags 609 +method name unstarted descriptor (Ljava/lang/Runnable;)Ljava/lang/Thread; flags 1 +method name start descriptor (Ljava/lang/Runnable;)Ljava/lang/Thread; flags 1 +method name factory descriptor ()Ljava/util/concurrent/ThreadFactory; flags 1 +method name uncaughtExceptionHandler descriptor (Ljava/lang/Thread$UncaughtExceptionHandler;)Ljava/lang/Thread$Builder$OfVirtual; flags 1041 +method name inheritInheritableThreadLocals descriptor (Z)Ljava/lang/Thread$Builder$OfVirtual; flags 1041 +method name allowSetThreadLocals descriptor (Z)Ljava/lang/Thread$Builder$OfVirtual; flags 1041 +method name name descriptor (Ljava/lang/String;J)Ljava/lang/Thread$Builder$OfVirtual; flags 1041 +method name name descriptor (Ljava/lang/String;)Ljava/lang/Thread$Builder$OfVirtual; flags 1041 + class name java/lang/ThreadGroup header extends java/lang/Object implements java/lang/Thread$UncaughtExceptionHandler flags 21 innerclass innerClass java/lang/Thread$UncaughtExceptionHandler outerClass java/lang/Thread innerClassName UncaughtExceptionHandler flags 609 @@ -280,28 +319,6 @@ method name descriptor (Ljava/lang/String;)V flags 1 method name descriptor (Ljava/lang/String;Ljava/lang/Throwable;)V flags 1 method name descriptor (Ljava/lang/Throwable;)V flags 1 -class name java/lang/constant/ClassDesc -header extends java/lang/Object implements java/lang/constant/ConstantDesc,java/lang/invoke/TypeDescriptor$OfField sealed true flags 601 signature Ljava/lang/Object;Ljava/lang/constant/ConstantDesc;Ljava/lang/invoke/TypeDescriptor$OfField; -innerclass innerClass java/lang/invoke/TypeDescriptor$OfField outerClass java/lang/invoke/TypeDescriptor innerClassName OfField flags 609 - -class name java/lang/constant/ConstantDesc -header extends java/lang/Object sealed true flags 601 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/lang/constant/DirectMethodHandleDesc -header extends java/lang/Object implements java/lang/constant/MethodHandleDesc nestMembers java/lang/constant/DirectMethodHandleDesc$Kind sealed true flags 601 -innerclass innerClass java/lang/constant/DirectMethodHandleDesc$Kind outerClass java/lang/constant/DirectMethodHandleDesc innerClassName Kind flags 4019 - -class name java/lang/constant/MethodHandleDesc -header extends java/lang/Object implements java/lang/constant/ConstantDesc sealed true flags 601 -innerclass innerClass java/lang/constant/DirectMethodHandleDesc$Kind outerClass java/lang/constant/DirectMethodHandleDesc innerClassName Kind flags 4019 - -class name java/lang/constant/MethodTypeDesc -header extends java/lang/Object implements java/lang/constant/ConstantDesc,java/lang/invoke/TypeDescriptor$OfMethod sealed true flags 601 signature Ljava/lang/Object;Ljava/lang/constant/ConstantDesc;Ljava/lang/invoke/TypeDescriptor$OfMethod; -innerclass innerClass java/lang/invoke/TypeDescriptor$OfMethod outerClass java/lang/invoke/TypeDescriptor innerClassName OfMethod flags 609 -innerclass innerClass java/lang/invoke/TypeDescriptor$OfField outerClass java/lang/invoke/TypeDescriptor innerClassName OfField flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name java/lang/foreign/AbstractLayout header extends java/lang/Object implements java/lang/foreign/MemoryLayout flags 420 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 @@ -320,11 +337,12 @@ method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/MemoryLay method name byteSize descriptor ()J flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; class name java/lang/foreign/Addressable -header extends java/lang/Object sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/Object sealed true permittedSubclasses java/lang/foreign/MemorySegment,java/lang/foreign/MemoryAddress,java/lang/foreign/VaList flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) method name address descriptor ()Ljava/lang/foreign/MemoryAddress; flags 401 class name java/lang/foreign/FunctionDescriptor -header extends java/lang/Object sealed true flags 21 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/Object nestMembers java/lang/foreign/FunctionDescriptor$VariadicFunction sealed true permittedSubclasses java/lang/foreign/FunctionDescriptor$VariadicFunction flags 21 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +innerclass innerClass java/lang/foreign/FunctionDescriptor$VariadicFunction outerClass java/lang/foreign/FunctionDescriptor innerClassName VariadicFunction flags 18 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 method name returnLayout descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional; method name argumentLayouts descriptor ()Ljava/util/List; flags 1 signature ()Ljava/util/List; @@ -340,6 +358,16 @@ method name toString descriptor ()Ljava/lang/String; flags 1 method name equals descriptor (Ljava/lang/Object;)Z flags 1 method name hashCode descriptor ()I flags 1 +class name java/lang/foreign/FunctionDescriptor$VariadicFunction +header extends java/lang/foreign/FunctionDescriptor nestHost java/lang/foreign/FunctionDescriptor flags 30 +innerclass innerClass java/lang/foreign/FunctionDescriptor$VariadicFunction outerClass java/lang/foreign/FunctionDescriptor innerClassName VariadicFunction flags 18 +method name descriptor (Ljava/lang/foreign/FunctionDescriptor;[Ljava/lang/foreign/MemoryLayout;)V flags 81 +method name firstVariadicArgumentIndex descriptor ()I flags 1 +method name appendArgumentLayouts descriptor ([Ljava/lang/foreign/MemoryLayout;)Ljava/lang/foreign/FunctionDescriptor; flags 81 +method name insertArgumentLayouts descriptor (I[Ljava/lang/foreign/MemoryLayout;)Ljava/lang/foreign/FunctionDescriptor; flags 81 +method name changeReturnLayout descriptor (Ljava/lang/foreign/MemoryLayout;)Ljava/lang/foreign/FunctionDescriptor; flags 1 +method name dropReturnLayout descriptor ()Ljava/lang/foreign/FunctionDescriptor; flags 1 + class name java/lang/foreign/GroupLayout header extends java/lang/foreign/AbstractLayout implements java/lang/foreign/MemoryLayout flags 31 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 @@ -360,7 +388,7 @@ method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/MemoryLay method name byteSize descriptor ()J flags 1041 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; class name java/lang/foreign/Linker -header extends java/lang/Object sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/Object sealed true permittedSubclasses jdk/internal/foreign/abi/AbstractLinker flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) method name nativeLinker descriptor ()Ljava/lang/foreign/Linker; flags 9 runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive; method name downcallHandle descriptor (Ljava/lang/foreign/Addressable;Ljava/lang/foreign/FunctionDescriptor;)Ljava/lang/invoke/MethodHandle; flags 1 method name downcallHandle descriptor (Ljava/lang/foreign/FunctionDescriptor;)Ljava/lang/invoke/MethodHandle; flags 401 @@ -370,7 +398,7 @@ method name downcallType descriptor (Ljava/lang/foreign/FunctionDescriptor;)Ljav method name upcallType descriptor (Ljava/lang/foreign/FunctionDescriptor;)Ljava/lang/invoke/MethodType; flags 9 class name java/lang/foreign/MemoryAddress -header extends java/lang/Object implements java/lang/foreign/Addressable sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/Object implements java/lang/foreign/Addressable sealed true permittedSubclasses jdk/internal/foreign/MemoryAddressImpl flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) innerclass innerClass java/lang/foreign/ValueLayout$OfByte outerClass java/lang/foreign/ValueLayout innerClassName OfByte flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfBoolean outerClass java/lang/foreign/ValueLayout innerClassName OfBoolean flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfChar outerClass java/lang/foreign/ValueLayout innerClassName OfChar flags 19 @@ -422,7 +450,8 @@ method name getAtIndex descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;J)Lj method name setAtIndex descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;JLjava/lang/foreign/Addressable;)V flags 401 runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive; class name java/lang/foreign/MemoryLayout -header extends java/lang/Object nestMembers java/lang/foreign/MemoryLayout$PathElement sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/Object nestMembers java/lang/foreign/MemoryLayout$PathElement sealed true permittedSubclasses java/lang/foreign/AbstractLayout,java/lang/foreign/SequenceLayout,java/lang/foreign/GroupLayout,java/lang/foreign/PaddingLayout,java/lang/foreign/ValueLayout flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +innerclass innerClass jdk/internal/foreign/LayoutPath$PathElementImpl outerClass jdk/internal/foreign/LayoutPath innerClassName PathElementImpl flags 19 innerclass innerClass java/lang/foreign/MemoryLayout$PathElement outerClass java/lang/foreign/MemoryLayout innerClassName PathElement flags 609 innerclass innerClass java/lang/foreign/ValueLayout$OfBoolean outerClass java/lang/foreign/ValueLayout innerClassName OfBoolean flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfChar outerClass java/lang/foreign/ValueLayout innerClassName OfChar flags 19 @@ -459,7 +488,8 @@ method name structLayout descriptor ([Ljava/lang/foreign/MemoryLayout;)Ljava/lan method name unionLayout descriptor ([Ljava/lang/foreign/MemoryLayout;)Ljava/lang/foreign/GroupLayout; flags 89 class name java/lang/foreign/MemoryLayout$PathElement -header extends java/lang/Object nestHost java/lang/foreign/MemoryLayout sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/Object nestHost java/lang/foreign/MemoryLayout sealed true permittedSubclasses jdk/internal/foreign/LayoutPath$PathElementImpl flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +innerclass innerClass jdk/internal/foreign/LayoutPath$PathElementImpl outerClass jdk/internal/foreign/LayoutPath innerClassName PathElementImpl flags 19 innerclass innerClass java/lang/foreign/MemoryLayout$PathElement outerClass java/lang/foreign/MemoryLayout innerClassName PathElement flags 609 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 method name groupElement descriptor (Ljava/lang/String;)Ljava/lang/foreign/MemoryLayout$PathElement; flags 9 @@ -468,7 +498,7 @@ method name sequenceElement descriptor (JJ)Ljava/lang/foreign/MemoryLayout$PathE method name sequenceElement descriptor ()Ljava/lang/foreign/MemoryLayout$PathElement; flags 9 class name java/lang/foreign/MemorySegment -header extends java/lang/Object implements java/lang/foreign/Addressable sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/Object implements java/lang/foreign/Addressable sealed true permittedSubclasses jdk/internal/foreign/AbstractMemorySegmentImpl flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) innerclass innerClass java/lang/foreign/ValueLayout$OfByte outerClass java/lang/foreign/ValueLayout innerClassName OfByte flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfBoolean outerClass java/lang/foreign/ValueLayout innerClassName OfBoolean flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfChar outerClass java/lang/foreign/ValueLayout innerClassName OfChar flags 19 @@ -560,7 +590,8 @@ method name copy descriptor (Ljava/lang/Object;ILjava/lang/foreign/MemorySegment method name ofBuffer descriptor (Ljava/nio/Buffer;)Ljava/lang/foreign/MemorySegment; flags 9 class name java/lang/foreign/MemorySession -header extends java/lang/Object implements java/lang/AutoCloseable,java/lang/foreign/SegmentAllocator sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/Object implements java/lang/AutoCloseable,java/lang/foreign/SegmentAllocator sealed true permittedSubclasses jdk/internal/foreign/MemorySessionImpl,jdk/internal/foreign/MemorySessionImpl$NonCloseableView flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +innerclass innerClass jdk/internal/foreign/MemorySessionImpl$NonCloseableView outerClass jdk/internal/foreign/MemorySessionImpl innerClassName NonCloseableView flags 19 method name isAlive descriptor ()Z flags 401 method name isCloseable descriptor ()Z flags 401 method name ownerThread descriptor ()Ljava/lang/Thread; flags 401 @@ -578,6 +609,19 @@ method name openShared descriptor (Ljava/lang/ref/Cleaner;)Ljava/lang/foreign/Me method name openImplicit descriptor ()Ljava/lang/foreign/MemorySession; flags 9 method name global descriptor ()Ljava/lang/foreign/MemorySession; flags 9 +class name java/lang/foreign/PaddingLayout +header extends java/lang/foreign/AbstractLayout implements java/lang/foreign/MemoryLayout flags 30 +method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/MemoryLayout; flags 1041 +method name toString descriptor ()Ljava/lang/String; flags 1 +method name equals descriptor (Ljava/lang/Object;)Z flags 1 +method name hashCode descriptor ()I flags 1 +method name hasNaturalAlignment descriptor ()Z flags 1 +method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/PaddingLayout; flags 1 +method name withBitAlignment descriptor (J)Ljava/lang/foreign/PaddingLayout; flags 1 +method name withBitAlignment descriptor (J)Ljava/lang/foreign/AbstractLayout; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/AbstractLayout; flags 1041 + class name java/lang/foreign/SegmentAllocator header extends java/lang/Object flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) runtimeAnnotations @Ljava/lang/FunctionalInterface; innerclass innerClass java/lang/foreign/MemoryLayout$PathElement outerClass java/lang/foreign/MemoryLayout innerClassName PathElement flags 609 @@ -639,18 +683,21 @@ method name byteSize descriptor ()J flags 1041 runtimeAnnotations @Ljdk/internal class name java/lang/foreign/SymbolLookup header extends java/lang/Object flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) runtimeAnnotations @Ljava/lang/FunctionalInterface; innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +innerclass innerClass jdk/internal/foreign/MemorySessionImpl$ResourceList outerClass jdk/internal/foreign/MemorySessionImpl innerClassName ResourceList flags 409 +innerclass innerClass jdk/internal/foreign/MemorySessionImpl$ResourceList$ResourceCleanup outerClass jdk/internal/foreign/MemorySessionImpl$ResourceList innerClassName ResourceCleanup flags 409 method name lookup descriptor (Ljava/lang/String;)Ljava/util/Optional; flags 401 signature (Ljava/lang/String;)Ljava/util/Optional; method name loaderLookup descriptor ()Ljava/lang/foreign/SymbolLookup; flags 9 runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive; method name libraryLookup descriptor (Ljava/lang/String;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/SymbolLookup; flags 9 runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive; method name libraryLookup descriptor (Ljava/nio/file/Path;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/SymbolLookup; flags 9 runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive; class name java/lang/foreign/VaList -header extends java/lang/Object implements java/lang/foreign/Addressable nestMembers java/lang/foreign/VaList$Builder sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/Object implements java/lang/foreign/Addressable nestMembers java/lang/foreign/VaList$Builder sealed true permittedSubclasses jdk/internal/foreign/abi/x64/windows/WinVaList,jdk/internal/foreign/abi/x64/sysv/SysVVaList,jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList,jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList,jdk/internal/foreign/abi/SharedUtils$EmptyVaList flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) innerclass innerClass java/lang/foreign/VaList$Builder outerClass java/lang/foreign/VaList innerClassName Builder flags 609 innerclass innerClass java/lang/foreign/ValueLayout$OfInt outerClass java/lang/foreign/ValueLayout innerClassName OfInt flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfLong outerClass java/lang/foreign/ValueLayout innerClassName OfLong flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfDouble outerClass java/lang/foreign/ValueLayout innerClassName OfDouble flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfAddress outerClass java/lang/foreign/ValueLayout innerClassName OfAddress flags 19 +innerclass innerClass jdk/internal/foreign/abi/SharedUtils$EmptyVaList outerClass jdk/internal/foreign/abi/SharedUtils innerClassName EmptyVaList flags 9 method name session descriptor ()Ljava/lang/foreign/MemorySession; flags 401 method name nextVarg descriptor (Ljava/lang/foreign/ValueLayout$OfInt;)I flags 401 method name nextVarg descriptor (Ljava/lang/foreign/ValueLayout$OfLong;)J flags 401 @@ -665,12 +712,16 @@ method name make descriptor (Ljava/util/function/Consumer;Ljava/lang/foreign/Mem method name empty descriptor ()Ljava/lang/foreign/VaList; flags 9 class name java/lang/foreign/VaList$Builder -header extends java/lang/Object nestHost java/lang/foreign/VaList sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/Object nestHost java/lang/foreign/VaList sealed true permittedSubclasses jdk/internal/foreign/abi/x64/windows/WinVaList$Builder,jdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder,jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder,jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) innerclass innerClass java/lang/foreign/VaList$Builder outerClass java/lang/foreign/VaList innerClassName Builder flags 609 innerclass innerClass java/lang/foreign/ValueLayout$OfInt outerClass java/lang/foreign/ValueLayout innerClassName OfInt flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfLong outerClass java/lang/foreign/ValueLayout innerClassName OfLong flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfDouble outerClass java/lang/foreign/ValueLayout innerClassName OfDouble flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfAddress outerClass java/lang/foreign/ValueLayout innerClassName OfAddress flags 19 +innerclass innerClass jdk/internal/foreign/abi/x64/windows/WinVaList$Builder outerClass jdk/internal/foreign/abi/x64/windows/WinVaList innerClassName Builder flags 9 +innerclass innerClass jdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder outerClass jdk/internal/foreign/abi/x64/sysv/SysVVaList innerClassName Builder flags 9 +innerclass innerClass jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder outerClass jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList innerClassName Builder flags 9 +innerclass innerClass jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder outerClass jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList innerClassName Builder flags 9 method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfInt;I)Ljava/lang/foreign/VaList$Builder; flags 401 method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfLong;J)Ljava/lang/foreign/VaList$Builder; flags 401 method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfDouble;D)Ljava/lang/foreign/VaList$Builder; flags 401 @@ -678,7 +729,7 @@ method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;Ljava/l method name addVarg descriptor (Ljava/lang/foreign/GroupLayout;Ljava/lang/foreign/MemorySegment;)Ljava/lang/foreign/VaList$Builder; flags 401 class name java/lang/foreign/ValueLayout -header extends java/lang/foreign/AbstractLayout implements java/lang/foreign/MemoryLayout nestMembers java/lang/foreign/ValueLayout$OfAddress,java/lang/foreign/ValueLayout$OfDouble,java/lang/foreign/ValueLayout$OfLong,java/lang/foreign/ValueLayout$OfFloat,java/lang/foreign/ValueLayout$OfInt,java/lang/foreign/ValueLayout$OfShort,java/lang/foreign/ValueLayout$OfChar,java/lang/foreign/ValueLayout$OfByte,java/lang/foreign/ValueLayout$OfBoolean sealed true flags 21 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/foreign/AbstractLayout implements java/lang/foreign/MemoryLayout nestMembers java/lang/foreign/ValueLayout$OfAddress,java/lang/foreign/ValueLayout$OfDouble,java/lang/foreign/ValueLayout$OfLong,java/lang/foreign/ValueLayout$OfFloat,java/lang/foreign/ValueLayout$OfInt,java/lang/foreign/ValueLayout$OfShort,java/lang/foreign/ValueLayout$OfChar,java/lang/foreign/ValueLayout$OfByte,java/lang/foreign/ValueLayout$OfBoolean sealed true permittedSubclasses java/lang/foreign/ValueLayout$OfByte,java/lang/foreign/ValueLayout$OfShort,java/lang/foreign/ValueLayout$OfChar,java/lang/foreign/ValueLayout$OfInt,java/lang/foreign/ValueLayout$OfFloat,java/lang/foreign/ValueLayout$OfLong,java/lang/foreign/ValueLayout$OfDouble,java/lang/foreign/ValueLayout$OfBoolean,java/lang/foreign/ValueLayout$OfAddress flags 21 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) innerclass innerClass java/lang/foreign/MemoryLayout$PathElement outerClass java/lang/foreign/MemoryLayout innerClassName PathElement flags 609 innerclass innerClass java/lang/foreign/ValueLayout$OfAddress outerClass java/lang/foreign/ValueLayout innerClassName OfAddress flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfByte outerClass java/lang/foreign/ValueLayout innerClassName OfByte flags 19 @@ -868,19 +919,116 @@ method name withBitAlignment descriptor (J)Ljava/lang/foreign/AbstractLayout; fl method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/AbstractLayout; flags 1041 method name byteSize descriptor ()J flags 1041 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +class name java/lang/invoke/BoundMethodHandle +header extends java/lang/invoke/MethodHandle flags 420 + class name java/lang/invoke/CallSite -header extends java/lang/Object sealed true flags 421 +header extends java/lang/Object sealed true permittedSubclasses java/lang/invoke/ConstantCallSite,java/lang/invoke/MutableCallSite,java/lang/invoke/VolatileCallSite flags 421 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -class name java/lang/invoke/LambdaMetafactory -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +class name java/lang/invoke/DelegatingMethodHandle +header extends java/lang/invoke/MethodHandle sealed true permittedSubclasses java/lang/invoke/MethodHandleImpl$AsVarargsCollector,java/lang/invoke/MethodHandleImpl$WrappedMember,java/lang/invoke/MethodHandleImpl$IntrinsicMethodHandle,java/lang/invoke/MethodHandleImpl$CountingWrapper flags 420 +innerclass innerClass java/lang/invoke/MethodHandleImpl$AsVarargsCollector outerClass java/lang/invoke/MethodHandleImpl innerClassName AsVarargsCollector flags 18 +innerclass innerClass java/lang/invoke/MethodHandleImpl$WrappedMember outerClass java/lang/invoke/MethodHandleImpl innerClassName WrappedMember flags 18 +innerclass innerClass java/lang/invoke/MethodHandleImpl$IntrinsicMethodHandle outerClass java/lang/invoke/MethodHandleImpl innerClassName IntrinsicMethodHandle flags 18 +innerclass innerClass java/lang/invoke/MethodHandleImpl$CountingWrapper outerClass java/lang/invoke/MethodHandleImpl innerClassName CountingWrapper flags 18 +method name descriptor (Ljava/lang/invoke/MethodHandle;)V flags 4 +method name descriptor (Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;)V flags 4 +method name descriptor (Ljava/lang/invoke/MethodType;Ljava/lang/invoke/LambdaForm;)V flags 4 +method name getTarget descriptor ()Ljava/lang/invoke/MethodHandle; flags 404 + +class name java/lang/invoke/DirectMethodHandle +header extends java/lang/invoke/MethodHandle nestMembers java/lang/invoke/DirectMethodHandle$StaticAccessor,java/lang/invoke/DirectMethodHandle$Accessor,java/lang/invoke/DirectMethodHandle$Constructor,java/lang/invoke/DirectMethodHandle$Interface,java/lang/invoke/DirectMethodHandle$Special sealed true permittedSubclasses java/lang/invoke/DirectMethodHandle$Special,java/lang/invoke/DirectMethodHandle$Interface,java/lang/invoke/DirectMethodHandle$Constructor,java/lang/invoke/DirectMethodHandle$Accessor,java/lang/invoke/DirectMethodHandle$StaticAccessor flags 20 +innerclass innerClass java/lang/invoke/DirectMethodHandle$Special outerClass java/lang/invoke/DirectMethodHandle innerClassName Special flags 18 +innerclass innerClass java/lang/invoke/DirectMethodHandle$Interface outerClass java/lang/invoke/DirectMethodHandle innerClassName Interface flags 18 +innerclass innerClass java/lang/invoke/DirectMethodHandle$StaticAccessor outerClass java/lang/invoke/DirectMethodHandle innerClassName StaticAccessor flags 18 +innerclass innerClass java/lang/invoke/DirectMethodHandle$Accessor outerClass java/lang/invoke/DirectMethodHandle innerClassName Accessor flags 18 +innerclass innerClass java/lang/invoke/DirectMethodHandle$Constructor outerClass java/lang/invoke/DirectMethodHandle innerClassName Constructor flags 18 + +class name java/lang/invoke/DirectMethodHandle$Accessor +header extends java/lang/invoke/DirectMethodHandle nestHost java/lang/invoke/DirectMethodHandle flags 30 +innerclass innerClass java/lang/invoke/DirectMethodHandle$Accessor outerClass java/lang/invoke/DirectMethodHandle innerClassName Accessor flags 18 + +class name java/lang/invoke/DirectMethodHandle$Constructor +header extends java/lang/invoke/DirectMethodHandle nestHost java/lang/invoke/DirectMethodHandle flags 30 +innerclass innerClass java/lang/invoke/DirectMethodHandle$Constructor outerClass java/lang/invoke/DirectMethodHandle innerClassName Constructor flags 18 + +class name java/lang/invoke/DirectMethodHandle$Interface +header extends java/lang/invoke/DirectMethodHandle nestHost java/lang/invoke/DirectMethodHandle flags 30 +innerclass innerClass java/lang/invoke/DirectMethodHandle$Interface outerClass java/lang/invoke/DirectMethodHandle innerClassName Interface flags 18 + +class name java/lang/invoke/DirectMethodHandle$Special +header extends java/lang/invoke/DirectMethodHandle nestHost java/lang/invoke/DirectMethodHandle flags 30 +innerclass innerClass java/lang/invoke/DirectMethodHandle$Special outerClass java/lang/invoke/DirectMethodHandle innerClassName Special flags 18 + +class name java/lang/invoke/DirectMethodHandle$StaticAccessor +header extends java/lang/invoke/DirectMethodHandle nestHost java/lang/invoke/DirectMethodHandle flags 30 +innerclass innerClass java/lang/invoke/DirectMethodHandle$StaticAccessor outerClass java/lang/invoke/DirectMethodHandle innerClassName StaticAccessor flags 18 + +class name java/lang/invoke/IndirectVarHandle +header extends java/lang/invoke/VarHandle flags 30 +innerclass innerClass java/lang/invoke/VarHandle$AccessMode outerClass java/lang/invoke/VarHandle innerClassName AccessMode flags 4019 +method name varType descriptor ()Ljava/lang/Class; flags 1 signature ()Ljava/lang/Class<*>; +method name coordinateTypes descriptor ()Ljava/util/List; flags 1 signature ()Ljava/util/List;>; +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1 +method name toMethodHandle descriptor (Ljava/lang/invoke/VarHandle$AccessMode;)Ljava/lang/invoke/MethodHandle; flags 1 + +class name java/lang/invoke/LambdaForm +header extends java/lang/Object flags 20 +field name VOID_RESULT descriptor I constantValue -1 flags 19 +field name LAST_RESULT descriptor I constantValue -2 flags 19 +method name prepare descriptor ()V flags 1 +method name toString descriptor ()Ljava/lang/String; flags 1 +method name equals descriptor (Ljava/lang/Object;)Z flags 1 +method name equals descriptor (Ljava/lang/invoke/LambdaForm;)Z flags 1 +method name hashCode descriptor ()I flags 1 +method name basicTypeSignature descriptor (Ljava/lang/invoke/MethodType;)Ljava/lang/String; flags 9 +method name shortenSignature descriptor (Ljava/lang/String;)Ljava/lang/String; flags 9 class name java/lang/invoke/MethodHandle -header extends java/lang/Object implements java/lang/constant/Constable sealed true flags 421 +header extends java/lang/Object implements java/lang/constant/Constable sealed true permittedSubclasses java/lang/invoke/NativeMethodHandle,java/lang/invoke/DirectMethodHandle,java/lang/invoke/DelegatingMethodHandle,java/lang/invoke/BoundMethodHandle flags 421 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 innerclass innerClass java/lang/constant/DirectMethodHandleDesc$Kind outerClass java/lang/constant/DirectMethodHandleDesc innerClassName Kind flags 4019 +class name java/lang/invoke/MethodHandleImpl +header extends java/lang/Object nestMembers java/lang/invoke/MethodHandleImpl$IntrinsicMethodHandle,java/lang/invoke/MethodHandleImpl$WrappedMember,java/lang/invoke/MethodHandleImpl$CountingWrapper,java/lang/invoke/MethodHandleImpl$AsVarargsCollector flags 420 +innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 +innerclass innerClass java/lang/invoke/MethodHandleImpl$AsVarargsCollector outerClass java/lang/invoke/MethodHandleImpl innerClassName AsVarargsCollector flags 18 +innerclass innerClass java/lang/invoke/MethodHandleImpl$CountingWrapper outerClass java/lang/invoke/MethodHandleImpl innerClassName CountingWrapper flags 18 +innerclass innerClass java/lang/invoke/MethodHandleImpl$WrappedMember outerClass java/lang/invoke/MethodHandleImpl innerClassName WrappedMember flags 18 +innerclass innerClass java/lang/invoke/MethodHandleImpl$IntrinsicMethodHandle outerClass java/lang/invoke/MethodHandleImpl innerClassName IntrinsicMethodHandle flags 18 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 + +class name java/lang/invoke/MethodHandleImpl$AsVarargsCollector +header extends java/lang/invoke/DelegatingMethodHandle nestHost java/lang/invoke/MethodHandleImpl flags 30 +innerclass innerClass java/lang/invoke/MethodHandleImpl$AsVarargsCollector outerClass java/lang/invoke/MethodHandleImpl innerClassName AsVarargsCollector flags 18 +method name isVarargsCollector descriptor ()Z flags 1 +method name getTarget descriptor ()Ljava/lang/invoke/MethodHandle; flags 4 +method name asFixedArity descriptor ()Ljava/lang/invoke/MethodHandle; flags 1 +method name withVarargs descriptor (Z)Ljava/lang/invoke/MethodHandle; flags 1 +method name asTypeUncached descriptor (Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; flags 1 +method name invokeWithArguments descriptor ([Ljava/lang/Object;)Ljava/lang/Object; thrownTypes java/lang/Throwable flags 81 + +class name java/lang/invoke/MethodHandleImpl$CountingWrapper +header extends java/lang/invoke/DelegatingMethodHandle nestHost java/lang/invoke/MethodHandleImpl flags 30 +innerclass innerClass java/lang/invoke/MethodHandleImpl$CountingWrapper outerClass java/lang/invoke/MethodHandleImpl innerClassName CountingWrapper flags 18 +method name getTarget descriptor ()Ljava/lang/invoke/MethodHandle; flags 4 runtimeAnnotations @Ljdk/internal/vm/annotation/Hidden; +method name asTypeUncached descriptor (Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; flags 1 + +class name java/lang/invoke/MethodHandleImpl$IntrinsicMethodHandle +header extends java/lang/invoke/DelegatingMethodHandle nestHost java/lang/invoke/MethodHandleImpl flags 30 +innerclass innerClass java/lang/invoke/MethodHandleImpl$IntrinsicMethodHandle outerClass java/lang/invoke/MethodHandleImpl innerClassName IntrinsicMethodHandle flags 18 +method name getTarget descriptor ()Ljava/lang/invoke/MethodHandle; flags 4 +method name asTypeUncached descriptor (Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; flags 1 +method name asCollector descriptor (Ljava/lang/Class;I)Ljava/lang/invoke/MethodHandle; flags 1 signature (Ljava/lang/Class<*>;I)Ljava/lang/invoke/MethodHandle; + +class name java/lang/invoke/MethodHandleImpl$WrappedMember +header extends java/lang/invoke/DelegatingMethodHandle nestHost java/lang/invoke/MethodHandleImpl flags 30 +innerclass innerClass java/lang/invoke/MethodHandleImpl$WrappedMember outerClass java/lang/invoke/MethodHandleImpl innerClassName WrappedMember flags 18 +method name getTarget descriptor ()Ljava/lang/invoke/MethodHandle; flags 4 +method name asTypeUncached descriptor (Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; flags 1 + class name java/lang/invoke/MethodHandleProxies header extends java/lang/Object flags 21 classAnnotations @Ljdk/Profile+Annotation;(value=I1) @@ -893,69 +1041,889 @@ method name permuteCoordinates descriptor (Ljava/lang/invoke/VarHandle;Ljava/uti method name collectCoordinates descriptor (Ljava/lang/invoke/VarHandle;ILjava/lang/invoke/MethodHandle;)Ljava/lang/invoke/VarHandle; flags 9 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) method name dropCoordinates descriptor (Ljava/lang/invoke/VarHandle;I[Ljava/lang/Class;)Ljava/lang/invoke/VarHandle; flags 89 signature (Ljava/lang/invoke/VarHandle;I[Ljava/lang/Class<*>;)Ljava/lang/invoke/VarHandle; classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) -class name java/lang/invoke/StringConcatException -header extends java/lang/Exception flags 21 +class name java/lang/invoke/NativeMethodHandle +header extends java/lang/invoke/MethodHandle flags 30 +method name make descriptor (Ljdk/internal/foreign/abi/NativeEntryPoint;)Ljava/lang/invoke/MethodHandle; flags 9 -class name java/lang/invoke/VarHandle -header extends java/lang/Object implements java/lang/constant/Constable nestMembers java/lang/invoke/VarHandle$VarHandleDesc,java/lang/invoke/VarHandle$AccessMode sealed true flags 421 +class name java/lang/invoke/VarForm +header extends java/lang/Object flags 30 innerclass innerClass java/lang/invoke/VarHandle$AccessMode outerClass java/lang/invoke/VarHandle innerClassName AccessMode flags 4019 -innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19 - -class name java/lang/module/Configuration -header extends java/lang/Object flags 31 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -class name java/lang/module/FindException -header extends java/lang/RuntimeException flags 21 - -class name java/lang/module/InvalidModuleDescriptorException -header extends java/lang/RuntimeException flags 21 - -class name java/lang/module/ModuleReader -header extends java/lang/Object implements java/io/Closeable flags 601 - -class name java/lang/module/ModuleReference -header extends java/lang/Object flags 421 - -class name java/lang/module/ResolutionException -header extends java/lang/RuntimeException flags 21 - -class name java/lang/module/ResolvedModule -header extends java/lang/Object flags 31 +class name java/lang/invoke/VarHandle +header extends java/lang/Object implements java/lang/constant/Constable nestMembers java/lang/invoke/VarHandle$VarHandleDesc,java/lang/invoke/VarHandle$AccessMode sealed true permittedSubclasses java/lang/invoke/IndirectVarHandle,java/lang/invoke/VarHandleSegmentViewBase,java/lang/invoke/VarHandleByteArrayAsChars$ByteArrayViewVarHandle,java/lang/invoke/VarHandleByteArrayAsDoubles$ByteArrayViewVarHandle,java/lang/invoke/VarHandleByteArrayAsFloats$ByteArrayViewVarHandle,java/lang/invoke/VarHandleByteArrayAsInts$ByteArrayViewVarHandle,java/lang/invoke/VarHandleByteArrayAsLongs$ByteArrayViewVarHandle,java/lang/invoke/VarHandleByteArrayAsShorts$ByteArrayViewVarHandle,java/lang/invoke/VarHandleBooleans$Array,java/lang/invoke/VarHandleBooleans$FieldInstanceReadOnly,java/lang/invoke/VarHandleBooleans$FieldStaticReadOnly,java/lang/invoke/VarHandleBytes$Array,java/lang/invoke/VarHandleBytes$FieldInstanceReadOnly,java/lang/invoke/VarHandleBytes$FieldStaticReadOnly,java/lang/invoke/VarHandleChars$Array,java/lang/invoke/VarHandleChars$FieldInstanceReadOnly,java/lang/invoke/VarHandleChars$FieldStaticReadOnly,java/lang/invoke/VarHandleDoubles$Array,java/lang/invoke/VarHandleDoubles$FieldInstanceReadOnly,java/lang/invoke/VarHandleDoubles$FieldStaticReadOnly,java/lang/invoke/VarHandleFloats$Array,java/lang/invoke/VarHandleFloats$FieldInstanceReadOnly,java/lang/invoke/VarHandleFloats$FieldStaticReadOnly,java/lang/invoke/VarHandleInts$Array,java/lang/invoke/VarHandleInts$FieldInstanceReadOnly,java/lang/invoke/VarHandleInts$FieldStaticReadOnly,java/lang/invoke/VarHandleLongs$Array,java/lang/invoke/VarHandleLongs$FieldInstanceReadOnly,java/lang/invoke/VarHandleLongs$FieldStaticReadOnly,java/lang/invoke/VarHandleReferences$Array,java/lang/invoke/VarHandleReferences$FieldInstanceReadOnly,java/lang/invoke/VarHandleReferences$FieldStaticReadOnly,java/lang/invoke/VarHandleShorts$Array,java/lang/invoke/VarHandleShorts$FieldInstanceReadOnly,java/lang/invoke/VarHandleShorts$FieldStaticReadOnly flags 421 +innerclass innerClass java/lang/invoke/VarHandle$AccessMode outerClass java/lang/invoke/VarHandle innerClassName AccessMode flags 4019 +innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsChars$ByteArrayViewVarHandle outerClass java/lang/invoke/VarHandleByteArrayAsChars innerClassName ByteArrayViewVarHandle flags 408 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsDoubles$ByteArrayViewVarHandle outerClass java/lang/invoke/VarHandleByteArrayAsDoubles innerClassName ByteArrayViewVarHandle flags 408 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsFloats$ByteArrayViewVarHandle outerClass java/lang/invoke/VarHandleByteArrayAsFloats innerClassName ByteArrayViewVarHandle flags 408 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsInts$ByteArrayViewVarHandle outerClass java/lang/invoke/VarHandleByteArrayAsInts innerClassName ByteArrayViewVarHandle flags 408 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsLongs$ByteArrayViewVarHandle outerClass java/lang/invoke/VarHandleByteArrayAsLongs innerClassName ByteArrayViewVarHandle flags 408 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsShorts$ByteArrayViewVarHandle outerClass java/lang/invoke/VarHandleByteArrayAsShorts innerClassName ByteArrayViewVarHandle flags 408 +innerclass innerClass java/lang/invoke/VarHandleBooleans$Array outerClass java/lang/invoke/VarHandleBooleans innerClassName Array flags 18 +innerclass innerClass java/lang/invoke/VarHandleBooleans$FieldInstanceReadOnly outerClass java/lang/invoke/VarHandleBooleans innerClassName FieldInstanceReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandleBooleans$FieldStaticReadOnly outerClass java/lang/invoke/VarHandleBooleans innerClassName FieldStaticReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandleBytes$Array outerClass java/lang/invoke/VarHandleBytes innerClassName Array flags 18 +innerclass innerClass java/lang/invoke/VarHandleBytes$FieldInstanceReadOnly outerClass java/lang/invoke/VarHandleBytes innerClassName FieldInstanceReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandleBytes$FieldStaticReadOnly outerClass java/lang/invoke/VarHandleBytes innerClassName FieldStaticReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandleChars$Array outerClass java/lang/invoke/VarHandleChars innerClassName Array flags 18 +innerclass innerClass java/lang/invoke/VarHandleChars$FieldInstanceReadOnly outerClass java/lang/invoke/VarHandleChars innerClassName FieldInstanceReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandleChars$FieldStaticReadOnly outerClass java/lang/invoke/VarHandleChars innerClassName FieldStaticReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandleDoubles$Array outerClass java/lang/invoke/VarHandleDoubles innerClassName Array flags 18 +innerclass innerClass java/lang/invoke/VarHandleDoubles$FieldInstanceReadOnly outerClass java/lang/invoke/VarHandleDoubles innerClassName FieldInstanceReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandleDoubles$FieldStaticReadOnly outerClass java/lang/invoke/VarHandleDoubles innerClassName FieldStaticReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandleFloats$Array outerClass java/lang/invoke/VarHandleFloats innerClassName Array flags 18 +innerclass innerClass java/lang/invoke/VarHandleFloats$FieldInstanceReadOnly outerClass java/lang/invoke/VarHandleFloats innerClassName FieldInstanceReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandleFloats$FieldStaticReadOnly outerClass java/lang/invoke/VarHandleFloats innerClassName FieldStaticReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandleInts$Array outerClass java/lang/invoke/VarHandleInts innerClassName Array flags 18 +innerclass innerClass java/lang/invoke/VarHandleInts$FieldInstanceReadOnly outerClass java/lang/invoke/VarHandleInts innerClassName FieldInstanceReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandleInts$FieldStaticReadOnly outerClass java/lang/invoke/VarHandleInts innerClassName FieldStaticReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandleLongs$Array outerClass java/lang/invoke/VarHandleLongs innerClassName Array flags 18 +innerclass innerClass java/lang/invoke/VarHandleLongs$FieldInstanceReadOnly outerClass java/lang/invoke/VarHandleLongs innerClassName FieldInstanceReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandleLongs$FieldStaticReadOnly outerClass java/lang/invoke/VarHandleLongs innerClassName FieldStaticReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandleReferences$Array outerClass java/lang/invoke/VarHandleReferences innerClassName Array flags 18 +innerclass innerClass java/lang/invoke/VarHandleReferences$FieldInstanceReadOnly outerClass java/lang/invoke/VarHandleReferences innerClassName FieldInstanceReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandleReferences$FieldStaticReadOnly outerClass java/lang/invoke/VarHandleReferences innerClassName FieldStaticReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandleShorts$Array outerClass java/lang/invoke/VarHandleShorts innerClassName Array flags 18 +innerclass innerClass java/lang/invoke/VarHandleShorts$FieldInstanceReadOnly outerClass java/lang/invoke/VarHandleShorts innerClassName FieldInstanceReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandleShorts$FieldStaticReadOnly outerClass java/lang/invoke/VarHandleShorts innerClassName FieldStaticReadOnly flags 8 + +class name java/lang/invoke/VarHandleBooleans +header extends java/lang/Object nestMembers java/lang/invoke/VarHandleBooleans$Array,java/lang/invoke/VarHandleBooleans$FieldStaticReadWrite,java/lang/invoke/VarHandleBooleans$FieldStaticReadOnly,java/lang/invoke/VarHandleBooleans$FieldInstanceReadWrite,java/lang/invoke/VarHandleBooleans$FieldInstanceReadOnly flags 30 +innerclass innerClass java/lang/invoke/VarHandleBooleans$Array outerClass java/lang/invoke/VarHandleBooleans innerClassName Array flags 18 +innerclass innerClass java/lang/invoke/VarHandleBooleans$FieldStaticReadWrite outerClass java/lang/invoke/VarHandleBooleans innerClassName FieldStaticReadWrite flags 18 +innerclass innerClass java/lang/invoke/VarHandleBooleans$FieldStaticReadOnly outerClass java/lang/invoke/VarHandleBooleans innerClassName FieldStaticReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandleBooleans$FieldInstanceReadWrite outerClass java/lang/invoke/VarHandleBooleans innerClassName FieldInstanceReadWrite flags 18 +innerclass innerClass java/lang/invoke/VarHandleBooleans$FieldInstanceReadOnly outerClass java/lang/invoke/VarHandleBooleans innerClassName FieldInstanceReadOnly flags 8 + +class name java/lang/invoke/VarHandleBooleans$Array +header extends java/lang/invoke/VarHandle nestHost java/lang/invoke/VarHandleBooleans flags 30 +innerclass innerClass java/lang/invoke/VarHandleBooleans$Array outerClass java/lang/invoke/VarHandleBooleans innerClassName Array flags 18 +innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleBooleans$Array; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleBooleans$Array; flags 1 +method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional; +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleBooleans$FieldInstanceReadOnly +header extends java/lang/invoke/VarHandle nestHost java/lang/invoke/VarHandleBooleans sealed true permittedSubclasses java/lang/invoke/VarHandleBooleans$FieldInstanceReadWrite flags 20 +innerclass innerClass java/lang/invoke/VarHandleBooleans$FieldInstanceReadOnly outerClass java/lang/invoke/VarHandleBooleans innerClassName FieldInstanceReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19 +innerclass innerClass java/lang/invoke/VarHandleBooleans$FieldInstanceReadWrite outerClass java/lang/invoke/VarHandleBooleans innerClassName FieldInstanceReadWrite flags 18 +method name descriptor (Ljava/lang/Class;JLjava/lang/invoke/VarForm;Z)V flags 4 signature (Ljava/lang/Class<*>;JLjava/lang/invoke/VarForm;Z)V +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleBooleans$FieldInstanceReadOnly; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleBooleans$FieldInstanceReadOnly; flags 1 +method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional; +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleBooleans$FieldInstanceReadWrite +header extends java/lang/invoke/VarHandleBooleans$FieldInstanceReadOnly nestHost java/lang/invoke/VarHandleBooleans flags 30 +innerclass innerClass java/lang/invoke/VarHandleBooleans$FieldInstanceReadWrite outerClass java/lang/invoke/VarHandleBooleans innerClassName FieldInstanceReadWrite flags 18 +innerclass innerClass java/lang/invoke/VarHandleBooleans$FieldInstanceReadOnly outerClass java/lang/invoke/VarHandleBooleans innerClassName FieldInstanceReadOnly flags 8 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleBooleans$FieldInstanceReadWrite; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleBooleans$FieldInstanceReadWrite; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleBooleans$FieldInstanceReadOnly; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleBooleans$FieldInstanceReadOnly; flags 1041 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleBooleans$FieldStaticReadOnly +header extends java/lang/invoke/VarHandle nestHost java/lang/invoke/VarHandleBooleans sealed true permittedSubclasses java/lang/invoke/VarHandleBooleans$FieldStaticReadWrite flags 20 +innerclass innerClass java/lang/invoke/VarHandleBooleans$FieldStaticReadOnly outerClass java/lang/invoke/VarHandleBooleans innerClassName FieldStaticReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19 +innerclass innerClass java/lang/invoke/VarHandleBooleans$FieldStaticReadWrite outerClass java/lang/invoke/VarHandleBooleans innerClassName FieldStaticReadWrite flags 18 +method name descriptor (Ljava/lang/Object;JLjava/lang/invoke/VarForm;Z)V flags 4 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleBooleans$FieldStaticReadOnly; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleBooleans$FieldStaticReadOnly; flags 1 +method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional; +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleBooleans$FieldStaticReadWrite +header extends java/lang/invoke/VarHandleBooleans$FieldStaticReadOnly nestHost java/lang/invoke/VarHandleBooleans flags 30 +innerclass innerClass java/lang/invoke/VarHandleBooleans$FieldStaticReadWrite outerClass java/lang/invoke/VarHandleBooleans innerClassName FieldStaticReadWrite flags 18 +innerclass innerClass java/lang/invoke/VarHandleBooleans$FieldStaticReadOnly outerClass java/lang/invoke/VarHandleBooleans innerClassName FieldStaticReadOnly flags 8 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleBooleans$FieldStaticReadWrite; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleBooleans$FieldStaticReadWrite; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleBooleans$FieldStaticReadOnly; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleBooleans$FieldStaticReadOnly; flags 1041 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleByteArrayAsChars +header extends java/lang/invoke/VarHandleByteArrayBase nestMembers java/lang/invoke/VarHandleByteArrayAsChars$ByteBufferHandle,java/lang/invoke/VarHandleByteArrayAsChars$ArrayHandle,java/lang/invoke/VarHandleByteArrayAsChars$ByteArrayViewVarHandle flags 30 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsChars$ByteBufferHandle outerClass java/lang/invoke/VarHandleByteArrayAsChars innerClassName ByteBufferHandle flags 18 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsChars$ArrayHandle outerClass java/lang/invoke/VarHandleByteArrayAsChars innerClassName ArrayHandle flags 18 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsChars$ByteArrayViewVarHandle outerClass java/lang/invoke/VarHandleByteArrayAsChars innerClassName ByteArrayViewVarHandle flags 408 + +class name java/lang/invoke/VarHandleByteArrayAsChars$ArrayHandle +header extends java/lang/invoke/VarHandleByteArrayAsChars$ByteArrayViewVarHandle nestHost java/lang/invoke/VarHandleByteArrayAsChars flags 30 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsChars$ArrayHandle outerClass java/lang/invoke/VarHandleByteArrayAsChars innerClassName ArrayHandle flags 18 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsChars$ByteArrayViewVarHandle outerClass java/lang/invoke/VarHandleByteArrayAsChars innerClassName ByteArrayViewVarHandle flags 408 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleByteArrayAsChars$ArrayHandle; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleByteArrayAsChars$ArrayHandle; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleByteArrayAsChars$ByteArrayViewVarHandle +header extends java/lang/invoke/VarHandle nestHost java/lang/invoke/VarHandleByteArrayAsChars sealed true permittedSubclasses java/lang/invoke/VarHandleByteArrayAsChars$ArrayHandle,java/lang/invoke/VarHandleByteArrayAsChars$ByteBufferHandle flags 420 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsChars$ByteArrayViewVarHandle outerClass java/lang/invoke/VarHandleByteArrayAsChars innerClassName ByteArrayViewVarHandle flags 408 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsChars$ArrayHandle outerClass java/lang/invoke/VarHandleByteArrayAsChars innerClassName ArrayHandle flags 18 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsChars$ByteBufferHandle outerClass java/lang/invoke/VarHandleByteArrayAsChars innerClassName ByteBufferHandle flags 18 + +class name java/lang/invoke/VarHandleByteArrayAsChars$ByteBufferHandle +header extends java/lang/invoke/VarHandleByteArrayAsChars$ByteArrayViewVarHandle nestHost java/lang/invoke/VarHandleByteArrayAsChars flags 30 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsChars$ByteBufferHandle outerClass java/lang/invoke/VarHandleByteArrayAsChars innerClassName ByteBufferHandle flags 18 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsChars$ByteArrayViewVarHandle outerClass java/lang/invoke/VarHandleByteArrayAsChars innerClassName ByteArrayViewVarHandle flags 408 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleByteArrayAsChars$ByteBufferHandle; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleByteArrayAsChars$ByteBufferHandle; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleByteArrayAsDoubles +header extends java/lang/invoke/VarHandleByteArrayBase nestMembers java/lang/invoke/VarHandleByteArrayAsDoubles$ByteBufferHandle,java/lang/invoke/VarHandleByteArrayAsDoubles$ArrayHandle,java/lang/invoke/VarHandleByteArrayAsDoubles$ByteArrayViewVarHandle flags 30 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsDoubles$ByteBufferHandle outerClass java/lang/invoke/VarHandleByteArrayAsDoubles innerClassName ByteBufferHandle flags 18 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsDoubles$ArrayHandle outerClass java/lang/invoke/VarHandleByteArrayAsDoubles innerClassName ArrayHandle flags 18 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsDoubles$ByteArrayViewVarHandle outerClass java/lang/invoke/VarHandleByteArrayAsDoubles innerClassName ByteArrayViewVarHandle flags 408 + +class name java/lang/invoke/VarHandleByteArrayAsDoubles$ArrayHandle +header extends java/lang/invoke/VarHandleByteArrayAsDoubles$ByteArrayViewVarHandle nestHost java/lang/invoke/VarHandleByteArrayAsDoubles flags 30 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsDoubles$ArrayHandle outerClass java/lang/invoke/VarHandleByteArrayAsDoubles innerClassName ArrayHandle flags 18 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsDoubles$ByteArrayViewVarHandle outerClass java/lang/invoke/VarHandleByteArrayAsDoubles innerClassName ByteArrayViewVarHandle flags 408 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleByteArrayAsDoubles$ArrayHandle; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleByteArrayAsDoubles$ArrayHandle; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleByteArrayAsDoubles$ByteArrayViewVarHandle +header extends java/lang/invoke/VarHandle nestHost java/lang/invoke/VarHandleByteArrayAsDoubles sealed true permittedSubclasses java/lang/invoke/VarHandleByteArrayAsDoubles$ArrayHandle,java/lang/invoke/VarHandleByteArrayAsDoubles$ByteBufferHandle flags 420 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsDoubles$ByteArrayViewVarHandle outerClass java/lang/invoke/VarHandleByteArrayAsDoubles innerClassName ByteArrayViewVarHandle flags 408 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsDoubles$ArrayHandle outerClass java/lang/invoke/VarHandleByteArrayAsDoubles innerClassName ArrayHandle flags 18 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsDoubles$ByteBufferHandle outerClass java/lang/invoke/VarHandleByteArrayAsDoubles innerClassName ByteBufferHandle flags 18 + +class name java/lang/invoke/VarHandleByteArrayAsDoubles$ByteBufferHandle +header extends java/lang/invoke/VarHandleByteArrayAsDoubles$ByteArrayViewVarHandle nestHost java/lang/invoke/VarHandleByteArrayAsDoubles flags 30 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsDoubles$ByteBufferHandle outerClass java/lang/invoke/VarHandleByteArrayAsDoubles innerClassName ByteBufferHandle flags 18 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsDoubles$ByteArrayViewVarHandle outerClass java/lang/invoke/VarHandleByteArrayAsDoubles innerClassName ByteArrayViewVarHandle flags 408 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleByteArrayAsDoubles$ByteBufferHandle; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleByteArrayAsDoubles$ByteBufferHandle; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleByteArrayAsFloats +header extends java/lang/invoke/VarHandleByteArrayBase nestMembers java/lang/invoke/VarHandleByteArrayAsFloats$ByteBufferHandle,java/lang/invoke/VarHandleByteArrayAsFloats$ArrayHandle,java/lang/invoke/VarHandleByteArrayAsFloats$ByteArrayViewVarHandle flags 30 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsFloats$ByteBufferHandle outerClass java/lang/invoke/VarHandleByteArrayAsFloats innerClassName ByteBufferHandle flags 18 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsFloats$ArrayHandle outerClass java/lang/invoke/VarHandleByteArrayAsFloats innerClassName ArrayHandle flags 18 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsFloats$ByteArrayViewVarHandle outerClass java/lang/invoke/VarHandleByteArrayAsFloats innerClassName ByteArrayViewVarHandle flags 408 + +class name java/lang/invoke/VarHandleByteArrayAsFloats$ArrayHandle +header extends java/lang/invoke/VarHandleByteArrayAsFloats$ByteArrayViewVarHandle nestHost java/lang/invoke/VarHandleByteArrayAsFloats flags 30 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsFloats$ArrayHandle outerClass java/lang/invoke/VarHandleByteArrayAsFloats innerClassName ArrayHandle flags 18 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsFloats$ByteArrayViewVarHandle outerClass java/lang/invoke/VarHandleByteArrayAsFloats innerClassName ByteArrayViewVarHandle flags 408 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleByteArrayAsFloats$ArrayHandle; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleByteArrayAsFloats$ArrayHandle; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleByteArrayAsFloats$ByteArrayViewVarHandle +header extends java/lang/invoke/VarHandle nestHost java/lang/invoke/VarHandleByteArrayAsFloats sealed true permittedSubclasses java/lang/invoke/VarHandleByteArrayAsFloats$ArrayHandle,java/lang/invoke/VarHandleByteArrayAsFloats$ByteBufferHandle flags 420 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsFloats$ByteArrayViewVarHandle outerClass java/lang/invoke/VarHandleByteArrayAsFloats innerClassName ByteArrayViewVarHandle flags 408 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsFloats$ArrayHandle outerClass java/lang/invoke/VarHandleByteArrayAsFloats innerClassName ArrayHandle flags 18 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsFloats$ByteBufferHandle outerClass java/lang/invoke/VarHandleByteArrayAsFloats innerClassName ByteBufferHandle flags 18 + +class name java/lang/invoke/VarHandleByteArrayAsFloats$ByteBufferHandle +header extends java/lang/invoke/VarHandleByteArrayAsFloats$ByteArrayViewVarHandle nestHost java/lang/invoke/VarHandleByteArrayAsFloats flags 30 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsFloats$ByteBufferHandle outerClass java/lang/invoke/VarHandleByteArrayAsFloats innerClassName ByteBufferHandle flags 18 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsFloats$ByteArrayViewVarHandle outerClass java/lang/invoke/VarHandleByteArrayAsFloats innerClassName ByteArrayViewVarHandle flags 408 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleByteArrayAsFloats$ByteBufferHandle; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleByteArrayAsFloats$ByteBufferHandle; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleByteArrayAsInts +header extends java/lang/invoke/VarHandleByteArrayBase nestMembers java/lang/invoke/VarHandleByteArrayAsInts$ByteBufferHandle,java/lang/invoke/VarHandleByteArrayAsInts$ArrayHandle,java/lang/invoke/VarHandleByteArrayAsInts$ByteArrayViewVarHandle flags 30 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsInts$ByteBufferHandle outerClass java/lang/invoke/VarHandleByteArrayAsInts innerClassName ByteBufferHandle flags 18 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsInts$ArrayHandle outerClass java/lang/invoke/VarHandleByteArrayAsInts innerClassName ArrayHandle flags 18 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsInts$ByteArrayViewVarHandle outerClass java/lang/invoke/VarHandleByteArrayAsInts innerClassName ByteArrayViewVarHandle flags 408 + +class name java/lang/invoke/VarHandleByteArrayAsInts$ArrayHandle +header extends java/lang/invoke/VarHandleByteArrayAsInts$ByteArrayViewVarHandle nestHost java/lang/invoke/VarHandleByteArrayAsInts flags 30 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsInts$ArrayHandle outerClass java/lang/invoke/VarHandleByteArrayAsInts innerClassName ArrayHandle flags 18 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsInts$ByteArrayViewVarHandle outerClass java/lang/invoke/VarHandleByteArrayAsInts innerClassName ByteArrayViewVarHandle flags 408 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleByteArrayAsInts$ArrayHandle; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleByteArrayAsInts$ArrayHandle; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleByteArrayAsInts$ByteArrayViewVarHandle +header extends java/lang/invoke/VarHandle nestHost java/lang/invoke/VarHandleByteArrayAsInts sealed true permittedSubclasses java/lang/invoke/VarHandleByteArrayAsInts$ArrayHandle,java/lang/invoke/VarHandleByteArrayAsInts$ByteBufferHandle flags 420 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsInts$ByteArrayViewVarHandle outerClass java/lang/invoke/VarHandleByteArrayAsInts innerClassName ByteArrayViewVarHandle flags 408 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsInts$ArrayHandle outerClass java/lang/invoke/VarHandleByteArrayAsInts innerClassName ArrayHandle flags 18 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsInts$ByteBufferHandle outerClass java/lang/invoke/VarHandleByteArrayAsInts innerClassName ByteBufferHandle flags 18 + +class name java/lang/invoke/VarHandleByteArrayAsInts$ByteBufferHandle +header extends java/lang/invoke/VarHandleByteArrayAsInts$ByteArrayViewVarHandle nestHost java/lang/invoke/VarHandleByteArrayAsInts flags 30 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsInts$ByteBufferHandle outerClass java/lang/invoke/VarHandleByteArrayAsInts innerClassName ByteBufferHandle flags 18 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsInts$ByteArrayViewVarHandle outerClass java/lang/invoke/VarHandleByteArrayAsInts innerClassName ByteArrayViewVarHandle flags 408 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleByteArrayAsInts$ByteBufferHandle; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleByteArrayAsInts$ByteBufferHandle; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleByteArrayAsLongs +header extends java/lang/invoke/VarHandleByteArrayBase nestMembers java/lang/invoke/VarHandleByteArrayAsLongs$ByteBufferHandle,java/lang/invoke/VarHandleByteArrayAsLongs$ArrayHandle,java/lang/invoke/VarHandleByteArrayAsLongs$ByteArrayViewVarHandle flags 30 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsLongs$ByteBufferHandle outerClass java/lang/invoke/VarHandleByteArrayAsLongs innerClassName ByteBufferHandle flags 18 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsLongs$ArrayHandle outerClass java/lang/invoke/VarHandleByteArrayAsLongs innerClassName ArrayHandle flags 18 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsLongs$ByteArrayViewVarHandle outerClass java/lang/invoke/VarHandleByteArrayAsLongs innerClassName ByteArrayViewVarHandle flags 408 + +class name java/lang/invoke/VarHandleByteArrayAsLongs$ArrayHandle +header extends java/lang/invoke/VarHandleByteArrayAsLongs$ByteArrayViewVarHandle nestHost java/lang/invoke/VarHandleByteArrayAsLongs flags 30 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsLongs$ArrayHandle outerClass java/lang/invoke/VarHandleByteArrayAsLongs innerClassName ArrayHandle flags 18 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsLongs$ByteArrayViewVarHandle outerClass java/lang/invoke/VarHandleByteArrayAsLongs innerClassName ByteArrayViewVarHandle flags 408 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleByteArrayAsLongs$ArrayHandle; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleByteArrayAsLongs$ArrayHandle; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleByteArrayAsLongs$ByteArrayViewVarHandle +header extends java/lang/invoke/VarHandle nestHost java/lang/invoke/VarHandleByteArrayAsLongs sealed true permittedSubclasses java/lang/invoke/VarHandleByteArrayAsLongs$ArrayHandle,java/lang/invoke/VarHandleByteArrayAsLongs$ByteBufferHandle flags 420 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsLongs$ByteArrayViewVarHandle outerClass java/lang/invoke/VarHandleByteArrayAsLongs innerClassName ByteArrayViewVarHandle flags 408 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsLongs$ArrayHandle outerClass java/lang/invoke/VarHandleByteArrayAsLongs innerClassName ArrayHandle flags 18 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsLongs$ByteBufferHandle outerClass java/lang/invoke/VarHandleByteArrayAsLongs innerClassName ByteBufferHandle flags 18 + +class name java/lang/invoke/VarHandleByteArrayAsLongs$ByteBufferHandle +header extends java/lang/invoke/VarHandleByteArrayAsLongs$ByteArrayViewVarHandle nestHost java/lang/invoke/VarHandleByteArrayAsLongs flags 30 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsLongs$ByteBufferHandle outerClass java/lang/invoke/VarHandleByteArrayAsLongs innerClassName ByteBufferHandle flags 18 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsLongs$ByteArrayViewVarHandle outerClass java/lang/invoke/VarHandleByteArrayAsLongs innerClassName ByteArrayViewVarHandle flags 408 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleByteArrayAsLongs$ByteBufferHandle; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleByteArrayAsLongs$ByteBufferHandle; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleByteArrayAsShorts +header extends java/lang/invoke/VarHandleByteArrayBase nestMembers java/lang/invoke/VarHandleByteArrayAsShorts$ByteBufferHandle,java/lang/invoke/VarHandleByteArrayAsShorts$ArrayHandle,java/lang/invoke/VarHandleByteArrayAsShorts$ByteArrayViewVarHandle flags 30 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsShorts$ByteBufferHandle outerClass java/lang/invoke/VarHandleByteArrayAsShorts innerClassName ByteBufferHandle flags 18 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsShorts$ArrayHandle outerClass java/lang/invoke/VarHandleByteArrayAsShorts innerClassName ArrayHandle flags 18 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsShorts$ByteArrayViewVarHandle outerClass java/lang/invoke/VarHandleByteArrayAsShorts innerClassName ByteArrayViewVarHandle flags 408 + +class name java/lang/invoke/VarHandleByteArrayAsShorts$ArrayHandle +header extends java/lang/invoke/VarHandleByteArrayAsShorts$ByteArrayViewVarHandle nestHost java/lang/invoke/VarHandleByteArrayAsShorts flags 30 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsShorts$ArrayHandle outerClass java/lang/invoke/VarHandleByteArrayAsShorts innerClassName ArrayHandle flags 18 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsShorts$ByteArrayViewVarHandle outerClass java/lang/invoke/VarHandleByteArrayAsShorts innerClassName ByteArrayViewVarHandle flags 408 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleByteArrayAsShorts$ArrayHandle; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleByteArrayAsShorts$ArrayHandle; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleByteArrayAsShorts$ByteArrayViewVarHandle +header extends java/lang/invoke/VarHandle nestHost java/lang/invoke/VarHandleByteArrayAsShorts sealed true permittedSubclasses java/lang/invoke/VarHandleByteArrayAsShorts$ArrayHandle,java/lang/invoke/VarHandleByteArrayAsShorts$ByteBufferHandle flags 420 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsShorts$ByteArrayViewVarHandle outerClass java/lang/invoke/VarHandleByteArrayAsShorts innerClassName ByteArrayViewVarHandle flags 408 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsShorts$ArrayHandle outerClass java/lang/invoke/VarHandleByteArrayAsShorts innerClassName ArrayHandle flags 18 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsShorts$ByteBufferHandle outerClass java/lang/invoke/VarHandleByteArrayAsShorts innerClassName ByteBufferHandle flags 18 + +class name java/lang/invoke/VarHandleByteArrayAsShorts$ByteBufferHandle +header extends java/lang/invoke/VarHandleByteArrayAsShorts$ByteArrayViewVarHandle nestHost java/lang/invoke/VarHandleByteArrayAsShorts flags 30 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsShorts$ByteBufferHandle outerClass java/lang/invoke/VarHandleByteArrayAsShorts innerClassName ByteBufferHandle flags 18 +innerclass innerClass java/lang/invoke/VarHandleByteArrayAsShorts$ByteArrayViewVarHandle outerClass java/lang/invoke/VarHandleByteArrayAsShorts innerClassName ByteArrayViewVarHandle flags 408 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleByteArrayAsShorts$ByteBufferHandle; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleByteArrayAsShorts$ByteBufferHandle; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleByteArrayBase +header extends java/lang/Object flags 420 + +class name java/lang/invoke/VarHandleBytes +header extends java/lang/Object nestMembers java/lang/invoke/VarHandleBytes$Array,java/lang/invoke/VarHandleBytes$FieldStaticReadWrite,java/lang/invoke/VarHandleBytes$FieldStaticReadOnly,java/lang/invoke/VarHandleBytes$FieldInstanceReadWrite,java/lang/invoke/VarHandleBytes$FieldInstanceReadOnly flags 30 +innerclass innerClass java/lang/invoke/VarHandleBytes$Array outerClass java/lang/invoke/VarHandleBytes innerClassName Array flags 18 +innerclass innerClass java/lang/invoke/VarHandleBytes$FieldStaticReadWrite outerClass java/lang/invoke/VarHandleBytes innerClassName FieldStaticReadWrite flags 18 +innerclass innerClass java/lang/invoke/VarHandleBytes$FieldStaticReadOnly outerClass java/lang/invoke/VarHandleBytes innerClassName FieldStaticReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandleBytes$FieldInstanceReadWrite outerClass java/lang/invoke/VarHandleBytes innerClassName FieldInstanceReadWrite flags 18 +innerclass innerClass java/lang/invoke/VarHandleBytes$FieldInstanceReadOnly outerClass java/lang/invoke/VarHandleBytes innerClassName FieldInstanceReadOnly flags 8 + +class name java/lang/invoke/VarHandleBytes$Array +header extends java/lang/invoke/VarHandle nestHost java/lang/invoke/VarHandleBytes flags 30 +innerclass innerClass java/lang/invoke/VarHandleBytes$Array outerClass java/lang/invoke/VarHandleBytes innerClassName Array flags 18 +innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleBytes$Array; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleBytes$Array; flags 1 +method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional; +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleBytes$FieldInstanceReadOnly +header extends java/lang/invoke/VarHandle nestHost java/lang/invoke/VarHandleBytes sealed true permittedSubclasses java/lang/invoke/VarHandleBytes$FieldInstanceReadWrite flags 20 +innerclass innerClass java/lang/invoke/VarHandleBytes$FieldInstanceReadOnly outerClass java/lang/invoke/VarHandleBytes innerClassName FieldInstanceReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19 +innerclass innerClass java/lang/invoke/VarHandleBytes$FieldInstanceReadWrite outerClass java/lang/invoke/VarHandleBytes innerClassName FieldInstanceReadWrite flags 18 +method name descriptor (Ljava/lang/Class;JLjava/lang/invoke/VarForm;Z)V flags 4 signature (Ljava/lang/Class<*>;JLjava/lang/invoke/VarForm;Z)V +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleBytes$FieldInstanceReadOnly; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleBytes$FieldInstanceReadOnly; flags 1 +method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional; +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleBytes$FieldInstanceReadWrite +header extends java/lang/invoke/VarHandleBytes$FieldInstanceReadOnly nestHost java/lang/invoke/VarHandleBytes flags 30 +innerclass innerClass java/lang/invoke/VarHandleBytes$FieldInstanceReadWrite outerClass java/lang/invoke/VarHandleBytes innerClassName FieldInstanceReadWrite flags 18 +innerclass innerClass java/lang/invoke/VarHandleBytes$FieldInstanceReadOnly outerClass java/lang/invoke/VarHandleBytes innerClassName FieldInstanceReadOnly flags 8 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleBytes$FieldInstanceReadWrite; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleBytes$FieldInstanceReadWrite; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleBytes$FieldInstanceReadOnly; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleBytes$FieldInstanceReadOnly; flags 1041 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleBytes$FieldStaticReadOnly +header extends java/lang/invoke/VarHandle nestHost java/lang/invoke/VarHandleBytes sealed true permittedSubclasses java/lang/invoke/VarHandleBytes$FieldStaticReadWrite flags 20 +innerclass innerClass java/lang/invoke/VarHandleBytes$FieldStaticReadOnly outerClass java/lang/invoke/VarHandleBytes innerClassName FieldStaticReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19 +innerclass innerClass java/lang/invoke/VarHandleBytes$FieldStaticReadWrite outerClass java/lang/invoke/VarHandleBytes innerClassName FieldStaticReadWrite flags 18 +method name descriptor (Ljava/lang/Object;JLjava/lang/invoke/VarForm;Z)V flags 4 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleBytes$FieldStaticReadOnly; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleBytes$FieldStaticReadOnly; flags 1 +method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional; +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleBytes$FieldStaticReadWrite +header extends java/lang/invoke/VarHandleBytes$FieldStaticReadOnly nestHost java/lang/invoke/VarHandleBytes flags 30 +innerclass innerClass java/lang/invoke/VarHandleBytes$FieldStaticReadWrite outerClass java/lang/invoke/VarHandleBytes innerClassName FieldStaticReadWrite flags 18 +innerclass innerClass java/lang/invoke/VarHandleBytes$FieldStaticReadOnly outerClass java/lang/invoke/VarHandleBytes innerClassName FieldStaticReadOnly flags 8 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleBytes$FieldStaticReadWrite; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleBytes$FieldStaticReadWrite; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleBytes$FieldStaticReadOnly; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleBytes$FieldStaticReadOnly; flags 1041 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleChars +header extends java/lang/Object nestMembers java/lang/invoke/VarHandleChars$Array,java/lang/invoke/VarHandleChars$FieldStaticReadWrite,java/lang/invoke/VarHandleChars$FieldStaticReadOnly,java/lang/invoke/VarHandleChars$FieldInstanceReadWrite,java/lang/invoke/VarHandleChars$FieldInstanceReadOnly flags 30 +innerclass innerClass java/lang/invoke/VarHandleChars$Array outerClass java/lang/invoke/VarHandleChars innerClassName Array flags 18 +innerclass innerClass java/lang/invoke/VarHandleChars$FieldStaticReadWrite outerClass java/lang/invoke/VarHandleChars innerClassName FieldStaticReadWrite flags 18 +innerclass innerClass java/lang/invoke/VarHandleChars$FieldStaticReadOnly outerClass java/lang/invoke/VarHandleChars innerClassName FieldStaticReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandleChars$FieldInstanceReadWrite outerClass java/lang/invoke/VarHandleChars innerClassName FieldInstanceReadWrite flags 18 +innerclass innerClass java/lang/invoke/VarHandleChars$FieldInstanceReadOnly outerClass java/lang/invoke/VarHandleChars innerClassName FieldInstanceReadOnly flags 8 + +class name java/lang/invoke/VarHandleChars$Array +header extends java/lang/invoke/VarHandle nestHost java/lang/invoke/VarHandleChars flags 30 +innerclass innerClass java/lang/invoke/VarHandleChars$Array outerClass java/lang/invoke/VarHandleChars innerClassName Array flags 18 +innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleChars$Array; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleChars$Array; flags 1 +method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional; +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleChars$FieldInstanceReadOnly +header extends java/lang/invoke/VarHandle nestHost java/lang/invoke/VarHandleChars sealed true permittedSubclasses java/lang/invoke/VarHandleChars$FieldInstanceReadWrite flags 20 +innerclass innerClass java/lang/invoke/VarHandleChars$FieldInstanceReadOnly outerClass java/lang/invoke/VarHandleChars innerClassName FieldInstanceReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19 +innerclass innerClass java/lang/invoke/VarHandleChars$FieldInstanceReadWrite outerClass java/lang/invoke/VarHandleChars innerClassName FieldInstanceReadWrite flags 18 +method name descriptor (Ljava/lang/Class;JLjava/lang/invoke/VarForm;Z)V flags 4 signature (Ljava/lang/Class<*>;JLjava/lang/invoke/VarForm;Z)V +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleChars$FieldInstanceReadOnly; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleChars$FieldInstanceReadOnly; flags 1 +method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional; +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleChars$FieldInstanceReadWrite +header extends java/lang/invoke/VarHandleChars$FieldInstanceReadOnly nestHost java/lang/invoke/VarHandleChars flags 30 +innerclass innerClass java/lang/invoke/VarHandleChars$FieldInstanceReadWrite outerClass java/lang/invoke/VarHandleChars innerClassName FieldInstanceReadWrite flags 18 +innerclass innerClass java/lang/invoke/VarHandleChars$FieldInstanceReadOnly outerClass java/lang/invoke/VarHandleChars innerClassName FieldInstanceReadOnly flags 8 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleChars$FieldInstanceReadWrite; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleChars$FieldInstanceReadWrite; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleChars$FieldInstanceReadOnly; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleChars$FieldInstanceReadOnly; flags 1041 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleChars$FieldStaticReadOnly +header extends java/lang/invoke/VarHandle nestHost java/lang/invoke/VarHandleChars sealed true permittedSubclasses java/lang/invoke/VarHandleChars$FieldStaticReadWrite flags 20 +innerclass innerClass java/lang/invoke/VarHandleChars$FieldStaticReadOnly outerClass java/lang/invoke/VarHandleChars innerClassName FieldStaticReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19 +innerclass innerClass java/lang/invoke/VarHandleChars$FieldStaticReadWrite outerClass java/lang/invoke/VarHandleChars innerClassName FieldStaticReadWrite flags 18 +method name descriptor (Ljava/lang/Object;JLjava/lang/invoke/VarForm;Z)V flags 4 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleChars$FieldStaticReadOnly; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleChars$FieldStaticReadOnly; flags 1 +method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional; +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleChars$FieldStaticReadWrite +header extends java/lang/invoke/VarHandleChars$FieldStaticReadOnly nestHost java/lang/invoke/VarHandleChars flags 30 +innerclass innerClass java/lang/invoke/VarHandleChars$FieldStaticReadWrite outerClass java/lang/invoke/VarHandleChars innerClassName FieldStaticReadWrite flags 18 +innerclass innerClass java/lang/invoke/VarHandleChars$FieldStaticReadOnly outerClass java/lang/invoke/VarHandleChars innerClassName FieldStaticReadOnly flags 8 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleChars$FieldStaticReadWrite; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleChars$FieldStaticReadWrite; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleChars$FieldStaticReadOnly; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleChars$FieldStaticReadOnly; flags 1041 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleDoubles +header extends java/lang/Object nestMembers java/lang/invoke/VarHandleDoubles$Array,java/lang/invoke/VarHandleDoubles$FieldStaticReadWrite,java/lang/invoke/VarHandleDoubles$FieldStaticReadOnly,java/lang/invoke/VarHandleDoubles$FieldInstanceReadWrite,java/lang/invoke/VarHandleDoubles$FieldInstanceReadOnly flags 30 +innerclass innerClass java/lang/invoke/VarHandleDoubles$Array outerClass java/lang/invoke/VarHandleDoubles innerClassName Array flags 18 +innerclass innerClass java/lang/invoke/VarHandleDoubles$FieldStaticReadWrite outerClass java/lang/invoke/VarHandleDoubles innerClassName FieldStaticReadWrite flags 18 +innerclass innerClass java/lang/invoke/VarHandleDoubles$FieldStaticReadOnly outerClass java/lang/invoke/VarHandleDoubles innerClassName FieldStaticReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandleDoubles$FieldInstanceReadWrite outerClass java/lang/invoke/VarHandleDoubles innerClassName FieldInstanceReadWrite flags 18 +innerclass innerClass java/lang/invoke/VarHandleDoubles$FieldInstanceReadOnly outerClass java/lang/invoke/VarHandleDoubles innerClassName FieldInstanceReadOnly flags 8 + +class name java/lang/invoke/VarHandleDoubles$Array +header extends java/lang/invoke/VarHandle nestHost java/lang/invoke/VarHandleDoubles flags 30 +innerclass innerClass java/lang/invoke/VarHandleDoubles$Array outerClass java/lang/invoke/VarHandleDoubles innerClassName Array flags 18 +innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleDoubles$Array; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleDoubles$Array; flags 1 +method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional; +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleDoubles$FieldInstanceReadOnly +header extends java/lang/invoke/VarHandle nestHost java/lang/invoke/VarHandleDoubles sealed true permittedSubclasses java/lang/invoke/VarHandleDoubles$FieldInstanceReadWrite flags 20 +innerclass innerClass java/lang/invoke/VarHandleDoubles$FieldInstanceReadOnly outerClass java/lang/invoke/VarHandleDoubles innerClassName FieldInstanceReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19 +innerclass innerClass java/lang/invoke/VarHandleDoubles$FieldInstanceReadWrite outerClass java/lang/invoke/VarHandleDoubles innerClassName FieldInstanceReadWrite flags 18 +method name descriptor (Ljava/lang/Class;JLjava/lang/invoke/VarForm;Z)V flags 4 signature (Ljava/lang/Class<*>;JLjava/lang/invoke/VarForm;Z)V +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleDoubles$FieldInstanceReadOnly; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleDoubles$FieldInstanceReadOnly; flags 1 +method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional; +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleDoubles$FieldInstanceReadWrite +header extends java/lang/invoke/VarHandleDoubles$FieldInstanceReadOnly nestHost java/lang/invoke/VarHandleDoubles flags 30 +innerclass innerClass java/lang/invoke/VarHandleDoubles$FieldInstanceReadWrite outerClass java/lang/invoke/VarHandleDoubles innerClassName FieldInstanceReadWrite flags 18 +innerclass innerClass java/lang/invoke/VarHandleDoubles$FieldInstanceReadOnly outerClass java/lang/invoke/VarHandleDoubles innerClassName FieldInstanceReadOnly flags 8 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleDoubles$FieldInstanceReadWrite; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleDoubles$FieldInstanceReadWrite; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleDoubles$FieldInstanceReadOnly; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleDoubles$FieldInstanceReadOnly; flags 1041 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleDoubles$FieldStaticReadOnly +header extends java/lang/invoke/VarHandle nestHost java/lang/invoke/VarHandleDoubles sealed true permittedSubclasses java/lang/invoke/VarHandleDoubles$FieldStaticReadWrite flags 20 +innerclass innerClass java/lang/invoke/VarHandleDoubles$FieldStaticReadOnly outerClass java/lang/invoke/VarHandleDoubles innerClassName FieldStaticReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19 +innerclass innerClass java/lang/invoke/VarHandleDoubles$FieldStaticReadWrite outerClass java/lang/invoke/VarHandleDoubles innerClassName FieldStaticReadWrite flags 18 +method name descriptor (Ljava/lang/Object;JLjava/lang/invoke/VarForm;Z)V flags 4 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleDoubles$FieldStaticReadOnly; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleDoubles$FieldStaticReadOnly; flags 1 +method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional; +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleDoubles$FieldStaticReadWrite +header extends java/lang/invoke/VarHandleDoubles$FieldStaticReadOnly nestHost java/lang/invoke/VarHandleDoubles flags 30 +innerclass innerClass java/lang/invoke/VarHandleDoubles$FieldStaticReadWrite outerClass java/lang/invoke/VarHandleDoubles innerClassName FieldStaticReadWrite flags 18 +innerclass innerClass java/lang/invoke/VarHandleDoubles$FieldStaticReadOnly outerClass java/lang/invoke/VarHandleDoubles innerClassName FieldStaticReadOnly flags 8 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleDoubles$FieldStaticReadWrite; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleDoubles$FieldStaticReadWrite; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleDoubles$FieldStaticReadOnly; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleDoubles$FieldStaticReadOnly; flags 1041 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleFloats +header extends java/lang/Object nestMembers java/lang/invoke/VarHandleFloats$Array,java/lang/invoke/VarHandleFloats$FieldStaticReadWrite,java/lang/invoke/VarHandleFloats$FieldStaticReadOnly,java/lang/invoke/VarHandleFloats$FieldInstanceReadWrite,java/lang/invoke/VarHandleFloats$FieldInstanceReadOnly flags 30 +innerclass innerClass java/lang/invoke/VarHandleFloats$Array outerClass java/lang/invoke/VarHandleFloats innerClassName Array flags 18 +innerclass innerClass java/lang/invoke/VarHandleFloats$FieldStaticReadWrite outerClass java/lang/invoke/VarHandleFloats innerClassName FieldStaticReadWrite flags 18 +innerclass innerClass java/lang/invoke/VarHandleFloats$FieldStaticReadOnly outerClass java/lang/invoke/VarHandleFloats innerClassName FieldStaticReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandleFloats$FieldInstanceReadWrite outerClass java/lang/invoke/VarHandleFloats innerClassName FieldInstanceReadWrite flags 18 +innerclass innerClass java/lang/invoke/VarHandleFloats$FieldInstanceReadOnly outerClass java/lang/invoke/VarHandleFloats innerClassName FieldInstanceReadOnly flags 8 + +class name java/lang/invoke/VarHandleFloats$Array +header extends java/lang/invoke/VarHandle nestHost java/lang/invoke/VarHandleFloats flags 30 +innerclass innerClass java/lang/invoke/VarHandleFloats$Array outerClass java/lang/invoke/VarHandleFloats innerClassName Array flags 18 +innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleFloats$Array; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleFloats$Array; flags 1 +method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional; +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleFloats$FieldInstanceReadOnly +header extends java/lang/invoke/VarHandle nestHost java/lang/invoke/VarHandleFloats sealed true permittedSubclasses java/lang/invoke/VarHandleFloats$FieldInstanceReadWrite flags 20 +innerclass innerClass java/lang/invoke/VarHandleFloats$FieldInstanceReadOnly outerClass java/lang/invoke/VarHandleFloats innerClassName FieldInstanceReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19 +innerclass innerClass java/lang/invoke/VarHandleFloats$FieldInstanceReadWrite outerClass java/lang/invoke/VarHandleFloats innerClassName FieldInstanceReadWrite flags 18 +method name descriptor (Ljava/lang/Class;JLjava/lang/invoke/VarForm;Z)V flags 4 signature (Ljava/lang/Class<*>;JLjava/lang/invoke/VarForm;Z)V +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleFloats$FieldInstanceReadOnly; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleFloats$FieldInstanceReadOnly; flags 1 +method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional; +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleFloats$FieldInstanceReadWrite +header extends java/lang/invoke/VarHandleFloats$FieldInstanceReadOnly nestHost java/lang/invoke/VarHandleFloats flags 30 +innerclass innerClass java/lang/invoke/VarHandleFloats$FieldInstanceReadWrite outerClass java/lang/invoke/VarHandleFloats innerClassName FieldInstanceReadWrite flags 18 +innerclass innerClass java/lang/invoke/VarHandleFloats$FieldInstanceReadOnly outerClass java/lang/invoke/VarHandleFloats innerClassName FieldInstanceReadOnly flags 8 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleFloats$FieldInstanceReadWrite; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleFloats$FieldInstanceReadWrite; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleFloats$FieldInstanceReadOnly; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleFloats$FieldInstanceReadOnly; flags 1041 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleFloats$FieldStaticReadOnly +header extends java/lang/invoke/VarHandle nestHost java/lang/invoke/VarHandleFloats sealed true permittedSubclasses java/lang/invoke/VarHandleFloats$FieldStaticReadWrite flags 20 +innerclass innerClass java/lang/invoke/VarHandleFloats$FieldStaticReadOnly outerClass java/lang/invoke/VarHandleFloats innerClassName FieldStaticReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19 +innerclass innerClass java/lang/invoke/VarHandleFloats$FieldStaticReadWrite outerClass java/lang/invoke/VarHandleFloats innerClassName FieldStaticReadWrite flags 18 +method name descriptor (Ljava/lang/Object;JLjava/lang/invoke/VarForm;Z)V flags 4 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleFloats$FieldStaticReadOnly; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleFloats$FieldStaticReadOnly; flags 1 +method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional; +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleFloats$FieldStaticReadWrite +header extends java/lang/invoke/VarHandleFloats$FieldStaticReadOnly nestHost java/lang/invoke/VarHandleFloats flags 30 +innerclass innerClass java/lang/invoke/VarHandleFloats$FieldStaticReadWrite outerClass java/lang/invoke/VarHandleFloats innerClassName FieldStaticReadWrite flags 18 +innerclass innerClass java/lang/invoke/VarHandleFloats$FieldStaticReadOnly outerClass java/lang/invoke/VarHandleFloats innerClassName FieldStaticReadOnly flags 8 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleFloats$FieldStaticReadWrite; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleFloats$FieldStaticReadWrite; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleFloats$FieldStaticReadOnly; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleFloats$FieldStaticReadOnly; flags 1041 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleInts +header extends java/lang/Object nestMembers java/lang/invoke/VarHandleInts$Array,java/lang/invoke/VarHandleInts$FieldStaticReadWrite,java/lang/invoke/VarHandleInts$FieldStaticReadOnly,java/lang/invoke/VarHandleInts$FieldInstanceReadWrite,java/lang/invoke/VarHandleInts$FieldInstanceReadOnly flags 30 +innerclass innerClass java/lang/invoke/VarHandleInts$Array outerClass java/lang/invoke/VarHandleInts innerClassName Array flags 18 +innerclass innerClass java/lang/invoke/VarHandleInts$FieldStaticReadWrite outerClass java/lang/invoke/VarHandleInts innerClassName FieldStaticReadWrite flags 18 +innerclass innerClass java/lang/invoke/VarHandleInts$FieldStaticReadOnly outerClass java/lang/invoke/VarHandleInts innerClassName FieldStaticReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandleInts$FieldInstanceReadWrite outerClass java/lang/invoke/VarHandleInts innerClassName FieldInstanceReadWrite flags 18 +innerclass innerClass java/lang/invoke/VarHandleInts$FieldInstanceReadOnly outerClass java/lang/invoke/VarHandleInts innerClassName FieldInstanceReadOnly flags 8 + +class name java/lang/invoke/VarHandleInts$Array +header extends java/lang/invoke/VarHandle nestHost java/lang/invoke/VarHandleInts flags 30 +innerclass innerClass java/lang/invoke/VarHandleInts$Array outerClass java/lang/invoke/VarHandleInts innerClassName Array flags 18 +innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleInts$Array; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleInts$Array; flags 1 +method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional; +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleInts$FieldInstanceReadOnly +header extends java/lang/invoke/VarHandle nestHost java/lang/invoke/VarHandleInts sealed true permittedSubclasses java/lang/invoke/VarHandleInts$FieldInstanceReadWrite flags 20 +innerclass innerClass java/lang/invoke/VarHandleInts$FieldInstanceReadOnly outerClass java/lang/invoke/VarHandleInts innerClassName FieldInstanceReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19 +innerclass innerClass java/lang/invoke/VarHandleInts$FieldInstanceReadWrite outerClass java/lang/invoke/VarHandleInts innerClassName FieldInstanceReadWrite flags 18 +method name descriptor (Ljava/lang/Class;JLjava/lang/invoke/VarForm;Z)V flags 4 signature (Ljava/lang/Class<*>;JLjava/lang/invoke/VarForm;Z)V +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleInts$FieldInstanceReadOnly; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleInts$FieldInstanceReadOnly; flags 1 +method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional; +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleInts$FieldInstanceReadWrite +header extends java/lang/invoke/VarHandleInts$FieldInstanceReadOnly nestHost java/lang/invoke/VarHandleInts flags 30 +innerclass innerClass java/lang/invoke/VarHandleInts$FieldInstanceReadWrite outerClass java/lang/invoke/VarHandleInts innerClassName FieldInstanceReadWrite flags 18 +innerclass innerClass java/lang/invoke/VarHandleInts$FieldInstanceReadOnly outerClass java/lang/invoke/VarHandleInts innerClassName FieldInstanceReadOnly flags 8 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleInts$FieldInstanceReadWrite; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleInts$FieldInstanceReadWrite; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleInts$FieldInstanceReadOnly; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleInts$FieldInstanceReadOnly; flags 1041 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleInts$FieldStaticReadOnly +header extends java/lang/invoke/VarHandle nestHost java/lang/invoke/VarHandleInts sealed true permittedSubclasses java/lang/invoke/VarHandleInts$FieldStaticReadWrite flags 20 +innerclass innerClass java/lang/invoke/VarHandleInts$FieldStaticReadOnly outerClass java/lang/invoke/VarHandleInts innerClassName FieldStaticReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19 +innerclass innerClass java/lang/invoke/VarHandleInts$FieldStaticReadWrite outerClass java/lang/invoke/VarHandleInts innerClassName FieldStaticReadWrite flags 18 +method name descriptor (Ljava/lang/Object;JLjava/lang/invoke/VarForm;Z)V flags 4 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleInts$FieldStaticReadOnly; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleInts$FieldStaticReadOnly; flags 1 +method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional; +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleInts$FieldStaticReadWrite +header extends java/lang/invoke/VarHandleInts$FieldStaticReadOnly nestHost java/lang/invoke/VarHandleInts flags 30 +innerclass innerClass java/lang/invoke/VarHandleInts$FieldStaticReadWrite outerClass java/lang/invoke/VarHandleInts innerClassName FieldStaticReadWrite flags 18 +innerclass innerClass java/lang/invoke/VarHandleInts$FieldStaticReadOnly outerClass java/lang/invoke/VarHandleInts innerClassName FieldStaticReadOnly flags 8 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleInts$FieldStaticReadWrite; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleInts$FieldStaticReadWrite; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleInts$FieldStaticReadOnly; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleInts$FieldStaticReadOnly; flags 1041 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleLongs +header extends java/lang/Object nestMembers java/lang/invoke/VarHandleLongs$Array,java/lang/invoke/VarHandleLongs$FieldStaticReadWrite,java/lang/invoke/VarHandleLongs$FieldStaticReadOnly,java/lang/invoke/VarHandleLongs$FieldInstanceReadWrite,java/lang/invoke/VarHandleLongs$FieldInstanceReadOnly flags 30 +innerclass innerClass java/lang/invoke/VarHandleLongs$Array outerClass java/lang/invoke/VarHandleLongs innerClassName Array flags 18 +innerclass innerClass java/lang/invoke/VarHandleLongs$FieldStaticReadWrite outerClass java/lang/invoke/VarHandleLongs innerClassName FieldStaticReadWrite flags 18 +innerclass innerClass java/lang/invoke/VarHandleLongs$FieldStaticReadOnly outerClass java/lang/invoke/VarHandleLongs innerClassName FieldStaticReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandleLongs$FieldInstanceReadWrite outerClass java/lang/invoke/VarHandleLongs innerClassName FieldInstanceReadWrite flags 18 +innerclass innerClass java/lang/invoke/VarHandleLongs$FieldInstanceReadOnly outerClass java/lang/invoke/VarHandleLongs innerClassName FieldInstanceReadOnly flags 8 + +class name java/lang/invoke/VarHandleLongs$Array +header extends java/lang/invoke/VarHandle nestHost java/lang/invoke/VarHandleLongs flags 30 +innerclass innerClass java/lang/invoke/VarHandleLongs$Array outerClass java/lang/invoke/VarHandleLongs innerClassName Array flags 18 +innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleLongs$Array; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleLongs$Array; flags 1 +method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional; +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleLongs$FieldInstanceReadOnly +header extends java/lang/invoke/VarHandle nestHost java/lang/invoke/VarHandleLongs sealed true permittedSubclasses java/lang/invoke/VarHandleLongs$FieldInstanceReadWrite flags 20 +innerclass innerClass java/lang/invoke/VarHandleLongs$FieldInstanceReadOnly outerClass java/lang/invoke/VarHandleLongs innerClassName FieldInstanceReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19 +innerclass innerClass java/lang/invoke/VarHandleLongs$FieldInstanceReadWrite outerClass java/lang/invoke/VarHandleLongs innerClassName FieldInstanceReadWrite flags 18 +method name descriptor (Ljava/lang/Class;JLjava/lang/invoke/VarForm;Z)V flags 4 signature (Ljava/lang/Class<*>;JLjava/lang/invoke/VarForm;Z)V +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleLongs$FieldInstanceReadOnly; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleLongs$FieldInstanceReadOnly; flags 1 +method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional; +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleLongs$FieldInstanceReadWrite +header extends java/lang/invoke/VarHandleLongs$FieldInstanceReadOnly nestHost java/lang/invoke/VarHandleLongs flags 30 +innerclass innerClass java/lang/invoke/VarHandleLongs$FieldInstanceReadWrite outerClass java/lang/invoke/VarHandleLongs innerClassName FieldInstanceReadWrite flags 18 +innerclass innerClass java/lang/invoke/VarHandleLongs$FieldInstanceReadOnly outerClass java/lang/invoke/VarHandleLongs innerClassName FieldInstanceReadOnly flags 8 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleLongs$FieldInstanceReadWrite; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleLongs$FieldInstanceReadWrite; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleLongs$FieldInstanceReadOnly; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleLongs$FieldInstanceReadOnly; flags 1041 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleLongs$FieldStaticReadOnly +header extends java/lang/invoke/VarHandle nestHost java/lang/invoke/VarHandleLongs sealed true permittedSubclasses java/lang/invoke/VarHandleLongs$FieldStaticReadWrite flags 20 +innerclass innerClass java/lang/invoke/VarHandleLongs$FieldStaticReadOnly outerClass java/lang/invoke/VarHandleLongs innerClassName FieldStaticReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19 +innerclass innerClass java/lang/invoke/VarHandleLongs$FieldStaticReadWrite outerClass java/lang/invoke/VarHandleLongs innerClassName FieldStaticReadWrite flags 18 +method name descriptor (Ljava/lang/Object;JLjava/lang/invoke/VarForm;Z)V flags 4 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleLongs$FieldStaticReadOnly; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleLongs$FieldStaticReadOnly; flags 1 +method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional; +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleLongs$FieldStaticReadWrite +header extends java/lang/invoke/VarHandleLongs$FieldStaticReadOnly nestHost java/lang/invoke/VarHandleLongs flags 30 +innerclass innerClass java/lang/invoke/VarHandleLongs$FieldStaticReadWrite outerClass java/lang/invoke/VarHandleLongs innerClassName FieldStaticReadWrite flags 18 +innerclass innerClass java/lang/invoke/VarHandleLongs$FieldStaticReadOnly outerClass java/lang/invoke/VarHandleLongs innerClassName FieldStaticReadOnly flags 8 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleLongs$FieldStaticReadWrite; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleLongs$FieldStaticReadWrite; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleLongs$FieldStaticReadOnly; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleLongs$FieldStaticReadOnly; flags 1041 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleReferences +header extends java/lang/Object nestMembers java/lang/invoke/VarHandleReferences$Array,java/lang/invoke/VarHandleReferences$FieldStaticReadWrite,java/lang/invoke/VarHandleReferences$FieldStaticReadOnly,java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite,java/lang/invoke/VarHandleReferences$FieldInstanceReadOnly flags 30 +innerclass innerClass java/lang/invoke/VarHandleReferences$Array outerClass java/lang/invoke/VarHandleReferences innerClassName Array flags 18 +innerclass innerClass java/lang/invoke/VarHandleReferences$FieldStaticReadWrite outerClass java/lang/invoke/VarHandleReferences innerClassName FieldStaticReadWrite flags 18 +innerclass innerClass java/lang/invoke/VarHandleReferences$FieldStaticReadOnly outerClass java/lang/invoke/VarHandleReferences innerClassName FieldStaticReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite outerClass java/lang/invoke/VarHandleReferences innerClassName FieldInstanceReadWrite flags 18 +innerclass innerClass java/lang/invoke/VarHandleReferences$FieldInstanceReadOnly outerClass java/lang/invoke/VarHandleReferences innerClassName FieldInstanceReadOnly flags 8 + +class name java/lang/invoke/VarHandleReferences$Array +header extends java/lang/invoke/VarHandle nestHost java/lang/invoke/VarHandleReferences flags 30 +innerclass innerClass java/lang/invoke/VarHandleReferences$Array outerClass java/lang/invoke/VarHandleReferences innerClassName Array flags 18 +innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleReferences$Array; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleReferences$Array; flags 1 +method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional; +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleReferences$FieldInstanceReadOnly +header extends java/lang/invoke/VarHandle nestHost java/lang/invoke/VarHandleReferences sealed true permittedSubclasses java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite flags 20 +innerclass innerClass java/lang/invoke/VarHandleReferences$FieldInstanceReadOnly outerClass java/lang/invoke/VarHandleReferences innerClassName FieldInstanceReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19 +innerclass innerClass java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite outerClass java/lang/invoke/VarHandleReferences innerClassName FieldInstanceReadWrite flags 18 +method name descriptor (Ljava/lang/Class;JLjava/lang/Class;Ljava/lang/invoke/VarForm;Z)V flags 4 signature (Ljava/lang/Class<*>;JLjava/lang/Class<*>;Ljava/lang/invoke/VarForm;Z)V +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleReferences$FieldInstanceReadOnly; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleReferences$FieldInstanceReadOnly; flags 1 +method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional; +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite +header extends java/lang/invoke/VarHandleReferences$FieldInstanceReadOnly nestHost java/lang/invoke/VarHandleReferences flags 30 +innerclass innerClass java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite outerClass java/lang/invoke/VarHandleReferences innerClassName FieldInstanceReadWrite flags 18 +innerclass innerClass java/lang/invoke/VarHandleReferences$FieldInstanceReadOnly outerClass java/lang/invoke/VarHandleReferences innerClassName FieldInstanceReadOnly flags 8 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleReferences$FieldInstanceReadWrite; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleReferences$FieldInstanceReadWrite; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleReferences$FieldInstanceReadOnly; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleReferences$FieldInstanceReadOnly; flags 1041 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleReferences$FieldStaticReadOnly +header extends java/lang/invoke/VarHandle nestHost java/lang/invoke/VarHandleReferences sealed true permittedSubclasses java/lang/invoke/VarHandleReferences$FieldStaticReadWrite flags 20 +innerclass innerClass java/lang/invoke/VarHandleReferences$FieldStaticReadOnly outerClass java/lang/invoke/VarHandleReferences innerClassName FieldStaticReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19 +innerclass innerClass java/lang/invoke/VarHandleReferences$FieldStaticReadWrite outerClass java/lang/invoke/VarHandleReferences innerClassName FieldStaticReadWrite flags 18 +method name descriptor (Ljava/lang/Object;JLjava/lang/Class;Ljava/lang/invoke/VarForm;Z)V flags 4 signature (Ljava/lang/Object;JLjava/lang/Class<*>;Ljava/lang/invoke/VarForm;Z)V +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleReferences$FieldStaticReadOnly; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleReferences$FieldStaticReadOnly; flags 1 +method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional; +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleReferences$FieldStaticReadWrite +header extends java/lang/invoke/VarHandleReferences$FieldStaticReadOnly nestHost java/lang/invoke/VarHandleReferences flags 30 +innerclass innerClass java/lang/invoke/VarHandleReferences$FieldStaticReadWrite outerClass java/lang/invoke/VarHandleReferences innerClassName FieldStaticReadWrite flags 18 +innerclass innerClass java/lang/invoke/VarHandleReferences$FieldStaticReadOnly outerClass java/lang/invoke/VarHandleReferences innerClassName FieldStaticReadOnly flags 8 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleReferences$FieldStaticReadWrite; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleReferences$FieldStaticReadWrite; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleReferences$FieldStaticReadOnly; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleReferences$FieldStaticReadOnly; flags 1041 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleSegmentAsBytes +header extends java/lang/invoke/VarHandleSegmentViewBase flags 30 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleSegmentAsBytes; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleSegmentAsBytes; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleSegmentAsChars +header extends java/lang/invoke/VarHandleSegmentViewBase flags 30 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleSegmentAsChars; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleSegmentAsChars; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleSegmentAsDoubles +header extends java/lang/invoke/VarHandleSegmentViewBase flags 30 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleSegmentAsDoubles; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleSegmentAsDoubles; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleSegmentAsFloats +header extends java/lang/invoke/VarHandleSegmentViewBase flags 30 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleSegmentAsFloats; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleSegmentAsFloats; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleSegmentAsInts +header extends java/lang/invoke/VarHandleSegmentViewBase flags 30 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleSegmentAsInts; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleSegmentAsInts; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleSegmentAsLongs +header extends java/lang/invoke/VarHandleSegmentViewBase flags 30 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleSegmentAsLongs; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleSegmentAsLongs; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleSegmentAsShorts +header extends java/lang/invoke/VarHandleSegmentViewBase flags 30 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleSegmentAsShorts; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleSegmentAsShorts; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleSegmentViewBase +header extends java/lang/invoke/VarHandle sealed true permittedSubclasses java/lang/invoke/VarHandleSegmentAsBytes,java/lang/invoke/VarHandleSegmentAsChars,java/lang/invoke/VarHandleSegmentAsDoubles,java/lang/invoke/VarHandleSegmentAsFloats,java/lang/invoke/VarHandleSegmentAsInts,java/lang/invoke/VarHandleSegmentAsLongs,java/lang/invoke/VarHandleSegmentAsShorts flags 420 + +class name java/lang/invoke/VarHandleShorts +header extends java/lang/Object nestMembers java/lang/invoke/VarHandleShorts$Array,java/lang/invoke/VarHandleShorts$FieldStaticReadWrite,java/lang/invoke/VarHandleShorts$FieldStaticReadOnly,java/lang/invoke/VarHandleShorts$FieldInstanceReadWrite,java/lang/invoke/VarHandleShorts$FieldInstanceReadOnly flags 30 +innerclass innerClass java/lang/invoke/VarHandleShorts$Array outerClass java/lang/invoke/VarHandleShorts innerClassName Array flags 18 +innerclass innerClass java/lang/invoke/VarHandleShorts$FieldStaticReadWrite outerClass java/lang/invoke/VarHandleShorts innerClassName FieldStaticReadWrite flags 18 +innerclass innerClass java/lang/invoke/VarHandleShorts$FieldStaticReadOnly outerClass java/lang/invoke/VarHandleShorts innerClassName FieldStaticReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandleShorts$FieldInstanceReadWrite outerClass java/lang/invoke/VarHandleShorts innerClassName FieldInstanceReadWrite flags 18 +innerclass innerClass java/lang/invoke/VarHandleShorts$FieldInstanceReadOnly outerClass java/lang/invoke/VarHandleShorts innerClassName FieldInstanceReadOnly flags 8 + +class name java/lang/invoke/VarHandleShorts$Array +header extends java/lang/invoke/VarHandle nestHost java/lang/invoke/VarHandleShorts flags 30 +innerclass innerClass java/lang/invoke/VarHandleShorts$Array outerClass java/lang/invoke/VarHandleShorts innerClassName Array flags 18 +innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleShorts$Array; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleShorts$Array; flags 1 +method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional; +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleShorts$FieldInstanceReadOnly +header extends java/lang/invoke/VarHandle nestHost java/lang/invoke/VarHandleShorts sealed true permittedSubclasses java/lang/invoke/VarHandleShorts$FieldInstanceReadWrite flags 20 +innerclass innerClass java/lang/invoke/VarHandleShorts$FieldInstanceReadOnly outerClass java/lang/invoke/VarHandleShorts innerClassName FieldInstanceReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19 +innerclass innerClass java/lang/invoke/VarHandleShorts$FieldInstanceReadWrite outerClass java/lang/invoke/VarHandleShorts innerClassName FieldInstanceReadWrite flags 18 +method name descriptor (Ljava/lang/Class;JLjava/lang/invoke/VarForm;Z)V flags 4 signature (Ljava/lang/Class<*>;JLjava/lang/invoke/VarForm;Z)V +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleShorts$FieldInstanceReadOnly; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleShorts$FieldInstanceReadOnly; flags 1 +method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional; +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleShorts$FieldInstanceReadWrite +header extends java/lang/invoke/VarHandleShorts$FieldInstanceReadOnly nestHost java/lang/invoke/VarHandleShorts flags 30 +innerclass innerClass java/lang/invoke/VarHandleShorts$FieldInstanceReadWrite outerClass java/lang/invoke/VarHandleShorts innerClassName FieldInstanceReadWrite flags 18 +innerclass innerClass java/lang/invoke/VarHandleShorts$FieldInstanceReadOnly outerClass java/lang/invoke/VarHandleShorts innerClassName FieldInstanceReadOnly flags 8 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleShorts$FieldInstanceReadWrite; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleShorts$FieldInstanceReadWrite; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleShorts$FieldInstanceReadOnly; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleShorts$FieldInstanceReadOnly; flags 1041 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleShorts$FieldStaticReadOnly +header extends java/lang/invoke/VarHandle nestHost java/lang/invoke/VarHandleShorts sealed true permittedSubclasses java/lang/invoke/VarHandleShorts$FieldStaticReadWrite flags 20 +innerclass innerClass java/lang/invoke/VarHandleShorts$FieldStaticReadOnly outerClass java/lang/invoke/VarHandleShorts innerClassName FieldStaticReadOnly flags 8 +innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19 +innerclass innerClass java/lang/invoke/VarHandleShorts$FieldStaticReadWrite outerClass java/lang/invoke/VarHandleShorts innerClassName FieldStaticReadWrite flags 18 +method name descriptor (Ljava/lang/Object;JLjava/lang/invoke/VarForm;Z)V flags 4 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleShorts$FieldStaticReadOnly; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleShorts$FieldStaticReadOnly; flags 1 +method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional; +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/invoke/VarHandleShorts$FieldStaticReadWrite +header extends java/lang/invoke/VarHandleShorts$FieldStaticReadOnly nestHost java/lang/invoke/VarHandleShorts flags 30 +innerclass innerClass java/lang/invoke/VarHandleShorts$FieldStaticReadWrite outerClass java/lang/invoke/VarHandleShorts innerClassName FieldStaticReadWrite flags 18 +innerclass innerClass java/lang/invoke/VarHandleShorts$FieldStaticReadOnly outerClass java/lang/invoke/VarHandleShorts innerClassName FieldStaticReadOnly flags 8 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleShorts$FieldStaticReadWrite; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleShorts$FieldStaticReadWrite; flags 1 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandleShorts$FieldStaticReadOnly; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandleShorts$FieldStaticReadOnly; flags 1041 +method name withInvokeBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 +method name withInvokeExactBehavior descriptor ()Ljava/lang/invoke/VarHandle; flags 1041 + +class name java/lang/ref/FinalReference +header extends java/lang/ref/Reference sealed true permittedSubclasses java/lang/ref/Finalizer flags 20 signature Ljava/lang/ref/Reference; +method name descriptor (Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V flags 1 signature (TT;Ljava/lang/ref/ReferenceQueue<-TT;>;)V +method name get descriptor ()Ljava/lang/Object; flags 1 signature ()TT; +method name clear descriptor ()V flags 1 +method name enqueue descriptor ()Z flags 1 + +class name java/lang/ref/Finalizer +header extends java/lang/ref/FinalReference flags 30 signature Ljava/lang/ref/FinalReference; class name java/lang/ref/Reference -header extends java/lang/Object sealed true flags 421 signature Ljava/lang/Object; +header extends java/lang/Object sealed true permittedSubclasses java/lang/ref/PhantomReference,java/lang/ref/SoftReference,java/lang/ref/WeakReference,java/lang/ref/FinalReference flags 421 signature Ljava/lang/Object; class name java/lang/ref/ReferenceQueue -method name remove descriptor (J)Ljava/lang/ref/Reference; method name remove descriptor (J)Ljava/lang/ref/Reference; thrownTypes java/lang/InterruptedException flags 1 signature (J)Ljava/lang/ref/Reference<+TT;>; -class name java/lang/reflect/AccessibleObject -header extends java/lang/Object implements java/lang/reflect/AnnotatedElement flags 21 classAnnotations @Ljdk/Profile+Annotation;(value=I1) - -class name java/lang/reflect/AnnotatedElement -header extends java/lang/Object flags 601 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/lang/reflect/Executable -header extends java/lang/reflect/AccessibleObject implements java/lang/reflect/Member,java/lang/reflect/GenericDeclaration sealed true flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/lang/reflect/InaccessibleObjectException -header extends java/lang/RuntimeException flags 21 - class name java/math/BigDecimal field name TWO descriptor Ljava/math/BigDecimal; flags 19 class name java/math/BigInteger method name parallelMultiply descriptor (Ljava/math/BigInteger;)Ljava/math/BigInteger; flags 1 -class name java/net/DatagramSocket -header extends java/lang/Object implements java/io/Closeable flags 21 classAnnotations @Ljdk/Profile+Annotation;(value=I1) - class name java/net/InetAddress -header extends java/lang/Object implements java/io/Serializable sealed true flags 21 +header extends java/lang/Object implements java/io/Serializable sealed true permittedSubclasses java/net/Inet4Address,java/net/Inet6Address flags 21 innerclass innerClass java/net/spi/InetAddressResolver$LookupPolicy outerClass java/net/spi/InetAddressResolver innerClassName LookupPolicy flags 19 innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 @@ -966,139 +1934,1461 @@ class name java/net/SocketException method name descriptor (Ljava/lang/String;Ljava/lang/Throwable;)V flags 1 method name descriptor (Ljava/lang/Throwable;)V flags 1 -class name java/net/SocketImpl -header extends java/lang/Object implements java/net/SocketOptions flags 421 - -class name java/net/spi/InetAddressResolverProvider$Configuration -header extends java/lang/Object nestHost java/net/spi/InetAddressResolverProvider sealed true flags 601 -innerclass innerClass java/net/spi/InetAddressResolverProvider$Configuration outerClass java/net/spi/InetAddressResolverProvider innerClassName Configuration flags 609 - -class name java/net/spi/URLStreamHandlerProvider -header extends java/lang/Object implements java/net/URLStreamHandlerFactory flags 421 - class name java/nio/Buffer -header extends java/lang/Object sealed true flags 421 +header extends java/lang/Object sealed true permittedSubclasses java/nio/ByteBuffer,java/nio/CharBuffer,java/nio/DoubleBuffer,java/nio/FloatBuffer,java/nio/IntBuffer,java/nio/LongBuffer,java/nio/ShortBuffer flags 421 class name java/nio/ByteBuffer -header extends java/nio/Buffer implements java/lang/Comparable sealed true flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable; +header extends java/nio/Buffer implements java/lang/Comparable sealed true permittedSubclasses java/nio/HeapByteBuffer,java/nio/MappedByteBuffer flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable; + +class name java/nio/ByteBufferAsCharBufferB +header extends java/nio/CharBuffer sealed true permittedSubclasses java/nio/ByteBufferAsCharBufferRB flags 20 +field name bb descriptor Ljava/nio/ByteBuffer; flags 14 +method name slice descriptor ()Ljava/nio/CharBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/CharBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/CharBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/CharBuffer; flags 1 +method name byteOffset descriptor (J)J flags 4 +method name get descriptor ()C flags 1 +method name get descriptor (I)C flags 1 +method name put descriptor (C)Ljava/nio/CharBuffer; flags 1 +method name put descriptor (IC)Ljava/nio/CharBuffer; flags 1 +method name compact descriptor ()Ljava/nio/CharBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name toString descriptor (II)Ljava/lang/String; flags 1 +method name subSequence descriptor (II)Ljava/nio/CharBuffer; flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name subSequence descriptor (II)Ljava/lang/CharSequence; flags 1041 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/ByteBufferAsCharBufferL +header extends java/nio/CharBuffer sealed true permittedSubclasses java/nio/ByteBufferAsCharBufferRL flags 20 +field name bb descriptor Ljava/nio/ByteBuffer; flags 14 +method name slice descriptor ()Ljava/nio/CharBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/CharBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/CharBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/CharBuffer; flags 1 +method name byteOffset descriptor (J)J flags 4 +method name get descriptor ()C flags 1 +method name get descriptor (I)C flags 1 +method name put descriptor (C)Ljava/nio/CharBuffer; flags 1 +method name put descriptor (IC)Ljava/nio/CharBuffer; flags 1 +method name compact descriptor ()Ljava/nio/CharBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name toString descriptor (II)Ljava/lang/String; flags 1 +method name subSequence descriptor (II)Ljava/nio/CharBuffer; flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name subSequence descriptor (II)Ljava/lang/CharSequence; flags 1041 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/ByteBufferAsCharBufferRB +header extends java/nio/ByteBufferAsCharBufferB flags 30 +method name slice descriptor ()Ljava/nio/CharBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/CharBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/CharBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/CharBuffer; flags 1 +method name put descriptor (C)Ljava/nio/CharBuffer; flags 1 +method name put descriptor (IC)Ljava/nio/CharBuffer; flags 1 +method name compact descriptor ()Ljava/nio/CharBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name toString descriptor (II)Ljava/lang/String; flags 1 +method name subSequence descriptor (II)Ljava/nio/CharBuffer; flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name subSequence descriptor (II)Ljava/lang/CharSequence; flags 1041 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/ByteBufferAsCharBufferRL +header extends java/nio/ByteBufferAsCharBufferL flags 30 +method name slice descriptor ()Ljava/nio/CharBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/CharBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/CharBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/CharBuffer; flags 1 +method name put descriptor (C)Ljava/nio/CharBuffer; flags 1 +method name put descriptor (IC)Ljava/nio/CharBuffer; flags 1 +method name compact descriptor ()Ljava/nio/CharBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name toString descriptor (II)Ljava/lang/String; flags 1 +method name subSequence descriptor (II)Ljava/nio/CharBuffer; flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name subSequence descriptor (II)Ljava/lang/CharSequence; flags 1041 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/ByteBufferAsDoubleBufferB +header extends java/nio/DoubleBuffer sealed true permittedSubclasses java/nio/ByteBufferAsDoubleBufferRB flags 20 +field name bb descriptor Ljava/nio/ByteBuffer; flags 14 +method name slice descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/DoubleBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name byteOffset descriptor (J)J flags 4 +method name get descriptor ()D flags 1 +method name get descriptor (I)D flags 1 +method name put descriptor (D)Ljava/nio/DoubleBuffer; flags 1 +method name put descriptor (ID)Ljava/nio/DoubleBuffer; flags 1 +method name compact descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/ByteBufferAsDoubleBufferL +header extends java/nio/DoubleBuffer sealed true permittedSubclasses java/nio/ByteBufferAsDoubleBufferRL flags 20 +field name bb descriptor Ljava/nio/ByteBuffer; flags 14 +method name slice descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/DoubleBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name byteOffset descriptor (J)J flags 4 +method name get descriptor ()D flags 1 +method name get descriptor (I)D flags 1 +method name put descriptor (D)Ljava/nio/DoubleBuffer; flags 1 +method name put descriptor (ID)Ljava/nio/DoubleBuffer; flags 1 +method name compact descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/ByteBufferAsDoubleBufferRB +header extends java/nio/ByteBufferAsDoubleBufferB flags 30 +method name slice descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/DoubleBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name put descriptor (D)Ljava/nio/DoubleBuffer; flags 1 +method name put descriptor (ID)Ljava/nio/DoubleBuffer; flags 1 +method name compact descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/ByteBufferAsDoubleBufferRL +header extends java/nio/ByteBufferAsDoubleBufferL flags 30 +method name slice descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/DoubleBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name put descriptor (D)Ljava/nio/DoubleBuffer; flags 1 +method name put descriptor (ID)Ljava/nio/DoubleBuffer; flags 1 +method name compact descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/ByteBufferAsFloatBufferB +header extends java/nio/FloatBuffer sealed true permittedSubclasses java/nio/ByteBufferAsFloatBufferRB flags 20 +field name bb descriptor Ljava/nio/ByteBuffer; flags 14 +method name slice descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/FloatBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name byteOffset descriptor (J)J flags 4 +method name get descriptor ()F flags 1 +method name get descriptor (I)F flags 1 +method name put descriptor (F)Ljava/nio/FloatBuffer; flags 1 +method name put descriptor (IF)Ljava/nio/FloatBuffer; flags 1 +method name compact descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/ByteBufferAsFloatBufferL +header extends java/nio/FloatBuffer sealed true permittedSubclasses java/nio/ByteBufferAsFloatBufferRL flags 20 +field name bb descriptor Ljava/nio/ByteBuffer; flags 14 +method name slice descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/FloatBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name byteOffset descriptor (J)J flags 4 +method name get descriptor ()F flags 1 +method name get descriptor (I)F flags 1 +method name put descriptor (F)Ljava/nio/FloatBuffer; flags 1 +method name put descriptor (IF)Ljava/nio/FloatBuffer; flags 1 +method name compact descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/ByteBufferAsFloatBufferRB +header extends java/nio/ByteBufferAsFloatBufferB flags 30 +method name slice descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/FloatBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name put descriptor (F)Ljava/nio/FloatBuffer; flags 1 +method name put descriptor (IF)Ljava/nio/FloatBuffer; flags 1 +method name compact descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/ByteBufferAsFloatBufferRL +header extends java/nio/ByteBufferAsFloatBufferL flags 30 +method name slice descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/FloatBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name put descriptor (F)Ljava/nio/FloatBuffer; flags 1 +method name put descriptor (IF)Ljava/nio/FloatBuffer; flags 1 +method name compact descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/ByteBufferAsIntBufferB +header extends java/nio/IntBuffer sealed true permittedSubclasses java/nio/ByteBufferAsIntBufferRB flags 20 +field name bb descriptor Ljava/nio/ByteBuffer; flags 14 +method name slice descriptor ()Ljava/nio/IntBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/IntBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/IntBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/IntBuffer; flags 1 +method name byteOffset descriptor (J)J flags 4 +method name get descriptor ()I flags 1 +method name get descriptor (I)I flags 1 +method name put descriptor (I)Ljava/nio/IntBuffer; flags 1 +method name put descriptor (II)Ljava/nio/IntBuffer; flags 1 +method name compact descriptor ()Ljava/nio/IntBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/ByteBufferAsIntBufferL +header extends java/nio/IntBuffer sealed true permittedSubclasses java/nio/ByteBufferAsIntBufferRL flags 20 +field name bb descriptor Ljava/nio/ByteBuffer; flags 14 +method name slice descriptor ()Ljava/nio/IntBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/IntBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/IntBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/IntBuffer; flags 1 +method name byteOffset descriptor (J)J flags 4 +method name get descriptor ()I flags 1 +method name get descriptor (I)I flags 1 +method name put descriptor (I)Ljava/nio/IntBuffer; flags 1 +method name put descriptor (II)Ljava/nio/IntBuffer; flags 1 +method name compact descriptor ()Ljava/nio/IntBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/ByteBufferAsIntBufferRB +header extends java/nio/ByteBufferAsIntBufferB flags 30 +method name slice descriptor ()Ljava/nio/IntBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/IntBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/IntBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/IntBuffer; flags 1 +method name put descriptor (I)Ljava/nio/IntBuffer; flags 1 +method name put descriptor (II)Ljava/nio/IntBuffer; flags 1 +method name compact descriptor ()Ljava/nio/IntBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/ByteBufferAsIntBufferRL +header extends java/nio/ByteBufferAsIntBufferL flags 30 +method name slice descriptor ()Ljava/nio/IntBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/IntBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/IntBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/IntBuffer; flags 1 +method name put descriptor (I)Ljava/nio/IntBuffer; flags 1 +method name put descriptor (II)Ljava/nio/IntBuffer; flags 1 +method name compact descriptor ()Ljava/nio/IntBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/ByteBufferAsLongBufferB +header extends java/nio/LongBuffer sealed true permittedSubclasses java/nio/ByteBufferAsLongBufferRB flags 20 +field name bb descriptor Ljava/nio/ByteBuffer; flags 14 +method name slice descriptor ()Ljava/nio/LongBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/LongBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/LongBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/LongBuffer; flags 1 +method name byteOffset descriptor (J)J flags 4 +method name get descriptor ()J flags 1 +method name get descriptor (I)J flags 1 +method name put descriptor (J)Ljava/nio/LongBuffer; flags 1 +method name put descriptor (IJ)Ljava/nio/LongBuffer; flags 1 +method name compact descriptor ()Ljava/nio/LongBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/ByteBufferAsLongBufferL +header extends java/nio/LongBuffer sealed true permittedSubclasses java/nio/ByteBufferAsLongBufferRL flags 20 +field name bb descriptor Ljava/nio/ByteBuffer; flags 14 +method name slice descriptor ()Ljava/nio/LongBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/LongBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/LongBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/LongBuffer; flags 1 +method name byteOffset descriptor (J)J flags 4 +method name get descriptor ()J flags 1 +method name get descriptor (I)J flags 1 +method name put descriptor (J)Ljava/nio/LongBuffer; flags 1 +method name put descriptor (IJ)Ljava/nio/LongBuffer; flags 1 +method name compact descriptor ()Ljava/nio/LongBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/ByteBufferAsLongBufferRB +header extends java/nio/ByteBufferAsLongBufferB flags 30 +method name slice descriptor ()Ljava/nio/LongBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/LongBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/LongBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/LongBuffer; flags 1 +method name put descriptor (J)Ljava/nio/LongBuffer; flags 1 +method name put descriptor (IJ)Ljava/nio/LongBuffer; flags 1 +method name compact descriptor ()Ljava/nio/LongBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/ByteBufferAsLongBufferRL +header extends java/nio/ByteBufferAsLongBufferL flags 30 +method name slice descriptor ()Ljava/nio/LongBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/LongBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/LongBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/LongBuffer; flags 1 +method name put descriptor (J)Ljava/nio/LongBuffer; flags 1 +method name put descriptor (IJ)Ljava/nio/LongBuffer; flags 1 +method name compact descriptor ()Ljava/nio/LongBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/ByteBufferAsShortBufferB +header extends java/nio/ShortBuffer sealed true permittedSubclasses java/nio/ByteBufferAsShortBufferRB flags 20 +field name bb descriptor Ljava/nio/ByteBuffer; flags 14 +method name slice descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/ShortBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name byteOffset descriptor (J)J flags 4 +method name get descriptor ()S flags 1 +method name get descriptor (I)S flags 1 +method name put descriptor (S)Ljava/nio/ShortBuffer; flags 1 +method name put descriptor (IS)Ljava/nio/ShortBuffer; flags 1 +method name compact descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/ByteBufferAsShortBufferL +header extends java/nio/ShortBuffer sealed true permittedSubclasses java/nio/ByteBufferAsShortBufferRL flags 20 +field name bb descriptor Ljava/nio/ByteBuffer; flags 14 +method name slice descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/ShortBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name byteOffset descriptor (J)J flags 4 +method name get descriptor ()S flags 1 +method name get descriptor (I)S flags 1 +method name put descriptor (S)Ljava/nio/ShortBuffer; flags 1 +method name put descriptor (IS)Ljava/nio/ShortBuffer; flags 1 +method name compact descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/ByteBufferAsShortBufferRB +header extends java/nio/ByteBufferAsShortBufferB flags 30 +method name slice descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/ShortBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name put descriptor (S)Ljava/nio/ShortBuffer; flags 1 +method name put descriptor (IS)Ljava/nio/ShortBuffer; flags 1 +method name compact descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/ByteBufferAsShortBufferRL +header extends java/nio/ByteBufferAsShortBufferL flags 30 +method name slice descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/ShortBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name put descriptor (S)Ljava/nio/ShortBuffer; flags 1 +method name put descriptor (IS)Ljava/nio/ShortBuffer; flags 1 +method name compact descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 class name java/nio/CharBuffer -header extends java/nio/Buffer implements java/lang/Comparable,java/lang/Appendable,java/lang/CharSequence,java/lang/Readable sealed true flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable;Ljava/lang/Appendable;Ljava/lang/CharSequence;Ljava/lang/Readable; +header extends java/nio/Buffer implements java/lang/Comparable,java/lang/Appendable,java/lang/CharSequence,java/lang/Readable sealed true permittedSubclasses java/nio/StringCharBuffer,java/nio/HeapCharBuffer,java/nio/DirectCharBufferS,java/nio/DirectCharBufferU,java/nio/ByteBufferAsCharBufferB,java/nio/ByteBufferAsCharBufferL flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable;Ljava/lang/Appendable;Ljava/lang/CharSequence;Ljava/lang/Readable; innerclass innerClass java/util/Spliterator$OfInt outerClass java/util/Spliterator innerClassName OfInt flags 609 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +class name java/nio/DirectByteBuffer +header extends java/nio/MappedByteBuffer implements sun/nio/ch/DirectBuffer sealed true permittedSubclasses java/nio/DirectByteBufferR flags 20 +field name UNALIGNED descriptor Z flags 1c +method name attachment descriptor ()Ljava/lang/Object; flags 1 +method name cleaner descriptor ()Ljdk/internal/ref/Cleaner; flags 1 +method name descriptor (IJLjava/io/FileDescriptor;Ljava/lang/Runnable;ZLjava/lang/foreign/MemorySegment;)V flags 4 +method name slice descriptor ()Ljava/nio/MappedByteBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/MappedByteBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/MappedByteBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/ByteBuffer; flags 1 +method name address descriptor ()J flags 1 +method name get descriptor ()B flags 1 +method name get descriptor (I)B flags 1 +method name put descriptor (B)Ljava/nio/ByteBuffer; flags 1 +method name put descriptor (IB)Ljava/nio/ByteBuffer; flags 1 +method name compact descriptor ()Ljava/nio/MappedByteBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name getChar descriptor ()C flags 1 +method name getChar descriptor (I)C flags 1 +method name putChar descriptor (C)Ljava/nio/ByteBuffer; flags 1 +method name putChar descriptor (IC)Ljava/nio/ByteBuffer; flags 1 +method name asCharBuffer descriptor ()Ljava/nio/CharBuffer; flags 1 +method name getShort descriptor ()S flags 1 +method name getShort descriptor (I)S flags 1 +method name putShort descriptor (S)Ljava/nio/ByteBuffer; flags 1 +method name putShort descriptor (IS)Ljava/nio/ByteBuffer; flags 1 +method name asShortBuffer descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name getInt descriptor ()I flags 1 +method name getInt descriptor (I)I flags 1 +method name putInt descriptor (I)Ljava/nio/ByteBuffer; flags 1 +method name putInt descriptor (II)Ljava/nio/ByteBuffer; flags 1 +method name asIntBuffer descriptor ()Ljava/nio/IntBuffer; flags 1 +method name getLong descriptor ()J flags 1 +method name getLong descriptor (I)J flags 1 +method name putLong descriptor (J)Ljava/nio/ByteBuffer; flags 1 +method name putLong descriptor (IJ)Ljava/nio/ByteBuffer; flags 1 +method name asLongBuffer descriptor ()Ljava/nio/LongBuffer; flags 1 +method name getFloat descriptor ()F flags 1 +method name getFloat descriptor (I)F flags 1 +method name putFloat descriptor (F)Ljava/nio/ByteBuffer; flags 1 +method name putFloat descriptor (IF)Ljava/nio/ByteBuffer; flags 1 +method name asFloatBuffer descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name getDouble descriptor ()D flags 1 +method name getDouble descriptor (I)D flags 1 +method name putDouble descriptor (D)Ljava/nio/ByteBuffer; flags 1 +method name putDouble descriptor (ID)Ljava/nio/ByteBuffer; flags 1 +method name asDoubleBuffer descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name compact descriptor ()Ljava/nio/ByteBuffer; flags 1041 +method name duplicate descriptor ()Ljava/nio/ByteBuffer; flags 1041 +method name slice descriptor (II)Ljava/nio/ByteBuffer; flags 1041 +method name slice descriptor ()Ljava/nio/ByteBuffer; flags 1041 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/DirectByteBufferR +header extends java/nio/DirectByteBuffer implements sun/nio/ch/DirectBuffer flags 30 +method name descriptor (IJLjava/io/FileDescriptor;Ljava/lang/Runnable;ZLjava/lang/foreign/MemorySegment;)V flags 4 +method name slice descriptor ()Ljava/nio/MappedByteBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/MappedByteBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/MappedByteBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/ByteBuffer; flags 1 +method name put descriptor (B)Ljava/nio/ByteBuffer; flags 1 +method name put descriptor (IB)Ljava/nio/ByteBuffer; flags 1 +method name compact descriptor ()Ljava/nio/MappedByteBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name putChar descriptor (C)Ljava/nio/ByteBuffer; flags 1 +method name putChar descriptor (IC)Ljava/nio/ByteBuffer; flags 1 +method name asCharBuffer descriptor ()Ljava/nio/CharBuffer; flags 1 +method name putShort descriptor (S)Ljava/nio/ByteBuffer; flags 1 +method name putShort descriptor (IS)Ljava/nio/ByteBuffer; flags 1 +method name asShortBuffer descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name putInt descriptor (I)Ljava/nio/ByteBuffer; flags 1 +method name putInt descriptor (II)Ljava/nio/ByteBuffer; flags 1 +method name asIntBuffer descriptor ()Ljava/nio/IntBuffer; flags 1 +method name putLong descriptor (J)Ljava/nio/ByteBuffer; flags 1 +method name putLong descriptor (IJ)Ljava/nio/ByteBuffer; flags 1 +method name asLongBuffer descriptor ()Ljava/nio/LongBuffer; flags 1 +method name putFloat descriptor (F)Ljava/nio/ByteBuffer; flags 1 +method name putFloat descriptor (IF)Ljava/nio/ByteBuffer; flags 1 +method name asFloatBuffer descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name putDouble descriptor (D)Ljava/nio/ByteBuffer; flags 1 +method name putDouble descriptor (ID)Ljava/nio/ByteBuffer; flags 1 +method name asDoubleBuffer descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name compact descriptor ()Ljava/nio/ByteBuffer; flags 1041 +method name duplicate descriptor ()Ljava/nio/ByteBuffer; flags 1041 +method name slice descriptor (II)Ljava/nio/ByteBuffer; flags 1041 +method name slice descriptor ()Ljava/nio/ByteBuffer; flags 1041 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/DirectCharBufferRS +header extends java/nio/DirectCharBufferS implements sun/nio/ch/DirectBuffer flags 30 +method name slice descriptor ()Ljava/nio/CharBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/CharBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/CharBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/CharBuffer; flags 1 +method name put descriptor (C)Ljava/nio/CharBuffer; flags 1 +method name put descriptor (IC)Ljava/nio/CharBuffer; flags 1 +method name compact descriptor ()Ljava/nio/CharBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name toString descriptor (II)Ljava/lang/String; flags 1 +method name subSequence descriptor (II)Ljava/nio/CharBuffer; flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name subSequence descriptor (II)Ljava/lang/CharSequence; flags 1041 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/DirectCharBufferRU +header extends java/nio/DirectCharBufferU implements sun/nio/ch/DirectBuffer flags 30 +method name slice descriptor ()Ljava/nio/CharBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/CharBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/CharBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/CharBuffer; flags 1 +method name put descriptor (C)Ljava/nio/CharBuffer; flags 1 +method name put descriptor (IC)Ljava/nio/CharBuffer; flags 1 +method name compact descriptor ()Ljava/nio/CharBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name toString descriptor (II)Ljava/lang/String; flags 1 +method name subSequence descriptor (II)Ljava/nio/CharBuffer; flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name subSequence descriptor (II)Ljava/lang/CharSequence; flags 1041 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/DirectCharBufferS +header extends java/nio/CharBuffer implements sun/nio/ch/DirectBuffer sealed true permittedSubclasses java/nio/DirectCharBufferRS flags 20 +field name UNALIGNED descriptor Z flags 1c +method name attachment descriptor ()Ljava/lang/Object; flags 1 +method name cleaner descriptor ()Ljdk/internal/ref/Cleaner; flags 1 +method name slice descriptor ()Ljava/nio/CharBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/CharBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/CharBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/CharBuffer; flags 1 +method name address descriptor ()J flags 1 +method name get descriptor ()C flags 1 +method name get descriptor (I)C flags 1 +method name put descriptor (C)Ljava/nio/CharBuffer; flags 1 +method name put descriptor (IC)Ljava/nio/CharBuffer; flags 1 +method name compact descriptor ()Ljava/nio/CharBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name toString descriptor (II)Ljava/lang/String; flags 1 +method name subSequence descriptor (II)Ljava/nio/CharBuffer; flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name subSequence descriptor (II)Ljava/lang/CharSequence; flags 1041 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/DirectCharBufferU +header extends java/nio/CharBuffer implements sun/nio/ch/DirectBuffer sealed true permittedSubclasses java/nio/DirectCharBufferRU flags 20 +field name UNALIGNED descriptor Z flags 1c +method name attachment descriptor ()Ljava/lang/Object; flags 1 +method name cleaner descriptor ()Ljdk/internal/ref/Cleaner; flags 1 +method name slice descriptor ()Ljava/nio/CharBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/CharBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/CharBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/CharBuffer; flags 1 +method name address descriptor ()J flags 1 +method name get descriptor ()C flags 1 +method name get descriptor (I)C flags 1 +method name put descriptor (C)Ljava/nio/CharBuffer; flags 1 +method name put descriptor (IC)Ljava/nio/CharBuffer; flags 1 +method name compact descriptor ()Ljava/nio/CharBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name toString descriptor (II)Ljava/lang/String; flags 1 +method name subSequence descriptor (II)Ljava/nio/CharBuffer; flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name subSequence descriptor (II)Ljava/lang/CharSequence; flags 1041 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/DirectDoubleBufferRS +header extends java/nio/DirectDoubleBufferS implements sun/nio/ch/DirectBuffer flags 30 +method name slice descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/DoubleBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name put descriptor (D)Ljava/nio/DoubleBuffer; flags 1 +method name put descriptor (ID)Ljava/nio/DoubleBuffer; flags 1 +method name compact descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/DirectDoubleBufferRU +header extends java/nio/DirectDoubleBufferU implements sun/nio/ch/DirectBuffer flags 30 +method name slice descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/DoubleBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name put descriptor (D)Ljava/nio/DoubleBuffer; flags 1 +method name put descriptor (ID)Ljava/nio/DoubleBuffer; flags 1 +method name compact descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/DirectDoubleBufferS +header extends java/nio/DoubleBuffer implements sun/nio/ch/DirectBuffer sealed true permittedSubclasses java/nio/DirectDoubleBufferRS flags 20 +field name UNALIGNED descriptor Z flags 1c +method name attachment descriptor ()Ljava/lang/Object; flags 1 +method name cleaner descriptor ()Ljdk/internal/ref/Cleaner; flags 1 +method name slice descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/DoubleBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name address descriptor ()J flags 1 +method name get descriptor ()D flags 1 +method name get descriptor (I)D flags 1 +method name put descriptor (D)Ljava/nio/DoubleBuffer; flags 1 +method name put descriptor (ID)Ljava/nio/DoubleBuffer; flags 1 +method name compact descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/DirectDoubleBufferU +header extends java/nio/DoubleBuffer implements sun/nio/ch/DirectBuffer sealed true permittedSubclasses java/nio/DirectDoubleBufferRU flags 20 +field name UNALIGNED descriptor Z flags 1c +method name attachment descriptor ()Ljava/lang/Object; flags 1 +method name cleaner descriptor ()Ljdk/internal/ref/Cleaner; flags 1 +method name slice descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/DoubleBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name address descriptor ()J flags 1 +method name get descriptor ()D flags 1 +method name get descriptor (I)D flags 1 +method name put descriptor (D)Ljava/nio/DoubleBuffer; flags 1 +method name put descriptor (ID)Ljava/nio/DoubleBuffer; flags 1 +method name compact descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/DirectFloatBufferRS +header extends java/nio/DirectFloatBufferS implements sun/nio/ch/DirectBuffer flags 30 +method name slice descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/FloatBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name put descriptor (F)Ljava/nio/FloatBuffer; flags 1 +method name put descriptor (IF)Ljava/nio/FloatBuffer; flags 1 +method name compact descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/DirectFloatBufferRU +header extends java/nio/DirectFloatBufferU implements sun/nio/ch/DirectBuffer flags 30 +method name slice descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/FloatBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name put descriptor (F)Ljava/nio/FloatBuffer; flags 1 +method name put descriptor (IF)Ljava/nio/FloatBuffer; flags 1 +method name compact descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/DirectFloatBufferS +header extends java/nio/FloatBuffer implements sun/nio/ch/DirectBuffer sealed true permittedSubclasses java/nio/DirectFloatBufferRS flags 20 +field name UNALIGNED descriptor Z flags 1c +method name attachment descriptor ()Ljava/lang/Object; flags 1 +method name cleaner descriptor ()Ljdk/internal/ref/Cleaner; flags 1 +method name slice descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/FloatBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name address descriptor ()J flags 1 +method name get descriptor ()F flags 1 +method name get descriptor (I)F flags 1 +method name put descriptor (F)Ljava/nio/FloatBuffer; flags 1 +method name put descriptor (IF)Ljava/nio/FloatBuffer; flags 1 +method name compact descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/DirectFloatBufferU +header extends java/nio/FloatBuffer implements sun/nio/ch/DirectBuffer sealed true permittedSubclasses java/nio/DirectFloatBufferRU flags 20 +field name UNALIGNED descriptor Z flags 1c +method name attachment descriptor ()Ljava/lang/Object; flags 1 +method name cleaner descriptor ()Ljdk/internal/ref/Cleaner; flags 1 +method name slice descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/FloatBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name address descriptor ()J flags 1 +method name get descriptor ()F flags 1 +method name get descriptor (I)F flags 1 +method name put descriptor (F)Ljava/nio/FloatBuffer; flags 1 +method name put descriptor (IF)Ljava/nio/FloatBuffer; flags 1 +method name compact descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/DirectIntBufferRS +header extends java/nio/DirectIntBufferS implements sun/nio/ch/DirectBuffer flags 30 +method name slice descriptor ()Ljava/nio/IntBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/IntBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/IntBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/IntBuffer; flags 1 +method name put descriptor (I)Ljava/nio/IntBuffer; flags 1 +method name put descriptor (II)Ljava/nio/IntBuffer; flags 1 +method name compact descriptor ()Ljava/nio/IntBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/DirectIntBufferRU +header extends java/nio/DirectIntBufferU implements sun/nio/ch/DirectBuffer flags 30 +method name slice descriptor ()Ljava/nio/IntBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/IntBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/IntBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/IntBuffer; flags 1 +method name put descriptor (I)Ljava/nio/IntBuffer; flags 1 +method name put descriptor (II)Ljava/nio/IntBuffer; flags 1 +method name compact descriptor ()Ljava/nio/IntBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/DirectIntBufferS +header extends java/nio/IntBuffer implements sun/nio/ch/DirectBuffer sealed true permittedSubclasses java/nio/DirectIntBufferRS flags 20 +field name UNALIGNED descriptor Z flags 1c +method name attachment descriptor ()Ljava/lang/Object; flags 1 +method name cleaner descriptor ()Ljdk/internal/ref/Cleaner; flags 1 +method name slice descriptor ()Ljava/nio/IntBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/IntBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/IntBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/IntBuffer; flags 1 +method name address descriptor ()J flags 1 +method name get descriptor ()I flags 1 +method name get descriptor (I)I flags 1 +method name put descriptor (I)Ljava/nio/IntBuffer; flags 1 +method name put descriptor (II)Ljava/nio/IntBuffer; flags 1 +method name compact descriptor ()Ljava/nio/IntBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/DirectIntBufferU +header extends java/nio/IntBuffer implements sun/nio/ch/DirectBuffer sealed true permittedSubclasses java/nio/DirectIntBufferRU flags 20 +field name UNALIGNED descriptor Z flags 1c +method name attachment descriptor ()Ljava/lang/Object; flags 1 +method name cleaner descriptor ()Ljdk/internal/ref/Cleaner; flags 1 +method name slice descriptor ()Ljava/nio/IntBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/IntBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/IntBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/IntBuffer; flags 1 +method name address descriptor ()J flags 1 +method name get descriptor ()I flags 1 +method name get descriptor (I)I flags 1 +method name put descriptor (I)Ljava/nio/IntBuffer; flags 1 +method name put descriptor (II)Ljava/nio/IntBuffer; flags 1 +method name compact descriptor ()Ljava/nio/IntBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/DirectLongBufferRS +header extends java/nio/DirectLongBufferS implements sun/nio/ch/DirectBuffer flags 30 +method name slice descriptor ()Ljava/nio/LongBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/LongBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/LongBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/LongBuffer; flags 1 +method name put descriptor (J)Ljava/nio/LongBuffer; flags 1 +method name put descriptor (IJ)Ljava/nio/LongBuffer; flags 1 +method name compact descriptor ()Ljava/nio/LongBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/DirectLongBufferRU +header extends java/nio/DirectLongBufferU implements sun/nio/ch/DirectBuffer flags 30 +method name slice descriptor ()Ljava/nio/LongBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/LongBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/LongBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/LongBuffer; flags 1 +method name put descriptor (J)Ljava/nio/LongBuffer; flags 1 +method name put descriptor (IJ)Ljava/nio/LongBuffer; flags 1 +method name compact descriptor ()Ljava/nio/LongBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/DirectLongBufferS +header extends java/nio/LongBuffer implements sun/nio/ch/DirectBuffer sealed true permittedSubclasses java/nio/DirectLongBufferRS flags 20 +field name UNALIGNED descriptor Z flags 1c +method name attachment descriptor ()Ljava/lang/Object; flags 1 +method name cleaner descriptor ()Ljdk/internal/ref/Cleaner; flags 1 +method name slice descriptor ()Ljava/nio/LongBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/LongBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/LongBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/LongBuffer; flags 1 +method name address descriptor ()J flags 1 +method name get descriptor ()J flags 1 +method name get descriptor (I)J flags 1 +method name put descriptor (J)Ljava/nio/LongBuffer; flags 1 +method name put descriptor (IJ)Ljava/nio/LongBuffer; flags 1 +method name compact descriptor ()Ljava/nio/LongBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/DirectLongBufferU +header extends java/nio/LongBuffer implements sun/nio/ch/DirectBuffer sealed true permittedSubclasses java/nio/DirectLongBufferRU flags 20 +field name UNALIGNED descriptor Z flags 1c +method name attachment descriptor ()Ljava/lang/Object; flags 1 +method name cleaner descriptor ()Ljdk/internal/ref/Cleaner; flags 1 +method name slice descriptor ()Ljava/nio/LongBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/LongBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/LongBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/LongBuffer; flags 1 +method name address descriptor ()J flags 1 +method name get descriptor ()J flags 1 +method name get descriptor (I)J flags 1 +method name put descriptor (J)Ljava/nio/LongBuffer; flags 1 +method name put descriptor (IJ)Ljava/nio/LongBuffer; flags 1 +method name compact descriptor ()Ljava/nio/LongBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/DirectShortBufferRS +header extends java/nio/DirectShortBufferS implements sun/nio/ch/DirectBuffer flags 30 +method name slice descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/ShortBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name put descriptor (S)Ljava/nio/ShortBuffer; flags 1 +method name put descriptor (IS)Ljava/nio/ShortBuffer; flags 1 +method name compact descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/DirectShortBufferRU +header extends java/nio/DirectShortBufferU implements sun/nio/ch/DirectBuffer flags 30 +method name slice descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/ShortBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name put descriptor (S)Ljava/nio/ShortBuffer; flags 1 +method name put descriptor (IS)Ljava/nio/ShortBuffer; flags 1 +method name compact descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/DirectShortBufferS +header extends java/nio/ShortBuffer implements sun/nio/ch/DirectBuffer sealed true permittedSubclasses java/nio/DirectShortBufferRS flags 20 +field name UNALIGNED descriptor Z flags 1c +method name attachment descriptor ()Ljava/lang/Object; flags 1 +method name cleaner descriptor ()Ljdk/internal/ref/Cleaner; flags 1 +method name slice descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/ShortBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name address descriptor ()J flags 1 +method name get descriptor ()S flags 1 +method name get descriptor (I)S flags 1 +method name put descriptor (S)Ljava/nio/ShortBuffer; flags 1 +method name put descriptor (IS)Ljava/nio/ShortBuffer; flags 1 +method name compact descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/DirectShortBufferU +header extends java/nio/ShortBuffer implements sun/nio/ch/DirectBuffer sealed true permittedSubclasses java/nio/DirectShortBufferRU flags 20 +field name UNALIGNED descriptor Z flags 1c +method name attachment descriptor ()Ljava/lang/Object; flags 1 +method name cleaner descriptor ()Ljdk/internal/ref/Cleaner; flags 1 +method name slice descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/ShortBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name address descriptor ()J flags 1 +method name get descriptor ()S flags 1 +method name get descriptor (I)S flags 1 +method name put descriptor (S)Ljava/nio/ShortBuffer; flags 1 +method name put descriptor (IS)Ljava/nio/ShortBuffer; flags 1 +method name compact descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + class name java/nio/DoubleBuffer -header extends java/nio/Buffer implements java/lang/Comparable sealed true flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable; +header extends java/nio/Buffer implements java/lang/Comparable sealed true permittedSubclasses java/nio/HeapDoubleBuffer,java/nio/DirectDoubleBufferS,java/nio/DirectDoubleBufferU,java/nio/ByteBufferAsDoubleBufferB,java/nio/ByteBufferAsDoubleBufferL flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable; class name java/nio/FloatBuffer -header extends java/nio/Buffer implements java/lang/Comparable sealed true flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable; +header extends java/nio/Buffer implements java/lang/Comparable sealed true permittedSubclasses java/nio/HeapFloatBuffer,java/nio/DirectFloatBufferS,java/nio/DirectFloatBufferU,java/nio/ByteBufferAsFloatBufferB,java/nio/ByteBufferAsFloatBufferL flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable; + +class name java/nio/HeapByteBuffer +header extends java/nio/ByteBuffer sealed true permittedSubclasses java/nio/HeapByteBufferR flags 20 +method name descriptor ([BIIIIILjava/lang/foreign/MemorySegment;)V flags 4 +method name slice descriptor ()Ljava/nio/ByteBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/ByteBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/ByteBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/ByteBuffer; flags 1 +method name ix descriptor (I)I flags 4 +method name get descriptor ()B flags 1 +method name get descriptor (I)B flags 1 +method name get descriptor ([BII)Ljava/nio/ByteBuffer; flags 1 +method name get descriptor (I[BII)Ljava/nio/ByteBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name put descriptor (B)Ljava/nio/ByteBuffer; flags 1 +method name put descriptor (IB)Ljava/nio/ByteBuffer; flags 1 +method name put descriptor ([BII)Ljava/nio/ByteBuffer; flags 1 +method name put descriptor (Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer; flags 1 +method name put descriptor (ILjava/nio/ByteBuffer;II)Ljava/nio/ByteBuffer; flags 1 +method name put descriptor (I[BII)Ljava/nio/ByteBuffer; flags 1 +method name compact descriptor ()Ljava/nio/ByteBuffer; flags 1 +method name getChar descriptor ()C flags 1 +method name getChar descriptor (I)C flags 1 +method name putChar descriptor (C)Ljava/nio/ByteBuffer; flags 1 +method name putChar descriptor (IC)Ljava/nio/ByteBuffer; flags 1 +method name asCharBuffer descriptor ()Ljava/nio/CharBuffer; flags 1 +method name getShort descriptor ()S flags 1 +method name getShort descriptor (I)S flags 1 +method name putShort descriptor (S)Ljava/nio/ByteBuffer; flags 1 +method name putShort descriptor (IS)Ljava/nio/ByteBuffer; flags 1 +method name asShortBuffer descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name getInt descriptor ()I flags 1 +method name getInt descriptor (I)I flags 1 +method name putInt descriptor (I)Ljava/nio/ByteBuffer; flags 1 +method name putInt descriptor (II)Ljava/nio/ByteBuffer; flags 1 +method name asIntBuffer descriptor ()Ljava/nio/IntBuffer; flags 1 +method name getLong descriptor ()J flags 1 +method name getLong descriptor (I)J flags 1 +method name putLong descriptor (J)Ljava/nio/ByteBuffer; flags 1 +method name putLong descriptor (IJ)Ljava/nio/ByteBuffer; flags 1 +method name asLongBuffer descriptor ()Ljava/nio/LongBuffer; flags 1 +method name getFloat descriptor ()F flags 1 +method name getFloat descriptor (I)F flags 1 +method name putFloat descriptor (F)Ljava/nio/ByteBuffer; flags 1 +method name putFloat descriptor (IF)Ljava/nio/ByteBuffer; flags 1 +method name asFloatBuffer descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name getDouble descriptor ()D flags 1 +method name getDouble descriptor (I)D flags 1 +method name putDouble descriptor (D)Ljava/nio/ByteBuffer; flags 1 +method name putDouble descriptor (ID)Ljava/nio/ByteBuffer; flags 1 +method name asDoubleBuffer descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/HeapByteBufferR +header extends java/nio/HeapByteBuffer flags 30 +method name descriptor ([BIIIIILjava/lang/foreign/MemorySegment;)V flags 4 +method name slice descriptor ()Ljava/nio/ByteBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/ByteBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/ByteBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/ByteBuffer; flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name put descriptor (B)Ljava/nio/ByteBuffer; flags 1 +method name put descriptor (IB)Ljava/nio/ByteBuffer; flags 1 +method name put descriptor ([BII)Ljava/nio/ByteBuffer; flags 1 +method name put descriptor (Ljava/nio/ByteBuffer;)Ljava/nio/ByteBuffer; flags 1 +method name put descriptor (ILjava/nio/ByteBuffer;II)Ljava/nio/ByteBuffer; flags 1 +method name put descriptor (I[BII)Ljava/nio/ByteBuffer; flags 1 +method name compact descriptor ()Ljava/nio/ByteBuffer; flags 1 +method name putChar descriptor (C)Ljava/nio/ByteBuffer; flags 1 +method name putChar descriptor (IC)Ljava/nio/ByteBuffer; flags 1 +method name asCharBuffer descriptor ()Ljava/nio/CharBuffer; flags 1 +method name putShort descriptor (S)Ljava/nio/ByteBuffer; flags 1 +method name putShort descriptor (IS)Ljava/nio/ByteBuffer; flags 1 +method name asShortBuffer descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name putInt descriptor (I)Ljava/nio/ByteBuffer; flags 1 +method name putInt descriptor (II)Ljava/nio/ByteBuffer; flags 1 +method name asIntBuffer descriptor ()Ljava/nio/IntBuffer; flags 1 +method name putLong descriptor (J)Ljava/nio/ByteBuffer; flags 1 +method name putLong descriptor (IJ)Ljava/nio/ByteBuffer; flags 1 +method name asLongBuffer descriptor ()Ljava/nio/LongBuffer; flags 1 +method name putFloat descriptor (F)Ljava/nio/ByteBuffer; flags 1 +method name putFloat descriptor (IF)Ljava/nio/ByteBuffer; flags 1 +method name asFloatBuffer descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name putDouble descriptor (D)Ljava/nio/ByteBuffer; flags 1 +method name putDouble descriptor (ID)Ljava/nio/ByteBuffer; flags 1 +method name asDoubleBuffer descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/HeapCharBuffer +header extends java/nio/CharBuffer sealed true permittedSubclasses java/nio/HeapCharBufferR flags 20 +method name descriptor ([CIIIIILjava/lang/foreign/MemorySegment;)V flags 4 +method name slice descriptor ()Ljava/nio/CharBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/CharBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/CharBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/CharBuffer; flags 1 +method name ix descriptor (I)I flags 4 +method name get descriptor ()C flags 1 +method name get descriptor (I)C flags 1 +method name get descriptor ([CII)Ljava/nio/CharBuffer; flags 1 +method name get descriptor (I[CII)Ljava/nio/CharBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name put descriptor (C)Ljava/nio/CharBuffer; flags 1 +method name put descriptor (IC)Ljava/nio/CharBuffer; flags 1 +method name put descriptor ([CII)Ljava/nio/CharBuffer; flags 1 +method name put descriptor (Ljava/nio/CharBuffer;)Ljava/nio/CharBuffer; flags 1 +method name put descriptor (ILjava/nio/CharBuffer;II)Ljava/nio/CharBuffer; flags 1 +method name put descriptor (I[CII)Ljava/nio/CharBuffer; flags 1 +method name put descriptor (Ljava/lang/String;II)Ljava/nio/CharBuffer; flags 1 +method name compact descriptor ()Ljava/nio/CharBuffer; flags 1 +method name subSequence descriptor (II)Ljava/nio/CharBuffer; flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name subSequence descriptor (II)Ljava/lang/CharSequence; flags 1041 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/HeapCharBufferR +header extends java/nio/HeapCharBuffer flags 30 +method name descriptor ([CIIIIILjava/lang/foreign/MemorySegment;)V flags 4 +method name slice descriptor ()Ljava/nio/CharBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/CharBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/CharBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/CharBuffer; flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name put descriptor (C)Ljava/nio/CharBuffer; flags 1 +method name put descriptor (IC)Ljava/nio/CharBuffer; flags 1 +method name put descriptor ([CII)Ljava/nio/CharBuffer; flags 1 +method name put descriptor (Ljava/nio/CharBuffer;)Ljava/nio/CharBuffer; flags 1 +method name put descriptor (ILjava/nio/CharBuffer;II)Ljava/nio/CharBuffer; flags 1 +method name put descriptor (I[CII)Ljava/nio/CharBuffer; flags 1 +method name put descriptor (Ljava/lang/String;II)Ljava/nio/CharBuffer; flags 1 +method name compact descriptor ()Ljava/nio/CharBuffer; flags 1 +method name subSequence descriptor (II)Ljava/nio/CharBuffer; flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name subSequence descriptor (II)Ljava/lang/CharSequence; flags 1041 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/HeapDoubleBuffer +header extends java/nio/DoubleBuffer sealed true permittedSubclasses java/nio/HeapDoubleBufferR flags 20 +method name descriptor ([DIIIIILjava/lang/foreign/MemorySegment;)V flags 4 +method name slice descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/DoubleBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name ix descriptor (I)I flags 4 +method name get descriptor ()D flags 1 +method name get descriptor (I)D flags 1 +method name get descriptor ([DII)Ljava/nio/DoubleBuffer; flags 1 +method name get descriptor (I[DII)Ljava/nio/DoubleBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name put descriptor (D)Ljava/nio/DoubleBuffer; flags 1 +method name put descriptor (ID)Ljava/nio/DoubleBuffer; flags 1 +method name put descriptor ([DII)Ljava/nio/DoubleBuffer; flags 1 +method name put descriptor (Ljava/nio/DoubleBuffer;)Ljava/nio/DoubleBuffer; flags 1 +method name put descriptor (ILjava/nio/DoubleBuffer;II)Ljava/nio/DoubleBuffer; flags 1 +method name put descriptor (I[DII)Ljava/nio/DoubleBuffer; flags 1 +method name compact descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/HeapDoubleBufferR +header extends java/nio/HeapDoubleBuffer flags 30 +method name descriptor ([DIIIIILjava/lang/foreign/MemorySegment;)V flags 4 +method name slice descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/DoubleBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name put descriptor (D)Ljava/nio/DoubleBuffer; flags 1 +method name put descriptor (ID)Ljava/nio/DoubleBuffer; flags 1 +method name put descriptor ([DII)Ljava/nio/DoubleBuffer; flags 1 +method name put descriptor (Ljava/nio/DoubleBuffer;)Ljava/nio/DoubleBuffer; flags 1 +method name put descriptor (ILjava/nio/DoubleBuffer;II)Ljava/nio/DoubleBuffer; flags 1 +method name put descriptor (I[DII)Ljava/nio/DoubleBuffer; flags 1 +method name compact descriptor ()Ljava/nio/DoubleBuffer; flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/HeapFloatBuffer +header extends java/nio/FloatBuffer sealed true permittedSubclasses java/nio/HeapFloatBufferR flags 20 +method name descriptor ([FIIIIILjava/lang/foreign/MemorySegment;)V flags 4 +method name slice descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/FloatBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name ix descriptor (I)I flags 4 +method name get descriptor ()F flags 1 +method name get descriptor (I)F flags 1 +method name get descriptor ([FII)Ljava/nio/FloatBuffer; flags 1 +method name get descriptor (I[FII)Ljava/nio/FloatBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name put descriptor (F)Ljava/nio/FloatBuffer; flags 1 +method name put descriptor (IF)Ljava/nio/FloatBuffer; flags 1 +method name put descriptor ([FII)Ljava/nio/FloatBuffer; flags 1 +method name put descriptor (Ljava/nio/FloatBuffer;)Ljava/nio/FloatBuffer; flags 1 +method name put descriptor (ILjava/nio/FloatBuffer;II)Ljava/nio/FloatBuffer; flags 1 +method name put descriptor (I[FII)Ljava/nio/FloatBuffer; flags 1 +method name compact descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/HeapFloatBufferR +header extends java/nio/HeapFloatBuffer flags 30 +method name descriptor ([FIIIIILjava/lang/foreign/MemorySegment;)V flags 4 +method name slice descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/FloatBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name put descriptor (F)Ljava/nio/FloatBuffer; flags 1 +method name put descriptor (IF)Ljava/nio/FloatBuffer; flags 1 +method name put descriptor ([FII)Ljava/nio/FloatBuffer; flags 1 +method name put descriptor (Ljava/nio/FloatBuffer;)Ljava/nio/FloatBuffer; flags 1 +method name put descriptor (ILjava/nio/FloatBuffer;II)Ljava/nio/FloatBuffer; flags 1 +method name put descriptor (I[FII)Ljava/nio/FloatBuffer; flags 1 +method name compact descriptor ()Ljava/nio/FloatBuffer; flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/HeapIntBuffer +header extends java/nio/IntBuffer sealed true permittedSubclasses java/nio/HeapIntBufferR flags 20 +method name descriptor ([IIIIIILjava/lang/foreign/MemorySegment;)V flags 4 +method name slice descriptor ()Ljava/nio/IntBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/IntBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/IntBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/IntBuffer; flags 1 +method name ix descriptor (I)I flags 4 +method name get descriptor ()I flags 1 +method name get descriptor (I)I flags 1 +method name get descriptor ([III)Ljava/nio/IntBuffer; flags 1 +method name get descriptor (I[III)Ljava/nio/IntBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name put descriptor (I)Ljava/nio/IntBuffer; flags 1 +method name put descriptor (II)Ljava/nio/IntBuffer; flags 1 +method name put descriptor ([III)Ljava/nio/IntBuffer; flags 1 +method name put descriptor (Ljava/nio/IntBuffer;)Ljava/nio/IntBuffer; flags 1 +method name put descriptor (ILjava/nio/IntBuffer;II)Ljava/nio/IntBuffer; flags 1 +method name put descriptor (I[III)Ljava/nio/IntBuffer; flags 1 +method name compact descriptor ()Ljava/nio/IntBuffer; flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/HeapIntBufferR +header extends java/nio/HeapIntBuffer flags 30 +method name descriptor ([IIIIIILjava/lang/foreign/MemorySegment;)V flags 4 +method name slice descriptor ()Ljava/nio/IntBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/IntBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/IntBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/IntBuffer; flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name put descriptor (I)Ljava/nio/IntBuffer; flags 1 +method name put descriptor (II)Ljava/nio/IntBuffer; flags 1 +method name put descriptor ([III)Ljava/nio/IntBuffer; flags 1 +method name put descriptor (Ljava/nio/IntBuffer;)Ljava/nio/IntBuffer; flags 1 +method name put descriptor (ILjava/nio/IntBuffer;II)Ljava/nio/IntBuffer; flags 1 +method name put descriptor (I[III)Ljava/nio/IntBuffer; flags 1 +method name compact descriptor ()Ljava/nio/IntBuffer; flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/HeapLongBuffer +header extends java/nio/LongBuffer sealed true permittedSubclasses java/nio/HeapLongBufferR flags 20 +method name descriptor ([JIIIIILjava/lang/foreign/MemorySegment;)V flags 4 +method name slice descriptor ()Ljava/nio/LongBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/LongBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/LongBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/LongBuffer; flags 1 +method name ix descriptor (I)I flags 4 +method name get descriptor ()J flags 1 +method name get descriptor (I)J flags 1 +method name get descriptor ([JII)Ljava/nio/LongBuffer; flags 1 +method name get descriptor (I[JII)Ljava/nio/LongBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name put descriptor (J)Ljava/nio/LongBuffer; flags 1 +method name put descriptor (IJ)Ljava/nio/LongBuffer; flags 1 +method name put descriptor ([JII)Ljava/nio/LongBuffer; flags 1 +method name put descriptor (Ljava/nio/LongBuffer;)Ljava/nio/LongBuffer; flags 1 +method name put descriptor (ILjava/nio/LongBuffer;II)Ljava/nio/LongBuffer; flags 1 +method name put descriptor (I[JII)Ljava/nio/LongBuffer; flags 1 +method name compact descriptor ()Ljava/nio/LongBuffer; flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/HeapLongBufferR +header extends java/nio/HeapLongBuffer flags 30 +method name descriptor ([JIIIIILjava/lang/foreign/MemorySegment;)V flags 4 +method name slice descriptor ()Ljava/nio/LongBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/LongBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/LongBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/LongBuffer; flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name put descriptor (J)Ljava/nio/LongBuffer; flags 1 +method name put descriptor (IJ)Ljava/nio/LongBuffer; flags 1 +method name put descriptor ([JII)Ljava/nio/LongBuffer; flags 1 +method name put descriptor (Ljava/nio/LongBuffer;)Ljava/nio/LongBuffer; flags 1 +method name put descriptor (ILjava/nio/LongBuffer;II)Ljava/nio/LongBuffer; flags 1 +method name put descriptor (I[JII)Ljava/nio/LongBuffer; flags 1 +method name compact descriptor ()Ljava/nio/LongBuffer; flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/HeapShortBuffer +header extends java/nio/ShortBuffer sealed true permittedSubclasses java/nio/HeapShortBufferR flags 20 +method name descriptor ([SIIIIILjava/lang/foreign/MemorySegment;)V flags 4 +method name slice descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/ShortBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name ix descriptor (I)I flags 4 +method name get descriptor ()S flags 1 +method name get descriptor (I)S flags 1 +method name get descriptor ([SII)Ljava/nio/ShortBuffer; flags 1 +method name get descriptor (I[SII)Ljava/nio/ShortBuffer; flags 1 +method name isDirect descriptor ()Z flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name put descriptor (S)Ljava/nio/ShortBuffer; flags 1 +method name put descriptor (IS)Ljava/nio/ShortBuffer; flags 1 +method name put descriptor ([SII)Ljava/nio/ShortBuffer; flags 1 +method name put descriptor (Ljava/nio/ShortBuffer;)Ljava/nio/ShortBuffer; flags 1 +method name put descriptor (ILjava/nio/ShortBuffer;II)Ljava/nio/ShortBuffer; flags 1 +method name put descriptor (I[SII)Ljava/nio/ShortBuffer; flags 1 +method name compact descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 + +class name java/nio/HeapShortBufferR +header extends java/nio/HeapShortBuffer flags 30 +method name descriptor ([SIIIIILjava/lang/foreign/MemorySegment;)V flags 4 +method name slice descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/ShortBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name put descriptor (S)Ljava/nio/ShortBuffer; flags 1 +method name put descriptor (IS)Ljava/nio/ShortBuffer; flags 1 +method name put descriptor ([SII)Ljava/nio/ShortBuffer; flags 1 +method name put descriptor (Ljava/nio/ShortBuffer;)Ljava/nio/ShortBuffer; flags 1 +method name put descriptor (ILjava/nio/ShortBuffer;II)Ljava/nio/ShortBuffer; flags 1 +method name put descriptor (I[SII)Ljava/nio/ShortBuffer; flags 1 +method name compact descriptor ()Ljava/nio/ShortBuffer; flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 class name java/nio/IntBuffer -header extends java/nio/Buffer implements java/lang/Comparable sealed true flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable; +header extends java/nio/Buffer implements java/lang/Comparable sealed true permittedSubclasses java/nio/HeapIntBuffer,java/nio/DirectIntBufferS,java/nio/DirectIntBufferU,java/nio/ByteBufferAsIntBufferB,java/nio/ByteBufferAsIntBufferL flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable; class name java/nio/LongBuffer -header extends java/nio/Buffer implements java/lang/Comparable sealed true flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable; +header extends java/nio/Buffer implements java/lang/Comparable sealed true permittedSubclasses java/nio/HeapLongBuffer,java/nio/DirectLongBufferS,java/nio/DirectLongBufferU,java/nio/ByteBufferAsLongBufferB,java/nio/ByteBufferAsLongBufferL flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable; class name java/nio/MappedByteBuffer -header extends java/nio/ByteBuffer sealed true flags 421 +header extends java/nio/ByteBuffer sealed true permittedSubclasses java/nio/DirectByteBuffer flags 421 class name java/nio/ShortBuffer -header extends java/nio/Buffer implements java/lang/Comparable sealed true flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable; +header extends java/nio/Buffer implements java/lang/Comparable sealed true permittedSubclasses java/nio/HeapShortBuffer,java/nio/DirectShortBufferS,java/nio/DirectShortBufferU,java/nio/ByteBufferAsShortBufferB,java/nio/ByteBufferAsShortBufferL flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable; + +class name java/nio/StringCharBuffer +header extends java/nio/CharBuffer flags 30 +method name slice descriptor ()Ljava/nio/CharBuffer; flags 1 +method name slice descriptor (II)Ljava/nio/CharBuffer; flags 1 +method name duplicate descriptor ()Ljava/nio/CharBuffer; flags 1 +method name asReadOnlyBuffer descriptor ()Ljava/nio/CharBuffer; flags 1 +method name get descriptor ()C flags 11 +method name get descriptor (I)C flags 11 +method name put descriptor (C)Ljava/nio/CharBuffer; flags 11 +method name put descriptor (IC)Ljava/nio/CharBuffer; flags 11 +method name compact descriptor ()Ljava/nio/CharBuffer; flags 11 +method name isReadOnly descriptor ()Z flags 11 +method name subSequence descriptor (II)Ljava/nio/CharBuffer; flags 11 +method name isDirect descriptor ()Z flags 1 +method name order descriptor ()Ljava/nio/ByteOrder; flags 1 +method name equals descriptor (Ljava/lang/Object;)Z flags 1 +method name compareTo descriptor (Ljava/nio/CharBuffer;)I flags 1 +method name compareTo descriptor (Ljava/lang/Object;)I flags 1041 +method name subSequence descriptor (II)Ljava/lang/CharSequence; flags 1041 +method name duplicate descriptor ()Ljava/nio/Buffer; flags 1041 +method name slice descriptor (II)Ljava/nio/Buffer; flags 1041 +method name slice descriptor ()Ljava/nio/Buffer; flags 1041 class name java/nio/channels/FileChannel method name map descriptor (Ljava/nio/channels/FileChannel$MapMode;JJLjava/lang/foreign/MemorySession;)Ljava/lang/foreign/MemorySegment; thrownTypes java/io/IOException flags 1 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) -class name java/security/Certificate -header extends java/lang/Object flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="1.2") - -class name java/security/Identity -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 421 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="1.2") - -class name java/security/SecureRandomParameters -header extends java/lang/Object flags 601 - -class name java/security/SignedObject -header extends java/lang/Object implements java/io/Serializable flags 31 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 - -class name java/security/cert/CertificateRevokedException -header extends java/security/cert/CertificateException flags 21 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 - -class name java/security/cert/URICertStoreParameters -header extends java/lang/Object implements java/security/cert/CertStoreParameters flags 31 - -class name java/security/interfaces/RSAKey --method name getParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec; -method name getParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec; 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; -field name SHA512_224 descriptor Ljava/security/spec/MGF1ParameterSpec; flags 19 -field name SHA512_256 descriptor Ljava/security/spec/MGF1ParameterSpec; flags 19 - class name java/security/spec/PSSParameterSpec -field name DEFAULT descriptor Ljava/security/spec/PSSParameterSpec; --field name TRAILER_FIELD_BC descriptor I -method name descriptor (I)V --method name toString descriptor ()Ljava/lang/String; -field name TRAILER_FIELD_BC descriptor I constantValue 1 flags 19 field name DEFAULT descriptor Ljava/security/spec/PSSParameterSpec; flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="19") -method name toString descriptor ()Ljava/lang/String; flags 1 method name descriptor (I)V flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="19") -class name java/security/spec/RSAKeyGenParameterSpec --method name descriptor (ILjava/math/BigInteger;Ljava/security/spec/AlgorithmParameterSpec;)V --method name getKeyParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec; -method name 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 --method name 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 -method name 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/RSAPrivateCrtKeySpec --method name 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 -method name 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 --method name descriptor (Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/security/spec/AlgorithmParameterSpec;)V --method name getParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec; -method name 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 --method name descriptor (Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/security/spec/AlgorithmParameterSpec;)V --method name getParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec; -method name 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/text/DateFormatSymbols -header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 21 -innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019 - class name java/text/DecimalFormatSymbols method name getLocale descriptor ()Ljava/util/Locale; flags 1 -class name java/text/RuleBasedCollator -header extends java/text/Collator flags 21 -innerclass innerClass java/text/Normalizer$Form outerClass java/text/Normalizer innerClassName Form flags 4019 - class name java/time/ZoneId -header extends java/lang/Object implements java/io/Serializable sealed true flags 421 runtimeAnnotations @Ljdk/internal/ValueBased; +header extends java/lang/Object implements java/io/Serializable sealed true permittedSubclasses java/time/ZoneOffset,java/time/ZoneRegion flags 421 runtimeAnnotations @Ljdk/internal/ValueBased; innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 class name java/time/ZoneOffset method name normalized descriptor ()Ljava/time/ZoneId; flags 1 -class name java/time/chrono/ChronoLocalDate -header extends java/lang/Object implements java/time/temporal/Temporal,java/time/temporal/TemporalAdjuster,java/lang/Comparable flags 601 signature Ljava/lang/Object;Ljava/time/temporal/Temporal;Ljava/time/temporal/TemporalAdjuster;Ljava/lang/Comparable; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/time/chrono/ChronoLocalDateTime -header extends java/lang/Object implements java/time/temporal/Temporal,java/time/temporal/TemporalAdjuster,java/lang/Comparable flags 601 signature Ljava/lang/Object;Ljava/time/temporal/Temporal;Ljava/time/temporal/TemporalAdjuster;Ljava/lang/Comparable;>; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +class name java/time/ZoneRegion +header extends java/time/ZoneId implements java/io/Serializable flags 30 +method name getId descriptor ()Ljava/lang/String; flags 1 +method name getRules descriptor ()Ljava/time/zone/ZoneRules; flags 1 class name java/time/chrono/Chronology method name isIsoBased descriptor ()Z flags 1 @@ -1122,28 +3412,8 @@ class name java/time/format/DateTimeFormatterBuilder method name getLocalizedDateTimePattern descriptor (Ljava/lang/String;Ljava/time/chrono/Chronology;Ljava/util/Locale;)Ljava/lang/String; flags 9 method name appendLocalized descriptor (Ljava/lang/String;)Ljava/time/format/DateTimeFormatterBuilder; flags 1 -class name java/time/format/DecimalStyle -header extends java/lang/Object flags 31 -innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019 - -class name java/time/temporal/TemporalAdjusters -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/Comparator -header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/DoubleSummaryStatistics -header extends java/lang/Object implements java/util/function/DoubleConsumer flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name java/util/EnumSet -header extends java/util/AbstractSet implements java/lang/Cloneable,java/io/Serializable sealed true flags 421 signature ;>Ljava/util/AbstractSet;Ljava/lang/Cloneable;Ljava/io/Serializable; - -class name java/util/GregorianCalendar -header extends java/util/Calendar flags 21 -innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019 +header extends java/util/AbstractSet implements java/lang/Cloneable,java/io/Serializable sealed true permittedSubclasses java/util/JumboEnumSet,java/util/RegularEnumSet flags 421 signature ;>Ljava/util/AbstractSet;Ljava/lang/Cloneable;Ljava/io/Serializable; class name java/util/HashMap method name newHashMap descriptor (I)Ljava/util/HashMap; flags 9 signature (I)Ljava/util/HashMap; @@ -1151,8 +3421,30 @@ method name newHashMap descriptor (I)Ljava/util/HashMap; flags 9 signature (I)Ljava/util/HashSet; +class name java/util/IllegalFormatArgumentIndexException +header extends java/util/IllegalFormatException flags 30 +method name getMessage descriptor ()Ljava/lang/String; flags 1 + class name java/util/IllegalFormatException -header extends java/lang/IllegalArgumentException sealed true flags 21 +header extends java/lang/IllegalArgumentException sealed true permittedSubclasses java/util/DuplicateFormatFlagsException,java/util/FormatFlagsConversionMismatchException,java/util/IllegalFormatArgumentIndexException,java/util/IllegalFormatCodePointException,java/util/IllegalFormatConversionException,java/util/IllegalFormatFlagsException,java/util/IllegalFormatPrecisionException,java/util/IllegalFormatWidthException,java/util/MissingFormatArgumentException,java/util/MissingFormatWidthException,java/util/UnknownFormatConversionException,java/util/UnknownFormatFlagsException flags 21 + +class name java/util/JumboEnumSet +header extends java/util/EnumSet flags 30 signature ;>Ljava/util/EnumSet; +method name iterator descriptor ()Ljava/util/Iterator; flags 1 signature ()Ljava/util/Iterator; +method name size descriptor ()I flags 1 +method name isEmpty descriptor ()Z flags 1 +method name contains descriptor (Ljava/lang/Object;)Z flags 1 +method name add descriptor (Ljava/lang/Enum;)Z flags 1 signature (TE;)Z +method name remove descriptor (Ljava/lang/Object;)Z flags 1 +method name containsAll descriptor (Ljava/util/Collection;)Z flags 1 signature (Ljava/util/Collection<*>;)Z +method name addAll descriptor (Ljava/util/Collection;)Z flags 1 signature (Ljava/util/Collection<+TE;>;)Z +method name removeAll descriptor (Ljava/util/Collection;)Z flags 1 signature (Ljava/util/Collection<*>;)Z +method name retainAll descriptor (Ljava/util/Collection;)Z flags 1 signature (Ljava/util/Collection<*>;)Z +method name clear descriptor ()V flags 1 +method name equals descriptor (Ljava/lang/Object;)Z flags 1 +method name clone descriptor ()Ljava/util/EnumSet; flags 1 signature ()Ljava/util/EnumSet; +method name add descriptor (Ljava/lang/Object;)Z flags 1041 +method name clone descriptor ()Ljava/lang/Object; thrownTypes java/lang/CloneNotSupportedException flags 1041 class name java/util/LinkedHashMap method name newLinkedHashMap descriptor (I)Ljava/util/LinkedHashMap; flags 9 signature (I)Ljava/util/LinkedHashMap; @@ -1171,11 +3463,6 @@ method name of descriptor (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String method name of descriptor (Ljava/lang/String;Ljava/lang/String;)Ljava/util/Locale; flags 9 method name of descriptor (Ljava/lang/String;)Ljava/util/Locale; flags 9 -class name java/util/Locale$IsoCountryCode -header extends java/lang/Enum nestHost java/util/Locale sealed true flags 4421 signature Ljava/lang/Enum; -innerclass innerClass java/util/Locale$IsoCountryCode outerClass java/util/Locale innerClassName IsoCountryCode flags 4409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name java/util/Objects -method name requireNonNull descriptor (Ljava/lang/Object;)Ljava/lang/Object; -method name requireNonNull descriptor (Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object; @@ -1183,12 +3470,6 @@ method name toIdentityString descriptor (Ljava/lang/Object;)Ljava/lang/String; f method name requireNonNull descriptor (Ljava/lang/Object;)Ljava/lang/Object; flags 9 signature (TT;)TT; runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; method name requireNonNull descriptor (Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object; flags 9 signature (TT;Ljava/lang/String;)TT; runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; -class name java/util/Observable -header extends java/lang/Object flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="9") - -class name java/util/Observer -header extends java/lang/Object flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="9") - class name java/util/Properties header extends java/util/Hashtable flags 21 signature Ljava/util/Hashtable; innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 @@ -1197,13 +3478,21 @@ innerclass innerClass java/util/concurrent/ConcurrentHashMap$KeySetView outerCla class name java/util/Random method name from descriptor (Ljava/util/random/RandomGenerator;)Ljava/util/Random; flags 9 -class name java/util/TimeZone -header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 421 -innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019 - -class name java/util/TreeSet -header extends java/util/AbstractSet implements java/util/NavigableSet,java/lang/Cloneable,java/io/Serializable flags 21 signature Ljava/util/AbstractSet;Ljava/util/NavigableSet;Ljava/lang/Cloneable;Ljava/io/Serializable; -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 +class name java/util/RegularEnumSet +header extends java/util/EnumSet flags 30 signature ;>Ljava/util/EnumSet; +method name iterator descriptor ()Ljava/util/Iterator; flags 1 signature ()Ljava/util/Iterator; +method name size descriptor ()I flags 1 +method name isEmpty descriptor ()Z flags 1 +method name contains descriptor (Ljava/lang/Object;)Z flags 1 +method name add descriptor (Ljava/lang/Enum;)Z flags 1 signature (TE;)Z +method name remove descriptor (Ljava/lang/Object;)Z flags 1 +method name containsAll descriptor (Ljava/util/Collection;)Z flags 1 signature (Ljava/util/Collection<*>;)Z +method name addAll descriptor (Ljava/util/Collection;)Z flags 1 signature (Ljava/util/Collection<+TE;>;)Z +method name removeAll descriptor (Ljava/util/Collection;)Z flags 1 signature (Ljava/util/Collection<*>;)Z +method name retainAll descriptor (Ljava/util/Collection;)Z flags 1 signature (Ljava/util/Collection<*>;)Z +method name clear descriptor ()V flags 1 +method name equals descriptor (Ljava/lang/Object;)Z flags 1 +method name add descriptor (Ljava/lang/Object;)Z flags 1041 class name java/util/WeakHashMap method name newWeakHashMap descriptor (I)Ljava/util/WeakHashMap; flags 9 signature (I)Ljava/util/WeakHashMap; @@ -1219,32 +3508,57 @@ method name exceptionNow descriptor ()Ljava/lang/Throwable; flags 1 method name state descriptor ()Ljava/util/concurrent/Future$State; flags 1 class name java/util/concurrent/ConcurrentHashMap -header extends java/util/AbstractMap implements java/util/concurrent/ConcurrentMap,java/io/Serializable nestMembers java/util/concurrent/ConcurrentHashMap$KeySetView,java/util/concurrent/ConcurrentHashMap$CollectionView flags 21 signature Ljava/util/AbstractMap;Ljava/util/concurrent/ConcurrentMap;Ljava/io/Serializable; +header extends java/util/AbstractMap implements java/util/concurrent/ConcurrentMap,java/io/Serializable nestMembers java/util/concurrent/ConcurrentHashMap$EntrySetView,java/util/concurrent/ConcurrentHashMap$ValuesView,java/util/concurrent/ConcurrentHashMap$KeySetView,java/util/concurrent/ConcurrentHashMap$CollectionView flags 21 signature Ljava/util/AbstractMap;Ljava/util/concurrent/ConcurrentMap;Ljava/io/Serializable; innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 innerclass innerClass java/util/concurrent/ConcurrentHashMap$KeySetView outerClass java/util/concurrent/ConcurrentHashMap innerClassName KeySetView flags 19 +innerclass innerClass java/util/concurrent/ConcurrentHashMap$ValuesView outerClass java/util/concurrent/ConcurrentHashMap innerClassName ValuesView flags 18 +innerclass innerClass java/util/concurrent/ConcurrentHashMap$EntrySetView outerClass java/util/concurrent/ConcurrentHashMap innerClassName EntrySetView flags 18 innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 innerclass innerClass java/util/AbstractMap$SimpleImmutableEntry outerClass java/util/AbstractMap innerClassName SimpleImmutableEntry flags 9 innerclass innerClass java/util/concurrent/ConcurrentHashMap$CollectionView outerClass java/util/concurrent/ConcurrentHashMap innerClassName CollectionView flags 408 class name java/util/concurrent/ConcurrentHashMap$CollectionView -header extends java/lang/Object implements java/util/Collection,java/io/Serializable nestHost java/util/concurrent/ConcurrentHashMap sealed true flags 420 signature Ljava/lang/Object;Ljava/util/Collection;Ljava/io/Serializable; +header extends java/lang/Object implements java/util/Collection,java/io/Serializable nestHost java/util/concurrent/ConcurrentHashMap sealed true permittedSubclasses java/util/concurrent/ConcurrentHashMap$EntrySetView,java/util/concurrent/ConcurrentHashMap$KeySetView,java/util/concurrent/ConcurrentHashMap$ValuesView flags 420 signature Ljava/lang/Object;Ljava/util/Collection;Ljava/io/Serializable; innerclass innerClass java/util/concurrent/ConcurrentHashMap$CollectionView outerClass java/util/concurrent/ConcurrentHashMap innerClassName CollectionView flags 408 +innerclass innerClass java/util/concurrent/ConcurrentHashMap$EntrySetView outerClass java/util/concurrent/ConcurrentHashMap innerClassName EntrySetView flags 18 innerclass innerClass java/util/concurrent/ConcurrentHashMap$KeySetView outerClass java/util/concurrent/ConcurrentHashMap innerClassName KeySetView flags 19 +innerclass innerClass java/util/concurrent/ConcurrentHashMap$ValuesView outerClass java/util/concurrent/ConcurrentHashMap innerClassName ValuesView flags 18 + +class name java/util/concurrent/ConcurrentHashMap$EntrySetView +header extends java/util/concurrent/ConcurrentHashMap$CollectionView implements java/util/Set,java/io/Serializable nestHost java/util/concurrent/ConcurrentHashMap flags 30 signature Ljava/util/concurrent/ConcurrentHashMap$CollectionView;>;Ljava/util/Set;>;Ljava/io/Serializable; +innerclass innerClass java/util/concurrent/ConcurrentHashMap$CollectionView outerClass java/util/concurrent/ConcurrentHashMap innerClassName CollectionView flags 408 +innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 +innerclass innerClass java/util/concurrent/ConcurrentHashMap$EntrySetView outerClass java/util/concurrent/ConcurrentHashMap innerClassName EntrySetView flags 18 +method name contains descriptor (Ljava/lang/Object;)Z flags 1 +method name remove descriptor (Ljava/lang/Object;)Z flags 1 +method name iterator descriptor ()Ljava/util/Iterator; flags 1 signature ()Ljava/util/Iterator;>; +method name add descriptor (Ljava/util/Map$Entry;)Z flags 1 signature (Ljava/util/Map$Entry;)Z +method name addAll descriptor (Ljava/util/Collection;)Z flags 1 signature (Ljava/util/Collection<+Ljava/util/Map$Entry;>;)Z +method name removeIf descriptor (Ljava/util/function/Predicate;)Z flags 1 signature (Ljava/util/function/Predicate<-Ljava/util/Map$Entry;>;)Z +method name hashCode descriptor ()I flags 11 +method name equals descriptor (Ljava/lang/Object;)Z flags 11 +method name spliterator descriptor ()Ljava/util/Spliterator; flags 1 signature ()Ljava/util/Spliterator;>; +method name forEach descriptor (Ljava/util/function/Consumer;)V flags 1 signature (Ljava/util/function/Consumer<-Ljava/util/Map$Entry;>;)V +method name add descriptor (Ljava/lang/Object;)Z flags 1041 class name java/util/concurrent/ConcurrentHashMap$KeySetView header extends java/util/concurrent/ConcurrentHashMap$CollectionView implements java/util/Set,java/io/Serializable nestHost java/util/concurrent/ConcurrentHashMap flags 31 signature Ljava/util/concurrent/ConcurrentHashMap$CollectionView;Ljava/util/Set;Ljava/io/Serializable; innerclass innerClass java/util/concurrent/ConcurrentHashMap$CollectionView outerClass java/util/concurrent/ConcurrentHashMap innerClassName CollectionView flags 408 innerclass innerClass java/util/concurrent/ConcurrentHashMap$KeySetView outerClass java/util/concurrent/ConcurrentHashMap innerClassName KeySetView flags 19 -class name java/util/concurrent/ConcurrentMap -header extends java/lang/Object implements java/util/Map flags 601 signature Ljava/lang/Object;Ljava/util/Map; -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/concurrent/ConcurrentSkipListSet -header extends java/util/AbstractSet implements java/util/NavigableSet,java/lang/Cloneable,java/io/Serializable flags 21 signature Ljava/util/AbstractSet;Ljava/util/NavigableSet;Ljava/lang/Cloneable;Ljava/io/Serializable; -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +class name java/util/concurrent/ConcurrentHashMap$ValuesView +header extends java/util/concurrent/ConcurrentHashMap$CollectionView implements java/util/Collection,java/io/Serializable nestHost java/util/concurrent/ConcurrentHashMap flags 30 signature Ljava/util/concurrent/ConcurrentHashMap$CollectionView;Ljava/util/Collection;Ljava/io/Serializable; +innerclass innerClass java/util/concurrent/ConcurrentHashMap$CollectionView outerClass java/util/concurrent/ConcurrentHashMap innerClassName CollectionView flags 408 +innerclass innerClass java/util/concurrent/ConcurrentHashMap$ValuesView outerClass java/util/concurrent/ConcurrentHashMap innerClassName ValuesView flags 18 +method name contains descriptor (Ljava/lang/Object;)Z flags 11 +method name remove descriptor (Ljava/lang/Object;)Z flags 11 +method name iterator descriptor ()Ljava/util/Iterator; flags 11 signature ()Ljava/util/Iterator; +method name add descriptor (Ljava/lang/Object;)Z flags 11 signature (TV;)Z +method name addAll descriptor (Ljava/util/Collection;)Z flags 11 signature (Ljava/util/Collection<+TV;>;)Z +method name removeAll descriptor (Ljava/util/Collection;)Z flags 1 signature (Ljava/util/Collection<*>;)Z +method name removeIf descriptor (Ljava/util/function/Predicate;)Z flags 1 signature (Ljava/util/function/Predicate<-TV;>;)Z +method name spliterator descriptor ()Ljava/util/Spliterator; flags 1 signature ()Ljava/util/Spliterator; +method name forEach descriptor (Ljava/util/function/Consumer;)V flags 1 signature (Ljava/util/function/Consumer<-TV;>;)V class name java/util/concurrent/CountedCompleter header extends java/util/concurrent/ForkJoinTask flags 421 signature Ljava/util/concurrent/ForkJoinTask; classAnnotations @Ljdk/Profile+Annotation;(value=I1) @@ -1313,256 +3627,19 @@ class name java/util/concurrent/ThreadLocalRandom header extends java/util/Random flags 31 runtimeAnnotations @Ljdk/internal/util/random/RandomSupport$RandomGeneratorProperties;(name="ThreadLocalRandom",i=I64,j=I0,k=I0,equidistribution=I1) innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -class name java/util/concurrent/atomic/AtomicBoolean -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 - -class name java/util/concurrent/atomic/AtomicReference -header extends java/lang/Object implements java/io/Serializable flags 21 signature Ljava/lang/Object;Ljava/io/Serializable; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/concurrent/atomic/AtomicReferenceArray -header extends java/lang/Object implements java/io/Serializable flags 21 signature Ljava/lang/Object;Ljava/io/Serializable; -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -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 - -class name java/util/function/BiConsumer -header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/BiFunction -header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/BiPredicate -header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/BinaryOperator -header extends java/lang/Object implements java/util/function/BiFunction flags 601 signature Ljava/lang/Object;Ljava/util/function/BiFunction; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/Consumer -header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/DoubleConsumer -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/DoublePredicate -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/DoubleUnaryOperator -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/Function -header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/IntConsumer -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/IntPredicate -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/IntUnaryOperator -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/LongConsumer -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/LongPredicate -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/LongUnaryOperator -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/Predicate -header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/UnaryOperator -header extends java/lang/Object implements java/util/function/Function flags 601 signature Ljava/lang/Object;Ljava/util/function/Function; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/spi/AbstractResourceBundleProvider -header extends java/lang/Object implements java/util/spi/ResourceBundleProvider flags 421 -innerclass innerClass java/util/ResourceBundle$Control outerClass java/util/ResourceBundle innerClassName Control flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/spi/CurrencyNameProvider -header extends java/util/spi/LocaleServiceProvider flags 421 -innerclass innerClass java/util/ResourceBundle$Control outerClass java/util/ResourceBundle innerClassName Control flags 9 - -class name java/util/spi/ResourceBundleProvider -header extends java/lang/Object flags 601 - class name java/util/spi/ToolProvider -header extends java/lang/Object flags 601 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 method name description descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional; -class name java/util/zip/CRC32C -header extends java/lang/Object implements java/util/zip/Checksum flags 31 - class name java/util/zip/InflaterInputStream -method name mark descriptor (I)V -method name reset descriptor ()V method name mark descriptor (I)V flags 1 method name reset descriptor ()V thrownTypes java/io/IOException flags 1 -class name javax/crypto/AEADBadTagException -header extends javax/crypto/BadPaddingException flags 21 - -class name javax/crypto/BadPaddingException -header extends java/security/GeneralSecurityException flags 21 - -class name javax/crypto/CipherInputStream -header extends java/io/FilterInputStream flags 21 - -class name javax/crypto/CipherOutputStream -header extends java/io/FilterOutputStream flags 21 - -class name javax/crypto/CipherSpi -header extends java/lang/Object flags 421 - -class name javax/crypto/EncryptedPrivateKeyInfo -header extends java/lang/Object flags 21 - -class name javax/crypto/ExemptionMechanism -header extends java/lang/Object flags 21 - -class name javax/crypto/ExemptionMechanismException -header extends java/security/GeneralSecurityException flags 21 - -class name javax/crypto/ExemptionMechanismSpi -header extends java/lang/Object flags 421 - -class name javax/crypto/IllegalBlockSizeException -header extends java/security/GeneralSecurityException flags 21 - -class name javax/crypto/KeyAgreement -header extends java/lang/Object flags 21 -innerclass innerClass java/security/Provider$Service outerClass java/security/Provider innerClassName Service flags 9 - -class name javax/crypto/KeyAgreementSpi -header extends java/lang/Object flags 421 - -class name javax/crypto/KeyGenerator -header extends java/lang/Object flags 21 -innerclass innerClass java/security/Provider$Service outerClass java/security/Provider innerClassName Service flags 9 - -class name javax/crypto/KeyGeneratorSpi -header extends java/lang/Object flags 421 - -class name javax/crypto/Mac -header extends java/lang/Object implements java/lang/Cloneable flags 21 -innerclass innerClass java/security/Provider$Service outerClass java/security/Provider innerClassName Service flags 9 - -class name javax/crypto/MacSpi -header extends java/lang/Object flags 421 - -class name javax/crypto/NoSuchPaddingException -header extends java/security/GeneralSecurityException flags 21 - -class name javax/crypto/NullCipher -header extends javax/crypto/Cipher flags 21 - -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 - -class name javax/crypto/SecretKey -header extends java/lang/Object implements java/security/Key,javax/security/auth/Destroyable flags 601 - -class name javax/crypto/SecretKeyFactory -header extends java/lang/Object flags 21 -innerclass innerClass java/security/Provider$Service outerClass java/security/Provider innerClassName Service flags 9 - -class name javax/crypto/SecretKeyFactorySpi -header extends java/lang/Object flags 421 - -class name javax/crypto/ShortBufferException -header extends java/security/GeneralSecurityException flags 21 - -class name javax/crypto/interfaces/DHKey -header extends java/lang/Object flags 601 - -class name javax/crypto/interfaces/DHPrivateKey -header extends java/lang/Object implements javax/crypto/interfaces/DHKey,java/security/PrivateKey flags 601 - -class name javax/crypto/interfaces/DHPublicKey -header extends java/lang/Object implements javax/crypto/interfaces/DHKey,java/security/PublicKey flags 601 - -class name javax/crypto/interfaces/PBEKey -header extends java/lang/Object implements javax/crypto/SecretKey flags 601 - -class name javax/crypto/spec/DESKeySpec -header extends java/lang/Object implements java/security/spec/KeySpec flags 21 - -class name javax/crypto/spec/DESedeKeySpec -header extends java/lang/Object implements java/security/spec/KeySpec flags 21 - -class name javax/crypto/spec/DHGenParameterSpec -header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 - -class name javax/crypto/spec/DHParameterSpec -header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 - -class name javax/crypto/spec/DHPrivateKeySpec -header extends java/lang/Object implements java/security/spec/KeySpec flags 21 - -class name javax/crypto/spec/DHPublicKeySpec -header extends java/lang/Object implements java/security/spec/KeySpec flags 21 - -class name javax/crypto/spec/GCMParameterSpec -header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 - -class name javax/crypto/spec/IvParameterSpec -header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 - class name javax/crypto/spec/OAEPParameterSpec -header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 -innerclass innerClass javax/crypto/spec/PSource$PSpecified outerClass javax/crypto/spec/PSource innerClassName PSpecified flags 19 -field name DEFAULT descriptor Ljavax/crypto/spec/OAEPParameterSpec; field name DEFAULT descriptor Ljavax/crypto/spec/OAEPParameterSpec; flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="19") -class name javax/crypto/spec/PBEKeySpec -header extends java/lang/Object implements java/security/spec/KeySpec flags 21 - -class name javax/crypto/spec/PBEParameterSpec -header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 - -class name javax/crypto/spec/RC2ParameterSpec -header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 - -class name javax/crypto/spec/RC5ParameterSpec -header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 - class name javax/crypto/spec/SecretKeySpec header extends java/lang/Object implements java/security/spec/KeySpec,javax/crypto/SecretKey flags 21 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 @@ -1610,22 +3687,11 @@ header extends java/lang/Object implements javax/security/auth/callback/Callback innerclass innerClass java/lang/ref/Cleaner$Cleanable outerClass java/lang/ref/Cleaner innerClassName Cleanable flags 609 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -class name jdk/internal/event/Event -header extends java/lang/Object flags 421 --method name descriptor ()V --method name begin descriptor ()V --method name end descriptor ()V --method name commit descriptor ()V --method name isEnabled descriptor ()Z --method name shouldCommit descriptor ()Z --method name set descriptor (ILjava/lang/Object;)V -method name descriptor ()V flags 4 -method name begin descriptor ()V flags 1 -method name end descriptor ()V flags 1 -method name commit descriptor ()V flags 1 -method name isEnabled descriptor ()Z flags 1 -method name shouldCommit descriptor ()Z flags 1 -method name set descriptor (ILjava/lang/Object;)V flags 1 +-class name jdk/internal/access/foreign/MemorySegmentProxy + +-class name jdk/internal/misc/ScopedMemoryAccess + +-class name jdk/internal/misc/ScopedMemoryAccess$Scope class name jdk/internal/vm/vector/VectorSupport -field name VECTOR_OP_REINTERPRET descriptor I @@ -1667,3 +3733,9 @@ method name storeMasked descriptor (Ljava/lang/Class;Ljava/lang/Class;Ljava/lang method name compressExpandOp descriptor (ILjava/lang/Class;Ljava/lang/Class;Ljava/lang/Class;ILjdk/internal/vm/vector/VectorSupport$Vector;Ljdk/internal/vm/vector/VectorSupport$VectorMask;Ljdk/internal/vm/vector/VectorSupport$CompressExpandOperation;)Ljdk/internal/vm/vector/VectorSupport$VectorPayload; flags 9 signature ;M:Ljdk/internal/vm/vector/VectorSupport$VectorMask;E:Ljava/lang/Object;>(ILjava/lang/Class<+TV;>;Ljava/lang/Class<+TM;>;Ljava/lang/Class;ITV;TM;Ljdk/internal/vm/vector/VectorSupport$CompressExpandOperation;)Ljdk/internal/vm/vector/VectorSupport$VectorPayload; runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate; method name loadMasked descriptor (Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/Class;ILjava/lang/Object;JLjdk/internal/vm/vector/VectorSupport$VectorMask;ILjava/lang/Object;JLjdk/internal/vm/vector/VectorSupport$VectorSpecies;Ljdk/internal/vm/vector/VectorSupport$LoadVectorMaskedOperation;)Ljdk/internal/vm/vector/VectorSupport$Vector; flags 9 signature ;E:Ljava/lang/Object;S:Ljdk/internal/vm/vector/VectorSupport$VectorSpecies;M:Ljdk/internal/vm/vector/VectorSupport$VectorMask;>(Ljava/lang/Class<+TV;>;Ljava/lang/Class;Ljava/lang/Class;ILjava/lang/Object;JTM;ITC;JTS;Ljdk/internal/vm/vector/VectorSupport$LoadVectorMaskedOperation;)TV; runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate; +class name sun/nio/ch/DirectBuffer +header extends java/lang/Object flags 601 +method name address descriptor ()J flags 401 +method name attachment descriptor ()Ljava/lang/Object; flags 401 +method name cleaner descriptor ()Ljdk/internal/ref/Cleaner; flags 401 + diff --git a/src/jdk.compiler/share/data/symbols/java.base-K.sym.txt b/src/jdk.compiler/share/data/symbols/java.base-K.sym.txt index 8165f97595b93..c17dcd982990b 100644 --- a/src/jdk.compiler/share/data/symbols/java.base-K.sym.txt +++ b/src/jdk.compiler/share/data/symbols/java.base-K.sym.txt @@ -27,7 +27,7 @@ # ########################################################## # module name java.base -header exports java/io,java/lang,java/lang/annotation,java/lang/constant,java/lang/foreign,java/lang/invoke,java/lang/module,java/lang/ref,java/lang/reflect,java/lang/runtime,java/math,java/net,java/net/spi,java/nio,java/nio/channels,java/nio/channels/spi,java/nio/charset,java/nio/charset/spi,java/nio/file,java/nio/file/attribute,java/nio/file/spi,java/security,java/security/cert,java/security/interfaces,java/security/spec,java/text,java/text/spi,java/time,java/time/chrono,java/time/format,java/time/temporal,java/time/zone,java/util,java/util/concurrent,java/util/concurrent/atomic,java/util/concurrent/locks,java/util/function,java/util/jar,java/util/random,java/util/regex,java/util/spi,java/util/stream,java/util/zip,javax/crypto,javax/crypto/interfaces,javax/crypto/spec,javax/net,javax/net/ssl,javax/security/auth,javax/security/auth/callback,javax/security/auth/login,javax/security/auth/spi,javax/security/auth/x500,javax/security/cert,jdk/internal/event[jdk.jfr],jdk/internal/vm/vector[jdk.incubator.vector] uses java/lang/System$LoggerFinder,java/net/ContentHandlerFactory,java/net/spi/InetAddressResolverProvider,java/net/spi/URLStreamHandlerProvider,java/nio/channels/spi/AsynchronousChannelProvider,java/nio/channels/spi/SelectorProvider,java/nio/charset/spi/CharsetProvider,java/nio/file/spi/FileSystemProvider,java/nio/file/spi/FileTypeDetector,java/security/Provider,java/text/spi/BreakIteratorProvider,java/text/spi/CollatorProvider,java/text/spi/DateFormatProvider,java/text/spi/DateFormatSymbolsProvider,java/text/spi/DecimalFormatSymbolsProvider,java/text/spi/NumberFormatProvider,java/time/chrono/AbstractChronology,java/time/chrono/Chronology,java/time/zone/ZoneRulesProvider,java/util/random/RandomGenerator,java/util/spi/CalendarDataProvider,java/util/spi/CalendarNameProvider,java/util/spi/CurrencyNameProvider,java/util/spi/LocaleNameProvider,java/util/spi/ResourceBundleControlProvider,java/util/spi/ResourceBundleProvider,java/util/spi/TimeZoneNameProvider,java/util/spi/ToolProvider,javax/security/auth/spi/LoginModule,jdk/internal/io/JdkConsoleProvider,jdk/internal/logger/DefaultLoggerFinder,sun/text/spi/JavaTimeDateTimePatternProvider,sun/util/locale/provider/LocaleDataMetaInfo,sun/util/resources/LocaleData$CommonResourceBundleProvider,sun/util/resources/LocaleData$SupplementaryResourceBundleProvider,sun/util/spi/CalendarProvider provides interface\u0020;java/nio/file/spi/FileSystemProvider\u0020;impls\u0020;jdk/internal/jrtfs/JrtFileSystemProvider,interface\u0020;java/util/random/RandomGenerator\u0020;impls\u0020;java/security/SecureRandom\u005C;u002C;java/util/Random\u005C;u002C;java/util/SplittableRandom target linux-amd64 flags 8000 +header exports java/io,java/lang,java/lang/annotation,java/lang/constant,java/lang/foreign,java/lang/invoke,java/lang/module,java/lang/ref,java/lang/reflect,java/lang/runtime,java/math,java/net,java/net/spi,java/nio,java/nio/channels,java/nio/channels/spi,java/nio/charset,java/nio/charset/spi,java/nio/file,java/nio/file/attribute,java/nio/file/spi,java/security,java/security/cert,java/security/interfaces,java/security/spec,java/text,java/text/spi,java/time,java/time/chrono,java/time/format,java/time/temporal,java/time/zone,java/util,java/util/concurrent,java/util/concurrent/atomic,java/util/concurrent/locks,java/util/function,java/util/jar,java/util/random,java/util/regex,java/util/spi,java/util/stream,java/util/zip,javax/crypto,javax/crypto/interfaces,javax/crypto/spec,javax/net,javax/net/ssl,javax/security/auth,javax/security/auth/callback,javax/security/auth/login,javax/security/auth/spi,javax/security/auth/x500,javax/security/cert,jdk/internal/event[jdk.jfr],jdk/internal/vm/vector[jdk.incubator.vector] extraModulePackages jdk/internal/access/foreign,jdk/internal/foreign/abi,jdk/internal/foreign/abi/aarch64/linux,jdk/internal/foreign/abi/aarch64/macos,jdk/internal/foreign/abi/x64/sysv,jdk/internal/foreign/abi/x64/windows,jdk/internal/foreign/layout,sun/net,jdk/internal/foreign,jdk/internal/foreign,sun/net,sun/nio/ch uses java/lang/System$LoggerFinder,java/net/ContentHandlerFactory,java/net/spi/InetAddressResolverProvider,java/net/spi/URLStreamHandlerProvider,java/nio/channels/spi/AsynchronousChannelProvider,java/nio/channels/spi/SelectorProvider,java/nio/charset/spi/CharsetProvider,java/nio/file/spi/FileSystemProvider,java/nio/file/spi/FileTypeDetector,java/security/Provider,java/text/spi/BreakIteratorProvider,java/text/spi/CollatorProvider,java/text/spi/DateFormatProvider,java/text/spi/DateFormatSymbolsProvider,java/text/spi/DecimalFormatSymbolsProvider,java/text/spi/NumberFormatProvider,java/time/chrono/AbstractChronology,java/time/chrono/Chronology,java/time/zone/ZoneRulesProvider,java/util/random/RandomGenerator,java/util/spi/CalendarDataProvider,java/util/spi/CalendarNameProvider,java/util/spi/CurrencyNameProvider,java/util/spi/LocaleNameProvider,java/util/spi/ResourceBundleControlProvider,java/util/spi/ResourceBundleProvider,java/util/spi/TimeZoneNameProvider,java/util/spi/ToolProvider,javax/security/auth/spi/LoginModule,jdk/internal/io/JdkConsoleProvider,jdk/internal/logger/DefaultLoggerFinder,sun/text/spi/JavaTimeDateTimePatternProvider,sun/util/locale/provider/LocaleDataMetaInfo,sun/util/resources/LocaleData$CommonResourceBundleProvider,sun/util/resources/LocaleData$SupplementaryResourceBundleProvider,sun/util/spi/CalendarProvider provides interface\u0020;java/nio/file/spi/FileSystemProvider\u0020;impls\u0020;jdk/internal/jrtfs/JrtFileSystemProvider,interface\u0020;java/util/random/RandomGenerator\u0020;impls\u0020;java/security/SecureRandom\u005C;u002C;java/util/Random\u005C;u002C;java/util/SplittableRandom target linux-amd64 flags 8000 class name java/io/BufferedInputStream method name transferTo descriptor (Ljava/io/OutputStream;)J thrownTypes java/io/IOException flags 1 @@ -37,21 +37,12 @@ header extends java/lang/Object implements java/io/Flushable flags 21 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 innerclass innerClass java/util/ServiceLoader$Provider outerClass java/util/ServiceLoader innerClassName Provider flags 609 -class name java/io/PrintStream -header extends java/io/FilterOutputStream implements java/lang/Appendable,java/io/Closeable flags 21 -innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019 - class name java/io/PushbackInputStream method name transferTo descriptor (Ljava/io/OutputStream;)J thrownTypes java/io/IOException flags 1 class name java/io/SequenceInputStream method name transferTo descriptor (Ljava/io/OutputStream;)J thrownTypes java/io/IOException flags 1 -class name java/lang/AbstractStringBuilder -header extends java/lang/Object implements java/lang/Appendable,java/lang/CharSequence sealed true flags 420 -innerclass innerClass java/util/Spliterator$OfInt outerClass java/util/Spliterator innerClassName OfInt flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name java/lang/Character$UnicodeBlock field name ARABIC_EXTENDED_C descriptor Ljava/lang/Character$UnicodeBlock; flags 19 field name DEVANAGARI_EXTENDED_A descriptor Ljava/lang/Character$UnicodeBlock; flags 19 @@ -73,12 +64,6 @@ innerclass innerClass java/lang/invoke/TypeDescriptor$OfField outerClass java/la innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 method name accessFlags descriptor ()Ljava/util/Set; flags 1 signature ()Ljava/util/Set; -class name java/lang/Compiler -header extends java/lang/Object flags 31 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9") - -class name java/lang/Deprecated -header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Documented;@Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;RUNTIME;)@Ljava/lang/annotation/Target;(value={eLjava/lang/annotation/ElementType;CONSTRUCTOR;eLjava/lang/annotation/ElementType;FIELD;eLjava/lang/annotation/ElementType;LOCAL_VARIABLE;eLjava/lang/annotation/ElementType;METHOD;eLjava/lang/annotation/ElementType;PACKAGE;eLjava/lang/annotation/ElementType;MODULE;eLjava/lang/annotation/ElementType;PARAMETER;eLjava/lang/annotation/ElementType;TYPE;}) - class name java/lang/Double -method name isFinite descriptor (D)Z method name isFinite descriptor (D)Z flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate; @@ -89,18 +74,12 @@ method name isFinite descriptor (F)Z flags 9 runtimeAnnotations @Ljdk/internal/v method name float16ToFloat descriptor (S)F flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate; method name floatToFloat16 descriptor (F)S flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate; -class name java/lang/IllegalCallerException -header extends java/lang/RuntimeException flags 21 - class name java/lang/Integer -method name compareUnsigned descriptor (II)I -method name reverse descriptor (I)I method name compareUnsigned descriptor (II)I flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate; method name reverse descriptor (I)I flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/IntrinsicCandidate; -class name java/lang/LayerInstantiationException -header extends java/lang/RuntimeException flags 21 - class name java/lang/Long -method name compareUnsigned descriptor (JJ)I -method name reverse descriptor (J)J @@ -113,54 +92,12 @@ method name isNativeAccessEnabled descriptor ()Z flags 1 classAnnotations @Ljdk/ class name java/lang/ModuleLayer$Controller method name enableNativeAccess descriptor (Ljava/lang/Module;)Ljava/lang/ModuleLayer$Controller; flags 1 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive; -class name java/lang/NamedPackage -header extends java/lang/Object flags 20 - -class name java/lang/Thread$Builder -header extends java/lang/Object nestHost java/lang/Thread sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;VIRTUAL_THREADS;) -innerclass innerClass java/lang/Thread$Builder outerClass java/lang/Thread innerClassName Builder flags 609 -innerclass innerClass java/lang/Thread$Builder$OfVirtual outerClass java/lang/Thread$Builder innerClassName OfVirtual flags 609 -innerclass innerClass java/lang/Thread$Builder$OfPlatform outerClass java/lang/Thread$Builder innerClassName OfPlatform flags 609 -innerclass innerClass java/lang/Thread$UncaughtExceptionHandler outerClass java/lang/Thread innerClassName UncaughtExceptionHandler flags 609 - -class name java/lang/Thread$Builder$OfPlatform -header extends java/lang/Object implements java/lang/Thread$Builder nestHost java/lang/Thread sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;VIRTUAL_THREADS;) -innerclass innerClass java/lang/Thread$Builder outerClass java/lang/Thread innerClassName Builder flags 609 -innerclass innerClass java/lang/Thread$Builder$OfPlatform outerClass java/lang/Thread$Builder innerClassName OfPlatform flags 609 -innerclass innerClass java/lang/Thread$UncaughtExceptionHandler outerClass java/lang/Thread innerClassName UncaughtExceptionHandler flags 609 - -class name java/lang/Thread$Builder$OfVirtual -header extends java/lang/Object implements java/lang/Thread$Builder nestHost java/lang/Thread sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;VIRTUAL_THREADS;) -innerclass innerClass java/lang/Thread$Builder outerClass java/lang/Thread innerClassName Builder flags 609 -innerclass innerClass java/lang/Thread$Builder$OfVirtual outerClass java/lang/Thread$Builder innerClassName OfVirtual flags 609 -innerclass innerClass java/lang/Thread$UncaughtExceptionHandler outerClass java/lang/Thread innerClassName UncaughtExceptionHandler flags 609 - class name java/lang/ThreadDeath header extends java/lang/Error flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="20") class name java/lang/constant/ClassDesc -header extends java/lang/Object implements java/lang/constant/ConstantDesc,java/lang/invoke/TypeDescriptor$OfField sealed true flags 601 signature Ljava/lang/Object;Ljava/lang/constant/ConstantDesc;Ljava/lang/invoke/TypeDescriptor$OfField; -innerclass innerClass java/lang/invoke/TypeDescriptor$OfField outerClass java/lang/invoke/TypeDescriptor innerClassName OfField flags 609 method name ofInternalName descriptor (Ljava/lang/String;)Ljava/lang/constant/ClassDesc; flags 9 -class name java/lang/constant/ConstantDesc -header extends java/lang/Object sealed true flags 601 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/lang/constant/DirectMethodHandleDesc -header extends java/lang/Object implements java/lang/constant/MethodHandleDesc nestMembers java/lang/constant/DirectMethodHandleDesc$Kind sealed true flags 601 -innerclass innerClass java/lang/constant/DirectMethodHandleDesc$Kind outerClass java/lang/constant/DirectMethodHandleDesc innerClassName Kind flags 4019 - -class name java/lang/constant/MethodHandleDesc -header extends java/lang/Object implements java/lang/constant/ConstantDesc sealed true flags 601 -innerclass innerClass java/lang/constant/DirectMethodHandleDesc$Kind outerClass java/lang/constant/DirectMethodHandleDesc innerClassName Kind flags 4019 - -class name java/lang/constant/MethodTypeDesc -header extends java/lang/Object implements java/lang/constant/ConstantDesc,java/lang/invoke/TypeDescriptor$OfMethod sealed true flags 601 signature Ljava/lang/Object;Ljava/lang/constant/ConstantDesc;Ljava/lang/invoke/TypeDescriptor$OfMethod; -innerclass innerClass java/lang/invoke/TypeDescriptor$OfMethod outerClass java/lang/invoke/TypeDescriptor innerClassName OfMethod flags 609 -innerclass innerClass java/lang/invoke/TypeDescriptor$OfField outerClass java/lang/invoke/TypeDescriptor innerClassName OfField flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/lang/foreign/AbstractLayout -class name java/lang/foreign/Addressable @@ -175,7 +112,7 @@ method name openConfined descriptor ()Ljava/lang/foreign/Arena; flags 9 method name openShared descriptor ()Ljava/lang/foreign/Arena; flags 9 class name java/lang/foreign/FunctionDescriptor -header extends java/lang/Object sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/Object sealed true permittedSubclasses jdk/internal/foreign/FunctionDescriptorImpl flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) -method name returnLayout descriptor ()Ljava/util/Optional; -method name argumentLayouts descriptor ()Ljava/util/List; -method name asVariadic descriptor ([Ljava/lang/foreign/MemoryLayout;)Ljava/lang/foreign/FunctionDescriptor; @@ -195,8 +132,10 @@ method name changeReturnLayout descriptor (Ljava/lang/foreign/MemoryLayout;)Ljav method name dropReturnLayout descriptor ()Ljava/lang/foreign/FunctionDescriptor; flags 401 method name toMethodType descriptor ()Ljava/lang/invoke/MethodType; flags 401 +-class name java/lang/foreign/FunctionDescriptor$VariadicFunction + class name java/lang/foreign/GroupLayout -header extends java/lang/Object implements java/lang/foreign/MemoryLayout sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/Object implements java/lang/foreign/MemoryLayout sealed true permittedSubclasses java/lang/foreign/StructLayout,java/lang/foreign/UnionLayout flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) -method name memberLayouts descriptor ()Ljava/util/List; -method name toString descriptor ()Ljava/lang/String; -method name isStruct descriptor ()Z @@ -215,7 +154,7 @@ method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/GroupLayo method name withBitAlignment descriptor (J)Ljava/lang/foreign/GroupLayout; flags 401 class name java/lang/foreign/Linker -header extends java/lang/Object nestMembers java/lang/foreign/Linker$Option,java/lang/foreign/Linker$Option$CaptureCallState sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/Object nestMembers java/lang/foreign/Linker$Option,java/lang/foreign/Linker$Option$CaptureCallState sealed true permittedSubclasses jdk/internal/foreign/abi/AbstractLinker flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) innerclass innerClass java/lang/foreign/Linker$Option outerClass java/lang/foreign/Linker innerClassName Option flags 609 innerclass innerClass java/lang/foreign/Linker$Option$CaptureCallState outerClass java/lang/foreign/Linker$Option innerClassName CaptureCallState flags 609 -method name downcallHandle descriptor (Ljava/lang/foreign/Addressable;Ljava/lang/foreign/FunctionDescriptor;)Ljava/lang/invoke/MethodHandle; @@ -228,17 +167,21 @@ method name downcallHandle descriptor (Ljava/lang/foreign/FunctionDescriptor;[Lj method name upcallStub descriptor (Ljava/lang/invoke/MethodHandle;Ljava/lang/foreign/FunctionDescriptor;Ljava/lang/foreign/SegmentScope;)Ljava/lang/foreign/MemorySegment; flags 401 class name java/lang/foreign/Linker$Option -header extends java/lang/Object nestHost java/lang/foreign/Linker sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/Object nestHost java/lang/foreign/Linker sealed true permittedSubclasses jdk/internal/foreign/abi/LinkerOptions$LinkerOptionImpl,java/lang/foreign/Linker$Option$CaptureCallState flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +innerclass innerClass jdk/internal/foreign/abi/LinkerOptions$FirstVariadicArg outerClass jdk/internal/foreign/abi/LinkerOptions innerClassName FirstVariadicArg flags 19 +innerclass innerClass jdk/internal/foreign/abi/LinkerOptions$CaptureCallStateImpl outerClass jdk/internal/foreign/abi/LinkerOptions innerClassName CaptureCallStateImpl flags 19 innerclass innerClass java/lang/foreign/Linker$Option outerClass java/lang/foreign/Linker innerClassName Option flags 609 innerclass innerClass java/lang/foreign/Linker$Option$CaptureCallState outerClass java/lang/foreign/Linker$Option innerClassName CaptureCallState flags 609 +innerclass innerClass jdk/internal/foreign/abi/LinkerOptions$LinkerOptionImpl outerClass jdk/internal/foreign/abi/LinkerOptions innerClassName LinkerOptionImpl flags 609 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 method name firstVariadicArg descriptor (I)Ljava/lang/foreign/Linker$Option; flags 9 method name captureCallState descriptor ([Ljava/lang/String;)Ljava/lang/foreign/Linker$Option$CaptureCallState; flags 89 class name java/lang/foreign/Linker$Option$CaptureCallState -header extends java/lang/Object implements java/lang/foreign/Linker$Option nestHost java/lang/foreign/Linker sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/Object implements java/lang/foreign/Linker$Option nestHost java/lang/foreign/Linker sealed true permittedSubclasses jdk/internal/foreign/abi/LinkerOptions$CaptureCallStateImpl flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) innerclass innerClass java/lang/foreign/Linker$Option outerClass java/lang/foreign/Linker innerClassName Option flags 609 innerclass innerClass java/lang/foreign/Linker$Option$CaptureCallState outerClass java/lang/foreign/Linker$Option innerClassName CaptureCallState flags 609 +innerclass innerClass jdk/internal/foreign/abi/LinkerOptions$CaptureCallStateImpl outerClass jdk/internal/foreign/abi/LinkerOptions innerClassName CaptureCallStateImpl flags 19 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 method name layout descriptor ()Ljava/lang/foreign/StructLayout; flags 401 method name supported descriptor ()Ljava/util/Set; flags 9 signature ()Ljava/util/Set; @@ -246,16 +189,26 @@ method name supported descriptor ()Ljava/util/Set; flags 9 signature ()Ljava/uti -class name java/lang/foreign/MemoryAddress class name java/lang/foreign/MemoryLayout -header extends java/lang/Object nestMembers java/lang/foreign/MemoryLayout$PathElement sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/Object nestMembers java/lang/foreign/MemoryLayout$PathElement sealed true permittedSubclasses java/lang/foreign/SequenceLayout,java/lang/foreign/GroupLayout,java/lang/foreign/PaddingLayout,java/lang/foreign/ValueLayout flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +innerclass innerClass jdk/internal/foreign/LayoutPath$PathElementImpl outerClass jdk/internal/foreign/LayoutPath innerClassName PathElementImpl flags 19 innerclass innerClass java/lang/foreign/MemoryLayout$PathElement outerClass java/lang/foreign/MemoryLayout innerClassName PathElement flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfBooleanImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfBooleanImpl flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfBoolean outerClass java/lang/foreign/ValueLayout innerClassName OfBoolean flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfCharImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfCharImpl flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfChar outerClass java/lang/foreign/ValueLayout innerClassName OfChar flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfByteImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfByteImpl flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfByte outerClass java/lang/foreign/ValueLayout innerClassName OfByte flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfShortImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfShortImpl flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfShort outerClass java/lang/foreign/ValueLayout innerClassName OfShort flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfIntImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfIntImpl flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfInt outerClass java/lang/foreign/ValueLayout innerClassName OfInt flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfFloatImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfFloatImpl flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfFloat outerClass java/lang/foreign/ValueLayout innerClassName OfFloat flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfLongImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfLongImpl flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfLong outerClass java/lang/foreign/ValueLayout innerClassName OfLong flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfDoubleImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfDoubleImpl flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfDouble outerClass java/lang/foreign/ValueLayout innerClassName OfDouble flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfAddressImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfAddressImpl flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfAddress outerClass java/lang/foreign/ValueLayout innerClassName OfAddress flags 609 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -method name isPadding descriptor ()Z @@ -267,14 +220,25 @@ method name sequenceLayout descriptor (Ljava/lang/foreign/MemoryLayout;)Ljava/la method name structLayout descriptor ([Ljava/lang/foreign/MemoryLayout;)Ljava/lang/foreign/StructLayout; flags 89 method name unionLayout descriptor ([Ljava/lang/foreign/MemoryLayout;)Ljava/lang/foreign/UnionLayout; flags 89 -class name java/lang/foreign/MemoryLayout$PathElement -header extends java/lang/Object nestHost java/lang/foreign/MemoryLayout sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) -innerclass innerClass java/lang/foreign/MemoryLayout$PathElement outerClass java/lang/foreign/MemoryLayout innerClassName PathElement flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name java/lang/foreign/MemorySegment -header extends java/lang/Object sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/Object sealed true permittedSubclasses jdk/internal/foreign/AbstractMemorySegmentImpl flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfByte outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfByte flags 19 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfChar outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfChar flags 19 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfShort outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfShort flags 19 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfInt outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfInt flags 19 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfFloat outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfFloat flags 19 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfLong outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfLong flags 19 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfDouble outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfDouble flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfByte outerClass java/lang/foreign/ValueLayout innerClassName OfByte flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfByteImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfByteImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfBooleanImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfBooleanImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfCharImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfCharImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfShortImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfShortImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfIntImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfIntImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfFloatImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfFloatImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfLongImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfLongImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfDoubleImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfDoubleImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfAddressImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfAddressImpl flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfChar outerClass java/lang/foreign/ValueLayout innerClassName OfChar flags 609 innerclass innerClass java/lang/foreign/ValueLayout$OfShort outerClass java/lang/foreign/ValueLayout innerClassName OfShort flags 609 innerclass innerClass java/lang/foreign/ValueLayout$OfInt outerClass java/lang/foreign/ValueLayout innerClassName OfInt flags 609 @@ -315,11 +279,17 @@ method name mismatch descriptor (Ljava/lang/foreign/MemorySegment;JJLjava/lang/f -class name java/lang/foreign/MemorySession class name java/lang/foreign/PaddingLayout -header extends java/lang/Object implements java/lang/foreign/MemoryLayout sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/Object implements java/lang/foreign/MemoryLayout sealed true permittedSubclasses jdk/internal/foreign/layout/PaddingLayoutImpl flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +-method name toString descriptor ()Ljava/lang/String; +-method name equals descriptor (Ljava/lang/Object;)Z +-method name hashCode descriptor ()I +-method name hasNaturalAlignment descriptor ()Z +-method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/PaddingLayout; +-method name withBitAlignment descriptor (J)Ljava/lang/foreign/PaddingLayout; +-method name withBitAlignment descriptor (J)Ljava/lang/foreign/AbstractLayout; +-method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/AbstractLayout; method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/PaddingLayout; flags 401 method name withBitAlignment descriptor (J)Ljava/lang/foreign/PaddingLayout; flags 401 -method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; flags 1041 -method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/MemoryLayout; flags 1041 class name java/lang/foreign/SegmentAllocator header extends java/lang/Object flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) runtimeAnnotations @Ljava/lang/FunctionalInterface; @@ -343,7 +313,7 @@ method name slicingAllocator descriptor (Ljava/lang/foreign/MemorySegment;)Ljava method name nativeAllocator descriptor (Ljava/lang/foreign/SegmentScope;)Ljava/lang/foreign/SegmentAllocator; flags 9 class name java/lang/foreign/SegmentScope -header extends java/lang/Object sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/Object sealed true permittedSubclasses jdk/internal/foreign/MemorySessionImpl flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) method name auto descriptor ()Ljava/lang/foreign/SegmentScope; flags 9 method name global descriptor ()Ljava/lang/foreign/SegmentScope; flags 9 method name isAlive descriptor ()Z flags 401 @@ -351,7 +321,7 @@ method name isAccessibleBy descriptor (Ljava/lang/Thread;)Z flags 401 method name whileAlive descriptor (Ljava/lang/Runnable;)V flags 401 class name java/lang/foreign/SequenceLayout -header extends java/lang/Object implements java/lang/foreign/MemoryLayout sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/Object implements java/lang/foreign/MemoryLayout sealed true permittedSubclasses jdk/internal/foreign/layout/SequenceLayoutImpl flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) -method name elementLayout descriptor ()Ljava/lang/foreign/MemoryLayout; -method name elementCount descriptor ()J -method name withElementCount descriptor (J)Ljava/lang/foreign/SequenceLayout; @@ -376,7 +346,7 @@ method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/SequenceL method name withBitAlignment descriptor (J)Ljava/lang/foreign/SequenceLayout; flags 401 class name java/lang/foreign/StructLayout -header extends java/lang/Object implements java/lang/foreign/GroupLayout sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/Object implements java/lang/foreign/GroupLayout sealed true permittedSubclasses jdk/internal/foreign/layout/StructLayoutImpl flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/StructLayout; flags 401 method name withBitAlignment descriptor (J)Ljava/lang/foreign/StructLayout; flags 401 method name withBitAlignment descriptor (J)Ljava/lang/foreign/GroupLayout; flags 1041 @@ -393,7 +363,7 @@ method name libraryLookup descriptor (Ljava/lang/String;Ljava/lang/foreign/Segme method name libraryLookup descriptor (Ljava/nio/file/Path;Ljava/lang/foreign/SegmentScope;)Ljava/lang/foreign/SymbolLookup; flags 9 runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive; class name java/lang/foreign/UnionLayout -header extends java/lang/Object implements java/lang/foreign/GroupLayout sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/Object implements java/lang/foreign/GroupLayout sealed true permittedSubclasses jdk/internal/foreign/layout/UnionLayoutImpl flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/UnionLayout; flags 401 method name withBitAlignment descriptor (J)Ljava/lang/foreign/UnionLayout; flags 401 method name withBitAlignment descriptor (J)Ljava/lang/foreign/GroupLayout; flags 1041 @@ -402,12 +372,13 @@ method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; flag method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/MemoryLayout; flags 1041 class name java/lang/foreign/VaList -header extends java/lang/Object nestMembers java/lang/foreign/VaList$Builder sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/Object nestMembers java/lang/foreign/VaList$Builder sealed true permittedSubclasses jdk/internal/foreign/abi/x64/windows/WinVaList,jdk/internal/foreign/abi/x64/sysv/SysVVaList,jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList,jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList,jdk/internal/foreign/abi/SharedUtils$EmptyVaList flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) innerclass innerClass java/lang/foreign/VaList$Builder outerClass java/lang/foreign/VaList innerClassName Builder flags 609 innerclass innerClass java/lang/foreign/ValueLayout$OfInt outerClass java/lang/foreign/ValueLayout innerClassName OfInt flags 609 innerclass innerClass java/lang/foreign/ValueLayout$OfLong outerClass java/lang/foreign/ValueLayout innerClassName OfLong flags 609 innerclass innerClass java/lang/foreign/ValueLayout$OfDouble outerClass java/lang/foreign/ValueLayout innerClassName OfDouble flags 609 innerclass innerClass java/lang/foreign/ValueLayout$OfAddress outerClass java/lang/foreign/ValueLayout innerClassName OfAddress flags 609 +innerclass innerClass jdk/internal/foreign/abi/SharedUtils$EmptyVaList outerClass jdk/internal/foreign/abi/SharedUtils innerClassName EmptyVaList flags 19 -method name session descriptor ()Ljava/lang/foreign/MemorySession; -method name nextVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;)Ljava/lang/foreign/MemoryAddress; -method name address descriptor ()Ljava/lang/foreign/MemoryAddress; @@ -419,25 +390,38 @@ method name ofAddress descriptor (JLjava/lang/foreign/SegmentScope;)Ljava/lang/f method name make descriptor (Ljava/util/function/Consumer;Ljava/lang/foreign/SegmentScope;)Ljava/lang/foreign/VaList; flags 9 signature (Ljava/util/function/Consumer;Ljava/lang/foreign/SegmentScope;)Ljava/lang/foreign/VaList; class name java/lang/foreign/VaList$Builder -header extends java/lang/Object nestHost java/lang/foreign/VaList sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/Object nestHost java/lang/foreign/VaList sealed true permittedSubclasses jdk/internal/foreign/abi/x64/windows/WinVaList$Builder,jdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder,jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder,jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) innerclass innerClass java/lang/foreign/VaList$Builder outerClass java/lang/foreign/VaList innerClassName Builder flags 609 innerclass innerClass java/lang/foreign/ValueLayout$OfInt outerClass java/lang/foreign/ValueLayout innerClassName OfInt flags 609 innerclass innerClass java/lang/foreign/ValueLayout$OfLong outerClass java/lang/foreign/ValueLayout innerClassName OfLong flags 609 innerclass innerClass java/lang/foreign/ValueLayout$OfDouble outerClass java/lang/foreign/ValueLayout innerClassName OfDouble flags 609 innerclass innerClass java/lang/foreign/ValueLayout$OfAddress outerClass java/lang/foreign/ValueLayout innerClassName OfAddress flags 609 +innerclass innerClass jdk/internal/foreign/abi/x64/windows/WinVaList$Builder outerClass jdk/internal/foreign/abi/x64/windows/WinVaList innerClassName Builder flags 9 +innerclass innerClass jdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder outerClass jdk/internal/foreign/abi/x64/sysv/SysVVaList innerClassName Builder flags 9 +innerclass innerClass jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder outerClass jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList innerClassName Builder flags 9 +innerclass innerClass jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder outerClass jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList innerClassName Builder flags 9 -method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;Ljava/lang/foreign/Addressable;)Ljava/lang/foreign/VaList$Builder; method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;Ljava/lang/foreign/MemorySegment;)Ljava/lang/foreign/VaList$Builder; flags 401 class name java/lang/foreign/ValueLayout -header extends java/lang/Object implements java/lang/foreign/MemoryLayout nestMembers java/lang/foreign/ValueLayout$OfAddress,java/lang/foreign/ValueLayout$OfDouble,java/lang/foreign/ValueLayout$OfLong,java/lang/foreign/ValueLayout$OfFloat,java/lang/foreign/ValueLayout$OfInt,java/lang/foreign/ValueLayout$OfShort,java/lang/foreign/ValueLayout$OfChar,java/lang/foreign/ValueLayout$OfByte,java/lang/foreign/ValueLayout$OfBoolean sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/Object implements java/lang/foreign/MemoryLayout nestMembers java/lang/foreign/ValueLayout$OfAddress,java/lang/foreign/ValueLayout$OfDouble,java/lang/foreign/ValueLayout$OfLong,java/lang/foreign/ValueLayout$OfFloat,java/lang/foreign/ValueLayout$OfInt,java/lang/foreign/ValueLayout$OfShort,java/lang/foreign/ValueLayout$OfChar,java/lang/foreign/ValueLayout$OfByte,java/lang/foreign/ValueLayout$OfBoolean sealed true permittedSubclasses java/lang/foreign/ValueLayout$OfByte,java/lang/foreign/ValueLayout$OfShort,java/lang/foreign/ValueLayout$OfChar,java/lang/foreign/ValueLayout$OfInt,java/lang/foreign/ValueLayout$OfFloat,java/lang/foreign/ValueLayout$OfLong,java/lang/foreign/ValueLayout$OfDouble,java/lang/foreign/ValueLayout$OfBoolean,java/lang/foreign/ValueLayout$OfAddress flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfAddressImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfAddressImpl flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfAddress outerClass java/lang/foreign/ValueLayout innerClassName OfAddress flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfByteImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfByteImpl flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfByte outerClass java/lang/foreign/ValueLayout innerClassName OfByte flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfBooleanImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfBooleanImpl flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfBoolean outerClass java/lang/foreign/ValueLayout innerClassName OfBoolean flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfCharImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfCharImpl flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfChar outerClass java/lang/foreign/ValueLayout innerClassName OfChar flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfShortImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfShortImpl flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfShort outerClass java/lang/foreign/ValueLayout innerClassName OfShort flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfIntImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfIntImpl flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfInt outerClass java/lang/foreign/ValueLayout innerClassName OfInt flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfLongImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfLongImpl flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfLong outerClass java/lang/foreign/ValueLayout innerClassName OfLong flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfFloatImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfFloatImpl flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfFloat outerClass java/lang/foreign/ValueLayout innerClassName OfFloat flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfDoubleImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfDoubleImpl flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfDouble outerClass java/lang/foreign/ValueLayout innerClassName OfDouble flags 609 -method name order descriptor ()Ljava/nio/ByteOrder; -method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout; @@ -468,8 +452,9 @@ method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/ValueLayo method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; flags 401 class name java/lang/foreign/ValueLayout$OfAddress -header extends java/lang/Object implements java/lang/foreign/ValueLayout nestHost java/lang/foreign/ValueLayout sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/Object implements java/lang/foreign/ValueLayout nestHost java/lang/foreign/ValueLayout sealed true permittedSubclasses jdk/internal/foreign/layout/ValueLayouts$OfAddressImpl flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) innerclass innerClass java/lang/foreign/ValueLayout$OfAddress outerClass java/lang/foreign/ValueLayout innerClassName OfAddress flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfAddressImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfAddressImpl flags 19 -method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/ValueLayout$OfAddress; -method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfAddress; -method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout$OfAddress; @@ -485,8 +470,9 @@ method name asUnbounded descriptor ()Ljava/lang/foreign/ValueLayout$OfAddress; f method name isUnbounded descriptor ()Z flags 401 class name java/lang/foreign/ValueLayout$OfBoolean -header extends java/lang/Object implements java/lang/foreign/ValueLayout nestHost java/lang/foreign/ValueLayout sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/Object implements java/lang/foreign/ValueLayout nestHost java/lang/foreign/ValueLayout sealed true permittedSubclasses jdk/internal/foreign/layout/ValueLayouts$OfBooleanImpl flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) innerclass innerClass java/lang/foreign/ValueLayout$OfBoolean outerClass java/lang/foreign/ValueLayout innerClassName OfBoolean flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfBooleanImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfBooleanImpl flags 19 -method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/ValueLayout$OfBoolean; -method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfBoolean; -method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout$OfBoolean; @@ -500,8 +486,9 @@ method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfBool method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout$OfBoolean; flags 401 class name java/lang/foreign/ValueLayout$OfByte -header extends java/lang/Object implements java/lang/foreign/ValueLayout nestHost java/lang/foreign/ValueLayout sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/Object implements java/lang/foreign/ValueLayout nestHost java/lang/foreign/ValueLayout sealed true permittedSubclasses jdk/internal/foreign/layout/ValueLayouts$OfByteImpl flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) innerclass innerClass java/lang/foreign/ValueLayout$OfByte outerClass java/lang/foreign/ValueLayout innerClassName OfByte flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfByteImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfByteImpl flags 19 -method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/ValueLayout$OfByte; -method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfByte; -method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout$OfByte; @@ -515,8 +502,9 @@ method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfByte method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout$OfByte; flags 401 class name java/lang/foreign/ValueLayout$OfChar -header extends java/lang/Object implements java/lang/foreign/ValueLayout nestHost java/lang/foreign/ValueLayout sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/Object implements java/lang/foreign/ValueLayout nestHost java/lang/foreign/ValueLayout sealed true permittedSubclasses jdk/internal/foreign/layout/ValueLayouts$OfCharImpl flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) innerclass innerClass java/lang/foreign/ValueLayout$OfChar outerClass java/lang/foreign/ValueLayout innerClassName OfChar flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfCharImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfCharImpl flags 19 -method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/ValueLayout$OfChar; -method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfChar; -method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout$OfChar; @@ -530,8 +518,9 @@ method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfChar method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout$OfChar; flags 401 class name java/lang/foreign/ValueLayout$OfDouble -header extends java/lang/Object implements java/lang/foreign/ValueLayout nestHost java/lang/foreign/ValueLayout sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/Object implements java/lang/foreign/ValueLayout nestHost java/lang/foreign/ValueLayout sealed true permittedSubclasses jdk/internal/foreign/layout/ValueLayouts$OfDoubleImpl flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) innerclass innerClass java/lang/foreign/ValueLayout$OfDouble outerClass java/lang/foreign/ValueLayout innerClassName OfDouble flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfDoubleImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfDoubleImpl flags 19 -method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/ValueLayout$OfDouble; -method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfDouble; -method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout$OfDouble; @@ -545,8 +534,9 @@ method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfDoub method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout$OfDouble; flags 401 class name java/lang/foreign/ValueLayout$OfFloat -header extends java/lang/Object implements java/lang/foreign/ValueLayout nestHost java/lang/foreign/ValueLayout sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/Object implements java/lang/foreign/ValueLayout nestHost java/lang/foreign/ValueLayout sealed true permittedSubclasses jdk/internal/foreign/layout/ValueLayouts$OfFloatImpl flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) innerclass innerClass java/lang/foreign/ValueLayout$OfFloat outerClass java/lang/foreign/ValueLayout innerClassName OfFloat flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfFloatImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfFloatImpl flags 19 -method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/ValueLayout$OfFloat; -method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfFloat; -method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout$OfFloat; @@ -560,8 +550,9 @@ method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfFloa method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout$OfFloat; flags 401 class name java/lang/foreign/ValueLayout$OfInt -header extends java/lang/Object implements java/lang/foreign/ValueLayout nestHost java/lang/foreign/ValueLayout sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/Object implements java/lang/foreign/ValueLayout nestHost java/lang/foreign/ValueLayout sealed true permittedSubclasses jdk/internal/foreign/layout/ValueLayouts$OfIntImpl flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) innerclass innerClass java/lang/foreign/ValueLayout$OfInt outerClass java/lang/foreign/ValueLayout innerClassName OfInt flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfIntImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfIntImpl flags 19 -method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/ValueLayout$OfInt; -method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfInt; -method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout$OfInt; @@ -575,8 +566,9 @@ method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfInt; method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout$OfInt; flags 401 class name java/lang/foreign/ValueLayout$OfLong -header extends java/lang/Object implements java/lang/foreign/ValueLayout nestHost java/lang/foreign/ValueLayout sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/Object implements java/lang/foreign/ValueLayout nestHost java/lang/foreign/ValueLayout sealed true permittedSubclasses jdk/internal/foreign/layout/ValueLayouts$OfLongImpl flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) innerclass innerClass java/lang/foreign/ValueLayout$OfLong outerClass java/lang/foreign/ValueLayout innerClassName OfLong flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfLongImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfLongImpl flags 19 -method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/ValueLayout$OfLong; -method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfLong; -method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout$OfLong; @@ -590,8 +582,9 @@ method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfLong method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout$OfLong; flags 401 class name java/lang/foreign/ValueLayout$OfShort -header extends java/lang/Object implements java/lang/foreign/ValueLayout nestHost java/lang/foreign/ValueLayout sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/Object implements java/lang/foreign/ValueLayout nestHost java/lang/foreign/ValueLayout sealed true permittedSubclasses jdk/internal/foreign/layout/ValueLayouts$OfShortImpl flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) innerclass innerClass java/lang/foreign/ValueLayout$OfShort outerClass java/lang/foreign/ValueLayout innerClassName OfShort flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfShortImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfShortImpl flags 19 -method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/ValueLayout$OfShort; -method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfShort; -method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout$OfShort; @@ -604,41 +597,6 @@ method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/ValueLayo method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfShort; flags 401 method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout$OfShort; flags 401 -class name java/lang/invoke/CallSite -header extends java/lang/Object sealed true flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/lang/invoke/LambdaMetafactory -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/lang/invoke/MethodHandle -header extends java/lang/Object implements java/lang/constant/Constable sealed true flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -innerclass innerClass java/lang/constant/DirectMethodHandleDesc$Kind outerClass java/lang/constant/DirectMethodHandleDesc innerClassName Kind flags 4019 - -class name java/lang/invoke/MethodHandleProxies -header extends java/lang/Object flags 21 classAnnotations @Ljdk/Profile+Annotation;(value=I1) - -class name java/lang/invoke/StringConcatException -header extends java/lang/Exception flags 21 - -class name java/lang/invoke/VarHandle -header extends java/lang/Object implements java/lang/constant/Constable nestMembers java/lang/invoke/VarHandle$VarHandleDesc,java/lang/invoke/VarHandle$AccessMode sealed true flags 421 -innerclass innerClass java/lang/invoke/VarHandle$AccessMode outerClass java/lang/invoke/VarHandle innerClassName AccessMode flags 4019 -innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19 - -class name java/lang/module/Configuration -header extends java/lang/Object flags 31 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/lang/module/FindException -header extends java/lang/RuntimeException flags 21 - -class name java/lang/module/InvalidModuleDescriptorException -header extends java/lang/RuntimeException flags 21 - class name java/lang/module/ModuleDescriptor header extends java/lang/Object implements java/lang/Comparable nestMembers java/lang/module/ModuleDescriptor$Builder,java/lang/module/ModuleDescriptor$Version,java/lang/module/ModuleDescriptor$Provides,java/lang/module/ModuleDescriptor$Opens,java/lang/module/ModuleDescriptor$Opens$Modifier,java/lang/module/ModuleDescriptor$Exports,java/lang/module/ModuleDescriptor$Exports$Modifier,java/lang/module/ModuleDescriptor$Requires,java/lang/module/ModuleDescriptor$Requires$Modifier,java/lang/module/ModuleDescriptor$Modifier flags 21 signature Ljava/lang/Object;Ljava/lang/Comparable; innerclass innerClass java/lang/module/ModuleDescriptor$Version outerClass java/lang/module/ModuleDescriptor innerClassName Version flags 19 @@ -677,21 +635,6 @@ innerclass innerClass java/lang/module/ModuleDescriptor$Requires$Modifier outerC innerclass innerClass java/lang/reflect/AccessFlag$Location outerClass java/lang/reflect/AccessFlag innerClassName Location flags 4019 method name accessFlags descriptor ()Ljava/util/Set; flags 1 signature ()Ljava/util/Set; -class name java/lang/module/ModuleReader -header extends java/lang/Object implements java/io/Closeable flags 601 - -class name java/lang/module/ModuleReference -header extends java/lang/Object flags 421 - -class name java/lang/module/ResolutionException -header extends java/lang/RuntimeException flags 21 - -class name java/lang/module/ResolvedModule -header extends java/lang/Object flags 31 - -class name java/lang/ref/Reference -header extends java/lang/Object sealed true flags 421 signature Ljava/lang/Object; - class name java/lang/reflect/AccessFlag header extends java/lang/Enum nestMembers java/lang/reflect/AccessFlag$Location flags 4031 signature Ljava/lang/Enum; innerclass innerClass java/lang/reflect/AccessFlag$Location outerClass java/lang/reflect/AccessFlag innerClassName Location flags 4019 @@ -741,13 +684,6 @@ field name MODULE_OPENS descriptor Ljava/lang/reflect/AccessFlag$Location; flags method name values descriptor ()[Ljava/lang/reflect/AccessFlag$Location; flags 9 method name valueOf descriptor (Ljava/lang/String;)Ljava/lang/reflect/AccessFlag$Location; flags 9 -class name java/lang/reflect/AccessibleObject -header extends java/lang/Object implements java/lang/reflect/AnnotatedElement flags 21 classAnnotations @Ljdk/Profile+Annotation;(value=I1) - -class name java/lang/reflect/AnnotatedElement -header extends java/lang/Object flags 601 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name java/lang/reflect/ClassFileFormatVersion header extends java/lang/Enum flags 4031 signature Ljava/lang/Enum; innerclass innerClass java/lang/Runtime$Version outerClass java/lang/Runtime innerClassName Version flags 19 @@ -781,7 +717,7 @@ method name runtimeVersion descriptor ()Ljava/lang/Runtime$Version; flags 1 method name fromMajor descriptor (I)Ljava/lang/reflect/ClassFileFormatVersion; flags 9 class name java/lang/reflect/Executable -header extends java/lang/reflect/AccessibleObject implements java/lang/reflect/Member,java/lang/reflect/GenericDeclaration sealed true flags 421 +header extends java/lang/reflect/AccessibleObject implements java/lang/reflect/Member,java/lang/reflect/GenericDeclaration sealed true permittedSubclasses java/lang/reflect/Constructor,java/lang/reflect/Method flags 421 innerclass innerClass java/lang/reflect/AccessFlag$Location outerClass java/lang/reflect/AccessFlag innerClassName Location flags 4019 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -method name getParameterCount descriptor ()I @@ -793,9 +729,6 @@ header extends java/lang/reflect/AccessibleObject implements java/lang/reflect/M innerclass innerClass java/lang/reflect/AccessFlag$Location outerClass java/lang/reflect/AccessFlag innerClassName Location flags 4019 method name accessFlags descriptor ()Ljava/util/Set; flags 1 signature ()Ljava/util/Set; -class name java/lang/reflect/InaccessibleObjectException -header extends java/lang/RuntimeException flags 21 - class name java/lang/reflect/Member method name accessFlags descriptor ()Ljava/util/Set; flags 1 signature ()Ljava/util/Set; @@ -812,20 +745,6 @@ class name java/net/DatagramPacket header extends java/lang/Object flags 31 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -class name java/net/DatagramSocket -header extends java/lang/Object implements java/io/Closeable flags 21 classAnnotations @Ljdk/Profile+Annotation;(value=I1) - -class name java/net/InetAddress -header extends java/lang/Object implements java/io/Serializable sealed true flags 21 -innerclass innerClass java/net/spi/InetAddressResolver$LookupPolicy outerClass java/net/spi/InetAddressResolver innerClassName LookupPolicy flags 19 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/net/spi/InetAddressResolverProvider$Configuration outerClass java/net/spi/InetAddressResolverProvider innerClassName Configuration flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/net/SocketImpl -header extends java/lang/Object implements java/net/SocketOptions flags 421 - class name java/net/URL -method name descriptor (Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;)V -method name descriptor (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V @@ -841,42 +760,6 @@ method name descriptor (Ljava/net/URL;Ljava/lang/String;)V thrownTypes ja method name descriptor (Ljava/net/URL;Ljava/lang/String;Ljava/net/URLStreamHandler;)V thrownTypes java/net/MalformedURLException flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="20") method name of descriptor (Ljava/net/URI;Ljava/net/URLStreamHandler;)Ljava/net/URL; thrownTypes java/net/MalformedURLException flags 9 -class name java/net/spi/InetAddressResolverProvider$Configuration -header extends java/lang/Object nestHost java/net/spi/InetAddressResolverProvider sealed true flags 601 -innerclass innerClass java/net/spi/InetAddressResolverProvider$Configuration outerClass java/net/spi/InetAddressResolverProvider innerClassName Configuration flags 609 - -class name java/net/spi/URLStreamHandlerProvider -header extends java/lang/Object implements java/net/URLStreamHandlerFactory flags 421 - -class name java/nio/Buffer -header extends java/lang/Object sealed true flags 421 - -class name java/nio/ByteBuffer -header extends java/nio/Buffer implements java/lang/Comparable sealed true flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable; - -class name java/nio/CharBuffer -header extends java/nio/Buffer implements java/lang/Comparable,java/lang/Appendable,java/lang/CharSequence,java/lang/Readable sealed true flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable;Ljava/lang/Appendable;Ljava/lang/CharSequence;Ljava/lang/Readable; -innerclass innerClass java/util/Spliterator$OfInt outerClass java/util/Spliterator innerClassName OfInt flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/nio/DoubleBuffer -header extends java/nio/Buffer implements java/lang/Comparable sealed true flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable; - -class name java/nio/FloatBuffer -header extends java/nio/Buffer implements java/lang/Comparable sealed true flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable; - -class name java/nio/IntBuffer -header extends java/nio/Buffer implements java/lang/Comparable sealed true flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable; - -class name java/nio/LongBuffer -header extends java/nio/Buffer implements java/lang/Comparable sealed true flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable; - -class name java/nio/MappedByteBuffer -header extends java/nio/ByteBuffer sealed true flags 421 - -class name java/nio/ShortBuffer -header extends java/nio/Buffer implements java/lang/Comparable sealed true flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable; - class name java/nio/channels/FileChannel -method name map descriptor (Ljava/nio/channels/FileChannel$MapMode;JJLjava/lang/foreign/MemorySession;)Ljava/lang/foreign/MemorySegment; method name map descriptor (Ljava/nio/channels/FileChannel$MapMode;JJLjava/lang/foreign/SegmentScope;)Ljava/lang/foreign/MemorySegment; thrownTypes java/io/IOException flags 1 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) @@ -885,12 +768,6 @@ class name java/nio/file/spi/FileSystemProvider method name exists descriptor (Ljava/nio/file/Path;[Ljava/nio/file/LinkOption;)Z flags 81 method name readAttributesIfExists descriptor (Ljava/nio/file/Path;Ljava/lang/Class;[Ljava/nio/file/LinkOption;)Ljava/nio/file/attribute/BasicFileAttributes; thrownTypes java/io/IOException flags 81 signature (Ljava/nio/file/Path;Ljava/lang/Class;[Ljava/nio/file/LinkOption;)TA; -class name java/security/Certificate -header extends java/lang/Object flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="1.2") - -class name java/security/Identity -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 421 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="1.2") - class name java/security/InvalidParameterException method name descriptor (Ljava/lang/String;Ljava/lang/Throwable;)V flags 1 method name descriptor (Ljava/lang/Throwable;)V flags 1 @@ -925,18 +802,11 @@ header extends java/util/Random flags 21 runtimeAnnotations @Ljdk/internal/util/ innerclass innerClass java/security/Provider$Service outerClass java/security/Provider innerClassName Service flags 9 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -class name java/security/SecureRandomParameters -header extends java/lang/Object flags 601 - class name java/security/Security header extends java/lang/Object flags 31 innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -class name java/security/SignedObject -header extends java/lang/Object implements java/io/Serializable flags 31 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 - class name java/security/cert/CertPathBuilder header extends java/lang/Object flags 21 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 @@ -951,259 +821,35 @@ innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang -method name getDefaultType descriptor ()Ljava/lang/String; method name getDefaultType descriptor ()Ljava/lang/String; flags 9 -class name java/security/cert/CertificateRevokedException -header extends java/security/cert/CertificateException flags 21 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 - -class name java/security/cert/URICertStoreParameters -header extends java/lang/Object implements java/security/cert/CertStoreParameters flags 31 - class name java/security/interfaces/DSAKeyPairGenerator -method name initialize descriptor (Ljava/security/interfaces/DSAParams;Ljava/security/SecureRandom;)V -method name initialize descriptor (IZLjava/security/SecureRandom;)V method name initialize descriptor (Ljava/security/interfaces/DSAParams;Ljava/security/SecureRandom;)V flags 401 method name initialize descriptor (IZLjava/security/SecureRandom;)V flags 401 -class name java/security/interfaces/RSAKey --method name getParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec; -method name getParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec; flags 1 - class name java/security/spec/EncodedKeySpec header extends java/lang/Object implements java/security/spec/KeySpec flags 421 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -class name java/security/spec/MGF1ParameterSpec --field name SHA512_224 descriptor Ljava/security/spec/MGF1ParameterSpec; --field name SHA512_256 descriptor Ljava/security/spec/MGF1ParameterSpec; -field name SHA512_224 descriptor Ljava/security/spec/MGF1ParameterSpec; flags 19 -field name SHA512_256 descriptor Ljava/security/spec/MGF1ParameterSpec; flags 19 - -class name java/security/spec/PSSParameterSpec --field name TRAILER_FIELD_BC descriptor I --method name toString descriptor ()Ljava/lang/String; -field name TRAILER_FIELD_BC descriptor I constantValue 1 flags 19 -method name toString descriptor ()Ljava/lang/String; flags 1 - -class name java/security/spec/RSAKeyGenParameterSpec --method name descriptor (ILjava/math/BigInteger;Ljava/security/spec/AlgorithmParameterSpec;)V --method name getKeyParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec; -method name 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 --method name 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 -method name 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/RSAPrivateCrtKeySpec --method name 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 -method name 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 --method name descriptor (Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/security/spec/AlgorithmParameterSpec;)V --method name getParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec; -method name 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 --method name descriptor (Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/security/spec/AlgorithmParameterSpec;)V --method name getParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec; -method name 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/text/DateFormatSymbols -header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 21 -innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019 - -class name java/text/RuleBasedCollator -header extends java/text/Collator flags 21 -innerclass innerClass java/text/Normalizer$Form outerClass java/text/Normalizer innerClassName Form flags 4019 - -class name java/time/ZoneId -header extends java/lang/Object implements java/io/Serializable sealed true flags 421 runtimeAnnotations @Ljdk/internal/ValueBased; -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 - class name java/time/ZoneOffset header extends java/time/ZoneId implements java/time/temporal/TemporalAccessor,java/time/temporal/TemporalAdjuster,java/lang/Comparable,java/io/Serializable flags 31 signature Ljava/time/ZoneId;Ljava/time/temporal/TemporalAccessor;Ljava/time/temporal/TemporalAdjuster;Ljava/lang/Comparable;Ljava/io/Serializable; runtimeAnnotations @Ljdk/internal/ValueBased; innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -class name java/time/chrono/ChronoLocalDate -header extends java/lang/Object implements java/time/temporal/Temporal,java/time/temporal/TemporalAdjuster,java/lang/Comparable flags 601 signature Ljava/lang/Object;Ljava/time/temporal/Temporal;Ljava/time/temporal/TemporalAdjuster;Ljava/lang/Comparable; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/time/chrono/ChronoLocalDateTime -header extends java/lang/Object implements java/time/temporal/Temporal,java/time/temporal/TemporalAdjuster,java/lang/Comparable flags 601 signature Ljava/lang/Object;Ljava/time/temporal/Temporal;Ljava/time/temporal/TemporalAdjuster;Ljava/lang/Comparable;>; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name java/time/format/DecimalStyle header extends java/lang/Object flags 31 innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -class name java/time/temporal/TemporalAdjusters -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/Comparator -header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/DoubleSummaryStatistics -header extends java/lang/Object implements java/util/function/DoubleConsumer flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/EnumSet -header extends java/util/AbstractSet implements java/lang/Cloneable,java/io/Serializable sealed true flags 421 signature ;>Ljava/util/AbstractSet;Ljava/lang/Cloneable;Ljava/io/Serializable; - -class name java/util/GregorianCalendar -header extends java/util/Calendar flags 21 -innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019 - class name java/util/IdentityHashMap method name remove descriptor (Ljava/lang/Object;Ljava/lang/Object;)Z flags 1 method name replace descriptor (Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z flags 1 signature (TK;TV;TV;)Z -class name java/util/IllegalFormatException -header extends java/lang/IllegalArgumentException sealed true flags 21 - -class name java/util/Locale$IsoCountryCode -header extends java/lang/Enum nestHost java/util/Locale sealed true flags 4421 signature Ljava/lang/Enum; -innerclass innerClass java/util/Locale$IsoCountryCode outerClass java/util/Locale innerClassName IsoCountryCode flags 4409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/Observable -header extends java/lang/Object flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="9") - -class name java/util/Observer -header extends java/lang/Object flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="9") - -class name java/util/TimeZone -header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 421 -innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019 - -class name java/util/TreeSet -header extends java/util/AbstractSet implements java/util/NavigableSet,java/lang/Cloneable,java/io/Serializable flags 21 signature Ljava/util/AbstractSet;Ljava/util/NavigableSet;Ljava/lang/Cloneable;Ljava/io/Serializable; -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 - -class name java/util/concurrent/ConcurrentHashMap$CollectionView -header extends java/lang/Object implements java/util/Collection,java/io/Serializable nestHost java/util/concurrent/ConcurrentHashMap sealed true flags 420 signature Ljava/lang/Object;Ljava/util/Collection;Ljava/io/Serializable; -innerclass innerClass java/util/concurrent/ConcurrentHashMap$CollectionView outerClass java/util/concurrent/ConcurrentHashMap innerClassName CollectionView flags 408 -innerclass innerClass java/util/concurrent/ConcurrentHashMap$KeySetView outerClass java/util/concurrent/ConcurrentHashMap innerClassName KeySetView flags 19 - -class name java/util/concurrent/ConcurrentMap -header extends java/lang/Object implements java/util/Map flags 601 signature Ljava/lang/Object;Ljava/util/Map; -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/concurrent/ConcurrentSkipListSet -header extends java/util/AbstractSet implements java/util/NavigableSet,java/lang/Cloneable,java/io/Serializable flags 21 signature Ljava/util/AbstractSet;Ljava/util/NavigableSet;Ljava/lang/Cloneable;Ljava/io/Serializable; -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/concurrent/CountedCompleter -header extends java/util/concurrent/ForkJoinTask flags 421 signature Ljava/util/concurrent/ForkJoinTask; classAnnotations @Ljdk/Profile+Annotation;(value=I1) - class name java/util/concurrent/ForkJoinPool method name externalSubmit descriptor (Ljava/util/concurrent/ForkJoinTask;)Ljava/util/concurrent/ForkJoinTask; flags 1 signature (Ljava/util/concurrent/ForkJoinTask;)Ljava/util/concurrent/ForkJoinTask; class name java/util/concurrent/ForkJoinWorkerThread method name getQueuedTaskCount descriptor ()I flags 1 -class name java/util/concurrent/atomic/AtomicBoolean -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 - -class name java/util/concurrent/atomic/AtomicReference -header extends java/lang/Object implements java/io/Serializable flags 21 signature Ljava/lang/Object;Ljava/io/Serializable; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/concurrent/atomic/AtomicReferenceArray -header extends java/lang/Object implements java/io/Serializable flags 21 signature Ljava/lang/Object;Ljava/io/Serializable; -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -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 - -class name java/util/function/BiConsumer -header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/BiFunction -header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/BiPredicate -header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/BinaryOperator -header extends java/lang/Object implements java/util/function/BiFunction flags 601 signature Ljava/lang/Object;Ljava/util/function/BiFunction; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/Consumer -header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/DoubleConsumer -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/DoublePredicate -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/DoubleUnaryOperator -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/Function -header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/IntConsumer -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/IntPredicate -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/IntUnaryOperator -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/LongConsumer -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/LongPredicate -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/LongUnaryOperator -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/Predicate -header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/UnaryOperator -header extends java/lang/Object implements java/util/function/Function flags 601 signature Ljava/lang/Object;Ljava/util/function/Function; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name java/util/regex/MatchResult method name start descriptor (Ljava/lang/String;)I flags 1 method name end descriptor (Ljava/lang/String;)I flags 1 @@ -1218,25 +864,6 @@ method name hasMatch descriptor ()Z flags 1 class name java/util/regex/Pattern method name namedGroups descriptor ()Ljava/util/Map; flags 1 signature ()Ljava/util/Map; -class name java/util/spi/AbstractResourceBundleProvider -header extends java/lang/Object implements java/util/spi/ResourceBundleProvider flags 421 -innerclass innerClass java/util/ResourceBundle$Control outerClass java/util/ResourceBundle innerClassName Control flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/spi/CurrencyNameProvider -header extends java/util/spi/LocaleServiceProvider flags 421 -innerclass innerClass java/util/ResourceBundle$Control outerClass java/util/ResourceBundle innerClassName Control flags 9 - -class name java/util/spi/ResourceBundleProvider -header extends java/lang/Object flags 601 - -class name java/util/spi/ToolProvider -header extends java/lang/Object flags 601 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/zip/CRC32C -header extends java/lang/Object implements java/util/zip/Checksum flags 31 - class name java/util/zip/ZipInputStream method name read descriptor ()I thrownTypes java/io/IOException flags 1 method name readAllBytes descriptor ()[B thrownTypes java/io/IOException flags 1 @@ -1245,156 +872,302 @@ method name readNBytes descriptor ([BII)I thrownTypes java/io/IOException flags method name skipNBytes descriptor (J)V thrownTypes java/io/IOException flags 1 method name transferTo descriptor (Ljava/io/OutputStream;)J thrownTypes java/io/IOException flags 1 -class name javax/crypto/AEADBadTagException -header extends javax/crypto/BadPaddingException flags 21 - -class name javax/crypto/BadPaddingException -header extends java/security/GeneralSecurityException flags 21 - -class name javax/crypto/CipherInputStream -header extends java/io/FilterInputStream flags 21 - -class name javax/crypto/CipherOutputStream -header extends java/io/FilterOutputStream flags 21 - -class name javax/crypto/CipherSpi -header extends java/lang/Object flags 421 - -class name javax/crypto/EncryptedPrivateKeyInfo -header extends java/lang/Object flags 21 - -class name javax/crypto/ExemptionMechanism -header extends java/lang/Object flags 21 - -class name javax/crypto/ExemptionMechanismException -header extends java/security/GeneralSecurityException flags 21 - -class name javax/crypto/ExemptionMechanismSpi -header extends java/lang/Object flags 421 - -class name javax/crypto/IllegalBlockSizeException -header extends java/security/GeneralSecurityException flags 21 - -class name javax/crypto/KeyAgreement -header extends java/lang/Object flags 21 -innerclass innerClass java/security/Provider$Service outerClass java/security/Provider innerClassName Service flags 9 - -class name javax/crypto/KeyAgreementSpi -header extends java/lang/Object flags 421 - -class name javax/crypto/KeyGenerator -header extends java/lang/Object flags 21 -innerclass innerClass java/security/Provider$Service outerClass java/security/Provider innerClassName Service flags 9 - -class name javax/crypto/KeyGeneratorSpi -header extends java/lang/Object flags 421 - -class name javax/crypto/Mac -header extends java/lang/Object implements java/lang/Cloneable flags 21 -innerclass innerClass java/security/Provider$Service outerClass java/security/Provider innerClassName Service flags 9 - -class name javax/crypto/MacSpi -header extends java/lang/Object flags 421 - -class name javax/crypto/NoSuchPaddingException -header extends java/security/GeneralSecurityException flags 21 - -class name javax/crypto/NullCipher -header extends javax/crypto/Cipher flags 21 - -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 - -class name javax/crypto/SecretKey -header extends java/lang/Object implements java/security/Key,javax/security/auth/Destroyable flags 601 - -class name javax/crypto/SecretKeyFactory -header extends java/lang/Object flags 21 -innerclass innerClass java/security/Provider$Service outerClass java/security/Provider innerClassName Service flags 9 - -class name javax/crypto/SecretKeyFactorySpi -header extends java/lang/Object flags 421 +class name javax/crypto/spec/PBEKeySpec +-method name clearPassword descriptor ()V +-method name getPassword descriptor ()[C +method name clearPassword descriptor ()V flags 31 +method name getPassword descriptor ()[C flags 31 -class name javax/crypto/ShortBufferException -header extends java/security/GeneralSecurityException flags 21 +class name javax/net/ssl/SSLParameters +method name getNamedGroups descriptor ()[Ljava/lang/String; flags 1 +method name setNamedGroups descriptor ([Ljava/lang/String;)V flags 1 -class name javax/crypto/interfaces/DHKey +class name jdk/internal/access/foreign/UnmapperProxy header extends java/lang/Object flags 601 +method name address descriptor ()J flags 401 +method name fileDescriptor descriptor ()Ljava/io/FileDescriptor; flags 401 +method name isSync descriptor ()Z flags 401 +method name unmap descriptor ()V flags 401 -class name javax/crypto/interfaces/DHPrivateKey -header extends java/lang/Object implements javax/crypto/interfaces/DHKey,java/security/PrivateKey flags 601 - -class name javax/crypto/interfaces/DHPublicKey -header extends java/lang/Object implements javax/crypto/interfaces/DHKey,java/security/PublicKey flags 601 - -class name javax/crypto/interfaces/PBEKey -header extends java/lang/Object implements javax/crypto/SecretKey flags 601 - -class name javax/crypto/spec/DESKeySpec -header extends java/lang/Object implements java/security/spec/KeySpec flags 21 - -class name javax/crypto/spec/DESedeKeySpec -header extends java/lang/Object implements java/security/spec/KeySpec flags 21 - -class name javax/crypto/spec/DHGenParameterSpec -header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 +class name jdk/internal/foreign/layout/AbstractGroupLayout +header extends jdk/internal/foreign/layout/AbstractLayout sealed true permittedSubclasses jdk/internal/foreign/layout/StructLayoutImpl,jdk/internal/foreign/layout/UnionLayoutImpl flags 421 signature ;:Ljava/lang/foreign/MemoryLayout;>Ljdk/internal/foreign/layout/AbstractLayout; +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +method name memberLayouts descriptor ()Ljava/util/List; flags 11 signature ()Ljava/util/List; +method name toString descriptor ()Ljava/lang/String; flags 11 +method name equals descriptor (Ljava/lang/Object;)Z flags 11 +method name hashCode descriptor ()I flags 11 +method name hasNaturalAlignment descriptor ()Z flags 11 + +class name jdk/internal/foreign/layout/AbstractLayout +header extends java/lang/Object sealed true permittedSubclasses jdk/internal/foreign/layout/AbstractGroupLayout,jdk/internal/foreign/layout/PaddingLayoutImpl,jdk/internal/foreign/layout/SequenceLayoutImpl,jdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout flags 421 signature ;:Ljava/lang/foreign/MemoryLayout;>Ljava/lang/Object; +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName AbstractValueLayout flags 408 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +method name withName descriptor (Ljava/lang/String;)Ljdk/internal/foreign/layout/AbstractLayout; flags 11 signature (Ljava/lang/String;)TL; +method name name descriptor ()Ljava/util/Optional; flags 11 signature ()Ljava/util/Optional; +method name withBitAlignment descriptor (J)Ljdk/internal/foreign/layout/AbstractLayout; flags 11 signature (J)TL; +method name bitAlignment descriptor ()J flags 11 +method name byteSize descriptor ()J flags 11 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name bitSize descriptor ()J flags 11 +method name hasNaturalAlignment descriptor ()Z flags 1 +method name hashCode descriptor ()I flags 1 +method name equals descriptor (Ljava/lang/Object;)Z flags 1 +method name toString descriptor ()Ljava/lang/String; flags 401 + +class name jdk/internal/foreign/layout/PaddingLayoutImpl +header extends jdk/internal/foreign/layout/AbstractLayout implements java/lang/foreign/PaddingLayout flags 31 signature Ljdk/internal/foreign/layout/AbstractLayout;Ljava/lang/foreign/PaddingLayout; +method name toString descriptor ()Ljava/lang/String; flags 1 +method name equals descriptor (Ljava/lang/Object;)Z flags 1 +method name hashCode descriptor ()I flags 1 +method name hasNaturalAlignment descriptor ()Z flags 1 +method name of descriptor (J)Ljava/lang/foreign/PaddingLayout; flags 9 +method name withBitAlignment descriptor (J)Ljava/lang/foreign/PaddingLayout; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/PaddingLayout; flags 1041 +method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/MemoryLayout; flags 1041 -class name javax/crypto/spec/DHParameterSpec -header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 +class name jdk/internal/foreign/layout/SequenceLayoutImpl +header extends jdk/internal/foreign/layout/AbstractLayout implements java/lang/foreign/SequenceLayout flags 31 signature Ljdk/internal/foreign/layout/AbstractLayout;Ljava/lang/foreign/SequenceLayout; +method name elementLayout descriptor ()Ljava/lang/foreign/MemoryLayout; flags 1 +method name elementCount descriptor ()J flags 1 +method name withElementCount descriptor (J)Ljava/lang/foreign/SequenceLayout; flags 1 +method name reshape descriptor ([J)Ljava/lang/foreign/SequenceLayout; flags 81 +method name flatten descriptor ()Ljava/lang/foreign/SequenceLayout; flags 1 +method name toString descriptor ()Ljava/lang/String; flags 1 +method name equals descriptor (Ljava/lang/Object;)Z flags 1 +method name hashCode descriptor ()I flags 1 +method name hasNaturalAlignment descriptor ()Z flags 1 +method name of descriptor (JLjava/lang/foreign/MemoryLayout;)Ljava/lang/foreign/SequenceLayout; flags 9 +method name withBitAlignment descriptor (J)Ljava/lang/foreign/SequenceLayout; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/SequenceLayout; flags 1041 +method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/MemoryLayout; flags 1041 -class name javax/crypto/spec/DHPrivateKeySpec -header extends java/lang/Object implements java/security/spec/KeySpec flags 21 +class name jdk/internal/foreign/layout/StructLayoutImpl +header extends jdk/internal/foreign/layout/AbstractGroupLayout implements java/lang/foreign/StructLayout flags 31 signature Ljdk/internal/foreign/layout/AbstractGroupLayout;Ljava/lang/foreign/StructLayout; +method name of descriptor (Ljava/util/List;)Ljava/lang/foreign/StructLayout; flags 9 signature (Ljava/util/List;)Ljava/lang/foreign/StructLayout; +method name withBitAlignment descriptor (J)Ljava/lang/foreign/StructLayout; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/StructLayout; flags 1041 +method name withBitAlignment descriptor (J)Ljava/lang/foreign/GroupLayout; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/GroupLayout; flags 1041 +method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/MemoryLayout; flags 1041 -class name javax/crypto/spec/DHPublicKeySpec -header extends java/lang/Object implements java/security/spec/KeySpec flags 21 +class name jdk/internal/foreign/layout/UnionLayoutImpl +header extends jdk/internal/foreign/layout/AbstractGroupLayout implements java/lang/foreign/UnionLayout flags 31 signature Ljdk/internal/foreign/layout/AbstractGroupLayout;Ljava/lang/foreign/UnionLayout; +method name of descriptor (Ljava/util/List;)Ljava/lang/foreign/UnionLayout; flags 9 signature (Ljava/util/List;)Ljava/lang/foreign/UnionLayout; +method name withBitAlignment descriptor (J)Ljava/lang/foreign/UnionLayout; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/UnionLayout; flags 1041 +method name withBitAlignment descriptor (J)Ljava/lang/foreign/GroupLayout; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/GroupLayout; flags 1041 +method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/MemoryLayout; flags 1041 -class name javax/crypto/spec/GCMParameterSpec -header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 +class name jdk/internal/foreign/layout/ValueLayouts +header extends java/lang/Object nestMembers jdk/internal/foreign/layout/ValueLayouts$OfAddressImpl,jdk/internal/foreign/layout/ValueLayouts$OfDoubleImpl,jdk/internal/foreign/layout/ValueLayouts$OfLongImpl,jdk/internal/foreign/layout/ValueLayouts$OfFloatImpl,jdk/internal/foreign/layout/ValueLayouts$OfIntImpl,jdk/internal/foreign/layout/ValueLayouts$OfShortImpl,jdk/internal/foreign/layout/ValueLayouts$OfCharImpl,jdk/internal/foreign/layout/ValueLayouts$OfByteImpl,jdk/internal/foreign/layout/ValueLayouts$OfBooleanImpl,jdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout flags 31 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfAddressImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfAddressImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfDoubleImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfDoubleImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfLongImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfLongImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfFloatImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfFloatImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfIntImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfIntImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfShortImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfShortImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfCharImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfCharImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfByteImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfByteImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfBooleanImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfBooleanImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName AbstractValueLayout flags 408 + +class name jdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout +header extends jdk/internal/foreign/layout/AbstractLayout nestHost jdk/internal/foreign/layout/ValueLayouts sealed true permittedSubclasses jdk/internal/foreign/layout/ValueLayouts$OfByteImpl,jdk/internal/foreign/layout/ValueLayouts$OfShortImpl,jdk/internal/foreign/layout/ValueLayouts$OfCharImpl,jdk/internal/foreign/layout/ValueLayouts$OfIntImpl,jdk/internal/foreign/layout/ValueLayouts$OfFloatImpl,jdk/internal/foreign/layout/ValueLayouts$OfLongImpl,jdk/internal/foreign/layout/ValueLayouts$OfDoubleImpl,jdk/internal/foreign/layout/ValueLayouts$OfBooleanImpl,jdk/internal/foreign/layout/ValueLayouts$OfAddressImpl flags 420 signature ;:Ljava/lang/foreign/ValueLayout;>Ljdk/internal/foreign/layout/AbstractLayout; +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName AbstractValueLayout flags 408 +innerclass innerClass java/lang/foreign/MemoryLayout$PathElement outerClass java/lang/foreign/MemoryLayout innerClassName PathElement flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfByteImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfByteImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfShortImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfShortImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfCharImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfCharImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfIntImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfIntImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfFloatImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfFloatImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfLongImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfLongImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfDoubleImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfDoubleImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfBooleanImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfBooleanImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfAddressImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfAddressImpl flags 19 +method name order descriptor ()Ljava/nio/ByteOrder; flags 11 +method name toString descriptor ()Ljava/lang/String; flags 11 +method name equals descriptor (Ljava/lang/Object;)Z flags 1 +method name arrayElementVarHandle descriptor ([I)Ljava/lang/invoke/VarHandle; flags 91 +method name carrier descriptor ()Ljava/lang/Class; flags 11 signature ()Ljava/lang/Class<*>; +method name hashCode descriptor ()I flags 1 +method name accessHandle descriptor ()Ljava/lang/invoke/VarHandle; flags 11 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; + +class name jdk/internal/foreign/layout/ValueLayouts$OfAddressImpl +header extends jdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout implements java/lang/foreign/ValueLayout$OfAddress nestHost jdk/internal/foreign/layout/ValueLayouts flags 31 signature Ljdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout;Ljava/lang/foreign/ValueLayout$OfAddress; +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfAddressImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfAddressImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName AbstractValueLayout flags 408 +innerclass innerClass java/lang/foreign/ValueLayout$OfAddress outerClass java/lang/foreign/ValueLayout innerClassName OfAddress flags 609 +method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljdk/internal/foreign/layout/ValueLayouts$OfAddressImpl; flags 1 +method name equals descriptor (Ljava/lang/Object;)Z flags 1 +method name hashCode descriptor ()I flags 1 +method name asUnbounded descriptor ()Ljava/lang/foreign/ValueLayout$OfAddress; flags 1 runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive; +method name isUnbounded descriptor ()Z flags 1 +method name of descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout$OfAddress; flags 9 +method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout; flags 1041 +method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout$OfAddress; flags 1041 +method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfAddress; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/ValueLayout$OfAddress; flags 1041 +method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/ValueLayout; flags 1041 +method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout; flags 1041 +method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/MemoryLayout; flags 1041 -class name javax/crypto/spec/IvParameterSpec -header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 +class name jdk/internal/foreign/layout/ValueLayouts$OfBooleanImpl +header extends jdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout implements java/lang/foreign/ValueLayout$OfBoolean nestHost jdk/internal/foreign/layout/ValueLayouts flags 31 signature Ljdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout;Ljava/lang/foreign/ValueLayout$OfBoolean; +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName AbstractValueLayout flags 408 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfBooleanImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfBooleanImpl flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfBoolean outerClass java/lang/foreign/ValueLayout innerClassName OfBoolean flags 609 +method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljdk/internal/foreign/layout/ValueLayouts$OfBooleanImpl; flags 1 +method name of descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout$OfBoolean; flags 9 +method name hashCode descriptor ()I flags 1041 +method name equals descriptor (Ljava/lang/Object;)Z flags 1041 +method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout; flags 1041 +method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout$OfBoolean; flags 1041 +method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfBoolean; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/ValueLayout$OfBoolean; flags 1041 +method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/ValueLayout; flags 1041 +method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout; flags 1041 +method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/MemoryLayout; flags 1041 -class name javax/crypto/spec/OAEPParameterSpec -header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 -innerclass innerClass javax/crypto/spec/PSource$PSpecified outerClass javax/crypto/spec/PSource innerClassName PSpecified flags 19 +class name jdk/internal/foreign/layout/ValueLayouts$OfByteImpl +header extends jdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout implements java/lang/foreign/ValueLayout$OfByte nestHost jdk/internal/foreign/layout/ValueLayouts flags 31 signature Ljdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout;Ljava/lang/foreign/ValueLayout$OfByte; +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName AbstractValueLayout flags 408 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfByteImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfByteImpl flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfByte outerClass java/lang/foreign/ValueLayout innerClassName OfByte flags 609 +method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljdk/internal/foreign/layout/ValueLayouts$OfByteImpl; flags 1 +method name of descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout$OfByte; flags 9 +method name hashCode descriptor ()I flags 1041 +method name equals descriptor (Ljava/lang/Object;)Z flags 1041 +method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout; flags 1041 +method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout$OfByte; flags 1041 +method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfByte; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/ValueLayout$OfByte; flags 1041 +method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/ValueLayout; flags 1041 +method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout; flags 1041 +method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/MemoryLayout; flags 1041 -class name javax/crypto/spec/PBEKeySpec -header extends java/lang/Object implements java/security/spec/KeySpec flags 21 --method name clearPassword descriptor ()V --method name getPassword descriptor ()[C -method name clearPassword descriptor ()V flags 31 -method name getPassword descriptor ()[C flags 31 +class name jdk/internal/foreign/layout/ValueLayouts$OfCharImpl +header extends jdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout implements java/lang/foreign/ValueLayout$OfChar nestHost jdk/internal/foreign/layout/ValueLayouts flags 31 signature Ljdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout;Ljava/lang/foreign/ValueLayout$OfChar; +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName AbstractValueLayout flags 408 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfCharImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfCharImpl flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfChar outerClass java/lang/foreign/ValueLayout innerClassName OfChar flags 609 +method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljdk/internal/foreign/layout/ValueLayouts$OfCharImpl; flags 1 +method name of descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout$OfChar; flags 9 +method name hashCode descriptor ()I flags 1041 +method name equals descriptor (Ljava/lang/Object;)Z flags 1041 +method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout; flags 1041 +method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout$OfChar; flags 1041 +method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfChar; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/ValueLayout$OfChar; flags 1041 +method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/ValueLayout; flags 1041 +method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout; flags 1041 +method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/MemoryLayout; flags 1041 -class name javax/crypto/spec/PBEParameterSpec -header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 +class name jdk/internal/foreign/layout/ValueLayouts$OfDoubleImpl +header extends jdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout implements java/lang/foreign/ValueLayout$OfDouble nestHost jdk/internal/foreign/layout/ValueLayouts flags 31 signature Ljdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout;Ljava/lang/foreign/ValueLayout$OfDouble; +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName AbstractValueLayout flags 408 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfDoubleImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfDoubleImpl flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfDouble outerClass java/lang/foreign/ValueLayout innerClassName OfDouble flags 609 +method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljdk/internal/foreign/layout/ValueLayouts$OfDoubleImpl; flags 1 +method name of descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout$OfDouble; flags 9 +method name hashCode descriptor ()I flags 1041 +method name equals descriptor (Ljava/lang/Object;)Z flags 1041 +method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout; flags 1041 +method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout$OfDouble; flags 1041 +method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfDouble; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/ValueLayout$OfDouble; flags 1041 +method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/ValueLayout; flags 1041 +method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout; flags 1041 +method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/MemoryLayout; flags 1041 -class name javax/crypto/spec/RC2ParameterSpec -header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 +class name jdk/internal/foreign/layout/ValueLayouts$OfFloatImpl +header extends jdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout implements java/lang/foreign/ValueLayout$OfFloat nestHost jdk/internal/foreign/layout/ValueLayouts flags 31 signature Ljdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout;Ljava/lang/foreign/ValueLayout$OfFloat; +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName AbstractValueLayout flags 408 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfFloatImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfFloatImpl flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfFloat outerClass java/lang/foreign/ValueLayout innerClassName OfFloat flags 609 +method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljdk/internal/foreign/layout/ValueLayouts$OfFloatImpl; flags 1 +method name of descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout$OfFloat; flags 9 +method name hashCode descriptor ()I flags 1041 +method name equals descriptor (Ljava/lang/Object;)Z flags 1041 +method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout; flags 1041 +method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout$OfFloat; flags 1041 +method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfFloat; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/ValueLayout$OfFloat; flags 1041 +method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/ValueLayout; flags 1041 +method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout; flags 1041 +method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/MemoryLayout; flags 1041 -class name javax/crypto/spec/RC5ParameterSpec -header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 +class name jdk/internal/foreign/layout/ValueLayouts$OfIntImpl +header extends jdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout implements java/lang/foreign/ValueLayout$OfInt nestHost jdk/internal/foreign/layout/ValueLayouts flags 31 signature Ljdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout;Ljava/lang/foreign/ValueLayout$OfInt; +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName AbstractValueLayout flags 408 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfIntImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfIntImpl flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfInt outerClass java/lang/foreign/ValueLayout innerClassName OfInt flags 609 +method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljdk/internal/foreign/layout/ValueLayouts$OfIntImpl; flags 1 +method name of descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout$OfInt; flags 9 +method name hashCode descriptor ()I flags 1041 +method name equals descriptor (Ljava/lang/Object;)Z flags 1041 +method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout; flags 1041 +method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout$OfInt; flags 1041 +method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfInt; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/ValueLayout$OfInt; flags 1041 +method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/ValueLayout; flags 1041 +method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout; flags 1041 +method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/MemoryLayout; flags 1041 -class name javax/net/ssl/SSLParameters -method name getNamedGroups descriptor ()[Ljava/lang/String; flags 1 -method name setNamedGroups descriptor ([Ljava/lang/String;)V flags 1 +class name jdk/internal/foreign/layout/ValueLayouts$OfLongImpl +header extends jdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout implements java/lang/foreign/ValueLayout$OfLong nestHost jdk/internal/foreign/layout/ValueLayouts flags 31 signature Ljdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout;Ljava/lang/foreign/ValueLayout$OfLong; +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName AbstractValueLayout flags 408 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfLongImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfLongImpl flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfLong outerClass java/lang/foreign/ValueLayout innerClassName OfLong flags 609 +method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljdk/internal/foreign/layout/ValueLayouts$OfLongImpl; flags 1 +method name of descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout$OfLong; flags 9 +method name hashCode descriptor ()I flags 1041 +method name equals descriptor (Ljava/lang/Object;)Z flags 1041 +method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout; flags 1041 +method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout$OfLong; flags 1041 +method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfLong; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/ValueLayout$OfLong; flags 1041 +method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/ValueLayout; flags 1041 +method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout; flags 1041 +method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/MemoryLayout; flags 1041 -class name jdk/internal/event/Event -header extends java/lang/Object flags 421 --method name descriptor ()V --method name begin descriptor ()V --method name end descriptor ()V --method name commit descriptor ()V --method name isEnabled descriptor ()Z --method name shouldCommit descriptor ()Z --method name set descriptor (ILjava/lang/Object;)V -method name descriptor ()V flags 4 -method name begin descriptor ()V flags 1 -method name end descriptor ()V flags 1 -method name commit descriptor ()V flags 1 -method name isEnabled descriptor ()Z flags 1 -method name shouldCommit descriptor ()Z flags 1 -method name set descriptor (ILjava/lang/Object;)V flags 1 +class name jdk/internal/foreign/layout/ValueLayouts$OfShortImpl +header extends jdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout implements java/lang/foreign/ValueLayout$OfShort nestHost jdk/internal/foreign/layout/ValueLayouts flags 31 signature Ljdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout;Ljava/lang/foreign/ValueLayout$OfShort; +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName AbstractValueLayout flags 408 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfShortImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfShortImpl flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfShort outerClass java/lang/foreign/ValueLayout innerClassName OfShort flags 609 +method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljdk/internal/foreign/layout/ValueLayouts$OfShortImpl; flags 1 +method name of descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout$OfShort; flags 9 +method name hashCode descriptor ()I flags 1041 +method name equals descriptor (Ljava/lang/Object;)Z flags 1041 +method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout; flags 1041 +method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout$OfShort; flags 1041 +method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfShort; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/ValueLayout$OfShort; flags 1041 +method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/ValueLayout; flags 1041 +method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout; flags 1041 +method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/MemoryLayout; flags 1041 class name jdk/internal/vm/vector/VectorSupport -method name indexVector descriptor (Ljava/lang/Class;Ljava/lang/Class;ILjdk/internal/vm/vector/VectorSupport$Vector;ILjdk/internal/vm/vector/VectorSupport$VectorSpecies;Ljdk/internal/vm/vector/VectorSupport$IndexOperation;)Ljdk/internal/vm/vector/VectorSupport$Vector; diff --git a/src/jdk.compiler/share/data/symbols/java.base-L.sym.txt b/src/jdk.compiler/share/data/symbols/java.base-L.sym.txt index ce88c40a27644..4f5b1cf26efa9 100644 --- a/src/jdk.compiler/share/data/symbols/java.base-L.sym.txt +++ b/src/jdk.compiler/share/data/symbols/java.base-L.sym.txt @@ -26,19 +26,28 @@ # ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ### # ########################################################## # +module name java.base +header exports java/io,java/lang,java/lang/annotation,java/lang/constant,java/lang/foreign,java/lang/invoke,java/lang/module,java/lang/ref,java/lang/reflect,java/lang/runtime,java/math,java/net,java/net/spi,java/nio,java/nio/channels,java/nio/channels/spi,java/nio/charset,java/nio/charset/spi,java/nio/file,java/nio/file/attribute,java/nio/file/spi,java/security,java/security/cert,java/security/interfaces,java/security/spec,java/text,java/text/spi,java/time,java/time/chrono,java/time/format,java/time/temporal,java/time/zone,java/util,java/util/concurrent,java/util/concurrent/atomic,java/util/concurrent/locks,java/util/function,java/util/jar,java/util/random,java/util/regex,java/util/spi,java/util/stream,java/util/zip,javax/crypto,javax/crypto/interfaces,javax/crypto/spec,javax/net,javax/net/ssl,javax/security/auth,javax/security/auth/callback,javax/security/auth/login,javax/security/auth/spi,javax/security/auth/x500,javax/security/cert,jdk/internal/event[jdk.jfr],jdk/internal/vm/vector[jdk.incubator.vector] extraModulePackages jdk/internal/access/foreign,jdk/internal/foreign/abi,jdk/internal/foreign/abi/aarch64/linux,jdk/internal/foreign/abi/aarch64/macos,jdk/internal/foreign/abi/aarch64/windows,jdk/internal/foreign/abi/fallback,jdk/internal/foreign/abi/ppc64/linux,jdk/internal/foreign/abi/riscv64/linux,jdk/internal/foreign/abi/x64/sysv,jdk/internal/foreign/abi/x64/windows,jdk/internal/foreign/layout,sun/net,jdk/internal/foreign,jdk/internal/foreign,sun/net,sun/nio/ch uses java/lang/System$LoggerFinder,java/net/ContentHandlerFactory,java/net/spi/InetAddressResolverProvider,java/net/spi/URLStreamHandlerProvider,java/nio/channels/spi/AsynchronousChannelProvider,java/nio/channels/spi/SelectorProvider,java/nio/charset/spi/CharsetProvider,java/nio/file/spi/FileSystemProvider,java/nio/file/spi/FileTypeDetector,java/security/Provider,java/text/spi/BreakIteratorProvider,java/text/spi/CollatorProvider,java/text/spi/DateFormatProvider,java/text/spi/DateFormatSymbolsProvider,java/text/spi/DecimalFormatSymbolsProvider,java/text/spi/NumberFormatProvider,java/time/chrono/AbstractChronology,java/time/chrono/Chronology,java/time/zone/ZoneRulesProvider,java/util/random/RandomGenerator,java/util/spi/CalendarDataProvider,java/util/spi/CalendarNameProvider,java/util/spi/CurrencyNameProvider,java/util/spi/LocaleNameProvider,java/util/spi/ResourceBundleControlProvider,java/util/spi/ResourceBundleProvider,java/util/spi/TimeZoneNameProvider,java/util/spi/ToolProvider,javax/security/auth/spi/LoginModule,jdk/internal/io/JdkConsoleProvider,jdk/internal/logger/DefaultLoggerFinder,sun/text/spi/JavaTimeDateTimePatternProvider,sun/util/locale/provider/LocaleDataMetaInfo,sun/util/resources/LocaleData$CommonResourceBundleProvider,sun/util/resources/LocaleData$SupplementaryResourceBundleProvider,sun/util/spi/CalendarProvider provides interface\u0020;java/nio/file/spi/FileSystemProvider\u0020;impls\u0020;jdk/internal/jrtfs/JrtFileSystemProvider,interface\u0020;java/util/random/RandomGenerator\u0020;impls\u0020;java/security/SecureRandom\u005C;u002C;java/util/Random\u005C;u002C;java/util/SplittableRandom target linux-amd64 flags 8000 + class name java/io/Console -header extends java/lang/Object implements java/io/Flushable sealed true flags 21 +header extends java/lang/Object implements java/io/Flushable sealed true permittedSubclasses java/io/ProxyingConsole flags 21 innerclass innerClass java/util/ServiceLoader$Provider outerClass java/util/ServiceLoader innerClassName Provider flags 609 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -class name java/io/PrintStream -header extends java/io/FilterOutputStream implements java/lang/Appendable,java/io/Closeable flags 21 -innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019 +class name java/io/ProxyingConsole +header extends java/io/Console flags 30 +method name writer descriptor ()Ljava/io/PrintWriter; flags 1 +method name reader descriptor ()Ljava/io/Reader; flags 1 +method name format descriptor (Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/Console; flags 81 +method name printf descriptor (Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/Console; flags 81 +method name readLine descriptor (Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; flags 81 +method name readLine descriptor ()Ljava/lang/String; flags 1 +method name readPassword descriptor (Ljava/lang/String;[Ljava/lang/Object;)[C flags 81 +method name readPassword descriptor ()[C flags 1 +method name flush descriptor ()V flags 1 +method name charset descriptor ()Ljava/nio/charset/Charset; flags 1 class name java/lang/AbstractStringBuilder -header extends java/lang/Object implements java/lang/Appendable,java/lang/CharSequence sealed true flags 420 -innerclass innerClass java/util/Spliterator$OfInt outerClass java/util/Spliterator innerClassName OfInt flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 method name repeat descriptor (II)Ljava/lang/AbstractStringBuilder; flags 1 method name repeat descriptor (Ljava/lang/CharSequence;I)Ljava/lang/AbstractStringBuilder; flags 1 @@ -55,15 +64,6 @@ method name isUnnamedClass descriptor ()Z flags 1 classAnnotations @Ljdk/interna -class name java/lang/Compiler -class name java/lang/Deprecated -header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Documented;@Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;RUNTIME;)@Ljava/lang/annotation/Target;(value={eLjava/lang/annotation/ElementType;CONSTRUCTOR;eLjava/lang/annotation/ElementType;FIELD;eLjava/lang/annotation/ElementType;LOCAL_VARIABLE;eLjava/lang/annotation/ElementType;METHOD;eLjava/lang/annotation/ElementType;PACKAGE;eLjava/lang/annotation/ElementType;MODULE;eLjava/lang/annotation/ElementType;PARAMETER;eLjava/lang/annotation/ElementType;TYPE;}) - -class name java/lang/IllegalCallerException -header extends java/lang/RuntimeException flags 21 - -class name java/lang/LayerInstantiationException -header extends java/lang/RuntimeException flags 21 - class name java/lang/MatchException header extends java/lang/RuntimeException flags 31 @@ -73,9 +73,6 @@ method name clamp descriptor (JJJ)J flags 9 method name clamp descriptor (DDD)D flags 9 method name clamp descriptor (FFF)F flags 9 -class name java/lang/NamedPackage -header extends java/lang/Object flags 20 - class name java/lang/ProcessBuilder header extends java/lang/Object nestMembers java/lang/ProcessBuilder$Redirect,java/lang/ProcessBuilder$Redirect$Type flags 31 innerclass innerClass java/lang/ProcessBuilder$Redirect outerClass java/lang/ProcessBuilder innerClassName Redirect flags 409 @@ -193,13 +190,15 @@ method name process descriptor (Ljava/lang/StringTemplate;)Ljava/lang/Object; th method name of descriptor (Ljava/util/function/Function;)Ljava/lang/StringTemplate$Processor; flags 9 signature (Ljava/util/function/Function<-Ljava/lang/StringTemplate;+TT;>;)Ljava/lang/StringTemplate$Processor; class name java/lang/StringTemplate$Processor$Linkage -header extends java/lang/Object nestHost java/lang/StringTemplate sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;STRING_TEMPLATES;) +header extends java/lang/Object nestHost java/lang/StringTemplate sealed true permittedSubclasses java/util/FormatProcessor flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;STRING_TEMPLATES;) innerclass innerClass java/lang/StringTemplate$Processor outerClass java/lang/StringTemplate innerClassName Processor flags 609 innerclass innerClass java/lang/StringTemplate$Processor$Linkage outerClass java/lang/StringTemplate$Processor innerClassName Linkage flags 609 method name linkage descriptor (Ljava/util/List;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; flags 401 signature (Ljava/util/List;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; class name java/lang/Thread header extends java/lang/Object implements java/lang/Runnable nestMembers java/lang/Thread$UncaughtExceptionHandler,java/lang/Thread$State,java/lang/Thread$Builder,java/lang/Thread$Builder$OfVirtual,java/lang/Thread$Builder$OfPlatform flags 21 +innerclass innerClass java/lang/ThreadBuilders$PlatformThreadBuilder outerClass java/lang/ThreadBuilders innerClassName PlatformThreadBuilder flags 18 +innerclass innerClass java/lang/ThreadBuilders$VirtualThreadBuilder outerClass java/lang/ThreadBuilders innerClassName VirtualThreadBuilder flags 18 innerclass innerClass java/lang/Thread$UncaughtExceptionHandler outerClass java/lang/Thread innerClassName UncaughtExceptionHandler flags 609 innerclass innerClass java/lang/Thread$State outerClass java/lang/Thread innerClassName State flags 4019 innerclass innerClass java/lang/Thread$Builder outerClass java/lang/Thread innerClassName Builder flags 609 @@ -215,7 +214,7 @@ method name startVirtualThread descriptor (Ljava/lang/Runnable;)Ljava/lang/Threa method name isVirtual descriptor ()Z flags 11 class name java/lang/Thread$Builder -header extends java/lang/Object nestHost java/lang/Thread sealed true flags 601 +header extends java/lang/Object nestHost java/lang/Thread sealed true permittedSubclasses java/lang/Thread$Builder$OfPlatform,java/lang/Thread$Builder$OfVirtual flags 601 innerclass innerClass java/lang/Thread$Builder outerClass java/lang/Thread innerClassName Builder flags 609 innerclass innerClass java/lang/Thread$Builder$OfVirtual outerClass java/lang/Thread$Builder innerClassName OfVirtual flags 609 innerclass innerClass java/lang/Thread$Builder$OfPlatform outerClass java/lang/Thread$Builder innerClassName OfPlatform flags 609 @@ -223,21 +222,81 @@ innerclass innerClass java/lang/Thread$UncaughtExceptionHandler outerClass java/ -method name allowSetThreadLocals descriptor (Z)Ljava/lang/Thread$Builder; class name java/lang/Thread$Builder$OfPlatform -header extends java/lang/Object implements java/lang/Thread$Builder nestHost java/lang/Thread sealed true flags 601 +header extends java/lang/Object implements java/lang/Thread$Builder nestHost java/lang/Thread sealed true permittedSubclasses java/lang/ThreadBuilders$PlatformThreadBuilder flags 601 innerclass innerClass java/lang/Thread$Builder outerClass java/lang/Thread innerClassName Builder flags 609 innerclass innerClass java/lang/Thread$Builder$OfPlatform outerClass java/lang/Thread$Builder innerClassName OfPlatform flags 609 innerclass innerClass java/lang/Thread$UncaughtExceptionHandler outerClass java/lang/Thread innerClassName UncaughtExceptionHandler flags 609 +innerclass innerClass java/lang/ThreadBuilders$PlatformThreadBuilder outerClass java/lang/ThreadBuilders innerClassName PlatformThreadBuilder flags 18 -method name allowSetThreadLocals descriptor (Z)Ljava/lang/Thread$Builder$OfPlatform; -method name allowSetThreadLocals descriptor (Z)Ljava/lang/Thread$Builder; class name java/lang/Thread$Builder$OfVirtual -header extends java/lang/Object implements java/lang/Thread$Builder nestHost java/lang/Thread sealed true flags 601 +header extends java/lang/Object implements java/lang/Thread$Builder nestHost java/lang/Thread sealed true permittedSubclasses java/lang/ThreadBuilders$VirtualThreadBuilder flags 601 innerclass innerClass java/lang/Thread$Builder outerClass java/lang/Thread innerClassName Builder flags 609 innerclass innerClass java/lang/Thread$Builder$OfVirtual outerClass java/lang/Thread$Builder innerClassName OfVirtual flags 609 innerclass innerClass java/lang/Thread$UncaughtExceptionHandler outerClass java/lang/Thread innerClassName UncaughtExceptionHandler flags 609 +innerclass innerClass java/lang/ThreadBuilders$VirtualThreadBuilder outerClass java/lang/ThreadBuilders innerClassName VirtualThreadBuilder flags 18 -method name allowSetThreadLocals descriptor (Z)Ljava/lang/Thread$Builder$OfVirtual; -method name allowSetThreadLocals descriptor (Z)Ljava/lang/Thread$Builder; +class name java/lang/ThreadBuilders +header extends java/lang/Object nestMembers java/lang/ThreadBuilders$VirtualThreadBuilder,java/lang/ThreadBuilders$PlatformThreadBuilder,java/lang/ThreadBuilders$BaseThreadBuilder flags 20 +innerclass innerClass java/lang/ThreadBuilders$VirtualThreadBuilder outerClass java/lang/ThreadBuilders innerClassName VirtualThreadBuilder flags 18 +innerclass innerClass java/lang/ThreadBuilders$PlatformThreadBuilder outerClass java/lang/ThreadBuilders innerClassName PlatformThreadBuilder flags 18 +innerclass innerClass java/lang/ThreadBuilders$BaseThreadBuilder outerClass java/lang/ThreadBuilders innerClassName BaseThreadBuilder flags a + +class name java/lang/ThreadBuilders$BaseThreadBuilder +header extends java/lang/Object nestHost java/lang/ThreadBuilders flags 20 +innerclass innerClass java/lang/ThreadBuilders$BaseThreadBuilder outerClass java/lang/ThreadBuilders innerClassName BaseThreadBuilder flags a +innerclass innerClass java/lang/Thread$UncaughtExceptionHandler outerClass java/lang/Thread innerClassName UncaughtExceptionHandler flags 609 +-method name name descriptor (Ljava/lang/String;)Ljava/lang/Thread$Builder; +-method name name descriptor (Ljava/lang/String;J)Ljava/lang/Thread$Builder; +-method name allowSetThreadLocals descriptor (Z)Ljava/lang/Thread$Builder; +-method name inheritInheritableThreadLocals descriptor (Z)Ljava/lang/Thread$Builder; +-method name uncaughtExceptionHandler descriptor (Ljava/lang/Thread$UncaughtExceptionHandler;)Ljava/lang/Thread$Builder; + +class name java/lang/ThreadBuilders$PlatformThreadBuilder +header extends java/lang/ThreadBuilders$BaseThreadBuilder implements java/lang/Thread$Builder$OfPlatform nestHost java/lang/ThreadBuilders flags 30 +innerclass innerClass java/lang/ThreadBuilders$BaseThreadBuilder outerClass java/lang/ThreadBuilders innerClassName BaseThreadBuilder flags a +innerclass innerClass java/lang/ThreadBuilders$PlatformThreadBuilder outerClass java/lang/ThreadBuilders innerClassName PlatformThreadBuilder flags 18 +innerclass innerClass java/lang/Thread$UncaughtExceptionHandler outerClass java/lang/Thread innerClassName UncaughtExceptionHandler flags 609 +innerclass innerClass java/lang/Thread$Builder outerClass java/lang/Thread innerClassName Builder flags 609 +innerclass innerClass java/lang/Thread$Builder$OfPlatform outerClass java/lang/Thread$Builder innerClassName OfPlatform flags 609 +-method name uncaughtExceptionHandler descriptor (Ljava/lang/Thread$UncaughtExceptionHandler;)Ljava/lang/Thread$Builder$OfPlatform; +-method name inheritInheritableThreadLocals descriptor (Z)Ljava/lang/Thread$Builder$OfPlatform; +-method name allowSetThreadLocals descriptor (Z)Ljava/lang/Thread$Builder$OfPlatform; +-method name name descriptor (Ljava/lang/String;J)Ljava/lang/Thread$Builder$OfPlatform; +-method name name descriptor (Ljava/lang/String;)Ljava/lang/Thread$Builder$OfPlatform; +method name name descriptor (Ljava/lang/String;)Ljava/lang/Thread$Builder$OfPlatform; flags 1 +method name name descriptor (Ljava/lang/String;J)Ljava/lang/Thread$Builder$OfPlatform; flags 1 +method name inheritInheritableThreadLocals descriptor (Z)Ljava/lang/Thread$Builder$OfPlatform; flags 1 +method name uncaughtExceptionHandler descriptor (Ljava/lang/Thread$UncaughtExceptionHandler;)Ljava/lang/Thread$Builder$OfPlatform; flags 1 +method name uncaughtExceptionHandler descriptor (Ljava/lang/Thread$UncaughtExceptionHandler;)Ljava/lang/Thread$Builder; flags 1041 methodParameters 1000:null +method name inheritInheritableThreadLocals descriptor (Z)Ljava/lang/Thread$Builder; flags 1041 methodParameters 1000:null +method name name descriptor (Ljava/lang/String;J)Ljava/lang/Thread$Builder; flags 1041 methodParameters 1000:null,1000:null +method name name descriptor (Ljava/lang/String;)Ljava/lang/Thread$Builder; flags 1041 methodParameters 1000:null + +class name java/lang/ThreadBuilders$VirtualThreadBuilder +header extends java/lang/ThreadBuilders$BaseThreadBuilder implements java/lang/Thread$Builder$OfVirtual nestHost java/lang/ThreadBuilders flags 30 +innerclass innerClass java/lang/ThreadBuilders$BaseThreadBuilder outerClass java/lang/ThreadBuilders innerClassName BaseThreadBuilder flags a +innerclass innerClass java/lang/ThreadBuilders$VirtualThreadBuilder outerClass java/lang/ThreadBuilders innerClassName VirtualThreadBuilder flags 18 +innerclass innerClass java/lang/Thread$UncaughtExceptionHandler outerClass java/lang/Thread innerClassName UncaughtExceptionHandler flags 609 +innerclass innerClass java/lang/Thread$Builder outerClass java/lang/Thread innerClassName Builder flags 609 +innerclass innerClass java/lang/Thread$Builder$OfVirtual outerClass java/lang/Thread$Builder innerClassName OfVirtual flags 609 +-method name uncaughtExceptionHandler descriptor (Ljava/lang/Thread$UncaughtExceptionHandler;)Ljava/lang/Thread$Builder$OfVirtual; +-method name inheritInheritableThreadLocals descriptor (Z)Ljava/lang/Thread$Builder$OfVirtual; +-method name allowSetThreadLocals descriptor (Z)Ljava/lang/Thread$Builder$OfVirtual; +-method name name descriptor (Ljava/lang/String;J)Ljava/lang/Thread$Builder$OfVirtual; +-method name name descriptor (Ljava/lang/String;)Ljava/lang/Thread$Builder$OfVirtual; +method name name descriptor (Ljava/lang/String;)Ljava/lang/Thread$Builder$OfVirtual; flags 1 +method name name descriptor (Ljava/lang/String;J)Ljava/lang/Thread$Builder$OfVirtual; flags 1 +method name inheritInheritableThreadLocals descriptor (Z)Ljava/lang/Thread$Builder$OfVirtual; flags 1 +method name uncaughtExceptionHandler descriptor (Ljava/lang/Thread$UncaughtExceptionHandler;)Ljava/lang/Thread$Builder$OfVirtual; flags 1 +method name uncaughtExceptionHandler descriptor (Ljava/lang/Thread$UncaughtExceptionHandler;)Ljava/lang/Thread$Builder; flags 1041 methodParameters 1000:null +method name inheritInheritableThreadLocals descriptor (Z)Ljava/lang/Thread$Builder; flags 1041 methodParameters 1000:null +method name name descriptor (Ljava/lang/String;J)Ljava/lang/Thread$Builder; flags 1041 methodParameters 1000:null,1000:null +method name name descriptor (Ljava/lang/String;)Ljava/lang/Thread$Builder; flags 1041 methodParameters 1000:null + class name java/lang/ThreadGroup -method name allowThreadSuspension descriptor (Z)Z @@ -247,16 +306,12 @@ innerclass innerClass java/lang/StackWalker$StackFrame outerClass java/lang/Stac innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 class name java/lang/constant/ClassDesc -header extends java/lang/Object implements java/lang/constant/ConstantDesc,java/lang/invoke/TypeDescriptor$OfField sealed true flags 601 signature Ljava/lang/Object;Ljava/lang/constant/ConstantDesc;Ljava/lang/invoke/TypeDescriptor$OfField; +header extends java/lang/Object implements java/lang/constant/ConstantDesc,java/lang/invoke/TypeDescriptor$OfField sealed true permittedSubclasses java/lang/constant/PrimitiveClassDescImpl,java/lang/constant/ReferenceClassDescImpl flags 601 signature Ljava/lang/Object;Ljava/lang/constant/ConstantDesc;Ljava/lang/invoke/TypeDescriptor$OfField; innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 innerclass innerClass java/lang/invoke/TypeDescriptor$OfField outerClass java/lang/invoke/TypeDescriptor innerClassName OfField flags 609 method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Class; thrownTypes java/lang/ReflectiveOperationException flags 401 signature (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Class<*>; method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Object; thrownTypes java/lang/ReflectiveOperationException flags 1041 methodParameters 3e8:null -class name java/lang/constant/ConstantDesc -header extends java/lang/Object sealed true flags 601 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name java/lang/constant/ConstantDescs field name BSM_CLASS_DATA descriptor Ljava/lang/constant/DirectMethodHandleDesc; flags 19 field name BSM_CLASS_DATA_AT descriptor Ljava/lang/constant/DirectMethodHandleDesc; flags 19 @@ -264,19 +319,15 @@ field name INIT_NAME descriptor Ljava/lang/String; constantValue flags 19 field name CLASS_INIT_NAME descriptor Ljava/lang/String; constantValue flags 19 field name MTD_void descriptor Ljava/lang/constant/MethodTypeDesc; flags 19 -class name java/lang/constant/DirectMethodHandleDesc -header extends java/lang/Object implements java/lang/constant/MethodHandleDesc nestMembers java/lang/constant/DirectMethodHandleDesc$Kind sealed true flags 601 -innerclass innerClass java/lang/constant/DirectMethodHandleDesc$Kind outerClass java/lang/constant/DirectMethodHandleDesc innerClassName Kind flags 4019 - class name java/lang/constant/MethodHandleDesc -header extends java/lang/Object implements java/lang/constant/ConstantDesc sealed true flags 601 +header extends java/lang/Object implements java/lang/constant/ConstantDesc sealed true permittedSubclasses java/lang/constant/AsTypeMethodHandleDesc,java/lang/constant/DirectMethodHandleDesc flags 601 innerclass innerClass java/lang/constant/DirectMethodHandleDesc$Kind outerClass java/lang/constant/DirectMethodHandleDesc innerClassName Kind flags 4019 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/invoke/MethodHandle; thrownTypes java/lang/ReflectiveOperationException flags 401 method name resolveConstantDesc descriptor (Ljava/lang/invoke/MethodHandles$Lookup;)Ljava/lang/Object; thrownTypes java/lang/ReflectiveOperationException flags 1041 methodParameters 3e8:null class name java/lang/constant/MethodTypeDesc -header extends java/lang/Object implements java/lang/constant/ConstantDesc,java/lang/invoke/TypeDescriptor$OfMethod sealed true flags 601 signature Ljava/lang/Object;Ljava/lang/constant/ConstantDesc;Ljava/lang/invoke/TypeDescriptor$OfMethod; +header extends java/lang/Object implements java/lang/constant/ConstantDesc,java/lang/invoke/TypeDescriptor$OfMethod sealed true permittedSubclasses java/lang/constant/MethodTypeDescImpl flags 601 signature Ljava/lang/Object;Ljava/lang/constant/ConstantDesc;Ljava/lang/invoke/TypeDescriptor$OfMethod; innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 innerclass innerClass java/lang/invoke/TypeDescriptor$OfMethod outerClass java/lang/invoke/TypeDescriptor innerClassName OfMethod flags 609 innerclass innerClass java/lang/invoke/TypeDescriptor$OfField outerClass java/lang/invoke/TypeDescriptor innerClassName OfField flags 609 @@ -287,22 +338,44 @@ method name of descriptor (Ljava/lang/constant/ClassDesc;)Ljava/lang/constant/Me method name of descriptor (Ljava/lang/constant/ClassDesc;Ljava/util/List;)Ljava/lang/constant/MethodTypeDesc; flags 9 signature (Ljava/lang/constant/ClassDesc;Ljava/util/List;)Ljava/lang/constant/MethodTypeDesc; method name descriptorString descriptor ()Ljava/lang/String; flags 401 +class name java/lang/constant/MethodTypeDescImpl +method name descriptorString descriptor ()Ljava/lang/String; flags 1 + class name java/lang/constant/ModuleDesc -header extends java/lang/Object sealed true flags 601 +header extends java/lang/Object sealed true permittedSubclasses java/lang/constant/ModuleDescImpl flags 601 method name of descriptor (Ljava/lang/String;)Ljava/lang/constant/ModuleDesc; flags 9 method name name descriptor ()Ljava/lang/String; flags 401 method name equals descriptor (Ljava/lang/Object;)Z flags 401 +class name java/lang/constant/ModuleDescImpl +header extends java/lang/Record implements java/lang/constant/ModuleDesc record true flags 30 +recordcomponent name name descriptor Ljava/lang/String; +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +method name toString descriptor ()Ljava/lang/String; flags 1 +method name hashCode descriptor ()I flags 11 +method name equals descriptor (Ljava/lang/Object;)Z flags 11 +method name name descriptor ()Ljava/lang/String; flags 1 + class name java/lang/constant/PackageDesc -header extends java/lang/Object sealed true flags 601 +header extends java/lang/Object sealed true permittedSubclasses java/lang/constant/PackageDescImpl flags 601 method name of descriptor (Ljava/lang/String;)Ljava/lang/constant/PackageDesc; flags 9 method name ofInternalName descriptor (Ljava/lang/String;)Ljava/lang/constant/PackageDesc; flags 9 method name internalName descriptor ()Ljava/lang/String; flags 401 method name name descriptor ()Ljava/lang/String; flags 1 method name equals descriptor (Ljava/lang/Object;)Z flags 401 +class name java/lang/constant/PackageDescImpl +header extends java/lang/Record implements java/lang/constant/PackageDesc record true flags 30 +recordcomponent name internalName descriptor Ljava/lang/String; +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +method name toString descriptor ()Ljava/lang/String; flags 1 +method name hashCode descriptor ()I flags 11 +method name equals descriptor (Ljava/lang/Object;)Z flags 11 +method name internalName descriptor ()Ljava/lang/String; flags 1 + class name java/lang/foreign/AddressLayout -header extends java/lang/Object implements java/lang/foreign/ValueLayout sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/Object implements java/lang/foreign/ValueLayout sealed true permittedSubclasses jdk/internal/foreign/layout/ValueLayouts$OfAddressImpl flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfAddressImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfAddressImpl flags 19 method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/AddressLayout; flags 401 method name withoutName descriptor ()Ljava/lang/foreign/AddressLayout; flags 401 method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/AddressLayout; flags 401 @@ -331,11 +404,7 @@ method name ofConfined descriptor ()Ljava/lang/foreign/Arena; flags 9 method name ofShared descriptor ()Ljava/lang/foreign/Arena; flags 9 method name scope descriptor ()Ljava/lang/foreign/MemorySegment$Scope; flags 401 -class name java/lang/foreign/FunctionDescriptor -header extends java/lang/Object sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) - class name java/lang/foreign/GroupLayout -header extends java/lang/Object implements java/lang/foreign/MemoryLayout sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) -method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; -method name withBitAlignment descriptor (J)Ljava/lang/foreign/GroupLayout; method name withoutName descriptor ()Ljava/lang/foreign/GroupLayout; flags 401 @@ -344,7 +413,7 @@ method name withByteAlignment descriptor (J)Ljava/lang/foreign/GroupLayout; flag method name withByteAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; flags 1041 methodParameters 1000:null class name java/lang/foreign/Linker -header extends java/lang/Object nestMembers java/lang/foreign/Linker$Option sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/Object nestMembers java/lang/foreign/Linker$Option sealed true permittedSubclasses jdk/internal/foreign/abi/AbstractLinker flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) innerclass innerClass java/lang/foreign/Linker$Option outerClass java/lang/foreign/Linker innerClassName Option flags 609 -method name nativeLinker descriptor ()Ljava/lang/foreign/Linker; -method name downcallHandle descriptor (Ljava/lang/foreign/MemorySegment;Ljava/lang/foreign/FunctionDescriptor;[Ljava/lang/foreign/Linker$Option;)Ljava/lang/invoke/MethodHandle; @@ -356,8 +425,12 @@ method name downcallHandle descriptor (Ljava/lang/foreign/FunctionDescriptor;[Lj method name upcallStub descriptor (Ljava/lang/invoke/MethodHandle;Ljava/lang/foreign/FunctionDescriptor;Ljava/lang/foreign/Arena;[Ljava/lang/foreign/Linker$Option;)Ljava/lang/foreign/MemorySegment; flags 481 runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive; class name java/lang/foreign/Linker$Option -header extends java/lang/Object nestHost java/lang/foreign/Linker sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/Object nestHost java/lang/foreign/Linker sealed true permittedSubclasses jdk/internal/foreign/abi/LinkerOptions$LinkerOptionImpl flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +innerclass innerClass jdk/internal/foreign/abi/LinkerOptions$FirstVariadicArg outerClass jdk/internal/foreign/abi/LinkerOptions innerClassName FirstVariadicArg flags 19 +innerclass innerClass jdk/internal/foreign/abi/LinkerOptions$CaptureCallState outerClass jdk/internal/foreign/abi/LinkerOptions innerClassName CaptureCallState flags 19 +innerclass innerClass jdk/internal/foreign/abi/LinkerOptions$IsTrivial outerClass jdk/internal/foreign/abi/LinkerOptions innerClassName IsTrivial flags 19 innerclass innerClass java/lang/foreign/Linker$Option outerClass java/lang/foreign/Linker innerClassName Option flags 609 +innerclass innerClass jdk/internal/foreign/abi/LinkerOptions$LinkerOptionImpl outerClass jdk/internal/foreign/abi/LinkerOptions innerClassName LinkerOptionImpl flags 609 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -method name captureCallState descriptor ([Ljava/lang/String;)Ljava/lang/foreign/Linker$Option$CaptureCallState; method name captureCallState descriptor ([Ljava/lang/String;)Ljava/lang/foreign/Linker$Option; flags 89 @@ -367,7 +440,8 @@ method name isTrivial descriptor ()Ljava/lang/foreign/Linker$Option; flags 9 -class name java/lang/foreign/Linker$Option$CaptureCallState class name java/lang/foreign/MemoryLayout -header extends java/lang/Object nestMembers java/lang/foreign/MemoryLayout$PathElement sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/Object nestMembers java/lang/foreign/MemoryLayout$PathElement sealed true permittedSubclasses java/lang/foreign/SequenceLayout,java/lang/foreign/GroupLayout,java/lang/foreign/PaddingLayout,java/lang/foreign/ValueLayout flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +innerclass innerClass jdk/internal/foreign/LayoutPath$PathElementImpl outerClass jdk/internal/foreign/LayoutPath innerClassName PathElementImpl flags 19 innerclass innerClass java/lang/foreign/MemoryLayout$PathElement outerClass java/lang/foreign/MemoryLayout innerClassName PathElement flags 609 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -method name bitSize descriptor ()J @@ -382,15 +456,28 @@ method name byteAlignment descriptor ()J flags 401 method name withByteAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; flags 401 class name java/lang/foreign/MemoryLayout$PathElement -header extends java/lang/Object nestHost java/lang/foreign/MemoryLayout sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) -innerclass innerClass java/lang/foreign/MemoryLayout$PathElement outerClass java/lang/foreign/MemoryLayout innerClassName PathElement flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 method name groupElement descriptor (J)Ljava/lang/foreign/MemoryLayout$PathElement; flags 9 method name dereferenceElement descriptor ()Ljava/lang/foreign/MemoryLayout$PathElement; flags 9 class name java/lang/foreign/MemorySegment -header extends java/lang/Object nestMembers java/lang/foreign/MemorySegment$Scope sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/Object nestMembers java/lang/foreign/MemorySegment$Scope sealed true permittedSubclasses jdk/internal/foreign/AbstractMemorySegmentImpl flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfByte outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfByte flags 19 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfChar outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfChar flags 19 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfShort outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfShort flags 19 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfInt outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfInt flags 19 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfFloat outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfFloat flags 19 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfLong outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfLong flags 19 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfDouble outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfDouble flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfByte outerClass java/lang/foreign/ValueLayout innerClassName OfByte flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfByteImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfByteImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfBooleanImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfBooleanImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfCharImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfCharImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfShortImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfShortImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfIntImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfIntImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfFloatImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfFloatImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfLongImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfLongImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfDoubleImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfDoubleImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfAddressImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfAddressImpl flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfBoolean outerClass java/lang/foreign/ValueLayout innerClassName OfBoolean flags 609 innerclass innerClass java/lang/foreign/ValueLayout$OfChar outerClass java/lang/foreign/ValueLayout innerClassName OfChar flags 609 innerclass innerClass java/lang/foreign/ValueLayout$OfShort outerClass java/lang/foreign/ValueLayout innerClassName OfShort flags 609 @@ -431,16 +518,15 @@ method name getAtIndex descriptor (Ljava/lang/foreign/AddressLayout;J)Ljava/lang method name setAtIndex descriptor (Ljava/lang/foreign/AddressLayout;JLjava/lang/foreign/MemorySegment;)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; class name java/lang/foreign/MemorySegment$Scope -header extends java/lang/Object nestHost java/lang/foreign/MemorySegment sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/Object nestHost java/lang/foreign/MemorySegment sealed true permittedSubclasses jdk/internal/foreign/MemorySessionImpl flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) innerclass innerClass java/lang/foreign/MemorySegment$Scope outerClass java/lang/foreign/MemorySegment innerClassName Scope flags 609 method name isAlive descriptor ()Z flags 401 method name equals descriptor (Ljava/lang/Object;)Z flags 401 method name hashCode descriptor ()I flags 401 class name java/lang/foreign/PaddingLayout -header extends java/lang/Object implements java/lang/foreign/MemoryLayout sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) --method name withBitAlignment descriptor (J)Ljava/lang/foreign/PaddingLayout; -method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; +-method name withBitAlignment descriptor (J)Ljava/lang/foreign/PaddingLayout; method name withoutName descriptor ()Ljava/lang/foreign/PaddingLayout; flags 401 method name withoutName descriptor ()Ljava/lang/foreign/MemoryLayout; flags 1041 method name withByteAlignment descriptor (J)Ljava/lang/foreign/PaddingLayout; flags 401 @@ -464,7 +550,6 @@ method name allocate descriptor (Ljava/lang/foreign/AddressLayout;Ljava/lang/for -class name java/lang/foreign/SegmentScope class name java/lang/foreign/SequenceLayout -header extends java/lang/Object implements java/lang/foreign/MemoryLayout sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) -method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; -method name withBitAlignment descriptor (J)Ljava/lang/foreign/SequenceLayout; method name withoutName descriptor ()Ljava/lang/foreign/MemoryLayout; flags 401 @@ -472,7 +557,6 @@ method name withByteAlignment descriptor (J)Ljava/lang/foreign/SequenceLayout; f method name withByteAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; flags 1041 methodParameters 1000:null class name java/lang/foreign/StructLayout -header extends java/lang/Object implements java/lang/foreign/GroupLayout sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) -method name withBitAlignment descriptor (J)Ljava/lang/foreign/StructLayout; -method name withBitAlignment descriptor (J)Ljava/lang/foreign/GroupLayout; -method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; @@ -491,7 +575,6 @@ method name libraryLookup descriptor (Ljava/nio/file/Path;Ljava/lang/foreign/Are method name or descriptor (Ljava/lang/foreign/SymbolLookup;)Ljava/lang/foreign/SymbolLookup; flags 1 class name java/lang/foreign/UnionLayout -header extends java/lang/Object implements java/lang/foreign/GroupLayout sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) -method name withBitAlignment descriptor (J)Ljava/lang/foreign/UnionLayout; -method name withBitAlignment descriptor (J)Ljava/lang/foreign/GroupLayout; -method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; @@ -507,14 +590,23 @@ method name withByteAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; fla -class name java/lang/foreign/VaList$Builder class name java/lang/foreign/ValueLayout -header extends java/lang/Object implements java/lang/foreign/MemoryLayout nestMembers java/lang/foreign/ValueLayout$OfDouble,java/lang/foreign/ValueLayout$OfLong,java/lang/foreign/ValueLayout$OfFloat,java/lang/foreign/ValueLayout$OfInt,java/lang/foreign/ValueLayout$OfShort,java/lang/foreign/ValueLayout$OfChar,java/lang/foreign/ValueLayout$OfByte,java/lang/foreign/ValueLayout$OfBoolean sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +header extends java/lang/Object implements java/lang/foreign/MemoryLayout nestMembers java/lang/foreign/ValueLayout$OfDouble,java/lang/foreign/ValueLayout$OfLong,java/lang/foreign/ValueLayout$OfFloat,java/lang/foreign/ValueLayout$OfInt,java/lang/foreign/ValueLayout$OfShort,java/lang/foreign/ValueLayout$OfChar,java/lang/foreign/ValueLayout$OfByte,java/lang/foreign/ValueLayout$OfBoolean sealed true permittedSubclasses java/lang/foreign/ValueLayout$OfBoolean,java/lang/foreign/ValueLayout$OfByte,java/lang/foreign/ValueLayout$OfChar,java/lang/foreign/ValueLayout$OfShort,java/lang/foreign/ValueLayout$OfInt,java/lang/foreign/ValueLayout$OfFloat,java/lang/foreign/ValueLayout$OfLong,java/lang/foreign/ValueLayout$OfDouble,java/lang/foreign/AddressLayout flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfAddressImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfAddressImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfByteImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfByteImpl flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfByte outerClass java/lang/foreign/ValueLayout innerClassName OfByte flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfBooleanImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfBooleanImpl flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfBoolean outerClass java/lang/foreign/ValueLayout innerClassName OfBoolean flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfCharImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfCharImpl flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfChar outerClass java/lang/foreign/ValueLayout innerClassName OfChar flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfShortImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfShortImpl flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfShort outerClass java/lang/foreign/ValueLayout innerClassName OfShort flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfIntImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfIntImpl flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfInt outerClass java/lang/foreign/ValueLayout innerClassName OfInt flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfLongImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfLongImpl flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfLong outerClass java/lang/foreign/ValueLayout innerClassName OfLong flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfFloatImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfFloatImpl flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfFloat outerClass java/lang/foreign/ValueLayout innerClassName OfFloat flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfDoubleImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfDoubleImpl flags 19 innerclass innerClass java/lang/foreign/ValueLayout$OfDouble outerClass java/lang/foreign/ValueLayout innerClassName OfDouble flags 609 -field name ADDRESS descriptor Ljava/lang/foreign/ValueLayout$OfAddress; -field name ADDRESS_UNALIGNED descriptor Ljava/lang/foreign/ValueLayout$OfAddress; @@ -530,8 +622,6 @@ method name withByteAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; fla -class name java/lang/foreign/ValueLayout$OfAddress class name java/lang/foreign/ValueLayout$OfBoolean -header extends java/lang/Object implements java/lang/foreign/ValueLayout nestHost java/lang/foreign/ValueLayout sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) -innerclass innerClass java/lang/foreign/ValueLayout$OfBoolean outerClass java/lang/foreign/ValueLayout innerClassName OfBoolean flags 609 -method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; -method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; -method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfBoolean; @@ -543,8 +633,6 @@ method name withByteAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; flag method name withByteAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; flags 1041 methodParameters 1000:null class name java/lang/foreign/ValueLayout$OfByte -header extends java/lang/Object implements java/lang/foreign/ValueLayout nestHost java/lang/foreign/ValueLayout sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) -innerclass innerClass java/lang/foreign/ValueLayout$OfByte outerClass java/lang/foreign/ValueLayout innerClassName OfByte flags 609 -method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; -method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; -method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfByte; @@ -556,8 +644,6 @@ method name withByteAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; flag method name withByteAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; flags 1041 methodParameters 1000:null class name java/lang/foreign/ValueLayout$OfChar -header extends java/lang/Object implements java/lang/foreign/ValueLayout nestHost java/lang/foreign/ValueLayout sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) -innerclass innerClass java/lang/foreign/ValueLayout$OfChar outerClass java/lang/foreign/ValueLayout innerClassName OfChar flags 609 -method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; -method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; -method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfChar; @@ -569,8 +655,6 @@ method name withByteAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; flag method name withByteAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; flags 1041 methodParameters 1000:null class name java/lang/foreign/ValueLayout$OfDouble -header extends java/lang/Object implements java/lang/foreign/ValueLayout nestHost java/lang/foreign/ValueLayout sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) -innerclass innerClass java/lang/foreign/ValueLayout$OfDouble outerClass java/lang/foreign/ValueLayout innerClassName OfDouble flags 609 -method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; -method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; -method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfDouble; @@ -582,8 +666,6 @@ method name withByteAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; flag method name withByteAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; flags 1041 methodParameters 1000:null class name java/lang/foreign/ValueLayout$OfFloat -header extends java/lang/Object implements java/lang/foreign/ValueLayout nestHost java/lang/foreign/ValueLayout sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) -innerclass innerClass java/lang/foreign/ValueLayout$OfFloat outerClass java/lang/foreign/ValueLayout innerClassName OfFloat flags 609 -method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; -method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; -method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfFloat; @@ -595,8 +677,6 @@ method name withByteAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; flag method name withByteAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; flags 1041 methodParameters 1000:null class name java/lang/foreign/ValueLayout$OfInt -header extends java/lang/Object implements java/lang/foreign/ValueLayout nestHost java/lang/foreign/ValueLayout sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) -innerclass innerClass java/lang/foreign/ValueLayout$OfInt outerClass java/lang/foreign/ValueLayout innerClassName OfInt flags 609 -method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; -method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; -method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfInt; @@ -608,8 +688,6 @@ method name withByteAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; flag method name withByteAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; flags 1041 methodParameters 1000:null class name java/lang/foreign/ValueLayout$OfLong -header extends java/lang/Object implements java/lang/foreign/ValueLayout nestHost java/lang/foreign/ValueLayout sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) -innerclass innerClass java/lang/foreign/ValueLayout$OfLong outerClass java/lang/foreign/ValueLayout innerClassName OfLong flags 609 -method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; -method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; -method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfLong; @@ -621,8 +699,6 @@ method name withByteAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; flag method name withByteAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; flags 1041 methodParameters 1000:null class name java/lang/foreign/ValueLayout$OfShort -header extends java/lang/Object implements java/lang/foreign/ValueLayout nestHost java/lang/foreign/ValueLayout sealed true flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) -innerclass innerClass java/lang/foreign/ValueLayout$OfShort outerClass java/lang/foreign/ValueLayout innerClassName OfShort flags 609 -method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; -method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; -method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfShort; @@ -633,21 +709,10 @@ method name withByteAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfSho method name withByteAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; flags 1041 methodParameters 1000:null method name withByteAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; flags 1041 methodParameters 1000:null -class name java/lang/invoke/CallSite -header extends java/lang/Object sealed true flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/lang/invoke/LambdaMetafactory -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/lang/invoke/MethodHandle -header extends java/lang/Object implements java/lang/constant/Constable sealed true flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -innerclass innerClass java/lang/constant/DirectMethodHandleDesc$Kind outerClass java/lang/constant/DirectMethodHandleDesc innerClassName Kind flags 4019 - -class name java/lang/invoke/MethodHandleProxies -header extends java/lang/Object flags 21 classAnnotations @Ljdk/Profile+Annotation;(value=I1) +class name java/lang/invoke/IndirectVarHandle +-method name varType descriptor ()Ljava/lang/Class; +-method name coordinateTypes descriptor ()Ljava/util/List; +method name isAccessModeSupported descriptor (Ljava/lang/invoke/VarHandle$AccessMode;)Z flags 1 class name java/lang/invoke/MethodHandles$Lookup -method name accessClass descriptor (Ljava/lang/Class;)Ljava/lang/Class; @@ -655,9 +720,6 @@ class name java/lang/invoke/MethodHandles$Lookup method name ensureInitialized descriptor (Ljava/lang/Class;)Ljava/lang/Class; thrownTypes java/lang/IllegalAccessException flags 1 signature (Ljava/lang/Class;)Ljava/lang/Class; method name accessClass 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/StringConcatException -header extends java/lang/Exception flags 21 - class name java/lang/invoke/StringConcatFactory field name MAX_INDY_CONCAT_ARG_SLOTS descriptor I flags 19 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;STRING_TEMPLATES;) method name makeConcatWithTemplate descriptor (Ljava/util/List;Ljava/util/List;)Ljava/lang/invoke/MethodHandle; thrownTypes java/lang/invoke/StringConcatException flags 9 signature (Ljava/util/List;Ljava/util/List;>;)Ljava/lang/invoke/MethodHandle; classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;STRING_TEMPLATES;) @@ -665,56 +727,48 @@ method name makeConcatWithTemplateCluster descriptor (Ljava/util/List;Ljava/util method name makeConcatWithTemplateGetters descriptor (Ljava/util/List;Ljava/util/List;I)Ljava/lang/invoke/MethodHandle; thrownTypes java/lang/invoke/StringConcatException flags 9 signature (Ljava/util/List;Ljava/util/List;I)Ljava/lang/invoke/MethodHandle; classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;STRING_TEMPLATES;) class name java/lang/invoke/VarHandle -header extends java/lang/Object implements java/lang/constant/Constable nestMembers java/lang/invoke/VarHandle$VarHandleDesc,java/lang/invoke/VarHandle$AccessMode sealed true flags 421 -innerclass innerClass java/lang/invoke/VarHandle$AccessMode outerClass java/lang/invoke/VarHandle innerClassName AccessMode flags 4019 -innerclass innerClass java/lang/invoke/VarHandle$VarHandleDesc outerClass java/lang/invoke/VarHandle innerClassName VarHandleDesc flags 19 -method name isAccessModeSupported descriptor (Ljava/lang/invoke/VarHandle$AccessMode;)Z method name isAccessModeSupported descriptor (Ljava/lang/invoke/VarHandle$AccessMode;)Z flags 1 -class name java/lang/module/Configuration -header extends java/lang/Object flags 31 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +class name java/lang/invoke/VarHandleBooleans$FieldStaticReadOnly +-method name descriptor (Ljava/lang/Object;JLjava/lang/invoke/VarForm;Z)V +method name descriptor (Ljava/lang/Class;Ljava/lang/Object;JLjava/lang/invoke/VarForm;Z)V flags 4 signature (Ljava/lang/Class<*>;Ljava/lang/Object;JLjava/lang/invoke/VarForm;Z)V -class name java/lang/module/FindException -header extends java/lang/RuntimeException flags 21 +class name java/lang/invoke/VarHandleBytes$FieldStaticReadOnly +-method name descriptor (Ljava/lang/Object;JLjava/lang/invoke/VarForm;Z)V +method name descriptor (Ljava/lang/Class;Ljava/lang/Object;JLjava/lang/invoke/VarForm;Z)V flags 4 signature (Ljava/lang/Class<*>;Ljava/lang/Object;JLjava/lang/invoke/VarForm;Z)V -class name java/lang/module/InvalidModuleDescriptorException -header extends java/lang/RuntimeException flags 21 +class name java/lang/invoke/VarHandleChars$FieldStaticReadOnly +-method name descriptor (Ljava/lang/Object;JLjava/lang/invoke/VarForm;Z)V +method name descriptor (Ljava/lang/Class;Ljava/lang/Object;JLjava/lang/invoke/VarForm;Z)V flags 4 signature (Ljava/lang/Class<*>;Ljava/lang/Object;JLjava/lang/invoke/VarForm;Z)V -class name java/lang/module/ModuleReader -header extends java/lang/Object implements java/io/Closeable flags 601 +class name java/lang/invoke/VarHandleDoubles$FieldStaticReadOnly +-method name descriptor (Ljava/lang/Object;JLjava/lang/invoke/VarForm;Z)V +method name descriptor (Ljava/lang/Class;Ljava/lang/Object;JLjava/lang/invoke/VarForm;Z)V flags 4 signature (Ljava/lang/Class<*>;Ljava/lang/Object;JLjava/lang/invoke/VarForm;Z)V -class name java/lang/module/ModuleReference -header extends java/lang/Object flags 421 +class name java/lang/invoke/VarHandleFloats$FieldStaticReadOnly +-method name descriptor (Ljava/lang/Object;JLjava/lang/invoke/VarForm;Z)V +method name descriptor (Ljava/lang/Class;Ljava/lang/Object;JLjava/lang/invoke/VarForm;Z)V flags 4 signature (Ljava/lang/Class<*>;Ljava/lang/Object;JLjava/lang/invoke/VarForm;Z)V -class name java/lang/module/ResolutionException -header extends java/lang/RuntimeException flags 21 +class name java/lang/invoke/VarHandleInts$FieldStaticReadOnly +-method name descriptor (Ljava/lang/Object;JLjava/lang/invoke/VarForm;Z)V +method name descriptor (Ljava/lang/Class;Ljava/lang/Object;JLjava/lang/invoke/VarForm;Z)V flags 4 signature (Ljava/lang/Class<*>;Ljava/lang/Object;JLjava/lang/invoke/VarForm;Z)V -class name java/lang/module/ResolvedModule -header extends java/lang/Object flags 31 +class name java/lang/invoke/VarHandleLongs$FieldStaticReadOnly +-method name descriptor (Ljava/lang/Object;JLjava/lang/invoke/VarForm;Z)V +method name descriptor (Ljava/lang/Class;Ljava/lang/Object;JLjava/lang/invoke/VarForm;Z)V flags 4 signature (Ljava/lang/Class<*>;Ljava/lang/Object;JLjava/lang/invoke/VarForm;Z)V -class name java/lang/ref/Reference -header extends java/lang/Object sealed true flags 421 signature Ljava/lang/Object; +class name java/lang/invoke/VarHandleReferences$FieldStaticReadOnly +-method name descriptor (Ljava/lang/Object;JLjava/lang/Class;Ljava/lang/invoke/VarForm;Z)V +method name descriptor (Ljava/lang/Class;Ljava/lang/Object;JLjava/lang/Class;Ljava/lang/invoke/VarForm;Z)V flags 4 signature (Ljava/lang/Class<*>;Ljava/lang/Object;JLjava/lang/Class<*>;Ljava/lang/invoke/VarForm;Z)V -class name java/lang/reflect/AccessibleObject -header extends java/lang/Object implements java/lang/reflect/AnnotatedElement flags 21 classAnnotations @Ljdk/Profile+Annotation;(value=I1) - -class name java/lang/reflect/AnnotatedElement -header extends java/lang/Object flags 601 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +class name java/lang/invoke/VarHandleShorts$FieldStaticReadOnly +-method name descriptor (Ljava/lang/Object;JLjava/lang/invoke/VarForm;Z)V +method name descriptor (Ljava/lang/Class;Ljava/lang/Object;JLjava/lang/invoke/VarForm;Z)V flags 4 signature (Ljava/lang/Class<*>;Ljava/lang/Object;JLjava/lang/invoke/VarForm;Z)V class name java/lang/reflect/ClassFileFormatVersion field name RELEASE_21 descriptor Ljava/lang/reflect/ClassFileFormatVersion; flags 4019 -class name java/lang/reflect/Executable -header extends java/lang/reflect/AccessibleObject implements java/lang/reflect/Member,java/lang/reflect/GenericDeclaration sealed true flags 421 -innerclass innerClass java/lang/reflect/AccessFlag$Location outerClass java/lang/reflect/AccessFlag innerClassName Location flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/lang/reflect/InaccessibleObjectException -header extends java/lang/RuntimeException flags 21 - class name java/lang/runtime/SwitchBootstraps header extends java/lang/Object flags 21 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 @@ -733,17 +787,6 @@ class name java/net/Authenticator header extends java/lang/Object nestMembers java/net/Authenticator$RequestorType flags 421 innerclass innerClass java/net/Authenticator$RequestorType outerClass java/net/Authenticator innerClassName RequestorType flags 4019 -class name java/net/DatagramSocket -header extends java/lang/Object implements java/io/Closeable flags 21 classAnnotations @Ljdk/Profile+Annotation;(value=I1) - -class name java/net/InetAddress -header extends java/lang/Object implements java/io/Serializable sealed true flags 21 -innerclass innerClass java/net/spi/InetAddressResolver$LookupPolicy outerClass java/net/spi/InetAddressResolver innerClassName LookupPolicy flags 19 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/net/spi/InetAddressResolverProvider$Configuration outerClass java/net/spi/InetAddressResolverProvider innerClassName Configuration flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name java/net/Socket -method name setSoTimeout descriptor (I)V -method name getSoTimeout descriptor ()I @@ -760,139 +803,50 @@ method name setReceiveBufferSize descriptor (I)V thrownTypes java/net/SocketExce method name getReceiveBufferSize descriptor ()I thrownTypes java/net/SocketException flags 1 method name close descriptor ()V thrownTypes java/io/IOException flags 1 -class name java/net/SocketImpl -header extends java/lang/Object implements java/net/SocketOptions flags 421 - -class name java/net/spi/InetAddressResolverProvider$Configuration -header extends java/lang/Object nestHost java/net/spi/InetAddressResolverProvider sealed true flags 601 -innerclass innerClass java/net/spi/InetAddressResolverProvider$Configuration outerClass java/net/spi/InetAddressResolverProvider innerClassName Configuration flags 609 - -class name java/net/spi/URLStreamHandlerProvider -header extends java/lang/Object implements java/net/URLStreamHandlerFactory flags 421 - -class name java/nio/Buffer -header extends java/lang/Object sealed true flags 421 - -class name java/nio/ByteBuffer -header extends java/nio/Buffer implements java/lang/Comparable sealed true flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable; - -class name java/nio/CharBuffer -header extends java/nio/Buffer implements java/lang/Comparable,java/lang/Appendable,java/lang/CharSequence,java/lang/Readable sealed true flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable;Ljava/lang/Appendable;Ljava/lang/CharSequence;Ljava/lang/Readable; -innerclass innerClass java/util/Spliterator$OfInt outerClass java/util/Spliterator innerClassName OfInt flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/nio/DoubleBuffer -header extends java/nio/Buffer implements java/lang/Comparable sealed true flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable; - -class name java/nio/FloatBuffer -header extends java/nio/Buffer implements java/lang/Comparable sealed true flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable; - -class name java/nio/IntBuffer -header extends java/nio/Buffer implements java/lang/Comparable sealed true flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable; - -class name java/nio/LongBuffer -header extends java/nio/Buffer implements java/lang/Comparable sealed true flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable; - -class name java/nio/MappedByteBuffer -header extends java/nio/ByteBuffer sealed true flags 421 - -class name java/nio/ShortBuffer -header extends java/nio/Buffer implements java/lang/Comparable sealed true flags 421 signature Ljava/nio/Buffer;Ljava/lang/Comparable; +class name java/nio/DirectCharBufferRS +method name append descriptor (Ljava/lang/CharSequence;)Ljava/nio/CharBuffer; flags 1 +method name append descriptor (Ljava/lang/CharSequence;II)Ljava/nio/CharBuffer; flags 1 +method name append descriptor (Ljava/lang/CharSequence;II)Ljava/lang/Appendable; thrownTypes java/io/IOException flags 1041 methodParameters 1000:null,1000:null,1000:null +method name append descriptor (Ljava/lang/CharSequence;)Ljava/lang/Appendable; thrownTypes java/io/IOException flags 1041 methodParameters 1000:null + +class name java/nio/DirectCharBufferRU +method name append descriptor (Ljava/lang/CharSequence;)Ljava/nio/CharBuffer; flags 1 +method name append descriptor (Ljava/lang/CharSequence;II)Ljava/nio/CharBuffer; flags 1 +method name append descriptor (Ljava/lang/CharSequence;II)Ljava/lang/Appendable; thrownTypes java/io/IOException flags 1041 methodParameters 1000:null,1000:null,1000:null +method name append descriptor (Ljava/lang/CharSequence;)Ljava/lang/Appendable; thrownTypes java/io/IOException flags 1041 methodParameters 1000:null + +class name java/nio/DirectCharBufferS +method name append descriptor (Ljava/lang/CharSequence;)Ljava/nio/CharBuffer; flags 1 +method name append descriptor (Ljava/lang/CharSequence;II)Ljava/nio/CharBuffer; flags 1 +method name append descriptor (Ljava/lang/CharSequence;II)Ljava/lang/Appendable; thrownTypes java/io/IOException flags 1041 methodParameters 1000:null,1000:null,1000:null +method name append descriptor (Ljava/lang/CharSequence;)Ljava/lang/Appendable; thrownTypes java/io/IOException flags 1041 methodParameters 1000:null + +class name java/nio/DirectCharBufferU +method name append descriptor (Ljava/lang/CharSequence;)Ljava/nio/CharBuffer; flags 1 +method name append descriptor (Ljava/lang/CharSequence;II)Ljava/nio/CharBuffer; flags 1 +method name append descriptor (Ljava/lang/CharSequence;II)Ljava/lang/Appendable; thrownTypes java/io/IOException flags 1041 methodParameters 1000:null,1000:null,1000:null +method name append descriptor (Ljava/lang/CharSequence;)Ljava/lang/Appendable; thrownTypes java/io/IOException flags 1041 methodParameters 1000:null + +class name java/nio/HeapCharBuffer +method name append descriptor (Ljava/lang/CharSequence;)Ljava/nio/CharBuffer; flags 1 +method name append descriptor (Ljava/lang/CharSequence;II)Ljava/nio/CharBuffer; flags 1 +method name append descriptor (Ljava/lang/CharSequence;II)Ljava/lang/Appendable; thrownTypes java/io/IOException flags 1041 methodParameters 1000:null,1000:null,1000:null +method name append descriptor (Ljava/lang/CharSequence;)Ljava/lang/Appendable; thrownTypes java/io/IOException flags 1041 methodParameters 1000:null + +class name java/nio/HeapCharBufferR +method name append descriptor (Ljava/lang/CharSequence;)Ljava/nio/CharBuffer; flags 1 +method name append descriptor (Ljava/lang/CharSequence;II)Ljava/nio/CharBuffer; flags 1 +method name append descriptor (Ljava/lang/CharSequence;II)Ljava/lang/Appendable; thrownTypes java/io/IOException flags 1041 methodParameters 1000:null,1000:null,1000:null +method name append descriptor (Ljava/lang/CharSequence;)Ljava/lang/Appendable; thrownTypes java/io/IOException flags 1041 methodParameters 1000:null class name java/nio/channels/FileChannel -method name map descriptor (Ljava/nio/channels/FileChannel$MapMode;JJLjava/lang/foreign/SegmentScope;)Ljava/lang/foreign/MemorySegment; method name map descriptor (Ljava/nio/channels/FileChannel$MapMode;JJLjava/lang/foreign/Arena;)Ljava/lang/foreign/MemorySegment; thrownTypes java/io/IOException flags 1 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;FOREIGN;) -class name java/security/Certificate -header extends java/lang/Object flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="1.2") - -class name java/security/Identity -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 421 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="1.2") - -class name java/security/SecureRandomParameters -header extends java/lang/Object flags 601 - -class name java/security/SignedObject -header extends java/lang/Object implements java/io/Serializable flags 31 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 - class name java/security/cert/CertStore -method name getDefaultType descriptor ()Ljava/lang/String; method name getDefaultType descriptor ()Ljava/lang/String; flags 19 -class name java/security/cert/CertificateRevokedException -header extends java/security/cert/CertificateException flags 21 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 - -class name java/security/cert/URICertStoreParameters -header extends java/lang/Object implements java/security/cert/CertStoreParameters flags 31 - -class name java/security/interfaces/RSAKey --method name getParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec; -method name getParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec; 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; -field name SHA512_224 descriptor Ljava/security/spec/MGF1ParameterSpec; flags 19 -field name SHA512_256 descriptor Ljava/security/spec/MGF1ParameterSpec; flags 19 - -class name java/security/spec/PSSParameterSpec --field name TRAILER_FIELD_BC descriptor I --method name toString descriptor ()Ljava/lang/String; -field name TRAILER_FIELD_BC descriptor I constantValue 1 flags 19 -method name toString descriptor ()Ljava/lang/String; flags 1 - -class name java/security/spec/RSAKeyGenParameterSpec --method name descriptor (ILjava/math/BigInteger;Ljava/security/spec/AlgorithmParameterSpec;)V --method name getKeyParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec; -method name 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 --method name 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 -method name 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/RSAPrivateCrtKeySpec --method name 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 -method name 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 --method name descriptor (Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/security/spec/AlgorithmParameterSpec;)V --method name getParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec; -method name 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 --method name descriptor (Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/security/spec/AlgorithmParameterSpec;)V --method name getParams descriptor ()Ljava/security/spec/AlgorithmParameterSpec; -method name 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/text/DateFormatSymbols -header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 21 -innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019 - -class name java/text/RuleBasedCollator -header extends java/text/Collator flags 21 -innerclass innerClass java/text/Normalizer$Form outerClass java/text/Normalizer innerClassName Form flags 4019 - -class name java/time/ZoneId -header extends java/lang/Object implements java/io/Serializable sealed true flags 421 runtimeAnnotations @Ljdk/internal/ValueBased; -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 - -class name java/time/chrono/ChronoLocalDate -header extends java/lang/Object implements java/time/temporal/Temporal,java/time/temporal/TemporalAdjuster,java/lang/Comparable flags 601 signature Ljava/lang/Object;Ljava/time/temporal/Temporal;Ljava/time/temporal/TemporalAdjuster;Ljava/lang/Comparable; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/time/chrono/ChronoLocalDateTime -header extends java/lang/Object implements java/time/temporal/Temporal,java/time/temporal/TemporalAdjuster,java/lang/Comparable flags 601 signature Ljava/lang/Object;Ljava/time/temporal/Temporal;Ljava/time/temporal/TemporalAdjuster;Ljava/lang/Comparable;>; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/time/temporal/TemporalAdjusters -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name java/time/zone/ZoneRulesProvider header extends java/lang/Object flags 421 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 @@ -919,22 +873,11 @@ method name unmodifiableSequencedSet descriptor (Ljava/util/SequencedSet;)Ljava/ method name unmodifiableSequencedMap descriptor (Ljava/util/SequencedMap;)Ljava/util/SequencedMap; flags 9 signature (Ljava/util/SequencedMap<+TK;+TV;>;)Ljava/util/SequencedMap; method name newSequencedSetFromMap descriptor (Ljava/util/SequencedMap;)Ljava/util/SequencedSet; flags 9 signature (Ljava/util/SequencedMap;)Ljava/util/SequencedSet; -class name java/util/Comparator -header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name java/util/Deque header extends java/lang/Object implements java/util/Queue,java/util/SequencedCollection flags 601 signature Ljava/lang/Object;Ljava/util/Queue;Ljava/util/SequencedCollection; method name reversed descriptor ()Ljava/util/Deque; flags 1 signature ()Ljava/util/Deque; method name reversed descriptor ()Ljava/util/SequencedCollection; flags 1041 -class name java/util/DoubleSummaryStatistics -header extends java/lang/Object implements java/util/function/DoubleConsumer flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/EnumSet -header extends java/util/AbstractSet implements java/lang/Cloneable,java/io/Serializable sealed true flags 421 signature ;>Ljava/util/AbstractSet;Ljava/lang/Cloneable;Ljava/io/Serializable; - class name java/util/FormatProcessor header extends java/lang/Object implements java/lang/StringTemplate$Processor,java/lang/StringTemplate$Processor$Linkage flags 31 signature Ljava/lang/Object;Ljava/lang/StringTemplate$Processor;Ljava/lang/StringTemplate$Processor$Linkage; classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;STRING_TEMPLATES;) innerclass innerClass java/lang/StringTemplate$Processor outerClass java/lang/StringTemplate innerClassName Processor flags 609 @@ -945,13 +888,6 @@ method name process descriptor (Ljava/lang/StringTemplate;)Ljava/lang/String; fl method name linkage descriptor (Ljava/util/List;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; flags 1 signature (Ljava/util/List;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/MethodHandle; method name process descriptor (Ljava/lang/StringTemplate;)Ljava/lang/Object; thrownTypes java/lang/Throwable flags 1041 methodParameters 3e8:null -class name java/util/GregorianCalendar -header extends java/util/Calendar flags 21 -innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019 - -class name java/util/IllegalFormatException -header extends java/lang/IllegalArgumentException sealed true flags 21 - class name java/util/LinkedHashMap header extends java/util/HashMap implements java/util/SequencedMap flags 21 signature Ljava/util/HashMap;Ljava/util/SequencedMap; innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 @@ -994,11 +930,6 @@ class name java/util/Locale method name availableLocales descriptor ()Ljava/util/stream/Stream; flags 9 signature ()Ljava/util/stream/Stream; method name caseFoldLanguageTag descriptor (Ljava/lang/String;)Ljava/lang/String; flags 9 -class name java/util/Locale$IsoCountryCode -header extends java/lang/Enum nestHost java/util/Locale sealed true flags 4421 signature Ljava/lang/Enum; -innerclass innerClass java/util/Locale$IsoCountryCode outerClass java/util/Locale innerClassName IsoCountryCode flags 4409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name java/util/NavigableMap method name reversed descriptor ()Ljava/util/NavigableMap; flags 1 signature ()Ljava/util/NavigableMap; method name reversed descriptor ()Ljava/util/SortedMap; flags 1041 @@ -1012,12 +943,6 @@ method name reversed descriptor ()Ljava/util/SortedSet; flags 1041 method name reversed descriptor ()Ljava/util/SequencedSet; flags 1041 method name reversed descriptor ()Ljava/util/SequencedCollection; flags 1041 -class name java/util/Observable -header extends java/lang/Object flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="9") - -class name java/util/Observer -header extends java/lang/Object flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="9") - class name java/util/SequencedCollection header extends java/lang/Object implements java/util/Collection flags 601 signature Ljava/lang/Object;Ljava/util/Collection; method name reversed descriptor ()Ljava/util/SequencedCollection; flags 401 signature ()Ljava/util/SequencedCollection; @@ -1067,38 +992,19 @@ method name reversed descriptor ()Ljava/util/SortedSet; flags 1 signature ()Ljav method name reversed descriptor ()Ljava/util/SequencedSet; flags 1041 method name reversed descriptor ()Ljava/util/SequencedCollection; flags 1041 -class name java/util/TimeZone -header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 421 -innerclass innerClass java/util/Locale$Category outerClass java/util/Locale innerClassName Category flags 4019 - class name java/util/TreeMap method name putFirst descriptor (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; flags 1 signature (TK;TV;)TV; method name putLast descriptor (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; flags 1 signature (TK;TV;)TV; class name java/util/TreeSet -header extends java/util/AbstractSet implements java/util/NavigableSet,java/lang/Cloneable,java/io/Serializable flags 21 signature Ljava/util/AbstractSet;Ljava/util/NavigableSet;Ljava/lang/Cloneable;Ljava/io/Serializable; -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 method name addFirst descriptor (Ljava/lang/Object;)V flags 1 signature (TE;)V method name addLast descriptor (Ljava/lang/Object;)V flags 1 signature (TE;)V -class name java/util/concurrent/ConcurrentHashMap$CollectionView -header extends java/lang/Object implements java/util/Collection,java/io/Serializable nestHost java/util/concurrent/ConcurrentHashMap sealed true flags 420 signature Ljava/lang/Object;Ljava/util/Collection;Ljava/io/Serializable; -innerclass innerClass java/util/concurrent/ConcurrentHashMap$CollectionView outerClass java/util/concurrent/ConcurrentHashMap innerClassName CollectionView flags 408 -innerclass innerClass java/util/concurrent/ConcurrentHashMap$KeySetView outerClass java/util/concurrent/ConcurrentHashMap innerClassName KeySetView flags 19 - -class name java/util/concurrent/ConcurrentMap -header extends java/lang/Object implements java/util/Map flags 601 signature Ljava/lang/Object;Ljava/util/Map; -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name java/util/concurrent/ConcurrentSkipListMap method name putFirst descriptor (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; flags 1 signature (TK;TV;)TV; method name putLast descriptor (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; flags 1 signature (TK;TV;)TV; class name java/util/concurrent/ConcurrentSkipListSet -header extends java/util/AbstractSet implements java/util/NavigableSet,java/lang/Cloneable,java/io/Serializable flags 21 signature Ljava/util/AbstractSet;Ljava/util/NavigableSet;Ljava/lang/Cloneable;Ljava/io/Serializable; -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 method name addFirst descriptor (Ljava/lang/Object;)V flags 1 signature (TE;)V method name addLast descriptor (Ljava/lang/Object;)V flags 1 signature (TE;)V @@ -1112,9 +1018,6 @@ method name removeLast descriptor ()Ljava/lang/Object; flags 1 signature ()TE; method name reversed descriptor ()Ljava/util/List; flags 1 signature ()Ljava/util/List; method name reversed descriptor ()Ljava/util/SequencedCollection; flags 1041 -class name java/util/concurrent/CountedCompleter -header extends java/util/concurrent/ForkJoinTask flags 421 signature Ljava/util/concurrent/ForkJoinTask; classAnnotations @Ljdk/Profile+Annotation;(value=I1) - class name java/util/concurrent/DelayQueue method name remove descriptor ()Ljava/util/concurrent/Delayed; flags 1 signature ()TE; method name remove descriptor ()Ljava/lang/Object; flags 1041 @@ -1131,11 +1034,12 @@ method name descriptor ()V flags 1 method name descriptor (Ljava/lang/String;)V flags 1 class name java/util/concurrent/StructuredTaskScope -header extends java/lang/Object implements java/lang/AutoCloseable nestMembers java/util/concurrent/StructuredTaskScope$ShutdownOnFailure,java/util/concurrent/StructuredTaskScope$ShutdownOnSuccess,java/util/concurrent/StructuredTaskScope$Subtask,java/util/concurrent/StructuredTaskScope$Subtask$State flags 21 signature Ljava/lang/Object;Ljava/lang/AutoCloseable; classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;STRUCTURED_CONCURRENCY;) +header extends java/lang/Object implements java/lang/AutoCloseable nestMembers java/util/concurrent/StructuredTaskScope$ShutdownOnFailure,java/util/concurrent/StructuredTaskScope$ShutdownOnSuccess,java/util/concurrent/StructuredTaskScope$SubtaskImpl,java/util/concurrent/StructuredTaskScope$Subtask,java/util/concurrent/StructuredTaskScope$Subtask$State flags 21 signature Ljava/lang/Object;Ljava/lang/AutoCloseable; classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;STRUCTURED_CONCURRENCY;) innerclass innerClass java/lang/Thread$Builder outerClass java/lang/Thread innerClassName Builder flags 609 innerclass innerClass java/lang/Thread$Builder$OfVirtual outerClass java/lang/Thread$Builder innerClassName OfVirtual flags 609 innerclass innerClass java/util/concurrent/StructuredTaskScope$Subtask outerClass java/util/concurrent/StructuredTaskScope innerClassName Subtask flags 609 innerclass innerClass java/util/concurrent/StructuredTaskScope$Subtask$State outerClass java/util/concurrent/StructuredTaskScope$Subtask innerClassName State flags 4019 +innerclass innerClass java/util/concurrent/StructuredTaskScope$SubtaskImpl outerClass java/util/concurrent/StructuredTaskScope innerClassName SubtaskImpl flags 1a innerclass innerClass java/util/concurrent/StructuredTaskScope$ShutdownOnFailure outerClass java/util/concurrent/StructuredTaskScope innerClassName ShutdownOnFailure flags 19 innerclass innerClass java/util/concurrent/StructuredTaskScope$ShutdownOnSuccess outerClass java/util/concurrent/StructuredTaskScope innerClassName ShutdownOnSuccess flags 19 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 @@ -1189,9 +1093,10 @@ method name joinUntil descriptor (Ljava/time/Instant;)Ljava/util/concurrent/Stru method name join descriptor ()Ljava/util/concurrent/StructuredTaskScope; thrownTypes java/lang/InterruptedException flags 1041 class name java/util/concurrent/StructuredTaskScope$Subtask -header extends java/lang/Object implements java/util/function/Supplier nestHost java/util/concurrent/StructuredTaskScope sealed true flags 601 signature Ljava/lang/Object;Ljava/util/function/Supplier; classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;STRUCTURED_CONCURRENCY;) +header extends java/lang/Object implements java/util/function/Supplier nestHost java/util/concurrent/StructuredTaskScope sealed true permittedSubclasses java/util/concurrent/StructuredTaskScope$SubtaskImpl flags 601 signature Ljava/lang/Object;Ljava/util/function/Supplier; classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;STRUCTURED_CONCURRENCY;) innerclass innerClass java/util/concurrent/StructuredTaskScope$Subtask outerClass java/util/concurrent/StructuredTaskScope innerClassName Subtask flags 609 innerclass innerClass java/util/concurrent/StructuredTaskScope$Subtask$State outerClass java/util/concurrent/StructuredTaskScope$Subtask innerClassName State flags 4019 +innerclass innerClass java/util/concurrent/StructuredTaskScope$SubtaskImpl outerClass java/util/concurrent/StructuredTaskScope innerClassName SubtaskImpl flags 1a method name task descriptor ()Ljava/util/concurrent/Callable; flags 401 signature ()Ljava/util/concurrent/Callable<+TT;>; method name state descriptor ()Ljava/util/concurrent/StructuredTaskScope$Subtask$State; flags 401 method name get descriptor ()Ljava/lang/Object; flags 401 signature ()TT; @@ -1207,159 +1112,26 @@ field name FAILED descriptor Ljava/util/concurrent/StructuredTaskScope$Subtask$S method name values descriptor ()[Ljava/util/concurrent/StructuredTaskScope$Subtask$State; flags 9 method name valueOf descriptor (Ljava/lang/String;)Ljava/util/concurrent/StructuredTaskScope$Subtask$State; flags 9 methodParameters 8000:null -class name java/util/concurrent/atomic/AtomicBoolean -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 - -class name java/util/concurrent/atomic/AtomicReference -header extends java/lang/Object implements java/io/Serializable flags 21 signature Ljava/lang/Object;Ljava/io/Serializable; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/concurrent/atomic/AtomicReferenceArray -header extends java/lang/Object implements java/io/Serializable flags 21 signature Ljava/lang/Object;Ljava/io/Serializable; -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -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 - -class name java/util/function/BiConsumer -header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/BiFunction -header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/BiPredicate -header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/BinaryOperator -header extends java/lang/Object implements java/util/function/BiFunction flags 601 signature Ljava/lang/Object;Ljava/util/function/BiFunction; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/Consumer -header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/DoubleConsumer -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/DoublePredicate -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/DoubleUnaryOperator -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/Function -header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/IntConsumer -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/IntPredicate -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/IntUnaryOperator -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/LongConsumer -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/LongPredicate -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/LongUnaryOperator -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/Predicate -header extends java/lang/Object flags 601 signature Ljava/lang/Object; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/function/UnaryOperator -header extends java/lang/Object implements java/util/function/Function flags 601 signature Ljava/lang/Object;Ljava/util/function/Function; runtimeAnnotations @Ljava/lang/FunctionalInterface; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +class name java/util/concurrent/StructuredTaskScope$SubtaskImpl +header extends java/lang/Object implements java/util/concurrent/StructuredTaskScope$Subtask,java/lang/Runnable nestHost java/util/concurrent/StructuredTaskScope flags 30 signature Ljava/lang/Object;Ljava/util/concurrent/StructuredTaskScope$Subtask;Ljava/lang/Runnable; +innerclass innerClass java/util/concurrent/StructuredTaskScope$SubtaskImpl outerClass java/util/concurrent/StructuredTaskScope innerClassName SubtaskImpl flags 1a +innerclass innerClass java/util/concurrent/StructuredTaskScope$Subtask outerClass java/util/concurrent/StructuredTaskScope innerClassName Subtask flags 609 +innerclass innerClass java/util/concurrent/StructuredTaskScope$Subtask$State outerClass java/util/concurrent/StructuredTaskScope$Subtask innerClassName State flags 4019 +method name run descriptor ()V flags 1 +method name task descriptor ()Ljava/util/concurrent/Callable; flags 1 signature ()Ljava/util/concurrent/Callable<+TT;>; +method name state descriptor ()Ljava/util/concurrent/StructuredTaskScope$Subtask$State; flags 1 +method name get descriptor ()Ljava/lang/Object; flags 1 signature ()TT; +method name exception descriptor ()Ljava/lang/Throwable; flags 1 +method name toString descriptor ()Ljava/lang/String; flags 1 class name java/util/regex/Pattern method name splitWithDelimiters descriptor (Ljava/lang/CharSequence;I)[Ljava/lang/String; flags 1 -class name java/util/spi/AbstractResourceBundleProvider -header extends java/lang/Object implements java/util/spi/ResourceBundleProvider flags 421 -innerclass innerClass java/util/ResourceBundle$Control outerClass java/util/ResourceBundle innerClassName Control flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/spi/CurrencyNameProvider -header extends java/util/spi/LocaleServiceProvider flags 421 -innerclass innerClass java/util/ResourceBundle$Control outerClass java/util/ResourceBundle innerClassName Control flags 9 - -class name java/util/spi/ResourceBundleProvider -header extends java/lang/Object flags 601 - -class name java/util/spi/ToolProvider -header extends java/lang/Object flags 601 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/zip/CRC32C -header extends java/lang/Object implements java/util/zip/Checksum flags 31 - -class name javax/crypto/AEADBadTagException -header extends javax/crypto/BadPaddingException flags 21 - -class name javax/crypto/BadPaddingException -header extends java/security/GeneralSecurityException flags 21 - -class name javax/crypto/CipherInputStream -header extends java/io/FilterInputStream flags 21 - -class name javax/crypto/CipherOutputStream -header extends java/io/FilterOutputStream flags 21 - -class name javax/crypto/CipherSpi -header extends java/lang/Object flags 421 - class name javax/crypto/DecapsulateException header extends java/security/GeneralSecurityException flags 21 method name descriptor (Ljava/lang/String;)V flags 1 method name descriptor (Ljava/lang/String;Ljava/lang/Throwable;)V flags 1 -class name javax/crypto/EncryptedPrivateKeyInfo -header extends java/lang/Object flags 21 - -class name javax/crypto/ExemptionMechanism -header extends java/lang/Object flags 21 - -class name javax/crypto/ExemptionMechanismException -header extends java/security/GeneralSecurityException flags 21 - -class name javax/crypto/ExemptionMechanismSpi -header extends java/lang/Object flags 421 - -class name javax/crypto/IllegalBlockSizeException -header extends java/security/GeneralSecurityException flags 21 - class name javax/crypto/KEM header extends java/lang/Object nestMembers javax/crypto/KEM$Decapsulator,javax/crypto/KEM$Encapsulator,javax/crypto/KEM$Encapsulated flags 31 innerclass innerClass java/security/Provider$Service outerClass java/security/Provider innerClassName Service flags 9 @@ -1429,126 +1201,289 @@ method name engineEncapsulate descriptor (IILjava/lang/String;)Ljavax/crypto/KEM method name engineSecretSize descriptor ()I flags 401 method name engineEncapsulationSize descriptor ()I flags 401 -class name javax/crypto/KeyAgreement -header extends java/lang/Object flags 21 -innerclass innerClass java/security/Provider$Service outerClass java/security/Provider innerClassName Service flags 9 - -class name javax/crypto/KeyAgreementSpi -header extends java/lang/Object flags 421 - -class name javax/crypto/KeyGenerator -header extends java/lang/Object flags 21 -innerclass innerClass java/security/Provider$Service outerClass java/security/Provider innerClassName Service flags 9 - -class name javax/crypto/KeyGeneratorSpi -header extends java/lang/Object flags 421 - -class name javax/crypto/Mac -header extends java/lang/Object implements java/lang/Cloneable flags 21 -innerclass innerClass java/security/Provider$Service outerClass java/security/Provider innerClassName Service flags 9 - -class name javax/crypto/MacSpi -header extends java/lang/Object flags 421 +class name javax/net/ssl/KeyManagerFactory +-method name getDefaultAlgorithm descriptor ()Ljava/lang/String; +method name getDefaultAlgorithm descriptor ()Ljava/lang/String; flags 19 -class name javax/crypto/NoSuchPaddingException -header extends java/security/GeneralSecurityException flags 21 +class name javax/net/ssl/TrustManagerFactory +-method name getDefaultAlgorithm descriptor ()Ljava/lang/String; +method name getDefaultAlgorithm descriptor ()Ljava/lang/String; flags 19 -class name javax/crypto/NullCipher -header extends javax/crypto/Cipher flags 21 +class name jdk/internal/foreign/abi/aarch64/windows/WindowsAArch64Linker +header extends jdk/internal/foreign/abi/AbstractLinker flags 31 +method name descriptor ()V flags 1 +method name getInstance descriptor ()Ljdk/internal/foreign/abi/aarch64/windows/WindowsAArch64Linker; flags 9 +method name arrangeDowncall descriptor (Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;Ljdk/internal/foreign/abi/LinkerOptions;)Ljava/lang/invoke/MethodHandle; flags 4 +method name arrangeUpcall descriptor (Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;Ljdk/internal/foreign/abi/LinkerOptions;)Ljdk/internal/foreign/abi/AbstractLinker$UpcallStubFactory; flags 4 +method name linkerByteOrder descriptor ()Ljava/nio/ByteOrder; flags 4 -class name javax/crypto/SealedObject -header extends java/lang/Object implements java/io/Serializable flags 21 +class name jdk/internal/foreign/abi/fallback/FallbackLinker +header extends jdk/internal/foreign/abi/AbstractLinker flags 31 +innerclass innerClass java/lang/foreign/ValueLayout$OfBoolean outerClass java/lang/foreign/ValueLayout innerClassName OfBoolean flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfByte outerClass java/lang/foreign/ValueLayout innerClassName OfByte flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfShort outerClass java/lang/foreign/ValueLayout innerClassName OfShort flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfChar outerClass java/lang/foreign/ValueLayout innerClassName OfChar flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfInt outerClass java/lang/foreign/ValueLayout innerClassName OfInt flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfLong outerClass java/lang/foreign/ValueLayout innerClassName OfLong flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfFloat outerClass java/lang/foreign/ValueLayout innerClassName OfFloat flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfDouble outerClass java/lang/foreign/ValueLayout innerClassName OfDouble flags 609 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +method name descriptor ()V flags 1 +method name getInstance descriptor ()Ljdk/internal/foreign/abi/fallback/FallbackLinker; flags 9 +method name isSupported descriptor ()Z flags 9 +method name arrangeDowncall descriptor (Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;Ljdk/internal/foreign/abi/LinkerOptions;)Ljava/lang/invoke/MethodHandle; flags 4 +method name arrangeUpcall descriptor (Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;Ljdk/internal/foreign/abi/LinkerOptions;)Ljdk/internal/foreign/abi/AbstractLinker$UpcallStubFactory; flags 4 +method name linkerByteOrder descriptor ()Ljava/nio/ByteOrder; flags 4 + +class name jdk/internal/foreign/abi/ppc64/linux/LinuxPPC64leLinker +header extends jdk/internal/foreign/abi/AbstractLinker flags 31 +method name getInstance descriptor ()Ljdk/internal/foreign/abi/ppc64/linux/LinuxPPC64leLinker; flags 9 +method name arrangeDowncall descriptor (Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;Ljdk/internal/foreign/abi/LinkerOptions;)Ljava/lang/invoke/MethodHandle; flags 4 +method name arrangeUpcall descriptor (Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;Ljdk/internal/foreign/abi/LinkerOptions;)Ljdk/internal/foreign/abi/AbstractLinker$UpcallStubFactory; flags 4 +method name linkerByteOrder descriptor ()Ljava/nio/ByteOrder; flags 4 + +class name jdk/internal/foreign/abi/riscv64/linux/LinuxRISCV64Linker +header extends jdk/internal/foreign/abi/AbstractLinker flags 31 +method name getInstance descriptor ()Ljdk/internal/foreign/abi/riscv64/linux/LinuxRISCV64Linker; flags 9 +method name arrangeDowncall descriptor (Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;Ljdk/internal/foreign/abi/LinkerOptions;)Ljava/lang/invoke/MethodHandle; flags 4 +method name arrangeUpcall descriptor (Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;Ljdk/internal/foreign/abi/LinkerOptions;)Ljdk/internal/foreign/abi/AbstractLinker$UpcallStubFactory; flags 4 +method name linkerByteOrder descriptor ()Ljava/nio/ByteOrder; flags 4 + +class name jdk/internal/foreign/layout/AbstractGroupLayout +method name withByteAlignment descriptor (J)Ljdk/internal/foreign/layout/AbstractGroupLayout; flags 1 signature (J)TL; +method name withByteAlignment descriptor (J)Ljdk/internal/foreign/layout/AbstractLayout; flags 1041 methodParameters 1000:null + +class name jdk/internal/foreign/layout/AbstractLayout +header extends java/lang/Object sealed true permittedSubclasses jdk/internal/foreign/layout/AbstractGroupLayout,jdk/internal/foreign/layout/PaddingLayoutImpl,jdk/internal/foreign/layout/SequenceLayoutImpl,jdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout flags 421 signature ;:Ljava/lang/foreign/MemoryLayout;>Ljava/lang/Object; +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName AbstractValueLayout flags 408 +-method name withBitAlignment descriptor (J)Ljdk/internal/foreign/layout/AbstractLayout; +-method name bitAlignment descriptor ()J +-method name byteSize descriptor ()J +-method name bitSize descriptor ()J +method name withoutName descriptor ()Ljdk/internal/foreign/layout/AbstractLayout; flags 11 signature ()TL; +method name withByteAlignment descriptor (J)Ljdk/internal/foreign/layout/AbstractLayout; flags 1 signature (J)TL; +method name byteAlignment descriptor ()J flags 11 +method name byteSize descriptor ()J flags 11 -class name javax/crypto/SecretKey -header extends java/lang/Object implements java/security/Key,javax/security/auth/Destroyable flags 601 - -class name javax/crypto/SecretKeyFactory -header extends java/lang/Object flags 21 -innerclass innerClass java/security/Provider$Service outerClass java/security/Provider innerClassName Service flags 9 - -class name javax/crypto/SecretKeyFactorySpi -header extends java/lang/Object flags 421 - -class name javax/crypto/ShortBufferException -header extends java/security/GeneralSecurityException flags 21 - -class name javax/crypto/interfaces/DHKey -header extends java/lang/Object flags 601 - -class name javax/crypto/interfaces/DHPrivateKey -header extends java/lang/Object implements javax/crypto/interfaces/DHKey,java/security/PrivateKey flags 601 - -class name javax/crypto/interfaces/DHPublicKey -header extends java/lang/Object implements javax/crypto/interfaces/DHKey,java/security/PublicKey flags 601 - -class name javax/crypto/interfaces/PBEKey -header extends java/lang/Object implements javax/crypto/SecretKey flags 601 - -class name javax/crypto/spec/DESKeySpec -header extends java/lang/Object implements java/security/spec/KeySpec flags 21 - -class name javax/crypto/spec/DESedeKeySpec -header extends java/lang/Object implements java/security/spec/KeySpec flags 21 +class name jdk/internal/foreign/layout/PaddingLayoutImpl +-method name withBitAlignment descriptor (J)Ljava/lang/foreign/PaddingLayout; +-method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; +method name withByteAlignment descriptor (J)Ljava/lang/foreign/PaddingLayout; flags 1041 methodParameters 1000:null +method name withoutName descriptor ()Ljava/lang/foreign/PaddingLayout; flags 1041 +method name withByteAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; flags 1041 methodParameters 1000:null +method name withoutName descriptor ()Ljava/lang/foreign/MemoryLayout; flags 1041 -class name javax/crypto/spec/DHGenParameterSpec -header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 +class name jdk/internal/foreign/layout/SequenceLayoutImpl +header extends jdk/internal/foreign/layout/AbstractLayout implements java/lang/foreign/SequenceLayout flags 31 signature Ljdk/internal/foreign/layout/AbstractLayout;Ljava/lang/foreign/SequenceLayout; +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +-method name withBitAlignment descriptor (J)Ljava/lang/foreign/SequenceLayout; +-method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; +method name withByteAlignment descriptor (J)Ljdk/internal/foreign/layout/SequenceLayoutImpl; flags 1 +method name withByteAlignment descriptor (J)Ljdk/internal/foreign/layout/AbstractLayout; flags 1041 methodParameters 1000:null +method name withByteAlignment descriptor (J)Ljava/lang/foreign/SequenceLayout; flags 1041 methodParameters 1000:null +method name withoutName descriptor ()Ljava/lang/foreign/MemoryLayout; flags 1041 +method name withByteAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; flags 1041 methodParameters 1000:null -class name javax/crypto/spec/DHParameterSpec -header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 +class name jdk/internal/foreign/layout/StructLayoutImpl +-method name withBitAlignment descriptor (J)Ljava/lang/foreign/StructLayout; +-method name withBitAlignment descriptor (J)Ljava/lang/foreign/GroupLayout; +-method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; +method name withByteAlignment descriptor (J)Ljava/lang/foreign/StructLayout; flags 1041 methodParameters 1000:null +method name withoutName descriptor ()Ljava/lang/foreign/StructLayout; flags 1041 +method name withByteAlignment descriptor (J)Ljava/lang/foreign/GroupLayout; flags 1041 methodParameters 1000:null +method name withoutName descriptor ()Ljava/lang/foreign/GroupLayout; flags 1041 +method name withByteAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; flags 1041 methodParameters 1000:null +method name withoutName descriptor ()Ljava/lang/foreign/MemoryLayout; flags 1041 -class name javax/crypto/spec/DHPrivateKeySpec -header extends java/lang/Object implements java/security/spec/KeySpec flags 21 +class name jdk/internal/foreign/layout/UnionLayoutImpl +-method name withBitAlignment descriptor (J)Ljava/lang/foreign/UnionLayout; +-method name withBitAlignment descriptor (J)Ljava/lang/foreign/GroupLayout; +-method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; +method name withByteAlignment descriptor (J)Ljava/lang/foreign/UnionLayout; flags 1041 methodParameters 1000:null +method name withoutName descriptor ()Ljava/lang/foreign/UnionLayout; flags 1041 +method name withByteAlignment descriptor (J)Ljava/lang/foreign/GroupLayout; flags 1041 methodParameters 1000:null +method name withoutName descriptor ()Ljava/lang/foreign/GroupLayout; flags 1041 +method name withByteAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; flags 1041 methodParameters 1000:null +method name withoutName descriptor ()Ljava/lang/foreign/MemoryLayout; flags 1041 -class name javax/crypto/spec/DHPublicKeySpec -header extends java/lang/Object implements java/security/spec/KeySpec flags 21 +class name jdk/internal/foreign/layout/ValueLayouts +header extends java/lang/Object nestMembers jdk/internal/foreign/layout/ValueLayouts$OfAddressImpl,jdk/internal/foreign/layout/ValueLayouts$OfDoubleImpl,jdk/internal/foreign/layout/ValueLayouts$OfLongImpl,jdk/internal/foreign/layout/ValueLayouts$OfFloatImpl,jdk/internal/foreign/layout/ValueLayouts$OfIntImpl,jdk/internal/foreign/layout/ValueLayouts$OfShortImpl,jdk/internal/foreign/layout/ValueLayouts$OfCharImpl,jdk/internal/foreign/layout/ValueLayouts$OfByteImpl,jdk/internal/foreign/layout/ValueLayouts$OfBooleanImpl,jdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout flags 31 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfBooleanImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfBooleanImpl flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfBoolean outerClass java/lang/foreign/ValueLayout innerClassName OfBoolean flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfCharImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfCharImpl flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfChar outerClass java/lang/foreign/ValueLayout innerClassName OfChar flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfByteImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfByteImpl flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfByte outerClass java/lang/foreign/ValueLayout innerClassName OfByte flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfShortImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfShortImpl flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfShort outerClass java/lang/foreign/ValueLayout innerClassName OfShort flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfIntImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfIntImpl flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfInt outerClass java/lang/foreign/ValueLayout innerClassName OfInt flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfFloatImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfFloatImpl flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfFloat outerClass java/lang/foreign/ValueLayout innerClassName OfFloat flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfLongImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfLongImpl flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfLong outerClass java/lang/foreign/ValueLayout innerClassName OfLong flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfDoubleImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfDoubleImpl flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfDouble outerClass java/lang/foreign/ValueLayout innerClassName OfDouble flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfAddressImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfAddressImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName AbstractValueLayout flags 408 +method name valueLayout descriptor (Ljava/lang/Class;Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout; flags 9 signature (Ljava/lang/Class<*>;Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout; -class name javax/crypto/spec/GCMParameterSpec -header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 +class name jdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout +header extends jdk/internal/foreign/layout/AbstractLayout nestHost jdk/internal/foreign/layout/ValueLayouts sealed true permittedSubclasses jdk/internal/foreign/layout/ValueLayouts$OfBooleanImpl,jdk/internal/foreign/layout/ValueLayouts$OfByteImpl,jdk/internal/foreign/layout/ValueLayouts$OfCharImpl,jdk/internal/foreign/layout/ValueLayouts$OfShortImpl,jdk/internal/foreign/layout/ValueLayouts$OfIntImpl,jdk/internal/foreign/layout/ValueLayouts$OfFloatImpl,jdk/internal/foreign/layout/ValueLayouts$OfLongImpl,jdk/internal/foreign/layout/ValueLayouts$OfDoubleImpl,jdk/internal/foreign/layout/ValueLayouts$OfAddressImpl flags 420 signature ;:Ljava/lang/foreign/ValueLayout;>Ljdk/internal/foreign/layout/AbstractLayout; +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName AbstractValueLayout flags 408 +innerclass innerClass java/lang/foreign/MemoryLayout$PathElement outerClass java/lang/foreign/MemoryLayout innerClassName PathElement flags 609 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfBooleanImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfBooleanImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfByteImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfByteImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfCharImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfCharImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfShortImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfShortImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfIntImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfIntImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfFloatImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfFloatImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfLongImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfLongImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfDoubleImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfDoubleImpl flags 19 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfAddressImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfAddressImpl flags 19 +-method name toString descriptor ()Ljava/lang/String; +method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout; flags 11 signature (Ljava/nio/ByteOrder;)TV; +method name toString descriptor ()Ljava/lang/String; flags 1 -class name javax/crypto/spec/IvParameterSpec -header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 +class name jdk/internal/foreign/layout/ValueLayouts$OfAddressImpl +header extends jdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout implements java/lang/foreign/AddressLayout nestHost jdk/internal/foreign/layout/ValueLayouts flags 31 signature Ljdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout;Ljava/lang/foreign/AddressLayout; +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName AbstractValueLayout flags 408 +innerclass innerClass jdk/internal/foreign/layout/ValueLayouts$OfAddressImpl outerClass jdk/internal/foreign/layout/ValueLayouts innerClassName OfAddressImpl flags 19 +-method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljdk/internal/foreign/layout/ValueLayouts$OfAddressImpl; +-method name asUnbounded descriptor ()Ljava/lang/foreign/ValueLayout$OfAddress; +-method name isUnbounded descriptor ()Z +-method name of descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout$OfAddress; +-method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout; +-method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/ValueLayout$OfAddress; +-method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfAddress; +-method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/ValueLayout$OfAddress; +-method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; +-method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; +method name withTargetLayout descriptor (Ljava/lang/foreign/MemoryLayout;)Ljava/lang/foreign/AddressLayout; flags 1 runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive; +method name withoutTargetLayout descriptor ()Ljava/lang/foreign/AddressLayout; flags 1 +method name targetLayout descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional; +method name of descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/AddressLayout; flags 9 +method name toString descriptor ()Ljava/lang/String; flags 1 +method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljava/lang/foreign/AddressLayout; flags 1041 methodParameters 1000:null +method name withByteAlignment descriptor (J)Ljava/lang/foreign/AddressLayout; flags 1041 methodParameters 1000:null +method name withoutName descriptor ()Ljava/lang/foreign/AddressLayout; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljava/lang/foreign/AddressLayout; flags 1041 methodParameters 1000:null +method name withByteAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; flags 1041 methodParameters 1000:null +method name withoutName descriptor ()Ljava/lang/foreign/ValueLayout; flags 1041 +method name withByteAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; flags 1041 methodParameters 1000:null +method name withoutName descriptor ()Ljava/lang/foreign/MemoryLayout; flags 1041 -class name javax/crypto/spec/OAEPParameterSpec -header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 -innerclass innerClass javax/crypto/spec/PSource$PSpecified outerClass javax/crypto/spec/PSource innerClassName PSpecified flags 19 +class name jdk/internal/foreign/layout/ValueLayouts$OfBooleanImpl +-method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljdk/internal/foreign/layout/ValueLayouts$OfBooleanImpl; +-method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout; +-method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfBoolean; +-method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; +-method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; +method name toString descriptor ()Ljava/lang/String; flags 1041 +method name withByteAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfBoolean; flags 1041 methodParameters 1000:null +method name withoutName descriptor ()Ljava/lang/foreign/ValueLayout$OfBoolean; flags 1041 +method name withByteAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; flags 1041 methodParameters 1000:null +method name withoutName descriptor ()Ljava/lang/foreign/ValueLayout; flags 1041 +method name withByteAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; flags 1041 methodParameters 1000:null +method name withoutName descriptor ()Ljava/lang/foreign/MemoryLayout; flags 1041 -class name javax/crypto/spec/PBEKeySpec -header extends java/lang/Object implements java/security/spec/KeySpec flags 21 +class name jdk/internal/foreign/layout/ValueLayouts$OfByteImpl +-method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljdk/internal/foreign/layout/ValueLayouts$OfByteImpl; +-method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout; +-method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfByte; +-method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; +-method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; +method name toString descriptor ()Ljava/lang/String; flags 1041 +method name withByteAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfByte; flags 1041 methodParameters 1000:null +method name withoutName descriptor ()Ljava/lang/foreign/ValueLayout$OfByte; flags 1041 +method name withByteAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; flags 1041 methodParameters 1000:null +method name withoutName descriptor ()Ljava/lang/foreign/ValueLayout; flags 1041 +method name withByteAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; flags 1041 methodParameters 1000:null +method name withoutName descriptor ()Ljava/lang/foreign/MemoryLayout; flags 1041 -class name javax/crypto/spec/PBEParameterSpec -header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 +class name jdk/internal/foreign/layout/ValueLayouts$OfCharImpl +-method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljdk/internal/foreign/layout/ValueLayouts$OfCharImpl; +-method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout; +-method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfChar; +-method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; +-method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; +method name toString descriptor ()Ljava/lang/String; flags 1041 +method name withByteAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfChar; flags 1041 methodParameters 1000:null +method name withoutName descriptor ()Ljava/lang/foreign/ValueLayout$OfChar; flags 1041 +method name withByteAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; flags 1041 methodParameters 1000:null +method name withoutName descriptor ()Ljava/lang/foreign/ValueLayout; flags 1041 +method name withByteAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; flags 1041 methodParameters 1000:null +method name withoutName descriptor ()Ljava/lang/foreign/MemoryLayout; flags 1041 -class name javax/crypto/spec/RC2ParameterSpec -header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 +class name jdk/internal/foreign/layout/ValueLayouts$OfDoubleImpl +-method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljdk/internal/foreign/layout/ValueLayouts$OfDoubleImpl; +-method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout; +-method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfDouble; +-method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; +-method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; +method name toString descriptor ()Ljava/lang/String; flags 1041 +method name withByteAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfDouble; flags 1041 methodParameters 1000:null +method name withoutName descriptor ()Ljava/lang/foreign/ValueLayout$OfDouble; flags 1041 +method name withByteAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; flags 1041 methodParameters 1000:null +method name withoutName descriptor ()Ljava/lang/foreign/ValueLayout; flags 1041 +method name withByteAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; flags 1041 methodParameters 1000:null +method name withoutName descriptor ()Ljava/lang/foreign/MemoryLayout; flags 1041 -class name javax/crypto/spec/RC5ParameterSpec -header extends java/lang/Object implements java/security/spec/AlgorithmParameterSpec flags 21 +class name jdk/internal/foreign/layout/ValueLayouts$OfFloatImpl +-method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljdk/internal/foreign/layout/ValueLayouts$OfFloatImpl; +-method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout; +-method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfFloat; +-method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; +-method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; +method name toString descriptor ()Ljava/lang/String; flags 1041 +method name withByteAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfFloat; flags 1041 methodParameters 1000:null +method name withoutName descriptor ()Ljava/lang/foreign/ValueLayout$OfFloat; flags 1041 +method name withByteAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; flags 1041 methodParameters 1000:null +method name withoutName descriptor ()Ljava/lang/foreign/ValueLayout; flags 1041 +method name withByteAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; flags 1041 methodParameters 1000:null +method name withoutName descriptor ()Ljava/lang/foreign/MemoryLayout; flags 1041 -class name javax/net/ssl/KeyManagerFactory --method name getDefaultAlgorithm descriptor ()Ljava/lang/String; -method name getDefaultAlgorithm descriptor ()Ljava/lang/String; flags 19 +class name jdk/internal/foreign/layout/ValueLayouts$OfIntImpl +-method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljdk/internal/foreign/layout/ValueLayouts$OfIntImpl; +-method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout; +-method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfInt; +-method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; +-method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; +method name toString descriptor ()Ljava/lang/String; flags 1041 +method name withByteAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfInt; flags 1041 methodParameters 1000:null +method name withoutName descriptor ()Ljava/lang/foreign/ValueLayout$OfInt; flags 1041 +method name withByteAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; flags 1041 methodParameters 1000:null +method name withoutName descriptor ()Ljava/lang/foreign/ValueLayout; flags 1041 +method name withByteAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; flags 1041 methodParameters 1000:null +method name withoutName descriptor ()Ljava/lang/foreign/MemoryLayout; flags 1041 -class name javax/net/ssl/TrustManagerFactory --method name getDefaultAlgorithm descriptor ()Ljava/lang/String; -method name getDefaultAlgorithm descriptor ()Ljava/lang/String; flags 19 +class name jdk/internal/foreign/layout/ValueLayouts$OfLongImpl +-method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljdk/internal/foreign/layout/ValueLayouts$OfLongImpl; +-method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout; +-method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfLong; +-method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; +-method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; +method name toString descriptor ()Ljava/lang/String; flags 1041 +method name withByteAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfLong; flags 1041 methodParameters 1000:null +method name withoutName descriptor ()Ljava/lang/foreign/ValueLayout$OfLong; flags 1041 +method name withByteAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; flags 1041 methodParameters 1000:null +method name withoutName descriptor ()Ljava/lang/foreign/ValueLayout; flags 1041 +method name withByteAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; flags 1041 methodParameters 1000:null +method name withoutName descriptor ()Ljava/lang/foreign/MemoryLayout; flags 1041 -class name jdk/internal/event/Event -header extends java/lang/Object flags 421 --method name descriptor ()V --method name begin descriptor ()V --method name end descriptor ()V --method name commit descriptor ()V --method name isEnabled descriptor ()Z --method name shouldCommit descriptor ()Z --method name set descriptor (ILjava/lang/Object;)V -method name descriptor ()V flags 4 -method name begin descriptor ()V flags 1 -method name end descriptor ()V flags 1 -method name commit descriptor ()V flags 1 -method name isEnabled descriptor ()Z flags 1 -method name shouldCommit descriptor ()Z flags 1 -method name set descriptor (ILjava/lang/Object;)V flags 1 +class name jdk/internal/foreign/layout/ValueLayouts$OfShortImpl +-method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljdk/internal/foreign/layout/ValueLayouts$OfShortImpl; +-method name withOrder descriptor (Ljava/nio/ByteOrder;)Ljdk/internal/foreign/layout/ValueLayouts$AbstractValueLayout; +-method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfShort; +-method name withBitAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; +-method name withBitAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; +method name toString descriptor ()Ljava/lang/String; flags 1041 +method name withByteAlignment descriptor (J)Ljava/lang/foreign/ValueLayout$OfShort; flags 1041 methodParameters 1000:null +method name withoutName descriptor ()Ljava/lang/foreign/ValueLayout$OfShort; flags 1041 +method name withByteAlignment descriptor (J)Ljava/lang/foreign/ValueLayout; flags 1041 methodParameters 1000:null +method name withoutName descriptor ()Ljava/lang/foreign/ValueLayout; flags 1041 +method name withByteAlignment descriptor (J)Ljava/lang/foreign/MemoryLayout; flags 1041 methodParameters 1000:null +method name withoutName descriptor ()Ljava/lang/foreign/MemoryLayout; flags 1041 class name jdk/internal/vm/vector/VectorSupport header extends java/lang/Object nestMembers jdk/internal/vm/vector/VectorSupport$VectorMask,jdk/internal/vm/vector/VectorSupport$VectorShuffle,jdk/internal/vm/vector/VectorSupport$Vector,jdk/internal/vm/vector/VectorSupport$VectorPayload,jdk/internal/vm/vector/VectorSupport$VectorSpecies flags 21 diff --git a/src/jdk.compiler/share/data/symbols/java.compiler-H.sym.txt b/src/jdk.compiler/share/data/symbols/java.compiler-H.sym.txt index 3f56c0c99869e..69c819c1dd0fb 100644 --- a/src/jdk.compiler/share/data/symbols/java.compiler-H.sym.txt +++ b/src/jdk.compiler/share/data/symbols/java.compiler-H.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -26,19 +26,11 @@ # ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ### # ########################################################## # -class name javax/annotation/processing/AbstractProcessor -header extends java/lang/Object implements javax/annotation/processing/Processor flags 421 -innerclass innerClass javax/tools/Diagnostic$Kind outerClass javax/tools/Diagnostic innerClassName Kind flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/annotation/processing/Generated -header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Documented;@Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;SOURCE;)@Ljava/lang/annotation/Target;(value={eLjava/lang/annotation/ElementType;PACKAGE;eLjava/lang/annotation/ElementType;TYPE;eLjava/lang/annotation/ElementType;METHOD;eLjava/lang/annotation/ElementType;CONSTRUCTOR;eLjava/lang/annotation/ElementType;FIELD;eLjava/lang/annotation/ElementType;LOCAL_VARIABLE;eLjava/lang/annotation/ElementType;PARAMETER;}) - class name javax/lang/model/SourceVersion field name RELEASE_17 descriptor Ljavax/lang/model/SourceVersion; flags 4019 class name javax/lang/model/element/Modifier -header extends java/lang/Enum sealed true flags 4021 signature Ljava/lang/Enum; +header extends java/lang/Enum sealed true permittedSubclasses javax/lang/model/element/Modifier$1 flags 4021 signature Ljava/lang/Enum; -field name SEALED descriptor Ljavax/lang/model/element/Modifier; -field name NON_SEALED descriptor Ljavax/lang/model/element/Modifier; field name SEALED descriptor Ljavax/lang/model/element/Modifier; flags 4019 @@ -48,31 +40,6 @@ class name javax/lang/model/element/TypeElement -method name getPermittedSubclasses descriptor ()Ljava/util/List; method name getPermittedSubclasses descriptor ()Ljava/util/List; flags 1 signature ()Ljava/util/List<+Ljavax/lang/model/type/TypeMirror;>; -class name javax/lang/model/element/UnknownAnnotationValueException -header extends javax/lang/model/UnknownEntityException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/lang/model/element/UnknownDirectiveException -header extends javax/lang/model/UnknownEntityException flags 21 -innerclass innerClass javax/lang/model/element/ModuleElement$Directive outerClass javax/lang/model/element/ModuleElement innerClassName Directive flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/lang/model/element/UnknownElementException -header extends javax/lang/model/UnknownEntityException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/lang/model/type/MirroredTypeException -header extends javax/lang/model/type/MirroredTypesException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/lang/model/type/MirroredTypesException -header extends java/lang/RuntimeException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/lang/model/type/UnknownTypeException -header extends javax/lang/model/UnknownEntityException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name javax/lang/model/util/AbstractAnnotationValueVisitor14 header extends javax/lang/model/util/AbstractAnnotationValueVisitor9 flags 421 signature Ljavax/lang/model/util/AbstractAnnotationValueVisitor9; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_17;) @@ -82,15 +49,6 @@ header extends javax/lang/model/util/AbstractElementVisitor9 flags 421 signature class name javax/lang/model/util/AbstractTypeVisitor14 header extends javax/lang/model/util/AbstractTypeVisitor9 flags 421 signature Ljavax/lang/model/util/AbstractTypeVisitor9; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_17;) -class name javax/lang/model/util/AbstractTypeVisitor6 -header extends java/lang/Object implements javax/lang/model/type/TypeVisitor flags 421 signature Ljava/lang/Object;Ljavax/lang/model/type/TypeVisitor; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_6;) - -class name javax/lang/model/util/AbstractTypeVisitor7 -header extends javax/lang/model/util/AbstractTypeVisitor6 flags 421 signature Ljavax/lang/model/util/AbstractTypeVisitor6; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_7;) - -class name javax/lang/model/util/AbstractTypeVisitor8 -header extends javax/lang/model/util/AbstractTypeVisitor7 flags 421 signature Ljavax/lang/model/util/AbstractTypeVisitor7; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_8;) - class name javax/lang/model/util/ElementKindVisitor14 header extends javax/lang/model/util/ElementKindVisitor9 flags 21 signature Ljavax/lang/model/util/ElementKindVisitor9; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_17;) @@ -112,12 +70,3 @@ header extends javax/lang/model/util/SimpleTypeVisitor9 flags 21 signature Ljavax/lang/model/util/TypeKindVisitor9; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_17;) -class name javax/tools/SimpleJavaFileObject -header extends java/lang/Object implements javax/tools/JavaFileObject flags 21 -innerclass innerClass javax/tools/JavaFileObject$Kind outerClass javax/tools/JavaFileObject innerClassName Kind flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/tools/ToolProvider -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.compiler-I.sym.txt b/src/jdk.compiler/share/data/symbols/java.compiler-I.sym.txt index 6f3cdb0623ee5..d0b1a430bf051 100644 --- a/src/jdk.compiler/share/data/symbols/java.compiler-I.sym.txt +++ b/src/jdk.compiler/share/data/symbols/java.compiler-I.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -26,14 +26,6 @@ # ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ### # ########################################################## # -class name javax/annotation/processing/AbstractProcessor -header extends java/lang/Object implements javax/annotation/processing/Processor flags 421 -innerclass innerClass javax/tools/Diagnostic$Kind outerClass javax/tools/Diagnostic innerClassName Kind flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/annotation/processing/Generated -header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Documented;@Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;SOURCE;)@Ljava/lang/annotation/Target;(value={eLjava/lang/annotation/ElementType;PACKAGE;eLjava/lang/annotation/ElementType;TYPE;eLjava/lang/annotation/ElementType;METHOD;eLjava/lang/annotation/ElementType;CONSTRUCTOR;eLjava/lang/annotation/ElementType;FIELD;eLjava/lang/annotation/ElementType;LOCAL_VARIABLE;eLjava/lang/annotation/ElementType;PARAMETER;}) - class name javax/annotation/processing/Messager method name printError descriptor (Ljava/lang/CharSequence;)V flags 1 method name printError descriptor (Ljava/lang/CharSequence;Ljavax/lang/model/element/Element;)V flags 1 @@ -50,34 +42,6 @@ method name runtimeVersion descriptor ()Ljava/lang/Runtime$Version; flags 1 class name javax/lang/model/element/ExecutableElement method name getEnclosingElement descriptor ()Ljavax/lang/model/element/Element; flags 401 -class name javax/lang/model/element/Modifier -header extends java/lang/Enum sealed true flags 4021 signature Ljava/lang/Enum; - -class name javax/lang/model/element/UnknownAnnotationValueException -header extends javax/lang/model/UnknownEntityException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/lang/model/element/UnknownDirectiveException -header extends javax/lang/model/UnknownEntityException flags 21 -innerclass innerClass javax/lang/model/element/ModuleElement$Directive outerClass javax/lang/model/element/ModuleElement innerClassName Directive flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/lang/model/element/UnknownElementException -header extends javax/lang/model/UnknownEntityException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/lang/model/type/MirroredTypeException -header extends javax/lang/model/type/MirroredTypesException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/lang/model/type/MirroredTypesException -header extends java/lang/RuntimeException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/lang/model/type/UnknownTypeException -header extends javax/lang/model/UnknownEntityException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name javax/lang/model/util/AbstractAnnotationValueVisitor14 header extends javax/lang/model/util/AbstractAnnotationValueVisitor9 flags 421 signature Ljavax/lang/model/util/AbstractAnnotationValueVisitor9; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_18;) @@ -87,15 +51,6 @@ header extends javax/lang/model/util/AbstractElementVisitor9 flags 421 signature class name javax/lang/model/util/AbstractTypeVisitor14 header extends javax/lang/model/util/AbstractTypeVisitor9 flags 421 signature Ljavax/lang/model/util/AbstractTypeVisitor9; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_18;) -class name javax/lang/model/util/AbstractTypeVisitor6 -header extends java/lang/Object implements javax/lang/model/type/TypeVisitor flags 421 signature Ljava/lang/Object;Ljavax/lang/model/type/TypeVisitor; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_6;) - -class name javax/lang/model/util/AbstractTypeVisitor7 -header extends javax/lang/model/util/AbstractTypeVisitor6 flags 421 signature Ljavax/lang/model/util/AbstractTypeVisitor6; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_7;) - -class name javax/lang/model/util/AbstractTypeVisitor8 -header extends javax/lang/model/util/AbstractTypeVisitor7 flags 421 signature Ljavax/lang/model/util/AbstractTypeVisitor7; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_8;) - class name javax/lang/model/util/ElementKindVisitor14 header extends javax/lang/model/util/ElementKindVisitor9 flags 21 signature Ljavax/lang/model/util/ElementKindVisitor9; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_18;) @@ -129,12 +84,3 @@ class name javax/tools/JavaFileManager method name getJavaFileForOutputForOriginatingFiles descriptor (Ljavax/tools/JavaFileManager$Location;Ljava/lang/String;Ljavax/tools/JavaFileObject$Kind;[Ljavax/tools/FileObject;)Ljavax/tools/JavaFileObject; thrownTypes java/io/IOException flags 81 method name getFileForOutputForOriginatingFiles descriptor (Ljavax/tools/JavaFileManager$Location;Ljava/lang/String;Ljava/lang/String;[Ljavax/tools/FileObject;)Ljavax/tools/FileObject; thrownTypes java/io/IOException flags 81 -class name javax/tools/SimpleJavaFileObject -header extends java/lang/Object implements javax/tools/JavaFileObject flags 21 -innerclass innerClass javax/tools/JavaFileObject$Kind outerClass javax/tools/JavaFileObject innerClassName Kind flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/tools/ToolProvider -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.compiler-J.sym.txt b/src/jdk.compiler/share/data/symbols/java.compiler-J.sym.txt index 16b0c6700a610..7a6992b0f7be7 100644 --- a/src/jdk.compiler/share/data/symbols/java.compiler-J.sym.txt +++ b/src/jdk.compiler/share/data/symbols/java.compiler-J.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -26,14 +26,6 @@ # ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ### # ########################################################## # -class name javax/annotation/processing/AbstractProcessor -header extends java/lang/Object implements javax/annotation/processing/Processor flags 421 -innerclass innerClass javax/tools/Diagnostic$Kind outerClass javax/tools/Diagnostic innerClassName Kind flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/annotation/processing/Generated -header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Documented;@Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;SOURCE;)@Ljava/lang/annotation/Target;(value={eLjava/lang/annotation/ElementType;PACKAGE;eLjava/lang/annotation/ElementType;TYPE;eLjava/lang/annotation/ElementType;METHOD;eLjava/lang/annotation/ElementType;CONSTRUCTOR;eLjava/lang/annotation/ElementType;FIELD;eLjava/lang/annotation/ElementType;LOCAL_VARIABLE;eLjava/lang/annotation/ElementType;PARAMETER;}) - class name javax/lang/model/SourceVersion field name RELEASE_19 descriptor Ljavax/lang/model/SourceVersion; flags 4019 @@ -43,34 +35,6 @@ method name isExecutable descriptor ()Z flags 1 method name isInitializer descriptor ()Z flags 1 method name isVariable descriptor ()Z flags 1 -class name javax/lang/model/element/Modifier -header extends java/lang/Enum sealed true flags 4021 signature Ljava/lang/Enum; - -class name javax/lang/model/element/UnknownAnnotationValueException -header extends javax/lang/model/UnknownEntityException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/lang/model/element/UnknownDirectiveException -header extends javax/lang/model/UnknownEntityException flags 21 -innerclass innerClass javax/lang/model/element/ModuleElement$Directive outerClass javax/lang/model/element/ModuleElement innerClassName Directive flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/lang/model/element/UnknownElementException -header extends javax/lang/model/UnknownEntityException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/lang/model/type/MirroredTypeException -header extends javax/lang/model/type/MirroredTypesException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/lang/model/type/MirroredTypesException -header extends java/lang/RuntimeException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/lang/model/type/UnknownTypeException -header extends javax/lang/model/UnknownEntityException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name javax/lang/model/util/AbstractAnnotationValueVisitor14 header extends javax/lang/model/util/AbstractAnnotationValueVisitor9 flags 421 signature Ljavax/lang/model/util/AbstractAnnotationValueVisitor9; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_19;) @@ -80,15 +44,6 @@ header extends javax/lang/model/util/AbstractElementVisitor9 flags 421 signature class name javax/lang/model/util/AbstractTypeVisitor14 header extends javax/lang/model/util/AbstractTypeVisitor9 flags 421 signature Ljavax/lang/model/util/AbstractTypeVisitor9; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_19;) -class name javax/lang/model/util/AbstractTypeVisitor6 -header extends java/lang/Object implements javax/lang/model/type/TypeVisitor flags 421 signature Ljava/lang/Object;Ljavax/lang/model/type/TypeVisitor; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_6;) - -class name javax/lang/model/util/AbstractTypeVisitor7 -header extends javax/lang/model/util/AbstractTypeVisitor6 flags 421 signature Ljavax/lang/model/util/AbstractTypeVisitor6; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_7;) - -class name javax/lang/model/util/AbstractTypeVisitor8 -header extends javax/lang/model/util/AbstractTypeVisitor7 flags 421 signature Ljavax/lang/model/util/AbstractTypeVisitor7; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_8;) - class name javax/lang/model/util/ElementKindVisitor14 header extends javax/lang/model/util/ElementKindVisitor9 flags 21 signature Ljavax/lang/model/util/ElementKindVisitor9; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_19;) @@ -107,12 +62,3 @@ header extends javax/lang/model/util/SimpleTypeVisitor9 flags 21 signature Ljavax/lang/model/util/TypeKindVisitor9; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_19;) -class name javax/tools/SimpleJavaFileObject -header extends java/lang/Object implements javax/tools/JavaFileObject flags 21 -innerclass innerClass javax/tools/JavaFileObject$Kind outerClass javax/tools/JavaFileObject innerClassName Kind flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/tools/ToolProvider -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.compiler-K.sym.txt b/src/jdk.compiler/share/data/symbols/java.compiler-K.sym.txt index 5a178614db044..da76beaf3128f 100644 --- a/src/jdk.compiler/share/data/symbols/java.compiler-K.sym.txt +++ b/src/jdk.compiler/share/data/symbols/java.compiler-K.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -26,45 +26,9 @@ # ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ### # ########################################################## # -class name javax/annotation/processing/AbstractProcessor -header extends java/lang/Object implements javax/annotation/processing/Processor flags 421 -innerclass innerClass javax/tools/Diagnostic$Kind outerClass javax/tools/Diagnostic innerClassName Kind flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/annotation/processing/Generated -header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Documented;@Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;SOURCE;)@Ljava/lang/annotation/Target;(value={eLjava/lang/annotation/ElementType;PACKAGE;eLjava/lang/annotation/ElementType;TYPE;eLjava/lang/annotation/ElementType;METHOD;eLjava/lang/annotation/ElementType;CONSTRUCTOR;eLjava/lang/annotation/ElementType;FIELD;eLjava/lang/annotation/ElementType;LOCAL_VARIABLE;eLjava/lang/annotation/ElementType;PARAMETER;}) - class name javax/lang/model/SourceVersion field name RELEASE_20 descriptor Ljavax/lang/model/SourceVersion; flags 4019 -class name javax/lang/model/element/Modifier -header extends java/lang/Enum sealed true flags 4021 signature Ljava/lang/Enum; - -class name javax/lang/model/element/UnknownAnnotationValueException -header extends javax/lang/model/UnknownEntityException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/lang/model/element/UnknownDirectiveException -header extends javax/lang/model/UnknownEntityException flags 21 -innerclass innerClass javax/lang/model/element/ModuleElement$Directive outerClass javax/lang/model/element/ModuleElement innerClassName Directive flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/lang/model/element/UnknownElementException -header extends javax/lang/model/UnknownEntityException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/lang/model/type/MirroredTypeException -header extends javax/lang/model/type/MirroredTypesException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/lang/model/type/MirroredTypesException -header extends java/lang/RuntimeException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/lang/model/type/UnknownTypeException -header extends javax/lang/model/UnknownEntityException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name javax/lang/model/util/AbstractAnnotationValueVisitor14 header extends javax/lang/model/util/AbstractAnnotationValueVisitor9 flags 421 signature Ljavax/lang/model/util/AbstractAnnotationValueVisitor9; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_20;) @@ -74,15 +38,6 @@ header extends javax/lang/model/util/AbstractElementVisitor9 flags 421 signature class name javax/lang/model/util/AbstractTypeVisitor14 header extends javax/lang/model/util/AbstractTypeVisitor9 flags 421 signature Ljavax/lang/model/util/AbstractTypeVisitor9; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_20;) -class name javax/lang/model/util/AbstractTypeVisitor6 -header extends java/lang/Object implements javax/lang/model/type/TypeVisitor flags 421 signature Ljava/lang/Object;Ljavax/lang/model/type/TypeVisitor; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_6;) - -class name javax/lang/model/util/AbstractTypeVisitor7 -header extends javax/lang/model/util/AbstractTypeVisitor6 flags 421 signature Ljavax/lang/model/util/AbstractTypeVisitor6; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_7;) - -class name javax/lang/model/util/AbstractTypeVisitor8 -header extends javax/lang/model/util/AbstractTypeVisitor7 flags 421 signature Ljavax/lang/model/util/AbstractTypeVisitor7; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_8;) - class name javax/lang/model/util/ElementKindVisitor14 header extends javax/lang/model/util/ElementKindVisitor9 flags 21 signature Ljavax/lang/model/util/ElementKindVisitor9; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_20;) @@ -105,12 +60,3 @@ header extends javax/lang/model/util/SimpleTypeVisitor9 flags 21 signature Ljavax/lang/model/util/TypeKindVisitor9; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_20;) -class name javax/tools/SimpleJavaFileObject -header extends java/lang/Object implements javax/tools/JavaFileObject flags 21 -innerclass innerClass javax/tools/JavaFileObject$Kind outerClass javax/tools/JavaFileObject innerClassName Kind flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/tools/ToolProvider -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.compiler-L.sym.txt b/src/jdk.compiler/share/data/symbols/java.compiler-L.sym.txt index 62c20b9e359cf..dbd7951d7ee4f 100644 --- a/src/jdk.compiler/share/data/symbols/java.compiler-L.sym.txt +++ b/src/jdk.compiler/share/data/symbols/java.compiler-L.sym.txt @@ -26,51 +26,15 @@ # ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ### # ########################################################## # -class name javax/annotation/processing/AbstractProcessor -header extends java/lang/Object implements javax/annotation/processing/Processor flags 421 -innerclass innerClass javax/tools/Diagnostic$Kind outerClass javax/tools/Diagnostic innerClassName Kind flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/annotation/processing/Generated -header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Documented;@Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;SOURCE;)@Ljava/lang/annotation/Target;(value={eLjava/lang/annotation/ElementType;PACKAGE;eLjava/lang/annotation/ElementType;TYPE;eLjava/lang/annotation/ElementType;METHOD;eLjava/lang/annotation/ElementType;CONSTRUCTOR;eLjava/lang/annotation/ElementType;FIELD;eLjava/lang/annotation/ElementType;LOCAL_VARIABLE;eLjava/lang/annotation/ElementType;PARAMETER;}) - class name javax/lang/model/SourceVersion field name RELEASE_21 descriptor Ljavax/lang/model/SourceVersion; flags 4019 -class name javax/lang/model/element/Modifier -header extends java/lang/Enum sealed true flags 4021 signature Ljava/lang/Enum; - class name javax/lang/model/element/TypeElement method name isUnnamed descriptor ()Z flags 1 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;UNNAMED_CLASSES;,reflective=Ztrue) -class name javax/lang/model/element/UnknownAnnotationValueException -header extends javax/lang/model/UnknownEntityException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/lang/model/element/UnknownDirectiveException -header extends javax/lang/model/UnknownEntityException flags 21 -innerclass innerClass javax/lang/model/element/ModuleElement$Directive outerClass javax/lang/model/element/ModuleElement innerClassName Directive flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/lang/model/element/UnknownElementException -header extends javax/lang/model/UnknownEntityException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name javax/lang/model/element/VariableElement method name isUnnamed descriptor ()Z flags 1 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;UNNAMED;,reflective=Ztrue) -class name javax/lang/model/type/MirroredTypeException -header extends javax/lang/model/type/MirroredTypesException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/lang/model/type/MirroredTypesException -header extends java/lang/RuntimeException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/lang/model/type/UnknownTypeException -header extends javax/lang/model/UnknownEntityException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name javax/lang/model/util/AbstractAnnotationValueVisitor14 header extends javax/lang/model/util/AbstractAnnotationValueVisitor9 flags 421 signature Ljavax/lang/model/util/AbstractAnnotationValueVisitor9; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_21;) @@ -80,15 +44,6 @@ header extends javax/lang/model/util/AbstractElementVisitor9 flags 421 signature class name javax/lang/model/util/AbstractTypeVisitor14 header extends javax/lang/model/util/AbstractTypeVisitor9 flags 421 signature Ljavax/lang/model/util/AbstractTypeVisitor9; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_21;) -class name javax/lang/model/util/AbstractTypeVisitor6 -header extends java/lang/Object implements javax/lang/model/type/TypeVisitor flags 421 signature Ljava/lang/Object;Ljavax/lang/model/type/TypeVisitor; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_6;) - -class name javax/lang/model/util/AbstractTypeVisitor7 -header extends javax/lang/model/util/AbstractTypeVisitor6 flags 421 signature Ljavax/lang/model/util/AbstractTypeVisitor6; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_7;) - -class name javax/lang/model/util/AbstractTypeVisitor8 -header extends javax/lang/model/util/AbstractTypeVisitor7 flags 421 signature Ljavax/lang/model/util/AbstractTypeVisitor7; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_8;) - class name javax/lang/model/util/ElementKindVisitor14 header extends javax/lang/model/util/ElementKindVisitor9 flags 21 signature Ljavax/lang/model/util/ElementKindVisitor9; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_21;) @@ -107,12 +62,3 @@ header extends javax/lang/model/util/SimpleTypeVisitor9 flags 21 signature Ljavax/lang/model/util/TypeKindVisitor9; runtimeAnnotations @Ljavax/annotation/processing/SupportedSourceVersion;(value=eLjavax/lang/model/SourceVersion;RELEASE_21;) -class name javax/tools/SimpleJavaFileObject -header extends java/lang/Object implements javax/tools/JavaFileObject flags 21 -innerclass innerClass javax/tools/JavaFileObject$Kind outerClass javax/tools/JavaFileObject innerClassName Kind flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/tools/ToolProvider -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.datatransfer-H.sym.txt b/src/jdk.compiler/share/data/symbols/java.datatransfer-H.sym.txt index aa9eac585be47..bb96f34be5e62 100644 --- a/src/jdk.compiler/share/data/symbols/java.datatransfer-H.sym.txt +++ b/src/jdk.compiler/share/data/symbols/java.datatransfer-H.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -26,13 +26,7 @@ # ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ### # ########################################################## # -class name java/awt/datatransfer/Clipboard -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name java/awt/datatransfer/DataFlavor -header extends java/lang/Object implements java/io/Externalizable,java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -field name selectionHtmlFlavor descriptor Ljava/awt/datatransfer/DataFlavor; -field name fragmentHtmlFlavor descriptor Ljava/awt/datatransfer/DataFlavor; -field name allHtmlFlavor descriptor Ljava/awt/datatransfer/DataFlavor; diff --git a/src/jdk.compiler/share/data/symbols/java.datatransfer-I.sym.txt b/src/jdk.compiler/share/data/symbols/java.datatransfer-I.sym.txt deleted file mode 100644 index 748b21f2ef81b..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.datatransfer-I.sym.txt +++ /dev/null @@ -1,36 +0,0 @@ -# -# Copyright (c) 2021, 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/awt/datatransfer/Clipboard -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/datatransfer/DataFlavor -header extends java/lang/Object implements java/io/Externalizable,java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.datatransfer-J.sym.txt b/src/jdk.compiler/share/data/symbols/java.datatransfer-J.sym.txt deleted file mode 100644 index fff0a5016ec5d..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.datatransfer-J.sym.txt +++ /dev/null @@ -1,36 +0,0 @@ -# -# Copyright (c) 2022, 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/awt/datatransfer/Clipboard -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/datatransfer/DataFlavor -header extends java/lang/Object implements java/io/Externalizable,java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.datatransfer-K.sym.txt b/src/jdk.compiler/share/data/symbols/java.datatransfer-K.sym.txt deleted file mode 100644 index fff0a5016ec5d..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.datatransfer-K.sym.txt +++ /dev/null @@ -1,36 +0,0 @@ -# -# Copyright (c) 2022, 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/awt/datatransfer/Clipboard -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/datatransfer/DataFlavor -header extends java/lang/Object implements java/io/Externalizable,java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.datatransfer-L.sym.txt b/src/jdk.compiler/share/data/symbols/java.datatransfer-L.sym.txt deleted file mode 100644 index 4068e35f64413..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.datatransfer-L.sym.txt +++ /dev/null @@ -1,36 +0,0 @@ -# -# Copyright (c) 2023, 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/awt/datatransfer/Clipboard -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/datatransfer/DataFlavor -header extends java/lang/Object implements java/io/Externalizable,java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.desktop-H.sym.txt b/src/jdk.compiler/share/data/symbols/java.desktop-H.sym.txt index 6fab50f4b1ae0..5f5ee95af3db0 100644 --- a/src/jdk.compiler/share/data/symbols/java.desktop-H.sym.txt +++ b/src/jdk.compiler/share/data/symbols/java.desktop-H.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2021, 2023, 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 @@ -39,566 +39,23 @@ header extends java/lang/Object flags 601 deprecated true runtimeAnnotations @Lj class name java/applet/AudioClip header extends java/lang/Object flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9") -class name java/awt/AWTKeyStroke -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 - -class name java/awt/AttributeValue -header extends java/lang/Object flags 420 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/BorderLayout -header extends java/lang/Object implements java/awt/LayoutManager2,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/CheckboxGroup -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 - -class name java/awt/Color -header extends java/lang/Object implements java/awt/Paint,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/ContainerOrderFocusTraversalPolicy -header extends java/awt/FocusTraversalPolicy implements java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/Dimension -header extends java/awt/geom/Dimension2D implements java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/DisplayMode -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/Event -header extends java/lang/Object implements java/io/Serializable flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="9") -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/FlowLayout -header extends java/lang/Object implements java/awt/LayoutManager,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/FontMetrics -header extends java/lang/Object implements java/io/Serializable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/Graphics -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/GridBagLayoutInfo -header extends java/lang/Object implements java/io/Serializable flags 21 -innerclass innerClass java/awt/Component$BaselineResizeBehavior outerClass java/awt/Component innerClassName BaselineResizeBehavior flags 4019 - -class name java/awt/GridLayout -header extends java/lang/Object implements java/awt/LayoutManager,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/HeadlessException -header extends java/lang/UnsupportedOperationException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/Insets -header extends java/lang/Object implements java/lang/Cloneable,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/MenuShortcut -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 - -class name java/awt/Point -header extends java/awt/geom/Point2D implements java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/Rectangle -header extends java/awt/geom/Rectangle2D implements java/awt/Shape,java/io/Serializable flags 21 -innerclass innerClass java/awt/geom/Rectangle2D$Double outerClass java/awt/geom/Rectangle2D innerClassName Double flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/SystemColor -header extends java/awt/Color implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/TexturePaint -header extends java/lang/Object implements java/awt/Paint flags 21 -innerclass innerClass java/awt/geom/Rectangle2D$Double outerClass java/awt/geom/Rectangle2D innerClassName Double flags 9 - -class name java/awt/color/ColorSpace -header extends java/lang/Object implements java/io/Serializable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/color/ICC_ColorSpace -header extends java/awt/color/ColorSpace flags 21 classAnnotations @Ljdk/Profile+Annotation;(value=I4) - -class name java/awt/desktop/AboutEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/AboutHandler -header extends java/lang/Object flags 601 - -class name java/awt/desktop/AppEvent -header extends java/util/EventObject flags 21 - -class name java/awt/desktop/AppForegroundEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/AppForegroundListener -header extends java/lang/Object implements java/awt/desktop/SystemEventListener flags 601 - -class name java/awt/desktop/AppHiddenEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/AppHiddenListener -header extends java/lang/Object implements java/awt/desktop/SystemEventListener flags 601 - -class name java/awt/desktop/AppReopenedEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/AppReopenedListener -header extends java/lang/Object implements java/awt/desktop/SystemEventListener flags 601 - -class name java/awt/desktop/FilesEvent -header extends java/awt/desktop/AppEvent flags 21 - -class name java/awt/desktop/OpenFilesEvent -header extends java/awt/desktop/FilesEvent flags 31 - -class name java/awt/desktop/OpenFilesHandler -header extends java/lang/Object flags 601 - -class name java/awt/desktop/OpenURIEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/OpenURIHandler -header extends java/lang/Object flags 601 - -class name java/awt/desktop/PreferencesEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/PreferencesHandler -header extends java/lang/Object flags 601 - -class name java/awt/desktop/PrintFilesEvent -header extends java/awt/desktop/FilesEvent flags 31 - -class name java/awt/desktop/PrintFilesHandler -header extends java/lang/Object flags 601 - -class name java/awt/desktop/QuitEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/QuitHandler -header extends java/lang/Object flags 601 - -class name java/awt/desktop/QuitResponse -header extends java/lang/Object flags 601 - -class name java/awt/desktop/QuitStrategy -header extends java/lang/Enum flags 4031 signature Ljava/lang/Enum; - -class name java/awt/desktop/ScreenSleepEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/ScreenSleepListener -header extends java/lang/Object implements java/awt/desktop/SystemEventListener flags 601 - -class name java/awt/desktop/SystemEventListener -header extends java/lang/Object implements java/util/EventListener flags 601 - -class name java/awt/desktop/SystemSleepEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/SystemSleepListener -header extends java/lang/Object implements java/awt/desktop/SystemEventListener flags 601 - -class name java/awt/desktop/UserSessionListener -header extends java/lang/Object implements java/awt/desktop/SystemEventListener flags 601 - -class name java/awt/dnd/DragGestureEvent -header extends java/util/EventObject flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 - -class name java/awt/dnd/DragGestureRecognizer -header extends java/lang/Object implements java/io/Serializable flags 421 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 - -class name java/awt/dnd/DragSource -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 - -class name java/awt/dnd/DropTargetDragEvent -header extends java/awt/dnd/DropTargetEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/dnd/DropTargetDropEvent -header extends java/awt/dnd/DropTargetEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/ActionEvent -header extends java/awt/AWTEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/AdjustmentEvent -header extends java/awt/AWTEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/ComponentEvent -header extends java/awt/AWTEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/ContainerEvent -header extends java/awt/event/ComponentEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/HierarchyEvent -header extends java/awt/AWTEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/InputMethodEvent -header extends java/awt/AWTEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/ItemEvent -header extends java/awt/AWTEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/MouseWheelEvent -header extends java/awt/event/MouseEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/PaintEvent -header extends java/awt/event/ComponentEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/WindowEvent -header extends java/awt/event/ComponentEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/font/FontRenderContext -header extends java/lang/Object flags 21 -innerclass innerClass java/awt/RenderingHints$Key outerClass java/awt/RenderingHints innerClassName Key flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/font/GraphicAttribute -header extends java/lang/Object flags 421 -innerclass innerClass java/awt/geom/Rectangle2D$Float outerClass java/awt/geom/Rectangle2D innerClassName Float flags 9 - -class name java/awt/font/ImageGraphicAttribute -header extends java/awt/font/GraphicAttribute flags 31 -innerclass innerClass java/awt/geom/Rectangle2D$Float outerClass java/awt/geom/Rectangle2D innerClassName Float flags 9 - class name java/awt/font/NumericShaper$Range -header extends java/lang/Enum nestHost java/awt/font/NumericShaper sealed true flags 4021 signature Ljava/lang/Enum; +header extends java/lang/Enum nestHost java/awt/font/NumericShaper sealed true permittedSubclasses java/awt/font/NumericShaper$Range$1 flags 4021 signature Ljava/lang/Enum; innerclass innerClass java/awt/font/NumericShaper$Range outerClass java/awt/font/NumericShaper innerClassName Range flags 4009 -class name java/awt/font/ShapeGraphicAttribute -header extends java/awt/font/GraphicAttribute flags 31 -innerclass innerClass java/awt/geom/Rectangle2D$Float outerClass java/awt/geom/Rectangle2D innerClassName Float flags 9 - -class name java/awt/font/TextHitInfo -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/font/TextMeasurer -header extends java/lang/Object implements java/lang/Cloneable flags 31 -innerclass innerClass java/text/AttributedCharacterIterator$Attribute outerClass java/text/AttributedCharacterIterator innerClassName Attribute flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/geom/AffineTransform -header extends java/lang/Object implements java/lang/Cloneable,java/io/Serializable flags 21 -innerclass innerClass java/awt/geom/Point2D$Double outerClass java/awt/geom/Point2D innerClassName Double flags 9 -innerclass innerClass java/awt/geom/Point2D$Float outerClass java/awt/geom/Point2D innerClassName Float flags 9 -innerclass innerClass java/awt/geom/Path2D$Double outerClass java/awt/geom/Path2D innerClassName Double flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/geom/Area -header extends java/lang/Object implements java/awt/Shape,java/lang/Cloneable flags 21 -innerclass innerClass java/awt/geom/Rectangle2D$Double outerClass java/awt/geom/Rectangle2D innerClassName Double flags 9 - -class name java/awt/geom/RectangularShape -header extends java/lang/Object implements java/awt/Shape,java/lang/Cloneable flags 421 -innerclass innerClass java/awt/geom/Rectangle2D$Double outerClass java/awt/geom/Rectangle2D innerClassName Double flags 9 - -class name java/awt/image/AbstractMultiResolutionImage -header extends java/awt/Image implements java/awt/image/MultiResolutionImage flags 421 - -class name java/awt/image/BandCombineOp -header extends java/lang/Object implements java/awt/image/RasterOp flags 21 -innerclass innerClass java/awt/geom/Point2D$Float outerClass java/awt/geom/Point2D innerClassName Float flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/BandedSampleModel -header extends java/awt/image/ComponentSampleModel flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/BaseMultiResolutionImage -header extends java/awt/image/AbstractMultiResolutionImage flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/BufferedImageFilter -header extends java/awt/image/ImageFilter implements java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/ByteLookupTable -header extends java/awt/image/LookupTable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/ColorConvertOp -header extends java/lang/Object implements java/awt/image/BufferedImageOp,java/awt/image/RasterOp flags 21 -innerclass innerClass java/awt/geom/Point2D$Float outerClass java/awt/geom/Point2D innerClassName Float flags 9 - -class name java/awt/image/ComponentColorModel -header extends java/awt/image/ColorModel flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/ComponentSampleModel -header extends java/awt/image/SampleModel flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/ConvolveOp -header extends java/lang/Object implements java/awt/image/BufferedImageOp,java/awt/image/RasterOp flags 21 -innerclass innerClass java/awt/geom/Point2D$Float outerClass java/awt/geom/Point2D innerClassName Float flags 9 - -class name java/awt/image/DataBufferUShort -header extends java/awt/image/DataBuffer flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/DirectColorModel -header extends java/awt/image/PackedColorModel flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/ImageFilter -header extends java/lang/Object implements java/awt/image/ImageConsumer,java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/IndexColorModel -header extends java/awt/image/ColorModel flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/Kernel -header extends java/lang/Object implements java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/LookupOp -header extends java/lang/Object implements java/awt/image/BufferedImageOp,java/awt/image/RasterOp flags 21 -innerclass innerClass java/awt/geom/Point2D$Float outerClass java/awt/geom/Point2D innerClassName Float flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/MultiPixelPackedSampleModel -header extends java/awt/image/SampleModel flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/MultiResolutionImage -header extends java/lang/Object flags 601 - -class name java/awt/image/PackedColorModel -header extends java/awt/image/ColorModel flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/Raster -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/ReplicateScaleFilter -header extends java/awt/image/ImageFilter flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/RescaleOp -header extends java/lang/Object implements java/awt/image/BufferedImageOp,java/awt/image/RasterOp flags 21 -innerclass innerClass java/awt/geom/Point2D$Float outerClass java/awt/geom/Point2D innerClassName Float flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/SampleModel -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/ShortLookupTable -header extends java/awt/image/LookupTable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/SinglePixelPackedSampleModel -header extends java/awt/image/SampleModel flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/print/Paper -header extends java/lang/Object implements java/lang/Cloneable flags 21 -innerclass innerClass java/awt/geom/Rectangle2D$Double outerClass java/awt/geom/Rectangle2D innerClassName Double flags 9 - class name java/beans/AppletInitializer header extends java/lang/Object flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9") -class name java/beans/BeanProperty -header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Documented;@Ljava/lang/annotation/Target;(value={eLjava/lang/annotation/ElementType;METHOD;})@Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;RUNTIME;) - class name java/beans/Beans -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -method name instantiate descriptor (Ljava/lang/ClassLoader;Ljava/lang/String;Ljava/beans/beancontext/BeanContext;Ljava/beans/AppletInitializer;)Ljava/lang/Object; method name instantiate descriptor (Ljava/lang/ClassLoader;Ljava/lang/String;Ljava/beans/beancontext/BeanContext;Ljava/beans/AppletInitializer;)Ljava/lang/Object; thrownTypes java/io/IOException,java/lang/ClassNotFoundException flags 9 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9") -class name java/beans/DefaultPersistenceDelegate -header extends java/beans/PersistenceDelegate flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/beans/Encoder -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/beans/EventSetDescriptor -header extends java/beans/FeatureDescriptor flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/beans/Expression -header extends java/beans/Statement flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/beans/FeatureDescriptor -header extends java/lang/Object flags 21 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 - -class name java/beans/IndexedPropertyDescriptor -header extends java/beans/PropertyDescriptor flags 21 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/beans/JavaBean -header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Documented;@Ljava/lang/annotation/Target;(value={eLjava/lang/annotation/ElementType;TYPE;})@Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;RUNTIME;) - -class name java/beans/PropertyDescriptor -header extends java/beans/FeatureDescriptor flags 21 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/beans/SimpleBeanInfo -header extends java/lang/Object implements java/beans/BeanInfo flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/accessibility/AccessibilityProvider -header extends java/lang/Object flags 421 - -class name javax/accessibility/AccessibleBundle -header extends java/lang/Object flags 421 classAnnotations @Ljdk/Profile+Annotation;(value=I4) - -class name javax/accessibility/AccessibleRelationSet -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/accessibility/AccessibleStateSet -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/imageio/metadata/IIOMetadata -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/imageio/plugins/jpeg/JPEGHuffmanTable -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/imageio/plugins/jpeg/JPEGQTable -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/imageio/plugins/tiff/TIFFDirectory -header extends java/lang/Object implements java/lang/Cloneable flags 21 - -class name javax/imageio/plugins/tiff/TIFFField -header extends java/lang/Object implements java/lang/Cloneable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/imageio/plugins/tiff/TIFFImageReadParam -header extends javax/imageio/ImageReadParam flags 31 - -class name javax/imageio/plugins/tiff/TIFFTag -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/imageio/plugins/tiff/TIFFTagSet -header extends java/lang/Object flags 21 - -class name javax/imageio/spi/ImageReaderWriterSpi -header extends javax/imageio/spi/IIOServiceProvider flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/print/attribute/DateTimeSyntax -header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/print/attribute/EnumSyntax -header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/print/attribute/IntegerSyntax -header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/print/attribute/standard/MediaPrintableArea -header extends java/lang/Object implements javax/print/attribute/DocAttribute,javax/print/attribute/PrintRequestAttribute,javax/print/attribute/PrintJobAttribute flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/print/event/PrintEvent -header extends java/util/EventObject flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sound/midi/MetaMessage -header extends javax/sound/midi/MidiMessage flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sound/midi/MidiMessage -header extends java/lang/Object implements java/lang/Cloneable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sound/midi/Sequence -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sound/midi/ShortMessage -header extends javax/sound/midi/MidiMessage flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sound/midi/SysexMessage -header extends javax/sound/midi/MidiMessage flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sound/sampled/ReverbType -header extends java/lang/Object flags 21 classAnnotations @Ljdk/Profile+Annotation;(value=I4) - -class name javax/sound/sampled/spi/FormatConversionProvider -header extends java/lang/Object flags 421 -innerclass innerClass javax/sound/sampled/AudioFormat$Encoding outerClass javax/sound/sampled/AudioFormat innerClassName Encoding flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/BoxLayout -header extends java/lang/Object implements java/awt/LayoutManager2,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/DebugGraphics -header extends java/awt/Graphics flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/DefaultBoundedRangeModel -header extends java/lang/Object implements javax/swing/BoundedRangeModel,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/DefaultListSelectionModel -header extends java/lang/Object implements javax/swing/ListSelectionModel,java/lang/Cloneable,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/GrayFilter -header extends java/awt/image/RGBImageFilter flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name javax/swing/JApplet header extends java/applet/Applet implements javax/accessibility/Accessible,javax/swing/RootPaneContainer,javax/swing/TransferHandler$HasGetTransferHandler nestMembers javax/swing/JApplet$AccessibleJApplet flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9")@Ljava/beans/JavaBean;(defaultProperty="JMenuBar",description="Swing's\u005C;u0020;Applet\u005C;u0020;subclass.")@Ljavax/swing/SwingContainer;(delegate="getContentPane") innerclass innerClass javax/swing/JApplet$AccessibleJApplet outerClass javax/swing/JApplet innerClassName AccessibleJApplet flags 4 innerclass innerClass javax/swing/TransferHandler$HasGetTransferHandler outerClass javax/swing/TransferHandler innerClassName HasGetTransferHandler flags 608 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -class name javax/swing/JList$AccessibleJList$AccessibleJListChild --method name getAccessibleAction descriptor ()Ljavax/accessibility/AccessibleAction; -method name getAccessibleAction descriptor ()Ljavax/accessibility/AccessibleAction; flags 1 - class name javax/swing/JSlider$AccessibleJSlider header extends javax/swing/JComponent$AccessibleJComponent implements javax/accessibility/AccessibleValue,javax/swing/event/ChangeListener,javax/accessibility/AccessibleAction nestHost javax/swing/JSlider flags 21 innerclass innerClass javax/swing/JSlider$AccessibleJSlider outerClass javax/swing/JSlider innerClassName AccessibleJSlider flags 4 @@ -608,74 +65,13 @@ method name getAccessibleActionCount descriptor ()I flags 1 method name getAccessibleActionDescription descriptor (I)Ljava/lang/String; flags 1 method name doAccessibleAction descriptor (I)Z flags 1 -class name javax/swing/JTextPane -header extends javax/swing/JEditorPane flags 21 runtimeAnnotations @Ljava/beans/JavaBean;(description="A\u005C;u0020;text\u005C;u0020;component\u005C;u0020;that\u005C;u0020;can\u005C;u0020;be\u005C;u0020;marked\u005C;u0020;up\u005C;u0020;with\u005C;u0020;attributes\u005C;u0020;that\u005C;u0020;are\u005C;u0020;graphically\u005C;u0020;represented.")@Ljavax/swing/SwingContainer; - -class name javax/swing/LookAndFeel -header extends java/lang/Object flags 421 -innerclass innerClass javax/swing/text/JTextComponent$KeyBinding outerClass javax/swing/text/JTextComponent innerClassName KeyBinding flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/MenuSelectionManager -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name javax/swing/RepaintManager -method name addDirtyRegion descriptor (Ljava/applet/Applet;IIII)V method name addDirtyRegion descriptor (Ljava/applet/Applet;IIII)V flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9") -class name javax/swing/SizeRequirements -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 - -class name javax/swing/SortingFocusTraversalPolicy -header extends javax/swing/InternalFrameFocusTraversalPolicy flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/SwingContainer -header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Target;(value={eLjava/lang/annotation/ElementType;TYPE;})@Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;RUNTIME;) - -class name javax/swing/UIClientPropertyKey -header extends java/lang/Object flags 601 - -class name javax/swing/border/LineBorder -header extends javax/swing/border/AbstractBorder flags 21 -innerclass innerClass java/awt/geom/RoundRectangle2D$Float outerClass java/awt/geom/RoundRectangle2D innerClassName Float flags 9 -innerclass innerClass java/awt/geom/Rectangle2D$Float outerClass java/awt/geom/Rectangle2D innerClassName Float flags 9 -innerclass innerClass java/awt/geom/Path2D$Float outerClass java/awt/geom/Path2D innerClassName Float flags 9 - -class name javax/swing/event/EventListenerList -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 - -class name javax/swing/event/ListDataEvent -header extends java/util/EventObject flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/event/ListSelectionEvent -header extends java/util/EventObject flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/event/TreeModelEvent -header extends java/util/EventObject flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/filechooser/FileNameExtensionFilter -header extends javax/swing/filechooser/FileFilter flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name javax/swing/filechooser/FileSystemView method name getSystemIcon descriptor (Ljava/io/File;II)Ljavax/swing/Icon; flags 1 -class name javax/swing/plaf/basic/BasicArrowButton -header extends javax/swing/JButton implements javax/swing/SwingConstants flags 21 -innerclass innerClass java/awt/geom/Path2D$Double outerClass java/awt/geom/Path2D innerClassName Double flags 9 - -class name javax/swing/plaf/basic/BasicButtonUI -header extends javax/swing/plaf/ButtonUI flags 21 -innerclass innerClass java/awt/Component$BaselineResizeBehavior outerClass java/awt/Component innerClassName BaselineResizeBehavior flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name javax/swing/plaf/basic/BasicDirectoryModel -method name intervalAdded descriptor (Ljavax/swing/event/ListDataEvent;)V -method name intervalRemoved descriptor (Ljavax/swing/event/ListDataEvent;)V @@ -688,10 +84,6 @@ class name javax/swing/plaf/basic/BasicMenuItemUI$MouseInputHandler header extends java/lang/Object implements javax/swing/event/MouseInputListener nestHost javax/swing/plaf/basic/BasicMenuItemUI flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="17") innerclass innerClass javax/swing/plaf/basic/BasicMenuItemUI$MouseInputHandler outerClass javax/swing/plaf/basic/BasicMenuItemUI innerClassName MouseInputHandler flags 4 -class name javax/swing/plaf/basic/BasicPasswordFieldUI -header extends javax/swing/plaf/basic/BasicTextFieldUI flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name javax/swing/plaf/basic/BasicScrollPaneUI$HSBChangeListener header extends java/lang/Object implements javax/swing/event/ChangeListener nestHost javax/swing/plaf/basic/BasicScrollPaneUI flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="17") innerclass innerClass javax/swing/plaf/basic/BasicScrollPaneUI$HSBChangeListener outerClass javax/swing/plaf/basic/BasicScrollPaneUI innerClassName HSBChangeListener flags 1 @@ -708,195 +100,7 @@ class name javax/swing/plaf/basic/BasicScrollPaneUI$ViewportChangeHandler header extends java/lang/Object implements javax/swing/event/ChangeListener nestHost javax/swing/plaf/basic/BasicScrollPaneUI flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="17") innerclass innerClass javax/swing/plaf/basic/BasicScrollPaneUI$ViewportChangeHandler outerClass javax/swing/plaf/basic/BasicScrollPaneUI innerClassName ViewportChangeHandler flags 1 -class name javax/swing/plaf/basic/BasicToolBarSeparatorUI -header extends javax/swing/plaf/basic/BasicSeparatorUI flags 21 -innerclass innerClass javax/swing/JToolBar$Separator outerClass javax/swing/JToolBar innerClassName Separator flags 9 - class name javax/swing/plaf/basic/BasicToolBarUI -method name createFloatingFrame descriptor (Ljavax/swing/JToolBar;)Ljavax/swing/JFrame; method name createFloatingFrame descriptor (Ljavax/swing/JToolBar;)Ljavax/swing/JFrame; flags 4 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="17") -class name javax/swing/plaf/metal/MetalButtonUI -header extends javax/swing/plaf/basic/BasicButtonUI flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/metal/MetalCheckBoxUI -header extends javax/swing/plaf/metal/MetalRadioButtonUI flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/metal/MetalRadioButtonUI -header extends javax/swing/plaf/basic/BasicRadioButtonUI flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/metal/MetalToggleButtonUI -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 - -class name javax/swing/plaf/metal/MetalToolTipUI -header extends javax/swing/plaf/basic/BasicToolTipUI flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/multi/MultiLookAndFeel -header extends javax/swing/LookAndFeel flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/synth/SynthButtonUI -header extends javax/swing/plaf/basic/BasicButtonUI implements java/beans/PropertyChangeListener,javax/swing/plaf/synth/SynthUI flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/synth/SynthIcon -header extends java/lang/Object implements javax/swing/Icon flags 601 - -class name javax/swing/plaf/synth/SynthMenuItemUI -header extends javax/swing/plaf/basic/BasicMenuItemUI implements java/beans/PropertyChangeListener,javax/swing/plaf/synth/SynthUI flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/synth/SynthMenuUI -header extends javax/swing/plaf/basic/BasicMenuUI implements java/beans/PropertyChangeListener,javax/swing/plaf/synth/SynthUI flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/synth/SynthSeparatorUI -header extends javax/swing/plaf/SeparatorUI implements java/beans/PropertyChangeListener,javax/swing/plaf/synth/SynthUI flags 21 -innerclass innerClass javax/swing/JToolBar$Separator outerClass javax/swing/JToolBar innerClassName Separator flags 9 - -class name javax/swing/plaf/synth/SynthStyle -header extends java/lang/Object flags 421 -innerclass innerClass javax/swing/UIDefaults$LazyInputMap outerClass javax/swing/UIDefaults innerClassName LazyInputMap flags 9 -innerclass innerClass javax/swing/UIDefaults$LazyValue outerClass javax/swing/UIDefaults innerClassName LazyValue flags 609 - -class name javax/swing/table/AbstractTableModel -header extends java/lang/Object implements javax/swing/table/TableModel,java/io/Serializable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/AbstractWriter -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/BoxView -header extends javax/swing/text/CompositeView flags 21 -innerclass innerClass javax/swing/event/DocumentEvent$ElementChange outerClass javax/swing/event/DocumentEvent innerClassName ElementChange flags 609 -innerclass innerClass javax/swing/text/Position$Bias outerClass javax/swing/text/Position innerClassName Bias flags 19 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/CompositeView -header extends javax/swing/text/View flags 421 -innerclass innerClass javax/swing/text/Position$Bias outerClass javax/swing/text/Position innerClassName Bias flags 19 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/DateFormatter -header extends javax/swing/text/InternationalFormatter flags 21 -innerclass innerClass java/text/DateFormat$Field outerClass java/text/DateFormat innerClassName Field flags 9 - -class name javax/swing/text/IconView -header extends javax/swing/text/View flags 21 -innerclass innerClass javax/swing/text/Position$Bias outerClass javax/swing/text/Position innerClassName Bias flags 19 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/LayoutQueue -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/NumberFormatter -header extends javax/swing/text/InternationalFormatter flags 21 -innerclass innerClass java/text/NumberFormat$Field outerClass java/text/NumberFormat innerClassName Field flags 9 -innerclass innerClass javax/swing/text/DocumentFilter$FilterBypass outerClass javax/swing/text/DocumentFilter innerClassName FilterBypass flags 409 -innerclass innerClass java/text/AttributedCharacterIterator$Attribute outerClass java/text/AttributedCharacterIterator innerClassName Attribute flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/Segment -header extends java/lang/Object implements java/lang/Cloneable,java/text/CharacterIterator,java/lang/CharSequence flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/TabSet -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 - -class name javax/swing/text/TabStop -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 - -class name javax/swing/text/View -header extends java/lang/Object implements javax/swing/SwingConstants flags 421 -innerclass innerClass javax/swing/text/Position$Bias outerClass javax/swing/text/Position innerClassName Bias flags 19 -innerclass innerClass javax/swing/event/DocumentEvent$ElementChange outerClass javax/swing/event/DocumentEvent innerClassName ElementChange flags 609 -innerclass innerClass javax/swing/event/DocumentEvent$EventType outerClass javax/swing/event/DocumentEvent innerClassName EventType flags 19 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/html/InlineView -header extends javax/swing/text/LabelView flags 21 -innerclass innerClass javax/swing/text/html/CSS$Attribute outerClass javax/swing/text/html/CSS innerClassName Attribute flags 19 - -class name javax/swing/text/html/ListView -header extends javax/swing/text/html/BlockView flags 21 -innerclass innerClass javax/swing/text/html/StyleSheet$ListPainter outerClass javax/swing/text/html/StyleSheet innerClassName ListPainter flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/html/MinimalHTMLWriter -header extends javax/swing/text/AbstractWriter flags 21 -innerclass innerClass javax/swing/text/StyleConstants$ParagraphConstants outerClass javax/swing/text/StyleConstants innerClassName ParagraphConstants flags 9 -innerclass innerClass javax/swing/text/StyleConstants$CharacterConstants outerClass javax/swing/text/StyleConstants innerClassName CharacterConstants flags 9 -innerclass innerClass javax/swing/text/StyleConstants$FontConstants outerClass javax/swing/text/StyleConstants innerClassName FontConstants flags 9 -innerclass innerClass javax/swing/text/StyleConstants$ColorConstants outerClass javax/swing/text/StyleConstants innerClassName ColorConstants flags 9 -innerclass innerClass javax/swing/text/AbstractDocument$BranchElement outerClass javax/swing/text/AbstractDocument innerClassName BranchElement flags 1 -innerclass innerClass javax/swing/text/StyleContext$NamedStyle outerClass javax/swing/text/StyleContext innerClassName NamedStyle flags 1 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/html/ObjectView -header extends javax/swing/text/ComponentView flags 21 -innerclass innerClass javax/swing/text/html/HTML$Attribute outerClass javax/swing/text/html/HTML innerClassName Attribute flags 19 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/html/Option -header extends java/lang/Object implements java/io/Serializable flags 21 -innerclass innerClass javax/swing/text/html/HTML$Attribute outerClass javax/swing/text/html/HTML innerClassName Attribute flags 19 - -class name javax/swing/text/html/ParagraphView -header extends javax/swing/text/ParagraphView flags 21 -innerclass innerClass javax/swing/text/html/StyleSheet$BoxPainter outerClass javax/swing/text/html/StyleSheet innerClassName BoxPainter flags 9 -innerclass innerClass javax/swing/text/html/CSS$Attribute outerClass javax/swing/text/html/CSS innerClassName Attribute flags 19 - -class name javax/swing/text/html/parser/ContentModel -header extends java/lang/Object implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/html/parser/DocumentParser -header extends javax/swing/text/html/parser/Parser flags 21 -innerclass innerClass javax/swing/text/html/HTMLEditorKit$ParserCallback outerClass javax/swing/text/html/HTMLEditorKit innerClassName ParserCallback flags 9 -innerclass innerClass javax/swing/text/html/HTML$Tag outerClass javax/swing/text/html/HTML innerClassName Tag flags 9 -innerclass innerClass javax/swing/text/html/HTML$Attribute outerClass javax/swing/text/html/HTML innerClassName Attribute flags 19 - -class name javax/swing/text/html/parser/Parser -header extends java/lang/Object implements javax/swing/text/html/parser/DTDConstants flags 21 -innerclass innerClass javax/swing/text/html/HTML$Attribute outerClass javax/swing/text/html/HTML innerClassName Attribute flags 19 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/html/parser/TagElement -header extends java/lang/Object flags 21 -innerclass innerClass javax/swing/text/html/HTML$Tag outerClass javax/swing/text/html/HTML innerClassName Tag flags 9 -innerclass innerClass javax/swing/text/html/HTML$UnknownTag outerClass javax/swing/text/html/HTML innerClassName UnknownTag flags 9 - -class name javax/swing/tree/DefaultTreeModel -header extends java/lang/Object implements java/io/Serializable,javax/swing/tree/TreeModel flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 - -class name javax/swing/tree/DefaultTreeSelectionModel -header extends java/lang/Object implements java/lang/Cloneable,java/io/Serializable,javax/swing/tree/TreeSelectionModel flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/tree/TreePath -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 - -class name javax/swing/undo/AbstractUndoableEdit -header extends java/lang/Object implements javax/swing/undo/UndoableEdit,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/undo/CompoundEdit -header extends javax/swing/undo/AbstractUndoableEdit flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/undo/UndoableEditSupport -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.desktop-I.sym.txt b/src/jdk.compiler/share/data/symbols/java.desktop-I.sym.txt index 348d9fd110ebb..282197455ab66 100644 --- a/src/jdk.compiler/share/data/symbols/java.desktop-I.sym.txt +++ b/src/jdk.compiler/share/data/symbols/java.desktop-I.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -26,496 +26,23 @@ # ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ### # ########################################################## # -class name java/awt/AWTKeyStroke -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 - -class name java/awt/AttributeValue -header extends java/lang/Object flags 420 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/BorderLayout -header extends java/lang/Object implements java/awt/LayoutManager2,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/CheckboxGroup -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 - -class name java/awt/Color -header extends java/lang/Object implements java/awt/Paint,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/ContainerOrderFocusTraversalPolicy -header extends java/awt/FocusTraversalPolicy implements java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/Dimension -header extends java/awt/geom/Dimension2D implements java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/DisplayMode -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/Event -header extends java/lang/Object implements java/io/Serializable flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="9") -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/FlowLayout -header extends java/lang/Object implements java/awt/LayoutManager,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/FontMetrics -header extends java/lang/Object implements java/io/Serializable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name java/awt/Graphics -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -method name finalize descriptor ()V method name finalize descriptor ()V flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9") -class name java/awt/GridBagLayoutInfo -header extends java/lang/Object implements java/io/Serializable flags 21 -innerclass innerClass java/awt/Component$BaselineResizeBehavior outerClass java/awt/Component innerClassName BaselineResizeBehavior flags 4019 - -class name java/awt/GridLayout -header extends java/lang/Object implements java/awt/LayoutManager,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/HeadlessException -header extends java/lang/UnsupportedOperationException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/Insets -header extends java/lang/Object implements java/lang/Cloneable,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/MenuShortcut -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 - -class name java/awt/Point -header extends java/awt/geom/Point2D implements java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name java/awt/PrintJob -method name finalize descriptor ()V method name finalize descriptor ()V flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9") -class name java/awt/Rectangle -header extends java/awt/geom/Rectangle2D implements java/awt/Shape,java/io/Serializable flags 21 -innerclass innerClass java/awt/geom/Rectangle2D$Double outerClass java/awt/geom/Rectangle2D innerClassName Double flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/SystemColor -header extends java/awt/Color implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/TexturePaint -header extends java/lang/Object implements java/awt/Paint flags 21 -innerclass innerClass java/awt/geom/Rectangle2D$Double outerClass java/awt/geom/Rectangle2D innerClassName Double flags 9 - -class name java/awt/color/ColorSpace -header extends java/lang/Object implements java/io/Serializable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/color/ICC_ColorSpace -header extends java/awt/color/ColorSpace flags 21 classAnnotations @Ljdk/Profile+Annotation;(value=I4) - class name java/awt/color/ICC_Profile -method name finalize descriptor ()V -class name java/awt/desktop/AboutEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/AboutHandler -header extends java/lang/Object flags 601 - -class name java/awt/desktop/AppEvent -header extends java/util/EventObject flags 21 - -class name java/awt/desktop/AppForegroundEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/AppForegroundListener -header extends java/lang/Object implements java/awt/desktop/SystemEventListener flags 601 - -class name java/awt/desktop/AppHiddenEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/AppHiddenListener -header extends java/lang/Object implements java/awt/desktop/SystemEventListener flags 601 - -class name java/awt/desktop/AppReopenedEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/AppReopenedListener -header extends java/lang/Object implements java/awt/desktop/SystemEventListener flags 601 - -class name java/awt/desktop/FilesEvent -header extends java/awt/desktop/AppEvent flags 21 - -class name java/awt/desktop/OpenFilesEvent -header extends java/awt/desktop/FilesEvent flags 31 - -class name java/awt/desktop/OpenFilesHandler -header extends java/lang/Object flags 601 - -class name java/awt/desktop/OpenURIEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/OpenURIHandler -header extends java/lang/Object flags 601 - -class name java/awt/desktop/PreferencesEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/PreferencesHandler -header extends java/lang/Object flags 601 - -class name java/awt/desktop/PrintFilesEvent -header extends java/awt/desktop/FilesEvent flags 31 - -class name java/awt/desktop/PrintFilesHandler -header extends java/lang/Object flags 601 - -class name java/awt/desktop/QuitEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/QuitHandler -header extends java/lang/Object flags 601 - -class name java/awt/desktop/QuitResponse -header extends java/lang/Object flags 601 - -class name java/awt/desktop/QuitStrategy -header extends java/lang/Enum flags 4031 signature Ljava/lang/Enum; - -class name java/awt/desktop/ScreenSleepEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/ScreenSleepListener -header extends java/lang/Object implements java/awt/desktop/SystemEventListener flags 601 - -class name java/awt/desktop/SystemEventListener -header extends java/lang/Object implements java/util/EventListener flags 601 - -class name java/awt/desktop/SystemSleepEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/SystemSleepListener -header extends java/lang/Object implements java/awt/desktop/SystemEventListener flags 601 - -class name java/awt/desktop/UserSessionListener -header extends java/lang/Object implements java/awt/desktop/SystemEventListener flags 601 - -class name java/awt/dnd/DragGestureEvent -header extends java/util/EventObject flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 - -class name java/awt/dnd/DragGestureRecognizer -header extends java/lang/Object implements java/io/Serializable flags 421 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 - -class name java/awt/dnd/DragSource -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 - -class name java/awt/dnd/DropTargetDragEvent -header extends java/awt/dnd/DropTargetEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/dnd/DropTargetDropEvent -header extends java/awt/dnd/DropTargetEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/ActionEvent -header extends java/awt/AWTEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/AdjustmentEvent -header extends java/awt/AWTEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/ComponentEvent -header extends java/awt/AWTEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/ContainerEvent -header extends java/awt/event/ComponentEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/HierarchyEvent -header extends java/awt/AWTEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/InputMethodEvent -header extends java/awt/AWTEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/ItemEvent -header extends java/awt/AWTEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/MouseWheelEvent -header extends java/awt/event/MouseEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/PaintEvent -header extends java/awt/event/ComponentEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/WindowEvent -header extends java/awt/event/ComponentEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/font/FontRenderContext -header extends java/lang/Object flags 21 -innerclass innerClass java/awt/RenderingHints$Key outerClass java/awt/RenderingHints innerClassName Key flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/font/GraphicAttribute -header extends java/lang/Object flags 421 -innerclass innerClass java/awt/geom/Rectangle2D$Float outerClass java/awt/geom/Rectangle2D innerClassName Float flags 9 - -class name java/awt/font/ImageGraphicAttribute -header extends java/awt/font/GraphicAttribute flags 31 -innerclass innerClass java/awt/geom/Rectangle2D$Float outerClass java/awt/geom/Rectangle2D innerClassName Float flags 9 - -class name java/awt/font/NumericShaper$Range -header extends java/lang/Enum nestHost java/awt/font/NumericShaper sealed true flags 4021 signature Ljava/lang/Enum; -innerclass innerClass java/awt/font/NumericShaper$Range outerClass java/awt/font/NumericShaper innerClassName Range flags 4009 - -class name java/awt/font/ShapeGraphicAttribute -header extends java/awt/font/GraphicAttribute flags 31 -innerclass innerClass java/awt/geom/Rectangle2D$Float outerClass java/awt/geom/Rectangle2D innerClassName Float flags 9 - -class name java/awt/font/TextHitInfo -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/font/TextMeasurer -header extends java/lang/Object implements java/lang/Cloneable flags 31 -innerclass innerClass java/text/AttributedCharacterIterator$Attribute outerClass java/text/AttributedCharacterIterator innerClassName Attribute flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/geom/AffineTransform -header extends java/lang/Object implements java/lang/Cloneable,java/io/Serializable flags 21 -innerclass innerClass java/awt/geom/Point2D$Double outerClass java/awt/geom/Point2D innerClassName Double flags 9 -innerclass innerClass java/awt/geom/Point2D$Float outerClass java/awt/geom/Point2D innerClassName Float flags 9 -innerclass innerClass java/awt/geom/Path2D$Double outerClass java/awt/geom/Path2D innerClassName Double flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/geom/Area -header extends java/lang/Object implements java/awt/Shape,java/lang/Cloneable flags 21 -innerclass innerClass java/awt/geom/Rectangle2D$Double outerClass java/awt/geom/Rectangle2D innerClassName Double flags 9 - -class name java/awt/geom/RectangularShape -header extends java/lang/Object implements java/awt/Shape,java/lang/Cloneable flags 421 -innerclass innerClass java/awt/geom/Rectangle2D$Double outerClass java/awt/geom/Rectangle2D innerClassName Double flags 9 - -class name java/awt/image/AbstractMultiResolutionImage -header extends java/awt/Image implements java/awt/image/MultiResolutionImage flags 421 - -class name java/awt/image/BandCombineOp -header extends java/lang/Object implements java/awt/image/RasterOp flags 21 -innerclass innerClass java/awt/geom/Point2D$Float outerClass java/awt/geom/Point2D innerClassName Float flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/BandedSampleModel -header extends java/awt/image/ComponentSampleModel flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/BaseMultiResolutionImage -header extends java/awt/image/AbstractMultiResolutionImage flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/BufferedImageFilter -header extends java/awt/image/ImageFilter implements java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/ByteLookupTable -header extends java/awt/image/LookupTable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/ColorConvertOp -header extends java/lang/Object implements java/awt/image/BufferedImageOp,java/awt/image/RasterOp flags 21 -innerclass innerClass java/awt/geom/Point2D$Float outerClass java/awt/geom/Point2D innerClassName Float flags 9 - class name java/awt/image/ColorModel -method name finalize descriptor ()V -class name java/awt/image/ComponentColorModel -header extends java/awt/image/ColorModel flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/ComponentSampleModel -header extends java/awt/image/SampleModel flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/ConvolveOp -header extends java/lang/Object implements java/awt/image/BufferedImageOp,java/awt/image/RasterOp flags 21 -innerclass innerClass java/awt/geom/Point2D$Float outerClass java/awt/geom/Point2D innerClassName Float flags 9 - -class name java/awt/image/DataBufferUShort -header extends java/awt/image/DataBuffer flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/DirectColorModel -header extends java/awt/image/PackedColorModel flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/ImageFilter -header extends java/lang/Object implements java/awt/image/ImageConsumer,java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name java/awt/image/IndexColorModel -header extends java/awt/image/ColorModel flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -method name finalize descriptor ()V -class name java/awt/image/Kernel -header extends java/lang/Object implements java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/LookupOp -header extends java/lang/Object implements java/awt/image/BufferedImageOp,java/awt/image/RasterOp flags 21 -innerclass innerClass java/awt/geom/Point2D$Float outerClass java/awt/geom/Point2D innerClassName Float flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/MultiPixelPackedSampleModel -header extends java/awt/image/SampleModel flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/MultiResolutionImage -header extends java/lang/Object flags 601 - -class name java/awt/image/PackedColorModel -header extends java/awt/image/ColorModel flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/Raster -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/ReplicateScaleFilter -header extends java/awt/image/ImageFilter flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/RescaleOp -header extends java/lang/Object implements java/awt/image/BufferedImageOp,java/awt/image/RasterOp flags 21 -innerclass innerClass java/awt/geom/Point2D$Float outerClass java/awt/geom/Point2D innerClassName Float flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/SampleModel -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/ShortLookupTable -header extends java/awt/image/LookupTable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/SinglePixelPackedSampleModel -header extends java/awt/image/SampleModel flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/print/Paper -header extends java/lang/Object implements java/lang/Cloneable flags 21 -innerclass innerClass java/awt/geom/Rectangle2D$Double outerClass java/awt/geom/Rectangle2D innerClassName Double flags 9 - -class name java/beans/BeanProperty -header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Documented;@Ljava/lang/annotation/Target;(value={eLjava/lang/annotation/ElementType;METHOD;})@Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;RUNTIME;) - -class name java/beans/Beans -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/beans/DefaultPersistenceDelegate -header extends java/beans/PersistenceDelegate flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/beans/Encoder -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/beans/EventSetDescriptor -header extends java/beans/FeatureDescriptor flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/beans/Expression -header extends java/beans/Statement flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/beans/FeatureDescriptor -header extends java/lang/Object flags 21 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 - -class name java/beans/IndexedPropertyDescriptor -header extends java/beans/PropertyDescriptor flags 21 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/beans/JavaBean -header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Documented;@Ljava/lang/annotation/Target;(value={eLjava/lang/annotation/ElementType;TYPE;})@Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;RUNTIME;) - -class name java/beans/PropertyDescriptor -header extends java/beans/FeatureDescriptor flags 21 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/beans/SimpleBeanInfo -header extends java/lang/Object implements java/beans/BeanInfo flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/accessibility/AccessibilityProvider -header extends java/lang/Object flags 421 - -class name javax/accessibility/AccessibleBundle -header extends java/lang/Object flags 421 classAnnotations @Ljdk/Profile+Annotation;(value=I4) - -class name javax/accessibility/AccessibleRelationSet -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/accessibility/AccessibleStateSet -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/imageio/metadata/IIOMetadata -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/imageio/plugins/jpeg/JPEGHuffmanTable -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/imageio/plugins/jpeg/JPEGQTable -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/imageio/plugins/tiff/TIFFDirectory -header extends java/lang/Object implements java/lang/Cloneable flags 21 - -class name javax/imageio/plugins/tiff/TIFFField -header extends java/lang/Object implements java/lang/Cloneable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/imageio/plugins/tiff/TIFFImageReadParam -header extends javax/imageio/ImageReadParam flags 31 - -class name javax/imageio/plugins/tiff/TIFFTag -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/imageio/plugins/tiff/TIFFTagSet -header extends java/lang/Object flags 21 - -class name javax/imageio/spi/ImageReaderWriterSpi -header extends javax/imageio/spi/IIOServiceProvider flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name javax/imageio/spi/ServiceRegistry -method name finalize descriptor ()V method name finalize descriptor ()V thrownTypes java/lang/Throwable flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9") @@ -540,74 +67,6 @@ class name javax/imageio/stream/MemoryCacheImageInputStream -method name finalize descriptor ()V method name finalize descriptor ()V thrownTypes java/lang/Throwable flags 4 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9") -class name javax/print/attribute/DateTimeSyntax -header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/print/attribute/EnumSyntax -header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/print/attribute/IntegerSyntax -header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/print/attribute/standard/MediaPrintableArea -header extends java/lang/Object implements javax/print/attribute/DocAttribute,javax/print/attribute/PrintRequestAttribute,javax/print/attribute/PrintJobAttribute flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/print/event/PrintEvent -header extends java/util/EventObject flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sound/midi/MetaMessage -header extends javax/sound/midi/MidiMessage flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sound/midi/MidiMessage -header extends java/lang/Object implements java/lang/Cloneable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sound/midi/Sequence -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sound/midi/ShortMessage -header extends javax/sound/midi/MidiMessage flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sound/midi/SysexMessage -header extends javax/sound/midi/MidiMessage flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sound/sampled/ReverbType -header extends java/lang/Object flags 21 classAnnotations @Ljdk/Profile+Annotation;(value=I4) - -class name javax/sound/sampled/spi/FormatConversionProvider -header extends java/lang/Object flags 421 -innerclass innerClass javax/sound/sampled/AudioFormat$Encoding outerClass javax/sound/sampled/AudioFormat innerClassName Encoding flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/BoxLayout -header extends java/lang/Object implements java/awt/LayoutManager2,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/DebugGraphics -header extends java/awt/Graphics flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/DefaultBoundedRangeModel -header extends java/lang/Object implements javax/swing/BoundedRangeModel,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/DefaultListSelectionModel -header extends java/lang/Object implements javax/swing/ListSelectionModel,java/lang/Cloneable,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/GrayFilter -header extends java/awt/image/RGBImageFilter flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name javax/swing/GroupLayout header extends java/lang/Object implements java/awt/LayoutManager2 nestMembers javax/swing/GroupLayout$ParallelGroup,javax/swing/GroupLayout$SequentialGroup,javax/swing/GroupLayout$Group,javax/swing/GroupLayout$Spring,javax/swing/GroupLayout$Alignment flags 21 innerclass innerClass javax/swing/GroupLayout$Alignment outerClass javax/swing/GroupLayout innerClassName Alignment flags 4019 @@ -643,105 +102,16 @@ innerclass innerClass javax/swing/GroupLayout$Spring outerClass javax/swing/Grou innerclass innerClass javax/swing/GroupLayout$Alignment outerClass javax/swing/GroupLayout innerClassName Alignment flags 4019 innerclass innerClass java/awt/Component$BaselineResizeBehavior outerClass java/awt/Component innerClassName BaselineResizeBehavior flags 4019 -class name javax/swing/JList$AccessibleJList$AccessibleJListChild --method name getAccessibleAction descriptor ()Ljavax/accessibility/AccessibleAction; -method name getAccessibleAction descriptor ()Ljavax/accessibility/AccessibleAction; flags 1 - -class name javax/swing/JTextPane -header extends javax/swing/JEditorPane flags 21 runtimeAnnotations @Ljava/beans/JavaBean;(description="A\u005C;u0020;text\u005C;u0020;component\u005C;u0020;that\u005C;u0020;can\u005C;u0020;be\u005C;u0020;marked\u005C;u0020;up\u005C;u0020;with\u005C;u0020;attributes\u005C;u0020;that\u005C;u0020;are\u005C;u0020;graphically\u005C;u0020;represented.")@Ljavax/swing/SwingContainer; - -class name javax/swing/LookAndFeel -header extends java/lang/Object flags 421 -innerclass innerClass javax/swing/text/JTextComponent$KeyBinding outerClass javax/swing/text/JTextComponent innerClassName KeyBinding flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/MenuSelectionManager -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/SizeRequirements -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 - -class name javax/swing/SortingFocusTraversalPolicy -header extends javax/swing/InternalFrameFocusTraversalPolicy flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/SwingContainer -header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Target;(value={eLjava/lang/annotation/ElementType;TYPE;})@Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;RUNTIME;) - -class name javax/swing/UIClientPropertyKey -header extends java/lang/Object flags 601 - -class name javax/swing/border/LineBorder -header extends javax/swing/border/AbstractBorder flags 21 -innerclass innerClass java/awt/geom/RoundRectangle2D$Float outerClass java/awt/geom/RoundRectangle2D innerClassName Float flags 9 -innerclass innerClass java/awt/geom/Rectangle2D$Float outerClass java/awt/geom/Rectangle2D innerClassName Float flags 9 -innerclass innerClass java/awt/geom/Path2D$Float outerClass java/awt/geom/Path2D innerClassName Float flags 9 - -class name javax/swing/event/EventListenerList -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 - -class name javax/swing/event/ListDataEvent -header extends java/util/EventObject flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/event/ListSelectionEvent -header extends java/util/EventObject flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/event/TreeModelEvent -header extends java/util/EventObject flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/filechooser/FileNameExtensionFilter -header extends javax/swing/filechooser/FileFilter flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/basic/BasicArrowButton -header extends javax/swing/JButton implements javax/swing/SwingConstants flags 21 -innerclass innerClass java/awt/geom/Path2D$Double outerClass java/awt/geom/Path2D innerClassName Double flags 9 - -class name javax/swing/plaf/basic/BasicButtonUI -header extends javax/swing/plaf/ButtonUI flags 21 -innerclass innerClass java/awt/Component$BaselineResizeBehavior outerClass java/awt/Component innerClassName BaselineResizeBehavior flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/basic/BasicPasswordFieldUI -header extends javax/swing/plaf/basic/BasicTextFieldUI flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name javax/swing/plaf/basic/BasicSplitPaneUI$BasicVerticalLayoutManager header extends javax/swing/plaf/basic/BasicSplitPaneUI$BasicHorizontalLayoutManager nestHost javax/swing/plaf/basic/BasicSplitPaneUI flags 21 innerclass innerClass javax/swing/plaf/basic/BasicSplitPaneUI$BasicHorizontalLayoutManager outerClass javax/swing/plaf/basic/BasicSplitPaneUI innerClassName BasicHorizontalLayoutManager flags 1 innerclass innerClass javax/swing/plaf/basic/BasicSplitPaneUI$BasicVerticalLayoutManager outerClass javax/swing/plaf/basic/BasicSplitPaneUI innerClassName BasicVerticalLayoutManager flags 1 -class name javax/swing/plaf/basic/BasicToolBarSeparatorUI -header extends javax/swing/plaf/basic/BasicSeparatorUI flags 21 -innerclass innerClass javax/swing/JToolBar$Separator outerClass javax/swing/JToolBar innerClassName Separator flags 9 - -class name javax/swing/plaf/metal/MetalButtonUI -header extends javax/swing/plaf/basic/BasicButtonUI flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/metal/MetalCheckBoxUI -header extends javax/swing/plaf/metal/MetalRadioButtonUI flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/metal/MetalRadioButtonUI -header extends javax/swing/plaf/basic/BasicRadioButtonUI flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name javax/swing/plaf/metal/MetalTabbedPaneUI$TabbedPaneLayout header extends javax/swing/plaf/basic/BasicTabbedPaneUI$TabbedPaneLayout nestHost javax/swing/plaf/metal/MetalTabbedPaneUI flags 21 innerclass innerClass javax/swing/plaf/basic/BasicTabbedPaneUI$TabbedPaneLayout outerClass javax/swing/plaf/basic/BasicTabbedPaneUI innerClassName TabbedPaneLayout flags 1 innerclass innerClass javax/swing/plaf/metal/MetalTabbedPaneUI$TabbedPaneLayout outerClass javax/swing/plaf/metal/MetalTabbedPaneUI innerClassName TabbedPaneLayout flags 1 -class name javax/swing/plaf/metal/MetalToggleButtonUI -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 - class name javax/swing/plaf/metal/MetalToolBarUI$MetalContainerListener header extends javax/swing/plaf/basic/BasicToolBarUI$ToolBarContListener nestHost javax/swing/plaf/metal/MetalToolBarUI flags 21 innerclass innerClass javax/swing/plaf/basic/BasicToolBarUI$ToolBarContListener outerClass javax/swing/plaf/basic/BasicToolBarUI innerClassName ToolBarContListener flags 4 @@ -752,171 +122,3 @@ header extends javax/swing/plaf/basic/BasicToolBarUI$PropertyListener nestHost j innerclass innerClass javax/swing/plaf/basic/BasicToolBarUI$PropertyListener outerClass javax/swing/plaf/basic/BasicToolBarUI innerClassName PropertyListener flags 4 innerclass innerClass javax/swing/plaf/metal/MetalToolBarUI$MetalRolloverListener outerClass javax/swing/plaf/metal/MetalToolBarUI innerClassName MetalRolloverListener flags 4 -class name javax/swing/plaf/metal/MetalToolTipUI -header extends javax/swing/plaf/basic/BasicToolTipUI flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/multi/MultiLookAndFeel -header extends javax/swing/LookAndFeel flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/synth/SynthButtonUI -header extends javax/swing/plaf/basic/BasicButtonUI implements java/beans/PropertyChangeListener,javax/swing/plaf/synth/SynthUI flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/synth/SynthIcon -header extends java/lang/Object implements javax/swing/Icon flags 601 - -class name javax/swing/plaf/synth/SynthMenuItemUI -header extends javax/swing/plaf/basic/BasicMenuItemUI implements java/beans/PropertyChangeListener,javax/swing/plaf/synth/SynthUI flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/synth/SynthMenuUI -header extends javax/swing/plaf/basic/BasicMenuUI implements java/beans/PropertyChangeListener,javax/swing/plaf/synth/SynthUI flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/synth/SynthSeparatorUI -header extends javax/swing/plaf/SeparatorUI implements java/beans/PropertyChangeListener,javax/swing/plaf/synth/SynthUI flags 21 -innerclass innerClass javax/swing/JToolBar$Separator outerClass javax/swing/JToolBar innerClassName Separator flags 9 - -class name javax/swing/plaf/synth/SynthStyle -header extends java/lang/Object flags 421 -innerclass innerClass javax/swing/UIDefaults$LazyInputMap outerClass javax/swing/UIDefaults innerClassName LazyInputMap flags 9 -innerclass innerClass javax/swing/UIDefaults$LazyValue outerClass javax/swing/UIDefaults innerClassName LazyValue flags 609 - -class name javax/swing/table/AbstractTableModel -header extends java/lang/Object implements javax/swing/table/TableModel,java/io/Serializable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/AbstractWriter -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/BoxView -header extends javax/swing/text/CompositeView flags 21 -innerclass innerClass javax/swing/event/DocumentEvent$ElementChange outerClass javax/swing/event/DocumentEvent innerClassName ElementChange flags 609 -innerclass innerClass javax/swing/text/Position$Bias outerClass javax/swing/text/Position innerClassName Bias flags 19 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/CompositeView -header extends javax/swing/text/View flags 421 -innerclass innerClass javax/swing/text/Position$Bias outerClass javax/swing/text/Position innerClassName Bias flags 19 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/DateFormatter -header extends javax/swing/text/InternationalFormatter flags 21 -innerclass innerClass java/text/DateFormat$Field outerClass java/text/DateFormat innerClassName Field flags 9 - -class name javax/swing/text/IconView -header extends javax/swing/text/View flags 21 -innerclass innerClass javax/swing/text/Position$Bias outerClass javax/swing/text/Position innerClassName Bias flags 19 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/LayoutQueue -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/NumberFormatter -header extends javax/swing/text/InternationalFormatter flags 21 -innerclass innerClass java/text/NumberFormat$Field outerClass java/text/NumberFormat innerClassName Field flags 9 -innerclass innerClass javax/swing/text/DocumentFilter$FilterBypass outerClass javax/swing/text/DocumentFilter innerClassName FilterBypass flags 409 -innerclass innerClass java/text/AttributedCharacterIterator$Attribute outerClass java/text/AttributedCharacterIterator innerClassName Attribute flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/Segment -header extends java/lang/Object implements java/lang/Cloneable,java/text/CharacterIterator,java/lang/CharSequence flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/TabSet -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 - -class name javax/swing/text/TabStop -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 - -class name javax/swing/text/View -header extends java/lang/Object implements javax/swing/SwingConstants flags 421 -innerclass innerClass javax/swing/text/Position$Bias outerClass javax/swing/text/Position innerClassName Bias flags 19 -innerclass innerClass javax/swing/event/DocumentEvent$ElementChange outerClass javax/swing/event/DocumentEvent innerClassName ElementChange flags 609 -innerclass innerClass javax/swing/event/DocumentEvent$EventType outerClass javax/swing/event/DocumentEvent innerClassName EventType flags 19 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/html/InlineView -header extends javax/swing/text/LabelView flags 21 -innerclass innerClass javax/swing/text/html/CSS$Attribute outerClass javax/swing/text/html/CSS innerClassName Attribute flags 19 - -class name javax/swing/text/html/ListView -header extends javax/swing/text/html/BlockView flags 21 -innerclass innerClass javax/swing/text/html/StyleSheet$ListPainter outerClass javax/swing/text/html/StyleSheet innerClassName ListPainter flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/html/MinimalHTMLWriter -header extends javax/swing/text/AbstractWriter flags 21 -innerclass innerClass javax/swing/text/StyleConstants$ParagraphConstants outerClass javax/swing/text/StyleConstants innerClassName ParagraphConstants flags 9 -innerclass innerClass javax/swing/text/StyleConstants$CharacterConstants outerClass javax/swing/text/StyleConstants innerClassName CharacterConstants flags 9 -innerclass innerClass javax/swing/text/StyleConstants$FontConstants outerClass javax/swing/text/StyleConstants innerClassName FontConstants flags 9 -innerclass innerClass javax/swing/text/StyleConstants$ColorConstants outerClass javax/swing/text/StyleConstants innerClassName ColorConstants flags 9 -innerclass innerClass javax/swing/text/AbstractDocument$BranchElement outerClass javax/swing/text/AbstractDocument innerClassName BranchElement flags 1 -innerclass innerClass javax/swing/text/StyleContext$NamedStyle outerClass javax/swing/text/StyleContext innerClassName NamedStyle flags 1 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/html/ObjectView -header extends javax/swing/text/ComponentView flags 21 -innerclass innerClass javax/swing/text/html/HTML$Attribute outerClass javax/swing/text/html/HTML innerClassName Attribute flags 19 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/html/Option -header extends java/lang/Object implements java/io/Serializable flags 21 -innerclass innerClass javax/swing/text/html/HTML$Attribute outerClass javax/swing/text/html/HTML innerClassName Attribute flags 19 - -class name javax/swing/text/html/ParagraphView -header extends javax/swing/text/ParagraphView flags 21 -innerclass innerClass javax/swing/text/html/StyleSheet$BoxPainter outerClass javax/swing/text/html/StyleSheet innerClassName BoxPainter flags 9 -innerclass innerClass javax/swing/text/html/CSS$Attribute outerClass javax/swing/text/html/CSS innerClassName Attribute flags 19 - -class name javax/swing/text/html/parser/ContentModel -header extends java/lang/Object implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/html/parser/DocumentParser -header extends javax/swing/text/html/parser/Parser flags 21 -innerclass innerClass javax/swing/text/html/HTMLEditorKit$ParserCallback outerClass javax/swing/text/html/HTMLEditorKit innerClassName ParserCallback flags 9 -innerclass innerClass javax/swing/text/html/HTML$Tag outerClass javax/swing/text/html/HTML innerClassName Tag flags 9 -innerclass innerClass javax/swing/text/html/HTML$Attribute outerClass javax/swing/text/html/HTML innerClassName Attribute flags 19 - -class name javax/swing/text/html/parser/Parser -header extends java/lang/Object implements javax/swing/text/html/parser/DTDConstants flags 21 -innerclass innerClass javax/swing/text/html/HTML$Attribute outerClass javax/swing/text/html/HTML innerClassName Attribute flags 19 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/html/parser/TagElement -header extends java/lang/Object flags 21 -innerclass innerClass javax/swing/text/html/HTML$Tag outerClass javax/swing/text/html/HTML innerClassName Tag flags 9 -innerclass innerClass javax/swing/text/html/HTML$UnknownTag outerClass javax/swing/text/html/HTML innerClassName UnknownTag flags 9 - -class name javax/swing/tree/DefaultTreeModel -header extends java/lang/Object implements java/io/Serializable,javax/swing/tree/TreeModel flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 - -class name javax/swing/tree/DefaultTreeSelectionModel -header extends java/lang/Object implements java/lang/Cloneable,java/io/Serializable,javax/swing/tree/TreeSelectionModel flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/tree/TreePath -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 - -class name javax/swing/undo/AbstractUndoableEdit -header extends java/lang/Object implements javax/swing/undo/UndoableEdit,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/undo/CompoundEdit -header extends javax/swing/undo/AbstractUndoableEdit flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/undo/UndoableEditSupport -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.desktop-J.sym.txt b/src/jdk.compiler/share/data/symbols/java.desktop-J.sym.txt index cc36cf51fedd6..cd41f825edfbf 100644 --- a/src/jdk.compiler/share/data/symbols/java.desktop-J.sym.txt +++ b/src/jdk.compiler/share/data/symbols/java.desktop-J.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -26,122 +26,34 @@ # ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ### # ########################################################## # -class name java/awt/AWTKeyStroke -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 - -class name java/awt/AttributeValue -header extends java/lang/Object flags 420 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/BorderLayout -header extends java/lang/Object implements java/awt/LayoutManager2,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/CheckboxGroup -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 - -class name java/awt/Color -header extends java/lang/Object implements java/awt/Paint,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/ContainerOrderFocusTraversalPolicy -header extends java/awt/FocusTraversalPolicy implements java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/Dimension -header extends java/awt/geom/Dimension2D implements java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/DisplayMode -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/Event -header extends java/lang/Object implements java/io/Serializable flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="9") -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/FlowLayout -header extends java/lang/Object implements java/awt/LayoutManager,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/FontMetrics -header extends java/lang/Object implements java/io/Serializable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/Graphics -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name java/awt/GridBagLayoutInfo header extends java/lang/Object implements java/io/Serializable flags 31 innerclass innerClass java/awt/Component$BaselineResizeBehavior outerClass java/awt/Component innerClassName BaselineResizeBehavior flags 4019 -class name java/awt/GridLayout -header extends java/lang/Object implements java/awt/LayoutManager,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/HeadlessException -header extends java/lang/UnsupportedOperationException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/Insets -header extends java/lang/Object implements java/lang/Cloneable,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/MenuShortcut -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 - class name java/awt/MultipleGradientPaint -header extends java/lang/Object implements java/awt/Paint nestMembers java/awt/MultipleGradientPaint$ColorSpaceType,java/awt/MultipleGradientPaint$CycleMethod sealed true flags 421 +header extends java/lang/Object implements java/awt/Paint nestMembers java/awt/MultipleGradientPaint$ColorSpaceType,java/awt/MultipleGradientPaint$CycleMethod sealed true permittedSubclasses java/awt/LinearGradientPaint,java/awt/RadialGradientPaint flags 421 innerclass innerClass java/awt/MultipleGradientPaint$ColorSpaceType outerClass java/awt/MultipleGradientPaint innerClassName ColorSpaceType flags 4019 innerclass innerClass java/awt/MultipleGradientPaint$CycleMethod outerClass java/awt/MultipleGradientPaint innerClassName CycleMethod flags 4019 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -class name java/awt/Point -header extends java/awt/geom/Point2D implements java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name java/awt/PointerInfo header extends java/lang/Object flags 31 -class name java/awt/Rectangle -header extends java/awt/geom/Rectangle2D implements java/awt/Shape,java/io/Serializable flags 21 -innerclass innerClass java/awt/geom/Rectangle2D$Double outerClass java/awt/geom/Rectangle2D innerClassName Double flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name java/awt/ScrollPaneAdjustable header extends java/lang/Object implements java/awt/Adjustable,java/io/Serializable flags 31 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -class name java/awt/SystemColor -header extends java/awt/Color implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name java/awt/SystemTray header extends java/lang/Object flags 21 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 class name java/awt/TextComponent -header extends java/awt/Component implements javax/accessibility/Accessible nestMembers java/awt/TextComponent$AccessibleAWTTextComponent sealed true flags 21 +header extends java/awt/Component implements javax/accessibility/Accessible nestMembers java/awt/TextComponent$AccessibleAWTTextComponent sealed true permittedSubclasses java/awt/TextArea,java/awt/TextField flags 21 innerclass innerClass java/awt/TextComponent$AccessibleAWTTextComponent outerClass java/awt/TextComponent innerClassName AccessibleAWTTextComponent flags 4 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -class name java/awt/TexturePaint -header extends java/lang/Object implements java/awt/Paint flags 21 -innerclass innerClass java/awt/geom/Rectangle2D$Double outerClass java/awt/geom/Rectangle2D innerClassName Double flags 9 - -class name java/awt/color/ColorSpace -header extends java/lang/Object implements java/io/Serializable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/color/ICC_ColorSpace -header extends java/awt/color/ColorSpace flags 21 classAnnotations @Ljdk/Profile+Annotation;(value=I4) - class name java/awt/color/ICC_Profile -header extends java/lang/Object implements java/io/Serializable sealed true flags 21 +header extends java/lang/Object implements java/io/Serializable sealed true permittedSubclasses java/awt/color/ICC_ProfileGray,java/awt/color/ICC_ProfileRGB flags 21 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 class name java/awt/color/ICC_ProfileGray @@ -150,199 +62,20 @@ header extends java/awt/color/ICC_Profile flags 31 class name java/awt/color/ICC_ProfileRGB header extends java/awt/color/ICC_Profile flags 31 -class name java/awt/desktop/AboutEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/AboutHandler -header extends java/lang/Object flags 601 - class name java/awt/desktop/AppEvent -header extends java/util/EventObject sealed true flags 21 - -class name java/awt/desktop/AppForegroundEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/AppForegroundListener -header extends java/lang/Object implements java/awt/desktop/SystemEventListener flags 601 - -class name java/awt/desktop/AppHiddenEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/AppHiddenListener -header extends java/lang/Object implements java/awt/desktop/SystemEventListener flags 601 - -class name java/awt/desktop/AppReopenedEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/AppReopenedListener -header extends java/lang/Object implements java/awt/desktop/SystemEventListener flags 601 +header extends java/util/EventObject sealed true permittedSubclasses java/awt/desktop/AboutEvent,java/awt/desktop/AppForegroundEvent,java/awt/desktop/AppHiddenEvent,java/awt/desktop/AppReopenedEvent,java/awt/desktop/FilesEvent,java/awt/desktop/OpenURIEvent,java/awt/desktop/PreferencesEvent,java/awt/desktop/QuitEvent,java/awt/desktop/ScreenSleepEvent,java/awt/desktop/SystemSleepEvent,java/awt/desktop/UserSessionEvent flags 21 class name java/awt/desktop/FilesEvent -header extends java/awt/desktop/AppEvent sealed true flags 21 - -class name java/awt/desktop/OpenFilesEvent -header extends java/awt/desktop/FilesEvent flags 31 - -class name java/awt/desktop/OpenFilesHandler -header extends java/lang/Object flags 601 - -class name java/awt/desktop/OpenURIEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/OpenURIHandler -header extends java/lang/Object flags 601 - -class name java/awt/desktop/PreferencesEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/PreferencesHandler -header extends java/lang/Object flags 601 - -class name java/awt/desktop/PrintFilesEvent -header extends java/awt/desktop/FilesEvent flags 31 - -class name java/awt/desktop/PrintFilesHandler -header extends java/lang/Object flags 601 - -class name java/awt/desktop/QuitEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/QuitHandler -header extends java/lang/Object flags 601 - -class name java/awt/desktop/QuitResponse -header extends java/lang/Object flags 601 - -class name java/awt/desktop/QuitStrategy -header extends java/lang/Enum flags 4031 signature Ljava/lang/Enum; - -class name java/awt/desktop/ScreenSleepEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/ScreenSleepListener -header extends java/lang/Object implements java/awt/desktop/SystemEventListener flags 601 - -class name java/awt/desktop/SystemEventListener -header extends java/lang/Object implements java/util/EventListener flags 601 - -class name java/awt/desktop/SystemSleepEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/SystemSleepListener -header extends java/lang/Object implements java/awt/desktop/SystemEventListener flags 601 - -class name java/awt/desktop/UserSessionListener -header extends java/lang/Object implements java/awt/desktop/SystemEventListener flags 601 - -class name java/awt/dnd/DragGestureEvent -header extends java/util/EventObject flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 - -class name java/awt/dnd/DragGestureRecognizer -header extends java/lang/Object implements java/io/Serializable flags 421 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 - -class name java/awt/dnd/DragSource -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 +header extends java/awt/desktop/AppEvent sealed true permittedSubclasses java/awt/desktop/OpenFilesEvent,java/awt/desktop/PrintFilesEvent flags 21 class name java/awt/dnd/DropTargetContext header extends java/lang/Object implements java/io/Serializable nestMembers java/awt/dnd/DropTargetContext$TransferableProxy flags 31 innerclass innerClass java/awt/dnd/DropTargetContext$TransferableProxy outerClass java/awt/dnd/DropTargetContext innerClassName TransferableProxy flags 4 -class name java/awt/dnd/DropTargetDragEvent -header extends java/awt/dnd/DropTargetEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/dnd/DropTargetDropEvent -header extends java/awt/dnd/DropTargetEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/ActionEvent -header extends java/awt/AWTEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/AdjustmentEvent -header extends java/awt/AWTEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/ComponentEvent -header extends java/awt/AWTEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/ContainerEvent -header extends java/awt/event/ComponentEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/HierarchyEvent -header extends java/awt/AWTEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name java/awt/event/InputEvent -header extends java/awt/event/ComponentEvent sealed true flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/InputMethodEvent -header extends java/awt/AWTEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/ItemEvent -header extends java/awt/AWTEvent flags 21 +header extends java/awt/event/ComponentEvent sealed true permittedSubclasses java/awt/event/KeyEvent,java/awt/event/MouseEvent flags 421 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -class name java/awt/event/MouseWheelEvent -header extends java/awt/event/MouseEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/PaintEvent -header extends java/awt/event/ComponentEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/WindowEvent -header extends java/awt/event/ComponentEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/font/FontRenderContext -header extends java/lang/Object flags 21 -innerclass innerClass java/awt/RenderingHints$Key outerClass java/awt/RenderingHints innerClassName Key flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/font/GraphicAttribute -header extends java/lang/Object flags 421 -innerclass innerClass java/awt/geom/Rectangle2D$Float outerClass java/awt/geom/Rectangle2D innerClassName Float flags 9 - -class name java/awt/font/ImageGraphicAttribute -header extends java/awt/font/GraphicAttribute flags 31 -innerclass innerClass java/awt/geom/Rectangle2D$Float outerClass java/awt/geom/Rectangle2D innerClassName Float flags 9 - -class name java/awt/font/NumericShaper$Range -header extends java/lang/Enum nestHost java/awt/font/NumericShaper sealed true flags 4021 signature Ljava/lang/Enum; -innerclass innerClass java/awt/font/NumericShaper$Range outerClass java/awt/font/NumericShaper innerClassName Range flags 4009 - -class name java/awt/font/ShapeGraphicAttribute -header extends java/awt/font/GraphicAttribute flags 31 -innerclass innerClass java/awt/geom/Rectangle2D$Float outerClass java/awt/geom/Rectangle2D innerClassName Float flags 9 - -class name java/awt/font/TextHitInfo -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/font/TextMeasurer -header extends java/lang/Object implements java/lang/Cloneable flags 31 -innerclass innerClass java/text/AttributedCharacterIterator$Attribute outerClass java/text/AttributedCharacterIterator innerClassName Attribute flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/geom/AffineTransform -header extends java/lang/Object implements java/lang/Cloneable,java/io/Serializable flags 21 -innerclass innerClass java/awt/geom/Point2D$Double outerClass java/awt/geom/Point2D innerClassName Double flags 9 -innerclass innerClass java/awt/geom/Point2D$Float outerClass java/awt/geom/Point2D innerClassName Float flags 9 -innerclass innerClass java/awt/geom/Path2D$Double outerClass java/awt/geom/Path2D innerClassName Double flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/geom/Area -header extends java/lang/Object implements java/awt/Shape,java/lang/Cloneable flags 21 -innerclass innerClass java/awt/geom/Rectangle2D$Double outerClass java/awt/geom/Rectangle2D innerClassName Double flags 9 - class name java/awt/geom/CubicCurve2D method name getBounds2D descriptor ()Ljava/awt/geom/Rectangle2D; flags 1 @@ -359,7 +92,7 @@ innerclass innerClass java/awt/geom/Point2D$Float outerClass java/awt/geom/Point -method name getBounds2D descriptor ()Ljava/awt/geom/Rectangle2D; class name java/awt/geom/Path2D -header extends java/lang/Object implements java/awt/Shape,java/lang/Cloneable nestMembers java/awt/geom/Path2D$Double,java/awt/geom/Path2D$Float sealed true flags 421 +header extends java/lang/Object implements java/awt/Shape,java/lang/Cloneable nestMembers java/awt/geom/Path2D$Double,java/awt/geom/Path2D$Float sealed true permittedSubclasses java/awt/geom/Path2D$Double,java/awt/geom/Path2D$Float flags 421 innerclass innerClass java/awt/geom/Rectangle2D$Double outerClass java/awt/geom/Rectangle2D innerClassName Double flags 9 innerclass innerClass java/awt/geom/Path2D$Double outerClass java/awt/geom/Path2D innerClassName Double flags 9 innerclass innerClass java/awt/geom/Path2D$Float outerClass java/awt/geom/Path2D innerClassName Float flags 9 @@ -389,299 +122,41 @@ innerclass innerClass java/awt/geom/QuadCurve2D$Float outerClass java/awt/geom/Q innerclass innerClass java/awt/geom/Point2D$Float outerClass java/awt/geom/Point2D innerClassName Float flags 9 -method name getBounds2D descriptor ()Ljava/awt/geom/Rectangle2D; -class name java/awt/geom/RectangularShape -header extends java/lang/Object implements java/awt/Shape,java/lang/Cloneable flags 421 -innerclass innerClass java/awt/geom/Rectangle2D$Double outerClass java/awt/geom/Rectangle2D innerClassName Double flags 9 - -class name java/awt/image/AbstractMultiResolutionImage -header extends java/awt/Image implements java/awt/image/MultiResolutionImage flags 421 - -class name java/awt/image/BandCombineOp -header extends java/lang/Object implements java/awt/image/RasterOp flags 21 -innerclass innerClass java/awt/geom/Point2D$Float outerClass java/awt/geom/Point2D innerClassName Float flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/BandedSampleModel -header extends java/awt/image/ComponentSampleModel flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/BaseMultiResolutionImage -header extends java/awt/image/AbstractMultiResolutionImage flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/BufferedImageFilter -header extends java/awt/image/ImageFilter implements java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/ByteLookupTable -header extends java/awt/image/LookupTable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/ColorConvertOp -header extends java/lang/Object implements java/awt/image/BufferedImageOp,java/awt/image/RasterOp flags 21 -innerclass innerClass java/awt/geom/Point2D$Float outerClass java/awt/geom/Point2D innerClassName Float flags 9 - -class name java/awt/image/ComponentColorModel -header extends java/awt/image/ColorModel flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/ComponentSampleModel -header extends java/awt/image/SampleModel flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/ConvolveOp -header extends java/lang/Object implements java/awt/image/BufferedImageOp,java/awt/image/RasterOp flags 21 -innerclass innerClass java/awt/geom/Point2D$Float outerClass java/awt/geom/Point2D innerClassName Float flags 9 - -class name java/awt/image/DataBufferUShort -header extends java/awt/image/DataBuffer flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/DirectColorModel -header extends java/awt/image/PackedColorModel flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/ImageFilter -header extends java/lang/Object implements java/awt/image/ImageConsumer,java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/IndexColorModel -header extends java/awt/image/ColorModel flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/Kernel -header extends java/lang/Object implements java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/LookupOp -header extends java/lang/Object implements java/awt/image/BufferedImageOp,java/awt/image/RasterOp flags 21 -innerclass innerClass java/awt/geom/Point2D$Float outerClass java/awt/geom/Point2D innerClassName Float flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/MultiPixelPackedSampleModel -header extends java/awt/image/SampleModel flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/MultiResolutionImage -header extends java/lang/Object flags 601 - -class name java/awt/image/PackedColorModel -header extends java/awt/image/ColorModel flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/Raster -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/ReplicateScaleFilter -header extends java/awt/image/ImageFilter flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/RescaleOp -header extends java/lang/Object implements java/awt/image/BufferedImageOp,java/awt/image/RasterOp flags 21 -innerclass innerClass java/awt/geom/Point2D$Float outerClass java/awt/geom/Point2D innerClassName Float flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/SampleModel -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/ShortLookupTable -header extends java/awt/image/LookupTable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/SinglePixelPackedSampleModel -header extends java/awt/image/SampleModel flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/print/Paper -header extends java/lang/Object implements java/lang/Cloneable flags 21 -innerclass innerClass java/awt/geom/Rectangle2D$Double outerClass java/awt/geom/Rectangle2D innerClassName Double flags 9 - -class name java/beans/BeanProperty -header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Documented;@Ljava/lang/annotation/Target;(value={eLjava/lang/annotation/ElementType;METHOD;})@Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;RUNTIME;) - -class name java/beans/Beans -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/beans/DefaultPersistenceDelegate -header extends java/beans/PersistenceDelegate flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/beans/Encoder -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/beans/EventSetDescriptor -header extends java/beans/FeatureDescriptor flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/beans/Expression -header extends java/beans/Statement flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/beans/FeatureDescriptor -header extends java/lang/Object flags 21 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 - -class name java/beans/IndexedPropertyDescriptor -header extends java/beans/PropertyDescriptor flags 21 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/beans/JavaBean -header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Documented;@Ljava/lang/annotation/Target;(value={eLjava/lang/annotation/ElementType;TYPE;})@Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;RUNTIME;) - -class name java/beans/PropertyDescriptor -header extends java/beans/FeatureDescriptor flags 21 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/beans/SimpleBeanInfo -header extends java/lang/Object implements java/beans/BeanInfo flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/accessibility/AccessibilityProvider -header extends java/lang/Object flags 421 - -class name javax/accessibility/AccessibleBundle -header extends java/lang/Object flags 421 classAnnotations @Ljdk/Profile+Annotation;(value=I4) - -class name javax/accessibility/AccessibleRelationSet -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/accessibility/AccessibleStateSet -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/imageio/metadata/IIOMetadata -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/imageio/plugins/jpeg/JPEGHuffmanTable -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/imageio/plugins/jpeg/JPEGQTable -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/imageio/plugins/tiff/TIFFDirectory -header extends java/lang/Object implements java/lang/Cloneable flags 21 - -class name javax/imageio/plugins/tiff/TIFFField -header extends java/lang/Object implements java/lang/Cloneable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/imageio/plugins/tiff/TIFFImageReadParam -header extends javax/imageio/ImageReadParam flags 31 - -class name javax/imageio/plugins/tiff/TIFFTag -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/imageio/plugins/tiff/TIFFTagSet -header extends java/lang/Object flags 21 - -class name javax/imageio/spi/ImageReaderWriterSpi -header extends javax/imageio/spi/IIOServiceProvider flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/print/attribute/DateTimeSyntax -header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/print/attribute/EnumSyntax -header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/print/attribute/IntegerSyntax -header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/print/attribute/standard/MediaPrintableArea -header extends java/lang/Object implements javax/print/attribute/DocAttribute,javax/print/attribute/PrintRequestAttribute,javax/print/attribute/PrintJobAttribute flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/print/event/PrintEvent -header extends java/util/EventObject flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sound/midi/MetaMessage -header extends javax/sound/midi/MidiMessage flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sound/midi/MidiMessage -header extends java/lang/Object implements java/lang/Cloneable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sound/midi/Sequence -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sound/midi/ShortMessage -header extends javax/sound/midi/MidiMessage flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sound/midi/SysexMessage -header extends javax/sound/midi/MidiMessage flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name javax/sound/midi/Track header extends java/lang/Object flags 31 -class name javax/sound/sampled/ReverbType -header extends java/lang/Object flags 21 classAnnotations @Ljdk/Profile+Annotation;(value=I4) - -class name javax/sound/sampled/spi/FormatConversionProvider -header extends java/lang/Object flags 421 -innerclass innerClass javax/sound/sampled/AudioFormat$Encoding outerClass javax/sound/sampled/AudioFormat innerClassName Encoding flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/BoxLayout -header extends java/lang/Object implements java/awt/LayoutManager2,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/DebugGraphics -header extends java/awt/Graphics flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/DefaultBoundedRangeModel -header extends java/lang/Object implements javax/swing/BoundedRangeModel,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/DefaultListSelectionModel -header extends java/lang/Object implements javax/swing/ListSelectionModel,java/lang/Cloneable,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/GrayFilter -header extends java/awt/image/RGBImageFilter flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name javax/swing/GroupLayout -header extends java/lang/Object implements java/awt/LayoutManager2 nestMembers javax/swing/GroupLayout$ParallelGroup,javax/swing/GroupLayout$SequentialGroup,javax/swing/GroupLayout$Group,javax/swing/GroupLayout$Spring,javax/swing/GroupLayout$Alignment flags 21 +header extends java/lang/Object implements java/awt/LayoutManager2 nestMembers javax/swing/GroupLayout$BaselineGroup,javax/swing/GroupLayout$ParallelGroup,javax/swing/GroupLayout$SequentialGroup,javax/swing/GroupLayout$Group,javax/swing/GroupLayout$Spring,javax/swing/GroupLayout$Alignment flags 21 innerclass innerClass javax/swing/GroupLayout$Alignment outerClass javax/swing/GroupLayout innerClassName Alignment flags 4019 innerclass innerClass javax/swing/GroupLayout$ParallelGroup outerClass javax/swing/GroupLayout innerClassName ParallelGroup flags 1 innerclass innerClass javax/swing/GroupLayout$Group outerClass javax/swing/GroupLayout innerClassName Group flags 401 innerclass innerClass javax/swing/GroupLayout$SequentialGroup outerClass javax/swing/GroupLayout innerClassName SequentialGroup flags 11 innerclass innerClass javax/swing/GroupLayout$Spring outerClass javax/swing/GroupLayout innerClassName Spring flags 40a +innerclass innerClass javax/swing/GroupLayout$BaselineGroup outerClass javax/swing/GroupLayout innerClassName BaselineGroup flags 12 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +class name javax/swing/GroupLayout$BaselineGroup +header extends javax/swing/GroupLayout$ParallelGroup nestHost javax/swing/GroupLayout flags 30 +innerclass innerClass javax/swing/GroupLayout$Alignment outerClass javax/swing/GroupLayout innerClassName Alignment flags 4019 +innerclass innerClass javax/swing/GroupLayout$ParallelGroup outerClass javax/swing/GroupLayout innerClassName ParallelGroup flags 1 +innerclass innerClass javax/swing/GroupLayout$BaselineGroup outerClass javax/swing/GroupLayout innerClassName BaselineGroup flags 12 +innerclass innerClass javax/swing/GroupLayout$Spring outerClass javax/swing/GroupLayout innerClassName Spring flags 40a +innerclass innerClass java/awt/Component$BaselineResizeBehavior outerClass java/awt/Component innerClassName BaselineResizeBehavior flags 4019 + class name javax/swing/GroupLayout$Group -header extends javax/swing/GroupLayout$Spring nestHost javax/swing/GroupLayout sealed true flags 421 +header extends javax/swing/GroupLayout$Spring nestHost javax/swing/GroupLayout sealed true permittedSubclasses javax/swing/GroupLayout$ParallelGroup,javax/swing/GroupLayout$SequentialGroup flags 421 innerclass innerClass javax/swing/GroupLayout$Group outerClass javax/swing/GroupLayout innerClassName Group flags 401 innerclass innerClass javax/swing/GroupLayout$Spring outerClass javax/swing/GroupLayout innerClassName Spring flags 40a innerclass innerClass javax/swing/GroupLayout$ParallelGroup outerClass javax/swing/GroupLayout innerClassName ParallelGroup flags 1 innerclass innerClass javax/swing/GroupLayout$SequentialGroup outerClass javax/swing/GroupLayout innerClassName SequentialGroup flags 11 class name javax/swing/GroupLayout$ParallelGroup -header extends javax/swing/GroupLayout$Group nestHost javax/swing/GroupLayout sealed true flags 21 +header extends javax/swing/GroupLayout$Group nestHost javax/swing/GroupLayout sealed true permittedSubclasses javax/swing/GroupLayout$BaselineGroup flags 21 innerclass innerClass javax/swing/GroupLayout$ParallelGroup outerClass javax/swing/GroupLayout innerClassName ParallelGroup flags 1 innerclass innerClass javax/swing/GroupLayout$Group outerClass javax/swing/GroupLayout innerClassName Group flags 401 innerclass innerClass javax/swing/GroupLayout$Alignment outerClass javax/swing/GroupLayout innerClassName Alignment flags 4019 innerclass innerClass javax/swing/GroupLayout$Spring outerClass javax/swing/GroupLayout innerClassName Spring flags 40a +innerclass innerClass javax/swing/GroupLayout$BaselineGroup outerClass javax/swing/GroupLayout innerClassName BaselineGroup flags 12 class name javax/swing/GroupLayout$SequentialGroup header extends javax/swing/GroupLayout$Group nestHost javax/swing/GroupLayout flags 31 @@ -691,77 +166,12 @@ innerclass innerClass javax/swing/GroupLayout$Spring outerClass javax/swing/Grou innerclass innerClass javax/swing/LayoutStyle$ComponentPlacement outerClass javax/swing/LayoutStyle innerClassName ComponentPlacement flags 4019 innerclass innerClass java/awt/Component$BaselineResizeBehavior outerClass java/awt/Component innerClassName BaselineResizeBehavior flags 4019 -class name javax/swing/JList$AccessibleJList$AccessibleJListChild --method name getAccessibleAction descriptor ()Ljavax/accessibility/AccessibleAction; -method name getAccessibleAction descriptor ()Ljavax/accessibility/AccessibleAction; flags 1 - -class name javax/swing/JTextPane -header extends javax/swing/JEditorPane flags 21 runtimeAnnotations @Ljava/beans/JavaBean;(description="A\u005C;u0020;text\u005C;u0020;component\u005C;u0020;that\u005C;u0020;can\u005C;u0020;be\u005C;u0020;marked\u005C;u0020;up\u005C;u0020;with\u005C;u0020;attributes\u005C;u0020;that\u005C;u0020;are\u005C;u0020;graphically\u005C;u0020;represented.")@Ljavax/swing/SwingContainer; - -class name javax/swing/LookAndFeel -header extends java/lang/Object flags 421 -innerclass innerClass javax/swing/text/JTextComponent$KeyBinding outerClass javax/swing/text/JTextComponent innerClassName KeyBinding flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/MenuSelectionManager -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/SizeRequirements -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 - -class name javax/swing/SortingFocusTraversalPolicy -header extends javax/swing/InternalFrameFocusTraversalPolicy flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/SwingContainer -header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Target;(value={eLjava/lang/annotation/ElementType;TYPE;})@Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;RUNTIME;) - class name javax/swing/ToolTipManager header extends java/awt/event/MouseAdapter implements java/awt/event/MouseMotionListener nestMembers javax/swing/ToolTipManager$stillInsideTimerAction,javax/swing/ToolTipManager$outsideTimerAction,javax/swing/ToolTipManager$insideTimerAction flags 31 innerclass innerClass javax/swing/ToolTipManager$insideTimerAction outerClass javax/swing/ToolTipManager innerClassName insideTimerAction flags 4 innerclass innerClass javax/swing/ToolTipManager$outsideTimerAction outerClass javax/swing/ToolTipManager innerClassName outsideTimerAction flags 4 innerclass innerClass javax/swing/ToolTipManager$stillInsideTimerAction outerClass javax/swing/ToolTipManager innerClassName stillInsideTimerAction flags 4 -class name javax/swing/UIClientPropertyKey -header extends java/lang/Object flags 601 - -class name javax/swing/border/LineBorder -header extends javax/swing/border/AbstractBorder flags 21 -innerclass innerClass java/awt/geom/RoundRectangle2D$Float outerClass java/awt/geom/RoundRectangle2D innerClassName Float flags 9 -innerclass innerClass java/awt/geom/Rectangle2D$Float outerClass java/awt/geom/Rectangle2D innerClassName Float flags 9 -innerclass innerClass java/awt/geom/Path2D$Float outerClass java/awt/geom/Path2D innerClassName Float flags 9 - -class name javax/swing/event/EventListenerList -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 - -class name javax/swing/event/ListDataEvent -header extends java/util/EventObject flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/event/ListSelectionEvent -header extends java/util/EventObject flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/event/TreeModelEvent -header extends java/util/EventObject flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/filechooser/FileNameExtensionFilter -header extends javax/swing/filechooser/FileFilter flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/basic/BasicArrowButton -header extends javax/swing/JButton implements javax/swing/SwingConstants flags 21 -innerclass innerClass java/awt/geom/Path2D$Double outerClass java/awt/geom/Path2D innerClassName Double flags 9 - -class name javax/swing/plaf/basic/BasicButtonUI -header extends javax/swing/plaf/ButtonUI flags 21 -innerclass innerClass java/awt/Component$BaselineResizeBehavior outerClass java/awt/Component innerClassName BaselineResizeBehavior flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name javax/swing/plaf/basic/BasicDirectoryModel -method name intervalAdded descriptor (Ljavax/swing/event/ListDataEvent;)V -method name intervalRemoved descriptor (Ljavax/swing/event/ListDataEvent;)V @@ -774,10 +184,6 @@ class name javax/swing/plaf/basic/BasicMenuItemUI$MouseInputHandler header extends java/lang/Object implements javax/swing/event/MouseInputListener nestHost javax/swing/plaf/basic/BasicMenuItemUI flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="17") innerclass innerClass javax/swing/plaf/basic/BasicMenuItemUI$MouseInputHandler outerClass javax/swing/plaf/basic/BasicMenuItemUI innerClassName MouseInputHandler flags 4 -class name javax/swing/plaf/basic/BasicPasswordFieldUI -header extends javax/swing/plaf/basic/BasicTextFieldUI flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name javax/swing/plaf/basic/BasicScrollPaneUI$HSBChangeListener header extends java/lang/Object implements javax/swing/event/ChangeListener nestHost javax/swing/plaf/basic/BasicScrollPaneUI flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="17") innerclass innerClass javax/swing/plaf/basic/BasicScrollPaneUI$HSBChangeListener outerClass javax/swing/plaf/basic/BasicScrollPaneUI innerClassName HSBChangeListener flags 1 @@ -795,112 +201,17 @@ header extends java/lang/Object implements javax/swing/event/ChangeListener nest innerclass innerClass javax/swing/plaf/basic/BasicScrollPaneUI$ViewportChangeHandler outerClass javax/swing/plaf/basic/BasicScrollPaneUI innerClassName ViewportChangeHandler flags 1 class name javax/swing/plaf/basic/BasicSplitPaneUI$BasicHorizontalLayoutManager -header extends java/lang/Object implements java/awt/LayoutManager2 nestHost javax/swing/plaf/basic/BasicSplitPaneUI sealed true flags 21 +header extends java/lang/Object implements java/awt/LayoutManager2 nestHost javax/swing/plaf/basic/BasicSplitPaneUI sealed true permittedSubclasses javax/swing/plaf/basic/BasicSplitPaneUI$BasicVerticalLayoutManager flags 21 innerclass innerClass javax/swing/plaf/basic/BasicSplitPaneUI$BasicHorizontalLayoutManager outerClass javax/swing/plaf/basic/BasicSplitPaneUI innerClassName BasicHorizontalLayoutManager flags 1 innerclass innerClass javax/swing/plaf/basic/BasicSplitPaneUI$BasicVerticalLayoutManager outerClass javax/swing/plaf/basic/BasicSplitPaneUI innerClassName BasicVerticalLayoutManager flags 1 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -class name javax/swing/plaf/basic/BasicToolBarSeparatorUI -header extends javax/swing/plaf/basic/BasicSeparatorUI flags 21 -innerclass innerClass javax/swing/JToolBar$Separator outerClass javax/swing/JToolBar innerClassName Separator flags 9 - class name javax/swing/plaf/basic/BasicToolBarUI -method name createFloatingFrame descriptor (Ljavax/swing/JToolBar;)Ljavax/swing/JFrame; method name createFloatingFrame descriptor (Ljavax/swing/JToolBar;)Ljavax/swing/JFrame; flags 4 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="17") -class name javax/swing/plaf/metal/MetalButtonUI -header extends javax/swing/plaf/basic/BasicButtonUI flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/metal/MetalCheckBoxUI -header extends javax/swing/plaf/metal/MetalRadioButtonUI flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/metal/MetalRadioButtonUI -header extends javax/swing/plaf/basic/BasicRadioButtonUI flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/metal/MetalToggleButtonUI -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 - -class name javax/swing/plaf/metal/MetalToolTipUI -header extends javax/swing/plaf/basic/BasicToolTipUI flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/multi/MultiLookAndFeel -header extends javax/swing/LookAndFeel flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/synth/SynthButtonUI -header extends javax/swing/plaf/basic/BasicButtonUI implements java/beans/PropertyChangeListener,javax/swing/plaf/synth/SynthUI flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/synth/SynthIcon -header extends java/lang/Object implements javax/swing/Icon flags 601 - -class name javax/swing/plaf/synth/SynthMenuItemUI -header extends javax/swing/plaf/basic/BasicMenuItemUI implements java/beans/PropertyChangeListener,javax/swing/plaf/synth/SynthUI flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/synth/SynthMenuUI -header extends javax/swing/plaf/basic/BasicMenuUI implements java/beans/PropertyChangeListener,javax/swing/plaf/synth/SynthUI flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/synth/SynthSeparatorUI -header extends javax/swing/plaf/SeparatorUI implements java/beans/PropertyChangeListener,javax/swing/plaf/synth/SynthUI flags 21 -innerclass innerClass javax/swing/JToolBar$Separator outerClass javax/swing/JToolBar innerClassName Separator flags 9 - -class name javax/swing/plaf/synth/SynthStyle -header extends java/lang/Object flags 421 -innerclass innerClass javax/swing/UIDefaults$LazyInputMap outerClass javax/swing/UIDefaults innerClassName LazyInputMap flags 9 -innerclass innerClass javax/swing/UIDefaults$LazyValue outerClass javax/swing/UIDefaults innerClassName LazyValue flags 609 - -class name javax/swing/table/AbstractTableModel -header extends java/lang/Object implements javax/swing/table/TableModel,java/io/Serializable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/AbstractWriter -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/BoxView -header extends javax/swing/text/CompositeView flags 21 -innerclass innerClass javax/swing/event/DocumentEvent$ElementChange outerClass javax/swing/event/DocumentEvent innerClassName ElementChange flags 609 -innerclass innerClass javax/swing/text/Position$Bias outerClass javax/swing/text/Position innerClassName Bias flags 19 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/CompositeView -header extends javax/swing/text/View flags 421 -innerclass innerClass javax/swing/text/Position$Bias outerClass javax/swing/text/Position innerClassName Bias flags 19 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/DateFormatter -header extends javax/swing/text/InternationalFormatter flags 21 -innerclass innerClass java/text/DateFormat$Field outerClass java/text/DateFormat innerClassName Field flags 9 - -class name javax/swing/text/IconView -header extends javax/swing/text/View flags 21 -innerclass innerClass javax/swing/text/Position$Bias outerClass javax/swing/text/Position innerClassName Bias flags 19 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/LayoutQueue -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/NumberFormatter -header extends javax/swing/text/InternationalFormatter flags 21 -innerclass innerClass java/text/NumberFormat$Field outerClass java/text/NumberFormat innerClassName Field flags 9 -innerclass innerClass javax/swing/text/DocumentFilter$FilterBypass outerClass javax/swing/text/DocumentFilter innerClassName FilterBypass flags 409 -innerclass innerClass java/text/AttributedCharacterIterator$Attribute outerClass java/text/AttributedCharacterIterator innerClassName Attribute flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/Segment -header extends java/lang/Object implements java/lang/Cloneable,java/text/CharacterIterator,java/lang/CharSequence flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name javax/swing/text/StyleConstants -header extends java/lang/Object nestMembers javax/swing/text/StyleConstants$FontConstants,javax/swing/text/StyleConstants$ColorConstants,javax/swing/text/StyleConstants$CharacterConstants,javax/swing/text/StyleConstants$ParagraphConstants sealed true flags 21 +header extends java/lang/Object nestMembers javax/swing/text/StyleConstants$FontConstants,javax/swing/text/StyleConstants$ColorConstants,javax/swing/text/StyleConstants$CharacterConstants,javax/swing/text/StyleConstants$ParagraphConstants sealed true permittedSubclasses javax/swing/text/StyleConstants$CharacterConstants,javax/swing/text/StyleConstants$ColorConstants,javax/swing/text/StyleConstants$FontConstants,javax/swing/text/StyleConstants$ParagraphConstants flags 21 innerclass innerClass javax/swing/text/StyleConstants$CharacterConstants outerClass javax/swing/text/StyleConstants innerClassName CharacterConstants flags 19 innerclass innerClass javax/swing/text/StyleConstants$FontConstants outerClass javax/swing/text/StyleConstants innerClassName FontConstants flags 19 innerclass innerClass javax/swing/text/StyleConstants$ColorConstants outerClass javax/swing/text/StyleConstants innerClassName ColorConstants flags 19 @@ -928,21 +239,6 @@ header extends javax/swing/text/StyleConstants implements javax/swing/text/Attri innerclass innerClass javax/swing/text/StyleConstants$ParagraphConstants outerClass javax/swing/text/StyleConstants innerClassName ParagraphConstants flags 19 innerclass innerClass javax/swing/text/AttributeSet$ParagraphAttribute outerClass javax/swing/text/AttributeSet innerClassName ParagraphAttribute flags 609 -class name javax/swing/text/TabSet -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 - -class name javax/swing/text/TabStop -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 - -class name javax/swing/text/View -header extends java/lang/Object implements javax/swing/SwingConstants flags 421 -innerclass innerClass javax/swing/text/Position$Bias outerClass javax/swing/text/Position innerClassName Bias flags 19 -innerclass innerClass javax/swing/event/DocumentEvent$ElementChange outerClass javax/swing/event/DocumentEvent innerClassName ElementChange flags 609 -innerclass innerClass javax/swing/event/DocumentEvent$EventType outerClass javax/swing/event/DocumentEvent innerClassName EventType flags 19 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name javax/swing/text/html/BlockView header extends javax/swing/text/BoxView flags 21 innerclass innerClass javax/swing/text/html/CSS$Attribute outerClass javax/swing/text/html/CSS innerClassName Attribute flags 19 @@ -954,10 +250,6 @@ header extends javax/swing/text/html/HTMLFrameHyperlinkEvent nestMembers javax/s innerclass innerClass javax/swing/event/HyperlinkEvent$EventType outerClass javax/swing/event/HyperlinkEvent innerClassName EventType flags 19 innerclass innerClass javax/swing/text/html/FormSubmitEvent$MethodType outerClass javax/swing/text/html/FormSubmitEvent innerClassName MethodType flags 4019 -class name javax/swing/text/html/InlineView -header extends javax/swing/text/LabelView flags 21 -innerclass innerClass javax/swing/text/html/CSS$Attribute outerClass javax/swing/text/html/CSS innerClassName Attribute flags 19 - class name javax/swing/text/html/ListView header extends javax/swing/text/html/BlockView flags 21 innerclass innerClass javax/swing/text/html/StyleSheet$ListPainter outerClass javax/swing/text/html/StyleSheet innerClassName ListPainter flags 19 @@ -973,15 +265,6 @@ innerclass innerClass javax/swing/text/AbstractDocument$BranchElement outerClass innerclass innerClass javax/swing/text/StyleContext$NamedStyle outerClass javax/swing/text/StyleContext innerClassName NamedStyle flags 1 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -class name javax/swing/text/html/ObjectView -header extends javax/swing/text/ComponentView flags 21 -innerclass innerClass javax/swing/text/html/HTML$Attribute outerClass javax/swing/text/html/HTML innerClassName Attribute flags 19 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/html/Option -header extends java/lang/Object implements java/io/Serializable flags 21 -innerclass innerClass javax/swing/text/html/HTML$Attribute outerClass javax/swing/text/html/HTML innerClassName Attribute flags 19 - class name javax/swing/text/html/ParagraphView header extends javax/swing/text/ParagraphView flags 21 innerclass innerClass javax/swing/text/html/StyleSheet$BoxPainter outerClass javax/swing/text/html/StyleSheet innerClassName BoxPainter flags 19 @@ -1014,48 +297,3 @@ innerclass innerClass javax/swing/text/html/HTML$Attribute outerClass javax/swin innerclass innerClass java/awt/RenderingHints$Key outerClass java/awt/RenderingHints innerClassName Key flags 409 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -class name javax/swing/text/html/parser/ContentModel -header extends java/lang/Object implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/html/parser/DocumentParser -header extends javax/swing/text/html/parser/Parser flags 21 -innerclass innerClass javax/swing/text/html/HTMLEditorKit$ParserCallback outerClass javax/swing/text/html/HTMLEditorKit innerClassName ParserCallback flags 9 -innerclass innerClass javax/swing/text/html/HTML$Tag outerClass javax/swing/text/html/HTML innerClassName Tag flags 9 -innerclass innerClass javax/swing/text/html/HTML$Attribute outerClass javax/swing/text/html/HTML innerClassName Attribute flags 19 - -class name javax/swing/text/html/parser/Parser -header extends java/lang/Object implements javax/swing/text/html/parser/DTDConstants flags 21 -innerclass innerClass javax/swing/text/html/HTML$Attribute outerClass javax/swing/text/html/HTML innerClassName Attribute flags 19 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/html/parser/TagElement -header extends java/lang/Object flags 21 -innerclass innerClass javax/swing/text/html/HTML$Tag outerClass javax/swing/text/html/HTML innerClassName Tag flags 9 -innerclass innerClass javax/swing/text/html/HTML$UnknownTag outerClass javax/swing/text/html/HTML innerClassName UnknownTag flags 9 - -class name javax/swing/tree/DefaultTreeModel -header extends java/lang/Object implements java/io/Serializable,javax/swing/tree/TreeModel flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 - -class name javax/swing/tree/DefaultTreeSelectionModel -header extends java/lang/Object implements java/lang/Cloneable,java/io/Serializable,javax/swing/tree/TreeSelectionModel flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/tree/TreePath -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 - -class name javax/swing/undo/AbstractUndoableEdit -header extends java/lang/Object implements javax/swing/undo/UndoableEdit,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/undo/CompoundEdit -header extends javax/swing/undo/AbstractUndoableEdit flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/undo/UndoableEditSupport -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.desktop-K.sym.txt b/src/jdk.compiler/share/data/symbols/java.desktop-K.sym.txt index 6d9e205b3c1b5..4787598dfd654 100644 --- a/src/jdk.compiler/share/data/symbols/java.desktop-K.sym.txt +++ b/src/jdk.compiler/share/data/symbols/java.desktop-K.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -26,846 +26,16 @@ # ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ### # ########################################################## # -class name java/awt/AWTKeyStroke -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 - -class name java/awt/AttributeValue -header extends java/lang/Object flags 420 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/BorderLayout -header extends java/lang/Object implements java/awt/LayoutManager2,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/CheckboxGroup -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 - -class name java/awt/Color -header extends java/lang/Object implements java/awt/Paint,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/ContainerOrderFocusTraversalPolicy -header extends java/awt/FocusTraversalPolicy implements java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/Dimension -header extends java/awt/geom/Dimension2D implements java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/DisplayMode -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/Event -header extends java/lang/Object implements java/io/Serializable flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="9") -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/FlowLayout -header extends java/lang/Object implements java/awt/LayoutManager,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/FontMetrics -header extends java/lang/Object implements java/io/Serializable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/Graphics -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/GridLayout -header extends java/lang/Object implements java/awt/LayoutManager,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/HeadlessException -header extends java/lang/UnsupportedOperationException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/Insets -header extends java/lang/Object implements java/lang/Cloneable,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/MenuShortcut -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 - -class name java/awt/MultipleGradientPaint -header extends java/lang/Object implements java/awt/Paint nestMembers java/awt/MultipleGradientPaint$ColorSpaceType,java/awt/MultipleGradientPaint$CycleMethod sealed true flags 421 -innerclass innerClass java/awt/MultipleGradientPaint$ColorSpaceType outerClass java/awt/MultipleGradientPaint innerClassName ColorSpaceType flags 4019 -innerclass innerClass java/awt/MultipleGradientPaint$CycleMethod outerClass java/awt/MultipleGradientPaint innerClassName CycleMethod flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/Point -header extends java/awt/geom/Point2D implements java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/Rectangle -header extends java/awt/geom/Rectangle2D implements java/awt/Shape,java/io/Serializable flags 21 -innerclass innerClass java/awt/geom/Rectangle2D$Double outerClass java/awt/geom/Rectangle2D innerClassName Double flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/SystemColor -header extends java/awt/Color implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/TextComponent -header extends java/awt/Component implements javax/accessibility/Accessible nestMembers java/awt/TextComponent$AccessibleAWTTextComponent sealed true flags 21 -innerclass innerClass java/awt/TextComponent$AccessibleAWTTextComponent outerClass java/awt/TextComponent innerClassName AccessibleAWTTextComponent flags 4 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/TexturePaint -header extends java/lang/Object implements java/awt/Paint flags 21 -innerclass innerClass java/awt/geom/Rectangle2D$Double outerClass java/awt/geom/Rectangle2D innerClassName Double flags 9 - -class name java/awt/color/ColorSpace -header extends java/lang/Object implements java/io/Serializable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/color/ICC_ColorSpace -header extends java/awt/color/ColorSpace flags 21 classAnnotations @Ljdk/Profile+Annotation;(value=I4) - -class name java/awt/color/ICC_Profile -header extends java/lang/Object implements java/io/Serializable sealed true flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/desktop/AboutEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/AboutHandler -header extends java/lang/Object flags 601 - -class name java/awt/desktop/AppEvent -header extends java/util/EventObject sealed true flags 21 - -class name java/awt/desktop/AppForegroundEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/AppForegroundListener -header extends java/lang/Object implements java/awt/desktop/SystemEventListener flags 601 - -class name java/awt/desktop/AppHiddenEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/AppHiddenListener -header extends java/lang/Object implements java/awt/desktop/SystemEventListener flags 601 - -class name java/awt/desktop/AppReopenedEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/AppReopenedListener -header extends java/lang/Object implements java/awt/desktop/SystemEventListener flags 601 - -class name java/awt/desktop/FilesEvent -header extends java/awt/desktop/AppEvent sealed true flags 21 - -class name java/awt/desktop/OpenFilesEvent -header extends java/awt/desktop/FilesEvent flags 31 - -class name java/awt/desktop/OpenFilesHandler -header extends java/lang/Object flags 601 - -class name java/awt/desktop/OpenURIEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/OpenURIHandler -header extends java/lang/Object flags 601 - -class name java/awt/desktop/PreferencesEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/PreferencesHandler -header extends java/lang/Object flags 601 - -class name java/awt/desktop/PrintFilesEvent -header extends java/awt/desktop/FilesEvent flags 31 - -class name java/awt/desktop/PrintFilesHandler -header extends java/lang/Object flags 601 - -class name java/awt/desktop/QuitEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/QuitHandler -header extends java/lang/Object flags 601 - -class name java/awt/desktop/QuitResponse -header extends java/lang/Object flags 601 - -class name java/awt/desktop/QuitStrategy -header extends java/lang/Enum flags 4031 signature Ljava/lang/Enum; - -class name java/awt/desktop/ScreenSleepEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/ScreenSleepListener -header extends java/lang/Object implements java/awt/desktop/SystemEventListener flags 601 - -class name java/awt/desktop/SystemEventListener -header extends java/lang/Object implements java/util/EventListener flags 601 - -class name java/awt/desktop/SystemSleepEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/SystemSleepListener -header extends java/lang/Object implements java/awt/desktop/SystemEventListener flags 601 - -class name java/awt/desktop/UserSessionListener -header extends java/lang/Object implements java/awt/desktop/SystemEventListener flags 601 - -class name java/awt/dnd/DragGestureEvent -header extends java/util/EventObject flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 - -class name java/awt/dnd/DragGestureRecognizer -header extends java/lang/Object implements java/io/Serializable flags 421 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 - -class name java/awt/dnd/DragSource -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 - -class name java/awt/dnd/DropTargetDragEvent -header extends java/awt/dnd/DropTargetEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/dnd/DropTargetDropEvent -header extends java/awt/dnd/DropTargetEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/ActionEvent -header extends java/awt/AWTEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/AdjustmentEvent -header extends java/awt/AWTEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/ComponentEvent -header extends java/awt/AWTEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/ContainerEvent -header extends java/awt/event/ComponentEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/HierarchyEvent -header extends java/awt/AWTEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/InputEvent -header extends java/awt/event/ComponentEvent sealed true flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/InputMethodEvent -header extends java/awt/AWTEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/ItemEvent -header extends java/awt/AWTEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/MouseWheelEvent -header extends java/awt/event/MouseEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/PaintEvent -header extends java/awt/event/ComponentEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/WindowEvent -header extends java/awt/event/ComponentEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/font/FontRenderContext -header extends java/lang/Object flags 21 -innerclass innerClass java/awt/RenderingHints$Key outerClass java/awt/RenderingHints innerClassName Key flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/font/GraphicAttribute -header extends java/lang/Object flags 421 -innerclass innerClass java/awt/geom/Rectangle2D$Float outerClass java/awt/geom/Rectangle2D innerClassName Float flags 9 - -class name java/awt/font/ImageGraphicAttribute -header extends java/awt/font/GraphicAttribute flags 31 -innerclass innerClass java/awt/geom/Rectangle2D$Float outerClass java/awt/geom/Rectangle2D innerClassName Float flags 9 - -class name java/awt/font/NumericShaper$Range -header extends java/lang/Enum nestHost java/awt/font/NumericShaper sealed true flags 4021 signature Ljava/lang/Enum; -innerclass innerClass java/awt/font/NumericShaper$Range outerClass java/awt/font/NumericShaper innerClassName Range flags 4009 - -class name java/awt/font/ShapeGraphicAttribute -header extends java/awt/font/GraphicAttribute flags 31 -innerclass innerClass java/awt/geom/Rectangle2D$Float outerClass java/awt/geom/Rectangle2D innerClassName Float flags 9 - -class name java/awt/font/TextHitInfo -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/font/TextMeasurer -header extends java/lang/Object implements java/lang/Cloneable flags 31 -innerclass innerClass java/text/AttributedCharacterIterator$Attribute outerClass java/text/AttributedCharacterIterator innerClassName Attribute flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/geom/AffineTransform -header extends java/lang/Object implements java/lang/Cloneable,java/io/Serializable flags 21 -innerclass innerClass java/awt/geom/Point2D$Double outerClass java/awt/geom/Point2D innerClassName Double flags 9 -innerclass innerClass java/awt/geom/Point2D$Float outerClass java/awt/geom/Point2D innerClassName Float flags 9 -innerclass innerClass java/awt/geom/Path2D$Double outerClass java/awt/geom/Path2D innerClassName Double flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/geom/Area -header extends java/lang/Object implements java/awt/Shape,java/lang/Cloneable flags 21 -innerclass innerClass java/awt/geom/Rectangle2D$Double outerClass java/awt/geom/Rectangle2D innerClassName Double flags 9 - -class name java/awt/geom/Path2D -header extends java/lang/Object implements java/awt/Shape,java/lang/Cloneable nestMembers java/awt/geom/Path2D$Double,java/awt/geom/Path2D$Float sealed true flags 421 -innerclass innerClass java/awt/geom/Rectangle2D$Double outerClass java/awt/geom/Rectangle2D innerClassName Double flags 9 -innerclass innerClass java/awt/geom/Path2D$Double outerClass java/awt/geom/Path2D innerClassName Double flags 9 -innerclass innerClass java/awt/geom/Path2D$Float outerClass java/awt/geom/Path2D innerClassName Float flags 9 - -class name java/awt/geom/RectangularShape -header extends java/lang/Object implements java/awt/Shape,java/lang/Cloneable flags 421 -innerclass innerClass java/awt/geom/Rectangle2D$Double outerClass java/awt/geom/Rectangle2D innerClassName Double flags 9 - -class name java/awt/image/AbstractMultiResolutionImage -header extends java/awt/Image implements java/awt/image/MultiResolutionImage flags 421 - -class name java/awt/image/BandCombineOp -header extends java/lang/Object implements java/awt/image/RasterOp flags 21 -innerclass innerClass java/awt/geom/Point2D$Float outerClass java/awt/geom/Point2D innerClassName Float flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/BandedSampleModel -header extends java/awt/image/ComponentSampleModel flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/BaseMultiResolutionImage -header extends java/awt/image/AbstractMultiResolutionImage flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/BufferedImageFilter -header extends java/awt/image/ImageFilter implements java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/ByteLookupTable -header extends java/awt/image/LookupTable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/ColorConvertOp -header extends java/lang/Object implements java/awt/image/BufferedImageOp,java/awt/image/RasterOp flags 21 -innerclass innerClass java/awt/geom/Point2D$Float outerClass java/awt/geom/Point2D innerClassName Float flags 9 - -class name java/awt/image/ComponentColorModel -header extends java/awt/image/ColorModel flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/ComponentSampleModel -header extends java/awt/image/SampleModel flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/ConvolveOp -header extends java/lang/Object implements java/awt/image/BufferedImageOp,java/awt/image/RasterOp flags 21 -innerclass innerClass java/awt/geom/Point2D$Float outerClass java/awt/geom/Point2D innerClassName Float flags 9 - -class name java/awt/image/DataBufferUShort -header extends java/awt/image/DataBuffer flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/DirectColorModel -header extends java/awt/image/PackedColorModel flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/ImageFilter -header extends java/lang/Object implements java/awt/image/ImageConsumer,java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/IndexColorModel -header extends java/awt/image/ColorModel flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/Kernel -header extends java/lang/Object implements java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/LookupOp -header extends java/lang/Object implements java/awt/image/BufferedImageOp,java/awt/image/RasterOp flags 21 -innerclass innerClass java/awt/geom/Point2D$Float outerClass java/awt/geom/Point2D innerClassName Float flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/MultiPixelPackedSampleModel -header extends java/awt/image/SampleModel flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/MultiResolutionImage -header extends java/lang/Object flags 601 - -class name java/awt/image/PackedColorModel -header extends java/awt/image/ColorModel flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/Raster -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/ReplicateScaleFilter -header extends java/awt/image/ImageFilter flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/RescaleOp -header extends java/lang/Object implements java/awt/image/BufferedImageOp,java/awt/image/RasterOp flags 21 -innerclass innerClass java/awt/geom/Point2D$Float outerClass java/awt/geom/Point2D innerClassName Float flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/SampleModel -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/ShortLookupTable -header extends java/awt/image/LookupTable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/SinglePixelPackedSampleModel -header extends java/awt/image/SampleModel flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/print/Paper -header extends java/lang/Object implements java/lang/Cloneable flags 21 -innerclass innerClass java/awt/geom/Rectangle2D$Double outerClass java/awt/geom/Rectangle2D innerClassName Double flags 9 - -class name java/beans/BeanProperty -header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Documented;@Ljava/lang/annotation/Target;(value={eLjava/lang/annotation/ElementType;METHOD;})@Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;RUNTIME;) - -class name java/beans/Beans -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/beans/DefaultPersistenceDelegate -header extends java/beans/PersistenceDelegate flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/beans/Encoder -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/beans/EventSetDescriptor -header extends java/beans/FeatureDescriptor flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/beans/Expression -header extends java/beans/Statement flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/beans/FeatureDescriptor -header extends java/lang/Object flags 21 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 - -class name java/beans/IndexedPropertyDescriptor -header extends java/beans/PropertyDescriptor flags 21 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/beans/JavaBean -header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Documented;@Ljava/lang/annotation/Target;(value={eLjava/lang/annotation/ElementType;TYPE;})@Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;RUNTIME;) - -class name java/beans/PropertyDescriptor -header extends java/beans/FeatureDescriptor flags 21 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/beans/SimpleBeanInfo -header extends java/lang/Object implements java/beans/BeanInfo flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/accessibility/AccessibilityProvider -header extends java/lang/Object flags 421 - -class name javax/accessibility/AccessibleBundle -header extends java/lang/Object flags 421 classAnnotations @Ljdk/Profile+Annotation;(value=I4) - -class name javax/accessibility/AccessibleRelationSet -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/accessibility/AccessibleStateSet -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/imageio/metadata/IIOMetadata -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/imageio/plugins/jpeg/JPEGHuffmanTable -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/imageio/plugins/jpeg/JPEGQTable -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/imageio/plugins/tiff/TIFFDirectory -header extends java/lang/Object implements java/lang/Cloneable flags 21 - -class name javax/imageio/plugins/tiff/TIFFField -header extends java/lang/Object implements java/lang/Cloneable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/imageio/plugins/tiff/TIFFImageReadParam -header extends javax/imageio/ImageReadParam flags 31 - -class name javax/imageio/plugins/tiff/TIFFTag -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/imageio/plugins/tiff/TIFFTagSet -header extends java/lang/Object flags 21 - -class name javax/imageio/spi/ImageReaderWriterSpi -header extends javax/imageio/spi/IIOServiceProvider flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/print/attribute/DateTimeSyntax -header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/print/attribute/EnumSyntax -header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/print/attribute/IntegerSyntax -header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/print/attribute/standard/MediaPrintableArea -header extends java/lang/Object implements javax/print/attribute/DocAttribute,javax/print/attribute/PrintRequestAttribute,javax/print/attribute/PrintJobAttribute flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/print/event/PrintEvent -header extends java/util/EventObject flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sound/midi/MetaMessage -header extends javax/sound/midi/MidiMessage flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sound/midi/MidiMessage -header extends java/lang/Object implements java/lang/Cloneable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sound/midi/Sequence -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sound/midi/ShortMessage -header extends javax/sound/midi/MidiMessage flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sound/midi/SysexMessage -header extends javax/sound/midi/MidiMessage flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sound/sampled/ReverbType -header extends java/lang/Object flags 21 classAnnotations @Ljdk/Profile+Annotation;(value=I4) - -class name javax/sound/sampled/spi/FormatConversionProvider -header extends java/lang/Object flags 421 -innerclass innerClass javax/sound/sampled/AudioFormat$Encoding outerClass javax/sound/sampled/AudioFormat innerClassName Encoding flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/BoxLayout -header extends java/lang/Object implements java/awt/LayoutManager2,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/DebugGraphics -header extends java/awt/Graphics flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/DefaultBoundedRangeModel -header extends java/lang/Object implements javax/swing/BoundedRangeModel,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/DefaultListSelectionModel -header extends java/lang/Object implements javax/swing/ListSelectionModel,java/lang/Cloneable,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/GrayFilter -header extends java/awt/image/RGBImageFilter flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/GroupLayout$Group -header extends javax/swing/GroupLayout$Spring nestHost javax/swing/GroupLayout sealed true flags 421 -innerclass innerClass javax/swing/GroupLayout$Group outerClass javax/swing/GroupLayout innerClassName Group flags 401 -innerclass innerClass javax/swing/GroupLayout$Spring outerClass javax/swing/GroupLayout innerClassName Spring flags 40a -innerclass innerClass javax/swing/GroupLayout$ParallelGroup outerClass javax/swing/GroupLayout innerClassName ParallelGroup flags 1 -innerclass innerClass javax/swing/GroupLayout$SequentialGroup outerClass javax/swing/GroupLayout innerClassName SequentialGroup flags 11 - -class name javax/swing/GroupLayout$ParallelGroup -header extends javax/swing/GroupLayout$Group nestHost javax/swing/GroupLayout sealed true flags 21 -innerclass innerClass javax/swing/GroupLayout$ParallelGroup outerClass javax/swing/GroupLayout innerClassName ParallelGroup flags 1 -innerclass innerClass javax/swing/GroupLayout$Group outerClass javax/swing/GroupLayout innerClassName Group flags 401 -innerclass innerClass javax/swing/GroupLayout$Alignment outerClass javax/swing/GroupLayout innerClassName Alignment flags 4019 -innerclass innerClass javax/swing/GroupLayout$Spring outerClass javax/swing/GroupLayout innerClassName Spring flags 40a - class name javax/swing/JList -method name setLayoutOrientation descriptor (I)V method name setLayoutOrientation descriptor (I)V flags 1 runtimeAnnotations @Ljava/beans/BeanProperty;(visualUpdate=Ztrue,enumerationValues={"JList.VERTICAL""JList.HORIZONTAL_WRAP""JList.VERTICAL_WRAP"},description="Defines\u005C;u0020;the\u005C;u0020;way\u005C;u0020;list\u005C;u0020;cells\u005C;u0020;are\u005C;u0020;laid\u005C;u0020;out.") -class name javax/swing/JList$AccessibleJList$AccessibleJListChild --method name getAccessibleAction descriptor ()Ljavax/accessibility/AccessibleAction; -method name getAccessibleAction descriptor ()Ljavax/accessibility/AccessibleAction; flags 1 - -class name javax/swing/JTextPane -header extends javax/swing/JEditorPane flags 21 runtimeAnnotations @Ljava/beans/JavaBean;(description="A\u005C;u0020;text\u005C;u0020;component\u005C;u0020;that\u005C;u0020;can\u005C;u0020;be\u005C;u0020;marked\u005C;u0020;up\u005C;u0020;with\u005C;u0020;attributes\u005C;u0020;that\u005C;u0020;are\u005C;u0020;graphically\u005C;u0020;represented.")@Ljavax/swing/SwingContainer; - -class name javax/swing/LookAndFeel -header extends java/lang/Object flags 421 -innerclass innerClass javax/swing/text/JTextComponent$KeyBinding outerClass javax/swing/text/JTextComponent innerClassName KeyBinding flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/MenuSelectionManager -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/SizeRequirements -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 - -class name javax/swing/SortingFocusTraversalPolicy -header extends javax/swing/InternalFrameFocusTraversalPolicy flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/SwingContainer -header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Target;(value={eLjava/lang/annotation/ElementType;TYPE;})@Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;RUNTIME;) - -class name javax/swing/UIClientPropertyKey -header extends java/lang/Object flags 601 - -class name javax/swing/border/LineBorder -header extends javax/swing/border/AbstractBorder flags 21 -innerclass innerClass java/awt/geom/RoundRectangle2D$Float outerClass java/awt/geom/RoundRectangle2D innerClassName Float flags 9 -innerclass innerClass java/awt/geom/Rectangle2D$Float outerClass java/awt/geom/Rectangle2D innerClassName Float flags 9 -innerclass innerClass java/awt/geom/Path2D$Float outerClass java/awt/geom/Path2D innerClassName Float flags 9 - -class name javax/swing/event/EventListenerList -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 - -class name javax/swing/event/ListDataEvent -header extends java/util/EventObject flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/event/ListSelectionEvent -header extends java/util/EventObject flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/event/TreeModelEvent -header extends java/util/EventObject flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/filechooser/FileNameExtensionFilter -header extends javax/swing/filechooser/FileFilter flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/basic/BasicArrowButton -header extends javax/swing/JButton implements javax/swing/SwingConstants flags 21 -innerclass innerClass java/awt/geom/Path2D$Double outerClass java/awt/geom/Path2D innerClassName Double flags 9 - -class name javax/swing/plaf/basic/BasicButtonUI -header extends javax/swing/plaf/ButtonUI flags 21 -innerclass innerClass java/awt/Component$BaselineResizeBehavior outerClass java/awt/Component innerClassName BaselineResizeBehavior flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/basic/BasicPasswordFieldUI -header extends javax/swing/plaf/basic/BasicTextFieldUI flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/basic/BasicSplitPaneUI$BasicHorizontalLayoutManager -header extends java/lang/Object implements java/awt/LayoutManager2 nestHost javax/swing/plaf/basic/BasicSplitPaneUI sealed true flags 21 -innerclass innerClass javax/swing/plaf/basic/BasicSplitPaneUI$BasicHorizontalLayoutManager outerClass javax/swing/plaf/basic/BasicSplitPaneUI innerClassName BasicHorizontalLayoutManager flags 1 -innerclass innerClass javax/swing/plaf/basic/BasicSplitPaneUI$BasicVerticalLayoutManager outerClass javax/swing/plaf/basic/BasicSplitPaneUI innerClassName BasicVerticalLayoutManager flags 1 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/basic/BasicToolBarSeparatorUI -header extends javax/swing/plaf/basic/BasicSeparatorUI flags 21 -innerclass innerClass javax/swing/JToolBar$Separator outerClass javax/swing/JToolBar innerClassName Separator flags 9 - -class name javax/swing/plaf/metal/MetalButtonUI -header extends javax/swing/plaf/basic/BasicButtonUI flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/metal/MetalCheckBoxUI -header extends javax/swing/plaf/metal/MetalRadioButtonUI flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/metal/MetalRadioButtonUI -header extends javax/swing/plaf/basic/BasicRadioButtonUI flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/metal/MetalToggleButtonUI -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 - -class name javax/swing/plaf/metal/MetalToolTipUI -header extends javax/swing/plaf/basic/BasicToolTipUI flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/multi/MultiLookAndFeel -header extends javax/swing/LookAndFeel flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/synth/SynthButtonUI -header extends javax/swing/plaf/basic/BasicButtonUI implements java/beans/PropertyChangeListener,javax/swing/plaf/synth/SynthUI flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/synth/SynthIcon -header extends java/lang/Object implements javax/swing/Icon flags 601 - -class name javax/swing/plaf/synth/SynthMenuItemUI -header extends javax/swing/plaf/basic/BasicMenuItemUI implements java/beans/PropertyChangeListener,javax/swing/plaf/synth/SynthUI flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/synth/SynthMenuUI -header extends javax/swing/plaf/basic/BasicMenuUI implements java/beans/PropertyChangeListener,javax/swing/plaf/synth/SynthUI flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name javax/swing/plaf/synth/SynthPasswordFieldUI header extends javax/swing/plaf/synth/SynthTextFieldUI flags 21 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 method name installDefaults descriptor ()V flags 4 -class name javax/swing/plaf/synth/SynthSeparatorUI -header extends javax/swing/plaf/SeparatorUI implements java/beans/PropertyChangeListener,javax/swing/plaf/synth/SynthUI flags 21 -innerclass innerClass javax/swing/JToolBar$Separator outerClass javax/swing/JToolBar innerClassName Separator flags 9 - -class name javax/swing/plaf/synth/SynthStyle -header extends java/lang/Object flags 421 -innerclass innerClass javax/swing/UIDefaults$LazyInputMap outerClass javax/swing/UIDefaults innerClassName LazyInputMap flags 9 -innerclass innerClass javax/swing/UIDefaults$LazyValue outerClass javax/swing/UIDefaults innerClassName LazyValue flags 609 - -class name javax/swing/table/AbstractTableModel -header extends java/lang/Object implements javax/swing/table/TableModel,java/io/Serializable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/AbstractWriter -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/BoxView -header extends javax/swing/text/CompositeView flags 21 -innerclass innerClass javax/swing/event/DocumentEvent$ElementChange outerClass javax/swing/event/DocumentEvent innerClassName ElementChange flags 609 -innerclass innerClass javax/swing/text/Position$Bias outerClass javax/swing/text/Position innerClassName Bias flags 19 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/CompositeView -header extends javax/swing/text/View flags 421 -innerclass innerClass javax/swing/text/Position$Bias outerClass javax/swing/text/Position innerClassName Bias flags 19 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/DateFormatter -header extends javax/swing/text/InternationalFormatter flags 21 -innerclass innerClass java/text/DateFormat$Field outerClass java/text/DateFormat innerClassName Field flags 9 - class name javax/swing/text/DefaultEditorKit field name beginLineUpAction descriptor Ljava/lang/String; constantValue caret-begin-line-and-up flags 19 field name endLineDownAction descriptor Ljava/lang/String; constantValue caret-end-line-and-down flags 19 -class name javax/swing/text/IconView -header extends javax/swing/text/View flags 21 -innerclass innerClass javax/swing/text/Position$Bias outerClass javax/swing/text/Position innerClassName Bias flags 19 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/LayoutQueue -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/NumberFormatter -header extends javax/swing/text/InternationalFormatter flags 21 -innerclass innerClass java/text/NumberFormat$Field outerClass java/text/NumberFormat innerClassName Field flags 9 -innerclass innerClass javax/swing/text/DocumentFilter$FilterBypass outerClass javax/swing/text/DocumentFilter innerClassName FilterBypass flags 409 -innerclass innerClass java/text/AttributedCharacterIterator$Attribute outerClass java/text/AttributedCharacterIterator innerClassName Attribute flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/Segment -header extends java/lang/Object implements java/lang/Cloneable,java/text/CharacterIterator,java/lang/CharSequence flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/StyleConstants -header extends java/lang/Object nestMembers javax/swing/text/StyleConstants$FontConstants,javax/swing/text/StyleConstants$ColorConstants,javax/swing/text/StyleConstants$CharacterConstants,javax/swing/text/StyleConstants$ParagraphConstants sealed true flags 21 -innerclass innerClass javax/swing/text/StyleConstants$CharacterConstants outerClass javax/swing/text/StyleConstants innerClassName CharacterConstants flags 19 -innerclass innerClass javax/swing/text/StyleConstants$FontConstants outerClass javax/swing/text/StyleConstants innerClassName FontConstants flags 19 -innerclass innerClass javax/swing/text/StyleConstants$ColorConstants outerClass javax/swing/text/StyleConstants innerClassName ColorConstants flags 19 -innerclass innerClass javax/swing/text/StyleConstants$ParagraphConstants outerClass javax/swing/text/StyleConstants innerClassName ParagraphConstants flags 19 - -class name javax/swing/text/TabSet -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 - -class name javax/swing/text/TabStop -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 - -class name javax/swing/text/View -header extends java/lang/Object implements javax/swing/SwingConstants flags 421 -innerclass innerClass javax/swing/text/Position$Bias outerClass javax/swing/text/Position innerClassName Bias flags 19 -innerclass innerClass javax/swing/event/DocumentEvent$ElementChange outerClass javax/swing/event/DocumentEvent innerClassName ElementChange flags 609 -innerclass innerClass javax/swing/event/DocumentEvent$EventType outerClass javax/swing/event/DocumentEvent innerClassName EventType flags 19 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/html/InlineView -header extends javax/swing/text/LabelView flags 21 -innerclass innerClass javax/swing/text/html/CSS$Attribute outerClass javax/swing/text/html/CSS innerClassName Attribute flags 19 - -class name javax/swing/text/html/ObjectView -header extends javax/swing/text/ComponentView flags 21 -innerclass innerClass javax/swing/text/html/HTML$Attribute outerClass javax/swing/text/html/HTML innerClassName Attribute flags 19 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/html/Option -header extends java/lang/Object implements java/io/Serializable flags 21 -innerclass innerClass javax/swing/text/html/HTML$Attribute outerClass javax/swing/text/html/HTML innerClassName Attribute flags 19 - -class name javax/swing/text/html/parser/ContentModel -header extends java/lang/Object implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/html/parser/DocumentParser -header extends javax/swing/text/html/parser/Parser flags 21 -innerclass innerClass javax/swing/text/html/HTMLEditorKit$ParserCallback outerClass javax/swing/text/html/HTMLEditorKit innerClassName ParserCallback flags 9 -innerclass innerClass javax/swing/text/html/HTML$Tag outerClass javax/swing/text/html/HTML innerClassName Tag flags 9 -innerclass innerClass javax/swing/text/html/HTML$Attribute outerClass javax/swing/text/html/HTML innerClassName Attribute flags 19 - -class name javax/swing/text/html/parser/Parser -header extends java/lang/Object implements javax/swing/text/html/parser/DTDConstants flags 21 -innerclass innerClass javax/swing/text/html/HTML$Attribute outerClass javax/swing/text/html/HTML innerClassName Attribute flags 19 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/html/parser/TagElement -header extends java/lang/Object flags 21 -innerclass innerClass javax/swing/text/html/HTML$Tag outerClass javax/swing/text/html/HTML innerClassName Tag flags 9 -innerclass innerClass javax/swing/text/html/HTML$UnknownTag outerClass javax/swing/text/html/HTML innerClassName UnknownTag flags 9 - -class name javax/swing/tree/DefaultTreeModel -header extends java/lang/Object implements java/io/Serializable,javax/swing/tree/TreeModel flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 - -class name javax/swing/tree/DefaultTreeSelectionModel -header extends java/lang/Object implements java/lang/Cloneable,java/io/Serializable,javax/swing/tree/TreeSelectionModel flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/tree/TreePath -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 - -class name javax/swing/undo/AbstractUndoableEdit -header extends java/lang/Object implements javax/swing/undo/UndoableEdit,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/undo/CompoundEdit -header extends javax/swing/undo/AbstractUndoableEdit flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/undo/UndoableEditSupport -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.desktop-L.sym.txt b/src/jdk.compiler/share/data/symbols/java.desktop-L.sym.txt index b6a1274c0f8a9..808c6035afd30 100644 --- a/src/jdk.compiler/share/data/symbols/java.desktop-L.sym.txt +++ b/src/jdk.compiler/share/data/symbols/java.desktop-L.sym.txt @@ -26,616 +26,6 @@ # ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ### # ########################################################## # -class name java/awt/AWTKeyStroke -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 - -class name java/awt/AttributeValue -header extends java/lang/Object flags 420 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/BorderLayout -header extends java/lang/Object implements java/awt/LayoutManager2,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/CheckboxGroup -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 - -class name java/awt/Color -header extends java/lang/Object implements java/awt/Paint,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/ContainerOrderFocusTraversalPolicy -header extends java/awt/FocusTraversalPolicy implements java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/Dimension -header extends java/awt/geom/Dimension2D implements java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/DisplayMode -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/Event -header extends java/lang/Object implements java/io/Serializable flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="9") -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/FlowLayout -header extends java/lang/Object implements java/awt/LayoutManager,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/FontMetrics -header extends java/lang/Object implements java/io/Serializable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/Graphics -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/GridLayout -header extends java/lang/Object implements java/awt/LayoutManager,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/HeadlessException -header extends java/lang/UnsupportedOperationException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/Insets -header extends java/lang/Object implements java/lang/Cloneable,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/MenuShortcut -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 - -class name java/awt/MultipleGradientPaint -header extends java/lang/Object implements java/awt/Paint nestMembers java/awt/MultipleGradientPaint$ColorSpaceType,java/awt/MultipleGradientPaint$CycleMethod sealed true flags 421 -innerclass innerClass java/awt/MultipleGradientPaint$ColorSpaceType outerClass java/awt/MultipleGradientPaint innerClassName ColorSpaceType flags 4019 -innerclass innerClass java/awt/MultipleGradientPaint$CycleMethod outerClass java/awt/MultipleGradientPaint innerClassName CycleMethod flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/Point -header extends java/awt/geom/Point2D implements java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/Rectangle -header extends java/awt/geom/Rectangle2D implements java/awt/Shape,java/io/Serializable flags 21 -innerclass innerClass java/awt/geom/Rectangle2D$Double outerClass java/awt/geom/Rectangle2D innerClassName Double flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/SystemColor -header extends java/awt/Color implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/TextComponent -header extends java/awt/Component implements javax/accessibility/Accessible nestMembers java/awt/TextComponent$AccessibleAWTTextComponent sealed true flags 21 -innerclass innerClass java/awt/TextComponent$AccessibleAWTTextComponent outerClass java/awt/TextComponent innerClassName AccessibleAWTTextComponent flags 4 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/TexturePaint -header extends java/lang/Object implements java/awt/Paint flags 21 -innerclass innerClass java/awt/geom/Rectangle2D$Double outerClass java/awt/geom/Rectangle2D innerClassName Double flags 9 - -class name java/awt/color/ColorSpace -header extends java/lang/Object implements java/io/Serializable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/color/ICC_ColorSpace -header extends java/awt/color/ColorSpace flags 21 classAnnotations @Ljdk/Profile+Annotation;(value=I4) - -class name java/awt/color/ICC_Profile -header extends java/lang/Object implements java/io/Serializable sealed true flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/desktop/AboutEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/AboutHandler -header extends java/lang/Object flags 601 - -class name java/awt/desktop/AppEvent -header extends java/util/EventObject sealed true flags 21 - -class name java/awt/desktop/AppForegroundEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/AppForegroundListener -header extends java/lang/Object implements java/awt/desktop/SystemEventListener flags 601 - -class name java/awt/desktop/AppHiddenEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/AppHiddenListener -header extends java/lang/Object implements java/awt/desktop/SystemEventListener flags 601 - -class name java/awt/desktop/AppReopenedEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/AppReopenedListener -header extends java/lang/Object implements java/awt/desktop/SystemEventListener flags 601 - -class name java/awt/desktop/FilesEvent -header extends java/awt/desktop/AppEvent sealed true flags 21 - -class name java/awt/desktop/OpenFilesEvent -header extends java/awt/desktop/FilesEvent flags 31 - -class name java/awt/desktop/OpenFilesHandler -header extends java/lang/Object flags 601 - -class name java/awt/desktop/OpenURIEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/OpenURIHandler -header extends java/lang/Object flags 601 - -class name java/awt/desktop/PreferencesEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/PreferencesHandler -header extends java/lang/Object flags 601 - -class name java/awt/desktop/PrintFilesEvent -header extends java/awt/desktop/FilesEvent flags 31 - -class name java/awt/desktop/PrintFilesHandler -header extends java/lang/Object flags 601 - -class name java/awt/desktop/QuitEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/QuitHandler -header extends java/lang/Object flags 601 - -class name java/awt/desktop/QuitResponse -header extends java/lang/Object flags 601 - -class name java/awt/desktop/QuitStrategy -header extends java/lang/Enum flags 4031 signature Ljava/lang/Enum; - -class name java/awt/desktop/ScreenSleepEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/ScreenSleepListener -header extends java/lang/Object implements java/awt/desktop/SystemEventListener flags 601 - -class name java/awt/desktop/SystemEventListener -header extends java/lang/Object implements java/util/EventListener flags 601 - -class name java/awt/desktop/SystemSleepEvent -header extends java/awt/desktop/AppEvent flags 31 - -class name java/awt/desktop/SystemSleepListener -header extends java/lang/Object implements java/awt/desktop/SystemEventListener flags 601 - -class name java/awt/desktop/UserSessionListener -header extends java/lang/Object implements java/awt/desktop/SystemEventListener flags 601 - -class name java/awt/dnd/DragGestureEvent -header extends java/util/EventObject flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 - -class name java/awt/dnd/DragGestureRecognizer -header extends java/lang/Object implements java/io/Serializable flags 421 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 - -class name java/awt/dnd/DragSource -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 - -class name java/awt/dnd/DropTargetDragEvent -header extends java/awt/dnd/DropTargetEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/dnd/DropTargetDropEvent -header extends java/awt/dnd/DropTargetEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/ActionEvent -header extends java/awt/AWTEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/AdjustmentEvent -header extends java/awt/AWTEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/ComponentEvent -header extends java/awt/AWTEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/ContainerEvent -header extends java/awt/event/ComponentEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/HierarchyEvent -header extends java/awt/AWTEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/InputEvent -header extends java/awt/event/ComponentEvent sealed true flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/InputMethodEvent -header extends java/awt/AWTEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/ItemEvent -header extends java/awt/AWTEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/MouseWheelEvent -header extends java/awt/event/MouseEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/PaintEvent -header extends java/awt/event/ComponentEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/event/WindowEvent -header extends java/awt/event/ComponentEvent flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/font/FontRenderContext -header extends java/lang/Object flags 21 -innerclass innerClass java/awt/RenderingHints$Key outerClass java/awt/RenderingHints innerClassName Key flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/font/GraphicAttribute -header extends java/lang/Object flags 421 -innerclass innerClass java/awt/geom/Rectangle2D$Float outerClass java/awt/geom/Rectangle2D innerClassName Float flags 9 - -class name java/awt/font/ImageGraphicAttribute -header extends java/awt/font/GraphicAttribute flags 31 -innerclass innerClass java/awt/geom/Rectangle2D$Float outerClass java/awt/geom/Rectangle2D innerClassName Float flags 9 - -class name java/awt/font/NumericShaper$Range -header extends java/lang/Enum nestHost java/awt/font/NumericShaper sealed true flags 4021 signature Ljava/lang/Enum; -innerclass innerClass java/awt/font/NumericShaper$Range outerClass java/awt/font/NumericShaper innerClassName Range flags 4009 - -class name java/awt/font/ShapeGraphicAttribute -header extends java/awt/font/GraphicAttribute flags 31 -innerclass innerClass java/awt/geom/Rectangle2D$Float outerClass java/awt/geom/Rectangle2D innerClassName Float flags 9 - -class name java/awt/font/TextHitInfo -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/font/TextMeasurer -header extends java/lang/Object implements java/lang/Cloneable flags 31 -innerclass innerClass java/text/AttributedCharacterIterator$Attribute outerClass java/text/AttributedCharacterIterator innerClassName Attribute flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/geom/AffineTransform -header extends java/lang/Object implements java/lang/Cloneable,java/io/Serializable flags 21 -innerclass innerClass java/awt/geom/Point2D$Double outerClass java/awt/geom/Point2D innerClassName Double flags 9 -innerclass innerClass java/awt/geom/Point2D$Float outerClass java/awt/geom/Point2D innerClassName Float flags 9 -innerclass innerClass java/awt/geom/Path2D$Double outerClass java/awt/geom/Path2D innerClassName Double flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/geom/Area -header extends java/lang/Object implements java/awt/Shape,java/lang/Cloneable flags 21 -innerclass innerClass java/awt/geom/Rectangle2D$Double outerClass java/awt/geom/Rectangle2D innerClassName Double flags 9 - -class name java/awt/geom/Path2D -header extends java/lang/Object implements java/awt/Shape,java/lang/Cloneable nestMembers java/awt/geom/Path2D$Double,java/awt/geom/Path2D$Float sealed true flags 421 -innerclass innerClass java/awt/geom/Rectangle2D$Double outerClass java/awt/geom/Rectangle2D innerClassName Double flags 9 -innerclass innerClass java/awt/geom/Path2D$Double outerClass java/awt/geom/Path2D innerClassName Double flags 9 -innerclass innerClass java/awt/geom/Path2D$Float outerClass java/awt/geom/Path2D innerClassName Float flags 9 - -class name java/awt/geom/RectangularShape -header extends java/lang/Object implements java/awt/Shape,java/lang/Cloneable flags 421 -innerclass innerClass java/awt/geom/Rectangle2D$Double outerClass java/awt/geom/Rectangle2D innerClassName Double flags 9 - -class name java/awt/image/AbstractMultiResolutionImage -header extends java/awt/Image implements java/awt/image/MultiResolutionImage flags 421 - -class name java/awt/image/BandCombineOp -header extends java/lang/Object implements java/awt/image/RasterOp flags 21 -innerclass innerClass java/awt/geom/Point2D$Float outerClass java/awt/geom/Point2D innerClassName Float flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/BandedSampleModel -header extends java/awt/image/ComponentSampleModel flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/BaseMultiResolutionImage -header extends java/awt/image/AbstractMultiResolutionImage flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/BufferedImageFilter -header extends java/awt/image/ImageFilter implements java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/ByteLookupTable -header extends java/awt/image/LookupTable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/ColorConvertOp -header extends java/lang/Object implements java/awt/image/BufferedImageOp,java/awt/image/RasterOp flags 21 -innerclass innerClass java/awt/geom/Point2D$Float outerClass java/awt/geom/Point2D innerClassName Float flags 9 - -class name java/awt/image/ComponentColorModel -header extends java/awt/image/ColorModel flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/ComponentSampleModel -header extends java/awt/image/SampleModel flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/ConvolveOp -header extends java/lang/Object implements java/awt/image/BufferedImageOp,java/awt/image/RasterOp flags 21 -innerclass innerClass java/awt/geom/Point2D$Float outerClass java/awt/geom/Point2D innerClassName Float flags 9 - -class name java/awt/image/DataBufferUShort -header extends java/awt/image/DataBuffer flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/DirectColorModel -header extends java/awt/image/PackedColorModel flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/ImageFilter -header extends java/lang/Object implements java/awt/image/ImageConsumer,java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/IndexColorModel -header extends java/awt/image/ColorModel flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/Kernel -header extends java/lang/Object implements java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/LookupOp -header extends java/lang/Object implements java/awt/image/BufferedImageOp,java/awt/image/RasterOp flags 21 -innerclass innerClass java/awt/geom/Point2D$Float outerClass java/awt/geom/Point2D innerClassName Float flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/MultiPixelPackedSampleModel -header extends java/awt/image/SampleModel flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/MultiResolutionImage -header extends java/lang/Object flags 601 - -class name java/awt/image/PackedColorModel -header extends java/awt/image/ColorModel flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/Raster -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/ReplicateScaleFilter -header extends java/awt/image/ImageFilter flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/RescaleOp -header extends java/lang/Object implements java/awt/image/BufferedImageOp,java/awt/image/RasterOp flags 21 -innerclass innerClass java/awt/geom/Point2D$Float outerClass java/awt/geom/Point2D innerClassName Float flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/SampleModel -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/ShortLookupTable -header extends java/awt/image/LookupTable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/image/SinglePixelPackedSampleModel -header extends java/awt/image/SampleModel flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/awt/print/Paper -header extends java/lang/Object implements java/lang/Cloneable flags 21 -innerclass innerClass java/awt/geom/Rectangle2D$Double outerClass java/awt/geom/Rectangle2D innerClassName Double flags 9 - -class name java/beans/BeanProperty -header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Documented;@Ljava/lang/annotation/Target;(value={eLjava/lang/annotation/ElementType;METHOD;})@Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;RUNTIME;) - -class name java/beans/Beans -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/beans/DefaultPersistenceDelegate -header extends java/beans/PersistenceDelegate flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/beans/Encoder -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/beans/EventSetDescriptor -header extends java/beans/FeatureDescriptor flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/beans/Expression -header extends java/beans/Statement flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/beans/FeatureDescriptor -header extends java/lang/Object flags 21 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 - -class name java/beans/IndexedPropertyDescriptor -header extends java/beans/PropertyDescriptor flags 21 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/beans/JavaBean -header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Documented;@Ljava/lang/annotation/Target;(value={eLjava/lang/annotation/ElementType;TYPE;})@Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;RUNTIME;) - -class name java/beans/PropertyDescriptor -header extends java/beans/FeatureDescriptor flags 21 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/beans/SimpleBeanInfo -header extends java/lang/Object implements java/beans/BeanInfo flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/accessibility/AccessibilityProvider -header extends java/lang/Object flags 421 - -class name javax/accessibility/AccessibleBundle -header extends java/lang/Object flags 421 classAnnotations @Ljdk/Profile+Annotation;(value=I4) - -class name javax/accessibility/AccessibleRelationSet -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/accessibility/AccessibleStateSet -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/imageio/metadata/IIOMetadata -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/imageio/plugins/jpeg/JPEGHuffmanTable -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/imageio/plugins/jpeg/JPEGQTable -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/imageio/plugins/tiff/TIFFDirectory -header extends java/lang/Object implements java/lang/Cloneable flags 21 - -class name javax/imageio/plugins/tiff/TIFFField -header extends java/lang/Object implements java/lang/Cloneable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/imageio/plugins/tiff/TIFFImageReadParam -header extends javax/imageio/ImageReadParam flags 31 - -class name javax/imageio/plugins/tiff/TIFFTag -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/imageio/plugins/tiff/TIFFTagSet -header extends java/lang/Object flags 21 - -class name javax/imageio/spi/ImageReaderWriterSpi -header extends javax/imageio/spi/IIOServiceProvider flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/print/attribute/DateTimeSyntax -header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/print/attribute/EnumSyntax -header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/print/attribute/IntegerSyntax -header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/print/attribute/standard/MediaPrintableArea -header extends java/lang/Object implements javax/print/attribute/DocAttribute,javax/print/attribute/PrintRequestAttribute,javax/print/attribute/PrintJobAttribute flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/print/event/PrintEvent -header extends java/util/EventObject flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sound/midi/MetaMessage -header extends javax/sound/midi/MidiMessage flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sound/midi/MidiMessage -header extends java/lang/Object implements java/lang/Cloneable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sound/midi/Sequence -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sound/midi/ShortMessage -header extends javax/sound/midi/MidiMessage flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sound/midi/SysexMessage -header extends javax/sound/midi/MidiMessage flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sound/sampled/ReverbType -header extends java/lang/Object flags 21 classAnnotations @Ljdk/Profile+Annotation;(value=I4) - -class name javax/sound/sampled/spi/FormatConversionProvider -header extends java/lang/Object flags 421 -innerclass innerClass javax/sound/sampled/AudioFormat$Encoding outerClass javax/sound/sampled/AudioFormat innerClassName Encoding flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/BoxLayout -header extends java/lang/Object implements java/awt/LayoutManager2,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/DebugGraphics -header extends java/awt/Graphics flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/DefaultBoundedRangeModel -header extends java/lang/Object implements javax/swing/BoundedRangeModel,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/DefaultListSelectionModel -header extends java/lang/Object implements javax/swing/ListSelectionModel,java/lang/Cloneable,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/GrayFilter -header extends java/awt/image/RGBImageFilter flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/GroupLayout$Group -header extends javax/swing/GroupLayout$Spring nestHost javax/swing/GroupLayout sealed true flags 421 -innerclass innerClass javax/swing/GroupLayout$Group outerClass javax/swing/GroupLayout innerClassName Group flags 401 -innerclass innerClass javax/swing/GroupLayout$Spring outerClass javax/swing/GroupLayout innerClassName Spring flags 40a -innerclass innerClass javax/swing/GroupLayout$ParallelGroup outerClass javax/swing/GroupLayout innerClassName ParallelGroup flags 1 -innerclass innerClass javax/swing/GroupLayout$SequentialGroup outerClass javax/swing/GroupLayout innerClassName SequentialGroup flags 11 - -class name javax/swing/GroupLayout$ParallelGroup -header extends javax/swing/GroupLayout$Group nestHost javax/swing/GroupLayout sealed true flags 21 -innerclass innerClass javax/swing/GroupLayout$ParallelGroup outerClass javax/swing/GroupLayout innerClassName ParallelGroup flags 1 -innerclass innerClass javax/swing/GroupLayout$Group outerClass javax/swing/GroupLayout innerClassName Group flags 401 -innerclass innerClass javax/swing/GroupLayout$Alignment outerClass javax/swing/GroupLayout innerClassName Alignment flags 4019 -innerclass innerClass javax/swing/GroupLayout$Spring outerClass javax/swing/GroupLayout innerClassName Spring flags 40a - -class name javax/swing/JList$AccessibleJList$AccessibleJListChild --method name getAccessibleAction descriptor ()Ljavax/accessibility/AccessibleAction; -method name getAccessibleAction descriptor ()Ljavax/accessibility/AccessibleAction; flags 1 - -class name javax/swing/JTextPane -header extends javax/swing/JEditorPane flags 21 runtimeAnnotations @Ljava/beans/JavaBean;(description="A\u005C;u0020;text\u005C;u0020;component\u005C;u0020;that\u005C;u0020;can\u005C;u0020;be\u005C;u0020;marked\u005C;u0020;up\u005C;u0020;with\u005C;u0020;attributes\u005C;u0020;that\u005C;u0020;are\u005C;u0020;graphically\u005C;u0020;represented.")@Ljavax/swing/SwingContainer; - -class name javax/swing/LookAndFeel -header extends java/lang/Object flags 421 -innerclass innerClass javax/swing/text/JTextComponent$KeyBinding outerClass javax/swing/text/JTextComponent innerClassName KeyBinding flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/MenuSelectionManager -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/SizeRequirements -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 - -class name javax/swing/SortingFocusTraversalPolicy -header extends javax/swing/InternalFrameFocusTraversalPolicy flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/SwingContainer -header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Target;(value={eLjava/lang/annotation/ElementType;TYPE;})@Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;RUNTIME;) - -class name javax/swing/UIClientPropertyKey -header extends java/lang/Object flags 601 - class name javax/swing/border/EtchedBorder header extends javax/swing/border/AbstractBorder flags 21 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 @@ -647,40 +37,11 @@ innerclass innerClass java/awt/geom/Rectangle2D$Float outerClass java/awt/geom/R innerclass innerClass java/awt/geom/Path2D$Float outerClass java/awt/geom/Path2D innerClassName Float flags 9 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -class name javax/swing/event/EventListenerList -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 - -class name javax/swing/event/ListDataEvent -header extends java/util/EventObject flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/event/ListSelectionEvent -header extends java/util/EventObject flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/event/TreeModelEvent -header extends java/util/EventObject flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/filechooser/FileNameExtensionFilter -header extends javax/swing/filechooser/FileFilter flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/basic/BasicArrowButton -header extends javax/swing/JButton implements javax/swing/SwingConstants flags 21 -innerclass innerClass java/awt/geom/Path2D$Double outerClass java/awt/geom/Path2D innerClassName Double flags 9 - class name javax/swing/plaf/basic/BasicButtonListener header extends java/lang/Object implements java/awt/event/MouseListener,java/awt/event/MouseMotionListener,java/awt/event/FocusListener,javax/swing/event/ChangeListener,java/beans/PropertyChangeListener flags 21 innerclass innerClass java/awt/event/FocusEvent$Cause outerClass java/awt/event/FocusEvent innerClassName Cause flags 4019 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -class name javax/swing/plaf/basic/BasicButtonUI -header extends javax/swing/plaf/ButtonUI flags 21 -innerclass innerClass java/awt/Component$BaselineResizeBehavior outerClass java/awt/Component innerClassName BaselineResizeBehavior flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name javax/swing/plaf/basic/BasicComboPopup header extends javax/swing/JPopupMenu implements javax/swing/plaf/basic/ComboPopup nestMembers javax/swing/plaf/basic/BasicComboPopup$PropertyChangeHandler,javax/swing/plaf/basic/BasicComboPopup$ItemHandler,javax/swing/plaf/basic/BasicComboPopup$ListMouseMotionHandler,javax/swing/plaf/basic/BasicComboPopup$ListMouseHandler,javax/swing/plaf/basic/BasicComboPopup$ListDataHandler,javax/swing/plaf/basic/BasicComboPopup$ListSelectionHandler,javax/swing/plaf/basic/BasicComboPopup$InvocationKeyHandler,javax/swing/plaf/basic/BasicComboPopup$InvocationMouseMotionHandler,javax/swing/plaf/basic/BasicComboPopup$InvocationMouseHandler flags 21 innerclass innerClass java/awt/event/FocusEvent$Cause outerClass java/awt/event/FocusEvent innerClassName Cause flags 4019 @@ -694,10 +55,6 @@ innerclass innerClass javax/swing/plaf/basic/BasicComboPopup$InvocationKeyHandle innerclass innerClass javax/swing/plaf/basic/BasicComboPopup$InvocationMouseMotionHandler outerClass javax/swing/plaf/basic/BasicComboPopup innerClassName InvocationMouseMotionHandler flags 4 innerclass innerClass javax/swing/plaf/basic/BasicComboPopup$InvocationMouseHandler outerClass javax/swing/plaf/basic/BasicComboPopup innerClassName InvocationMouseHandler flags 4 -class name javax/swing/plaf/basic/BasicPasswordFieldUI -header extends javax/swing/plaf/basic/BasicTextFieldUI flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name javax/swing/plaf/basic/BasicScrollBarUI$ArrowButtonListener header extends java/awt/event/MouseAdapter nestHost javax/swing/plaf/basic/BasicScrollBarUI flags 21 innerclass innerClass javax/swing/plaf/basic/BasicScrollBarUI$ArrowButtonListener outerClass javax/swing/plaf/basic/BasicScrollBarUI innerClassName ArrowButtonListener flags 4 @@ -716,191 +73,10 @@ innerclass innerClass javax/swing/plaf/basic/BasicSliderUI$TrackListener outerCl innerclass innerClass java/awt/event/FocusEvent$Cause outerClass java/awt/event/FocusEvent innerClassName Cause flags 4019 innerclass innerClass javax/swing/plaf/basic/BasicSliderUI$ScrollListener outerClass javax/swing/plaf/basic/BasicSliderUI innerClassName ScrollListener flags 1 -class name javax/swing/plaf/basic/BasicSplitPaneUI$BasicHorizontalLayoutManager -header extends java/lang/Object implements java/awt/LayoutManager2 nestHost javax/swing/plaf/basic/BasicSplitPaneUI sealed true flags 21 -innerclass innerClass javax/swing/plaf/basic/BasicSplitPaneUI$BasicHorizontalLayoutManager outerClass javax/swing/plaf/basic/BasicSplitPaneUI innerClassName BasicHorizontalLayoutManager flags 1 -innerclass innerClass javax/swing/plaf/basic/BasicSplitPaneUI$BasicVerticalLayoutManager outerClass javax/swing/plaf/basic/BasicSplitPaneUI innerClassName BasicVerticalLayoutManager flags 1 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/basic/BasicToolBarSeparatorUI -header extends javax/swing/plaf/basic/BasicSeparatorUI flags 21 -innerclass innerClass javax/swing/JToolBar$Separator outerClass javax/swing/JToolBar innerClassName Separator flags 9 - -class name javax/swing/plaf/metal/MetalButtonUI -header extends javax/swing/plaf/basic/BasicButtonUI flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/metal/MetalCheckBoxUI -header extends javax/swing/plaf/metal/MetalRadioButtonUI flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/metal/MetalRadioButtonUI -header extends javax/swing/plaf/basic/BasicRadioButtonUI flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/metal/MetalToggleButtonUI -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 - -class name javax/swing/plaf/metal/MetalToolTipUI -header extends javax/swing/plaf/basic/BasicToolTipUI flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/multi/MultiLookAndFeel -header extends javax/swing/LookAndFeel flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/synth/SynthButtonUI -header extends javax/swing/plaf/basic/BasicButtonUI implements java/beans/PropertyChangeListener,javax/swing/plaf/synth/SynthUI flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name javax/swing/plaf/synth/SynthComboBoxUI method name getMinimumSize descriptor (Ljavax/swing/JComponent;)Ljava/awt/Dimension; flags 1 -class name javax/swing/plaf/synth/SynthIcon -header extends java/lang/Object implements javax/swing/Icon flags 601 - class name javax/swing/plaf/synth/SynthLookAndFeel -method name load descriptor (Ljava/net/URL;)V method name load descriptor (Ljava/net/URL;)V thrownTypes java/text/ParseException,java/io/IOException flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="21") -class name javax/swing/plaf/synth/SynthMenuItemUI -header extends javax/swing/plaf/basic/BasicMenuItemUI implements java/beans/PropertyChangeListener,javax/swing/plaf/synth/SynthUI flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/synth/SynthMenuUI -header extends javax/swing/plaf/basic/BasicMenuUI implements java/beans/PropertyChangeListener,javax/swing/plaf/synth/SynthUI flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/plaf/synth/SynthSeparatorUI -header extends javax/swing/plaf/SeparatorUI implements java/beans/PropertyChangeListener,javax/swing/plaf/synth/SynthUI flags 21 -innerclass innerClass javax/swing/JToolBar$Separator outerClass javax/swing/JToolBar innerClassName Separator flags 9 - -class name javax/swing/plaf/synth/SynthStyle -header extends java/lang/Object flags 421 -innerclass innerClass javax/swing/UIDefaults$LazyInputMap outerClass javax/swing/UIDefaults innerClassName LazyInputMap flags 9 -innerclass innerClass javax/swing/UIDefaults$LazyValue outerClass javax/swing/UIDefaults innerClassName LazyValue flags 609 - -class name javax/swing/table/AbstractTableModel -header extends java/lang/Object implements javax/swing/table/TableModel,java/io/Serializable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/AbstractWriter -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/BoxView -header extends javax/swing/text/CompositeView flags 21 -innerclass innerClass javax/swing/event/DocumentEvent$ElementChange outerClass javax/swing/event/DocumentEvent innerClassName ElementChange flags 609 -innerclass innerClass javax/swing/text/Position$Bias outerClass javax/swing/text/Position innerClassName Bias flags 19 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/CompositeView -header extends javax/swing/text/View flags 421 -innerclass innerClass javax/swing/text/Position$Bias outerClass javax/swing/text/Position innerClassName Bias flags 19 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/DateFormatter -header extends javax/swing/text/InternationalFormatter flags 21 -innerclass innerClass java/text/DateFormat$Field outerClass java/text/DateFormat innerClassName Field flags 9 - -class name javax/swing/text/IconView -header extends javax/swing/text/View flags 21 -innerclass innerClass javax/swing/text/Position$Bias outerClass javax/swing/text/Position innerClassName Bias flags 19 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/LayoutQueue -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/NumberFormatter -header extends javax/swing/text/InternationalFormatter flags 21 -innerclass innerClass java/text/NumberFormat$Field outerClass java/text/NumberFormat innerClassName Field flags 9 -innerclass innerClass javax/swing/text/DocumentFilter$FilterBypass outerClass javax/swing/text/DocumentFilter innerClassName FilterBypass flags 409 -innerclass innerClass java/text/AttributedCharacterIterator$Attribute outerClass java/text/AttributedCharacterIterator innerClassName Attribute flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/Segment -header extends java/lang/Object implements java/lang/Cloneable,java/text/CharacterIterator,java/lang/CharSequence flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/StyleConstants -header extends java/lang/Object nestMembers javax/swing/text/StyleConstants$FontConstants,javax/swing/text/StyleConstants$ColorConstants,javax/swing/text/StyleConstants$CharacterConstants,javax/swing/text/StyleConstants$ParagraphConstants sealed true flags 21 -innerclass innerClass javax/swing/text/StyleConstants$CharacterConstants outerClass javax/swing/text/StyleConstants innerClassName CharacterConstants flags 19 -innerclass innerClass javax/swing/text/StyleConstants$FontConstants outerClass javax/swing/text/StyleConstants innerClassName FontConstants flags 19 -innerclass innerClass javax/swing/text/StyleConstants$ColorConstants outerClass javax/swing/text/StyleConstants innerClassName ColorConstants flags 19 -innerclass innerClass javax/swing/text/StyleConstants$ParagraphConstants outerClass javax/swing/text/StyleConstants innerClassName ParagraphConstants flags 19 - -class name javax/swing/text/TabSet -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 - -class name javax/swing/text/TabStop -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 - -class name javax/swing/text/View -header extends java/lang/Object implements javax/swing/SwingConstants flags 421 -innerclass innerClass javax/swing/text/Position$Bias outerClass javax/swing/text/Position innerClassName Bias flags 19 -innerclass innerClass javax/swing/event/DocumentEvent$ElementChange outerClass javax/swing/event/DocumentEvent innerClassName ElementChange flags 609 -innerclass innerClass javax/swing/event/DocumentEvent$EventType outerClass javax/swing/event/DocumentEvent innerClassName EventType flags 19 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/html/InlineView -header extends javax/swing/text/LabelView flags 21 -innerclass innerClass javax/swing/text/html/CSS$Attribute outerClass javax/swing/text/html/CSS innerClassName Attribute flags 19 - -class name javax/swing/text/html/ObjectView -header extends javax/swing/text/ComponentView flags 21 -innerclass innerClass javax/swing/text/html/HTML$Attribute outerClass javax/swing/text/html/HTML innerClassName Attribute flags 19 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/html/Option -header extends java/lang/Object implements java/io/Serializable flags 21 -innerclass innerClass javax/swing/text/html/HTML$Attribute outerClass javax/swing/text/html/HTML innerClassName Attribute flags 19 - -class name javax/swing/text/html/parser/ContentModel -header extends java/lang/Object implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/html/parser/DocumentParser -header extends javax/swing/text/html/parser/Parser flags 21 -innerclass innerClass javax/swing/text/html/HTMLEditorKit$ParserCallback outerClass javax/swing/text/html/HTMLEditorKit innerClassName ParserCallback flags 9 -innerclass innerClass javax/swing/text/html/HTML$Tag outerClass javax/swing/text/html/HTML innerClassName Tag flags 9 -innerclass innerClass javax/swing/text/html/HTML$Attribute outerClass javax/swing/text/html/HTML innerClassName Attribute flags 19 - -class name javax/swing/text/html/parser/Parser -header extends java/lang/Object implements javax/swing/text/html/parser/DTDConstants flags 21 -innerclass innerClass javax/swing/text/html/HTML$Attribute outerClass javax/swing/text/html/HTML innerClassName Attribute flags 19 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/text/html/parser/TagElement -header extends java/lang/Object flags 21 -innerclass innerClass javax/swing/text/html/HTML$Tag outerClass javax/swing/text/html/HTML innerClassName Tag flags 9 -innerclass innerClass javax/swing/text/html/HTML$UnknownTag outerClass javax/swing/text/html/HTML innerClassName UnknownTag flags 9 - -class name javax/swing/tree/DefaultTreeModel -header extends java/lang/Object implements java/io/Serializable,javax/swing/tree/TreeModel flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 - -class name javax/swing/tree/DefaultTreeSelectionModel -header extends java/lang/Object implements java/lang/Cloneable,java/io/Serializable,javax/swing/tree/TreeSelectionModel flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/tree/TreePath -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 - -class name javax/swing/undo/AbstractUndoableEdit -header extends java/lang/Object implements javax/swing/undo/UndoableEdit,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/undo/CompoundEdit -header extends javax/swing/undo/AbstractUndoableEdit flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/swing/undo/UndoableEditSupport -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.instrument-H.sym.txt b/src/jdk.compiler/share/data/symbols/java.instrument-H.sym.txt deleted file mode 100644 index 9f7539e822613..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.instrument-H.sym.txt +++ /dev/null @@ -1,31 +0,0 @@ -# -# Copyright (c) 2021, 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/lang/instrument/UnmodifiableModuleException -header extends java/lang/RuntimeException flags 21 - diff --git a/src/jdk.compiler/share/data/symbols/java.instrument-I.sym.txt b/src/jdk.compiler/share/data/symbols/java.instrument-I.sym.txt deleted file mode 100644 index 9f7539e822613..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.instrument-I.sym.txt +++ /dev/null @@ -1,31 +0,0 @@ -# -# Copyright (c) 2021, 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/lang/instrument/UnmodifiableModuleException -header extends java/lang/RuntimeException flags 21 - diff --git a/src/jdk.compiler/share/data/symbols/java.instrument-J.sym.txt b/src/jdk.compiler/share/data/symbols/java.instrument-J.sym.txt deleted file mode 100644 index fb591b1e06537..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.instrument-J.sym.txt +++ /dev/null @@ -1,31 +0,0 @@ -# -# Copyright (c) 2022, 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/lang/instrument/UnmodifiableModuleException -header extends java/lang/RuntimeException flags 21 - diff --git a/src/jdk.compiler/share/data/symbols/java.instrument-K.sym.txt b/src/jdk.compiler/share/data/symbols/java.instrument-K.sym.txt deleted file mode 100644 index fb591b1e06537..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.instrument-K.sym.txt +++ /dev/null @@ -1,31 +0,0 @@ -# -# Copyright (c) 2022, 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/lang/instrument/UnmodifiableModuleException -header extends java/lang/RuntimeException flags 21 - diff --git a/src/jdk.compiler/share/data/symbols/java.instrument-L.sym.txt b/src/jdk.compiler/share/data/symbols/java.instrument-L.sym.txt deleted file mode 100644 index 3ae025c1742c2..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.instrument-L.sym.txt +++ /dev/null @@ -1,31 +0,0 @@ -# -# Copyright (c) 2023, 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/lang/instrument/UnmodifiableModuleException -header extends java/lang/RuntimeException flags 21 - diff --git a/src/jdk.compiler/share/data/symbols/java.logging-H.sym.txt b/src/jdk.compiler/share/data/symbols/java.logging-H.sym.txt index 16bf499224154..26f558d94ffe0 100644 --- a/src/jdk.compiler/share/data/symbols/java.logging-H.sym.txt +++ b/src/jdk.compiler/share/data/symbols/java.logging-H.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -26,34 +26,7 @@ # ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ### # ########################################################## # -class name java/util/logging/ErrorManager -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name java/util/logging/LogManager -method name checkAccess descriptor ()V method name checkAccess descriptor ()V thrownTypes java/lang/SecurityException flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="17") -class name java/util/logging/LoggingMXBean -header extends java/lang/Object flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="9") - -class name java/util/logging/LoggingPermission -header extends java/security/BasicPermission flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/logging/MemoryHandler -header extends java/util/logging/Handler flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/logging/SimpleFormatter -header extends java/util/logging/Formatter flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/logging/SocketHandler -header extends java/util/logging/StreamHandler flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/logging/XMLFormatter -header extends java/util/logging/Formatter flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.logging-I.sym.txt b/src/jdk.compiler/share/data/symbols/java.logging-I.sym.txt deleted file mode 100644 index 0c5aabcc4bb91..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.logging-I.sym.txt +++ /dev/null @@ -1,55 +0,0 @@ -# -# Copyright (c) 2021, 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/util/logging/ErrorManager -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/logging/LoggingMXBean -header extends java/lang/Object flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="9") - -class name java/util/logging/LoggingPermission -header extends java/security/BasicPermission flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/logging/MemoryHandler -header extends java/util/logging/Handler flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/logging/SimpleFormatter -header extends java/util/logging/Formatter flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/logging/SocketHandler -header extends java/util/logging/StreamHandler flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/logging/XMLFormatter -header extends java/util/logging/Formatter flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.logging-J.sym.txt b/src/jdk.compiler/share/data/symbols/java.logging-J.sym.txt deleted file mode 100644 index cbc88ccd16c57..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.logging-J.sym.txt +++ /dev/null @@ -1,55 +0,0 @@ -# -# Copyright (c) 2022, 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/util/logging/ErrorManager -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/logging/LoggingMXBean -header extends java/lang/Object flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="9") - -class name java/util/logging/LoggingPermission -header extends java/security/BasicPermission flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/logging/MemoryHandler -header extends java/util/logging/Handler flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/logging/SimpleFormatter -header extends java/util/logging/Formatter flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/logging/SocketHandler -header extends java/util/logging/StreamHandler flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/logging/XMLFormatter -header extends java/util/logging/Formatter flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.logging-K.sym.txt b/src/jdk.compiler/share/data/symbols/java.logging-K.sym.txt deleted file mode 100644 index cbc88ccd16c57..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.logging-K.sym.txt +++ /dev/null @@ -1,55 +0,0 @@ -# -# Copyright (c) 2022, 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/util/logging/ErrorManager -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/logging/LoggingMXBean -header extends java/lang/Object flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="9") - -class name java/util/logging/LoggingPermission -header extends java/security/BasicPermission flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/logging/MemoryHandler -header extends java/util/logging/Handler flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/logging/SimpleFormatter -header extends java/util/logging/Formatter flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/logging/SocketHandler -header extends java/util/logging/StreamHandler flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/util/logging/XMLFormatter -header extends java/util/logging/Formatter flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.logging-L.sym.txt b/src/jdk.compiler/share/data/symbols/java.logging-L.sym.txt index f98f5629295db..352911500a6ab 100644 --- a/src/jdk.compiler/share/data/symbols/java.logging-L.sym.txt +++ b/src/jdk.compiler/share/data/symbols/java.logging-L.sym.txt @@ -27,8 +27,6 @@ # ########################################################## # class name java/util/logging/ErrorManager -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -method name error descriptor (Ljava/lang/String;Ljava/lang/Exception;I)V method name error descriptor (Ljava/lang/String;Ljava/lang/Exception;I)V flags 1 @@ -50,16 +48,7 @@ method name setFilter descriptor (Ljava/util/logging/Filter;)V thrownTypes java/ method name setErrorManager descriptor (Ljava/util/logging/ErrorManager;)V flags 1 method name setLevel descriptor (Ljava/util/logging/Level;)V thrownTypes java/lang/SecurityException flags 1 -class name java/util/logging/LoggingMXBean -header extends java/lang/Object flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="9") - -class name java/util/logging/LoggingPermission -header extends java/security/BasicPermission flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name java/util/logging/MemoryHandler -header extends java/util/logging/Handler flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -method name publish descriptor (Ljava/util/logging/LogRecord;)V -method name push descriptor ()V -method name setPushLevel descriptor (Ljava/util/logging/Level;)V @@ -67,13 +56,7 @@ method name publish descriptor (Ljava/util/logging/LogRecord;)V flags 1 method name push descriptor ()V flags 1 method name setPushLevel descriptor (Ljava/util/logging/Level;)V thrownTypes java/lang/SecurityException flags 1 -class name java/util/logging/SimpleFormatter -header extends java/util/logging/Formatter flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name java/util/logging/SocketHandler -header extends java/util/logging/StreamHandler flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -method name close descriptor ()V -method name publish descriptor (Ljava/util/logging/LogRecord;)V method name close descriptor ()V thrownTypes java/lang/SecurityException flags 1 @@ -91,7 +74,3 @@ method name publish descriptor (Ljava/util/logging/LogRecord;)V flags 1 method name flush descriptor ()V flags 1 method name close descriptor ()V thrownTypes java/lang/SecurityException flags 1 -class name java/util/logging/XMLFormatter -header extends java/util/logging/Formatter flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.management-H.sym.txt b/src/jdk.compiler/share/data/symbols/java.management-H.sym.txt index 49ed0cab4a773..81cdf559fc145 100644 --- a/src/jdk.compiler/share/data/symbols/java.management-H.sym.txt +++ b/src/jdk.compiler/share/data/symbols/java.management-H.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -26,240 +26,6 @@ # ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ### # ########################################################## # -class name java/lang/management/LockInfo -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/lang/management/ManagementPermission -header extends java/security/BasicPermission flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/lang/management/MemoryUsage -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/lang/management/MonitorInfo -header extends java/lang/management/LockInfo flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/lang/management/RuntimeMXBean -header extends java/lang/Object implements java/lang/management/PlatformManagedObject flags 601 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/Attribute -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 - -class name javax/management/AttributeList -header extends java/util/ArrayList flags 21 signature Ljava/util/ArrayList; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/BadAttributeValueExpException -header extends java/lang/Exception flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/BadBinaryOpValueExpException -header extends java/lang/Exception flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/BadStringOperationException -header extends java/lang/Exception flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/ConstructorParameters -header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Documented;@Ljava/lang/annotation/Target;(value={eLjava/lang/annotation/ElementType;CONSTRUCTOR;})@Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;RUNTIME;) - -class name javax/management/ImmutableDescriptor -header extends java/lang/Object implements javax/management/Descriptor flags 21 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanAttributeInfo -header extends javax/management/MBeanFeatureInfo implements java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanConstructorInfo -header extends javax/management/MBeanFeatureInfo implements java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanNotificationInfo -header extends javax/management/MBeanFeatureInfo implements java/lang/Cloneable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanOperationInfo -header extends javax/management/MBeanFeatureInfo implements java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanParameterInfo -header extends javax/management/MBeanFeatureInfo implements java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanPermission -header extends java/security/Permission flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanServerDelegate -header extends java/lang/Object implements javax/management/MBeanServerDelegateMBean,javax/management/NotificationEmitter flags 21 -innerclass innerClass java/lang/System$Logger outerClass java/lang/System innerClassName Logger flags 609 -innerclass innerClass java/lang/System$Logger$Level outerClass java/lang/System$Logger innerClassName Level flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanServerFactory -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/System$Logger outerClass java/lang/System innerClassName Logger flags 609 -innerclass innerClass java/lang/System$Logger$Level outerClass java/lang/System$Logger innerClassName Level flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanServerInvocationHandler -header extends java/lang/Object implements java/lang/reflect/InvocationHandler flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanServerNotification -header extends javax/management/Notification flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanServerPermission -header extends java/security/BasicPermission flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanTrustPermission -header extends java/security/BasicPermission flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/Notification -header extends java/util/EventObject flags 21 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/ObjectInstance -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 - -class name javax/management/Query -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/StandardEmitterMBean -header extends javax/management/StandardMBean implements javax/management/NotificationEmitter flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/StringValueExp -header extends java/lang/Object implements javax/management/ValueExp flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/loading/DefaultLoaderRepository -header extends java/lang/Object flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated; -innerclass innerClass java/lang/System$Logger outerClass java/lang/System innerClassName Logger flags 609 -innerclass innerClass java/lang/System$Logger$Level outerClass java/lang/System$Logger innerClassName Level flags 4019 - -class name javax/management/loading/MLetContent -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/modelmbean/InvalidTargetObjectTypeException -header extends java/lang/Exception flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/modelmbean/XMLParseException -header extends java/lang/Exception flags 21 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/ArrayType -header extends javax/management/openmbean/OpenType flags 21 signature Ljavax/management/openmbean/OpenType; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/CompositeDataInvocationHandler -header extends java/lang/Object implements java/lang/reflect/InvocationHandler flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/CompositeDataSupport -header extends java/lang/Object implements javax/management/openmbean/CompositeData,java/io/Serializable flags 21 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/CompositeType -header extends javax/management/openmbean/OpenType flags 21 signature Ljavax/management/openmbean/OpenType; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/OpenMBeanAttributeInfoSupport -header extends javax/management/MBeanAttributeInfo implements javax/management/openmbean/OpenMBeanAttributeInfo flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/OpenMBeanOperationInfoSupport -header extends javax/management/MBeanOperationInfo implements javax/management/openmbean/OpenMBeanOperationInfo flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/SimpleType -header extends javax/management/openmbean/OpenType flags 31 signature Ljavax/management/openmbean/OpenType; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/TabularDataSupport -header extends java/lang/Object implements javax/management/openmbean/TabularData,java/util/Map,java/lang/Cloneable,java/io/Serializable flags 21 signature Ljava/lang/Object;Ljavax/management/openmbean/TabularData;Ljava/util/Map;Ljava/lang/Cloneable;Ljava/io/Serializable; -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/TabularType -header extends javax/management/openmbean/OpenType flags 21 signature Ljavax/management/openmbean/OpenType; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/relation/RelationNotification -header extends javax/management/Notification flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 - -class name javax/management/relation/RelationSupport -header extends java/lang/Object implements javax/management/relation/RelationSupportMBean,javax/management/MBeanRegistration flags 21 -innerclass innerClass java/lang/System$Logger outerClass java/lang/System innerClassName Logger flags 609 -innerclass innerClass java/lang/System$Logger$Level outerClass java/lang/System$Logger innerClassName Level flags 4019 - -class name javax/management/relation/Role -header extends java/lang/Object implements java/io/Serializable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/relation/RoleInfo -header extends java/lang/Object implements java/io/Serializable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/relation/RoleResult -header extends java/lang/Object implements java/io/Serializable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 - -class name javax/management/relation/RoleUnresolved -header extends java/lang/Object implements java/io/Serializable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/remote/JMXConnectorServerFactory -header extends java/lang/Object flags 21 -innerclass innerClass java/util/ServiceLoader$Provider outerClass java/util/ServiceLoader innerClassName Provider flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/remote/JMXPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/remote/JMXServiceURL -header extends java/lang/Object implements java/io/Serializable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/remote/NotificationResult -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 - -class name javax/management/remote/TargetedNotification -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 +module name java.management +header exports java/lang/management,javax/management,javax/management/loading,javax/management/modelmbean,javax/management/monitor,javax/management/openmbean,javax/management/relation,javax/management/remote,javax/management/timer requires name\u0020;java.base\u0020;flags\u0020;8000 uses javax/management/remote/JMXConnectorProvider,javax/management/remote/JMXConnectorServerProvider,sun/management/spi/PlatformMBeanProvider provides interface\u0020;javax/security/auth/spi/LoginModule\u0020;impls\u0020;com/sun/jmx/remote/security/FileLoginModule target linux-amd64 flags 8000 diff --git a/src/jdk.compiler/share/data/symbols/java.management-I.sym.txt b/src/jdk.compiler/share/data/symbols/java.management-I.sym.txt index ae261e32e0c9f..596052ed698f4 100644 --- a/src/jdk.compiler/share/data/symbols/java.management-I.sym.txt +++ b/src/jdk.compiler/share/data/symbols/java.management-I.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -26,244 +26,10 @@ # ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ### # ########################################################## # -class name java/lang/management/LockInfo -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/lang/management/ManagementPermission -header extends java/security/BasicPermission flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +module name java.management +header exports java/lang/management,javax/management,javax/management/loading,javax/management/modelmbean,javax/management/monitor,javax/management/openmbean,javax/management/relation,javax/management/remote,javax/management/timer requires name\u0020;java.base\u0020;flags\u0020;8000 uses javax/management/remote/JMXConnectorProvider,javax/management/remote/JMXConnectorServerProvider,sun/management/spi/PlatformMBeanProvider provides interface\u0020;javax/security/auth/spi/LoginModule\u0020;impls\u0020;com/sun/jmx/remote/security/FileLoginModule target linux-amd64 flags 8000 class name java/lang/management/MemoryMXBean -method name getObjectPendingFinalizationCount descriptor ()I method name getObjectPendingFinalizationCount descriptor ()I flags 401 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="18") -class name java/lang/management/MemoryUsage -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/lang/management/MonitorInfo -header extends java/lang/management/LockInfo flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/lang/management/RuntimeMXBean -header extends java/lang/Object implements java/lang/management/PlatformManagedObject flags 601 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/Attribute -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 - -class name javax/management/AttributeList -header extends java/util/ArrayList flags 21 signature Ljava/util/ArrayList; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/BadAttributeValueExpException -header extends java/lang/Exception flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/BadBinaryOpValueExpException -header extends java/lang/Exception flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/BadStringOperationException -header extends java/lang/Exception flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/ConstructorParameters -header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Documented;@Ljava/lang/annotation/Target;(value={eLjava/lang/annotation/ElementType;CONSTRUCTOR;})@Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;RUNTIME;) - -class name javax/management/ImmutableDescriptor -header extends java/lang/Object implements javax/management/Descriptor flags 21 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanAttributeInfo -header extends javax/management/MBeanFeatureInfo implements java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanConstructorInfo -header extends javax/management/MBeanFeatureInfo implements java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanNotificationInfo -header extends javax/management/MBeanFeatureInfo implements java/lang/Cloneable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanOperationInfo -header extends javax/management/MBeanFeatureInfo implements java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanParameterInfo -header extends javax/management/MBeanFeatureInfo implements java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanPermission -header extends java/security/Permission flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanServerDelegate -header extends java/lang/Object implements javax/management/MBeanServerDelegateMBean,javax/management/NotificationEmitter flags 21 -innerclass innerClass java/lang/System$Logger outerClass java/lang/System innerClassName Logger flags 609 -innerclass innerClass java/lang/System$Logger$Level outerClass java/lang/System$Logger innerClassName Level flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanServerFactory -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/System$Logger outerClass java/lang/System innerClassName Logger flags 609 -innerclass innerClass java/lang/System$Logger$Level outerClass java/lang/System$Logger innerClassName Level flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanServerInvocationHandler -header extends java/lang/Object implements java/lang/reflect/InvocationHandler flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanServerNotification -header extends javax/management/Notification flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanServerPermission -header extends java/security/BasicPermission flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanTrustPermission -header extends java/security/BasicPermission flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/Notification -header extends java/util/EventObject flags 21 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/ObjectInstance -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 - -class name javax/management/Query -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/StandardEmitterMBean -header extends javax/management/StandardMBean implements javax/management/NotificationEmitter flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/StringValueExp -header extends java/lang/Object implements javax/management/ValueExp flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/loading/DefaultLoaderRepository -header extends java/lang/Object flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated; -innerclass innerClass java/lang/System$Logger outerClass java/lang/System innerClassName Logger flags 609 -innerclass innerClass java/lang/System$Logger$Level outerClass java/lang/System$Logger innerClassName Level flags 4019 - -class name javax/management/loading/MLetContent -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/modelmbean/InvalidTargetObjectTypeException -header extends java/lang/Exception flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/modelmbean/XMLParseException -header extends java/lang/Exception flags 21 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/ArrayType -header extends javax/management/openmbean/OpenType flags 21 signature Ljavax/management/openmbean/OpenType; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/CompositeDataInvocationHandler -header extends java/lang/Object implements java/lang/reflect/InvocationHandler flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/CompositeDataSupport -header extends java/lang/Object implements javax/management/openmbean/CompositeData,java/io/Serializable flags 21 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/CompositeType -header extends javax/management/openmbean/OpenType flags 21 signature Ljavax/management/openmbean/OpenType; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/OpenMBeanAttributeInfoSupport -header extends javax/management/MBeanAttributeInfo implements javax/management/openmbean/OpenMBeanAttributeInfo flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/OpenMBeanOperationInfoSupport -header extends javax/management/MBeanOperationInfo implements javax/management/openmbean/OpenMBeanOperationInfo flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/SimpleType -header extends javax/management/openmbean/OpenType flags 31 signature Ljavax/management/openmbean/OpenType; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/TabularDataSupport -header extends java/lang/Object implements javax/management/openmbean/TabularData,java/util/Map,java/lang/Cloneable,java/io/Serializable flags 21 signature Ljava/lang/Object;Ljavax/management/openmbean/TabularData;Ljava/util/Map;Ljava/lang/Cloneable;Ljava/io/Serializable; -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/TabularType -header extends javax/management/openmbean/OpenType flags 21 signature Ljavax/management/openmbean/OpenType; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/relation/RelationNotification -header extends javax/management/Notification flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 - -class name javax/management/relation/RelationSupport -header extends java/lang/Object implements javax/management/relation/RelationSupportMBean,javax/management/MBeanRegistration flags 21 -innerclass innerClass java/lang/System$Logger outerClass java/lang/System innerClassName Logger flags 609 -innerclass innerClass java/lang/System$Logger$Level outerClass java/lang/System$Logger innerClassName Level flags 4019 - -class name javax/management/relation/Role -header extends java/lang/Object implements java/io/Serializable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/relation/RoleInfo -header extends java/lang/Object implements java/io/Serializable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/relation/RoleResult -header extends java/lang/Object implements java/io/Serializable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 - -class name javax/management/relation/RoleUnresolved -header extends java/lang/Object implements java/io/Serializable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/remote/JMXConnectorServerFactory -header extends java/lang/Object flags 21 -innerclass innerClass java/util/ServiceLoader$Provider outerClass java/util/ServiceLoader innerClassName Provider flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/remote/JMXPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/remote/JMXServiceURL -header extends java/lang/Object implements java/io/Serializable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/remote/NotificationResult -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 - -class name javax/management/remote/TargetedNotification -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 - diff --git a/src/jdk.compiler/share/data/symbols/java.management-J.sym.txt b/src/jdk.compiler/share/data/symbols/java.management-J.sym.txt index c9342b3e68941..f80f191a03ba2 100644 --- a/src/jdk.compiler/share/data/symbols/java.management-J.sym.txt +++ b/src/jdk.compiler/share/data/symbols/java.management-J.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -26,240 +26,6 @@ # ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ### # ########################################################## # -class name java/lang/management/LockInfo -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/lang/management/ManagementPermission -header extends java/security/BasicPermission flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/lang/management/MemoryUsage -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/lang/management/MonitorInfo -header extends java/lang/management/LockInfo flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/lang/management/RuntimeMXBean -header extends java/lang/Object implements java/lang/management/PlatformManagedObject flags 601 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/Attribute -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 - -class name javax/management/AttributeList -header extends java/util/ArrayList flags 21 signature Ljava/util/ArrayList; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/BadAttributeValueExpException -header extends java/lang/Exception flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/BadBinaryOpValueExpException -header extends java/lang/Exception flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/BadStringOperationException -header extends java/lang/Exception flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/ConstructorParameters -header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Documented;@Ljava/lang/annotation/Target;(value={eLjava/lang/annotation/ElementType;CONSTRUCTOR;})@Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;RUNTIME;) - -class name javax/management/ImmutableDescriptor -header extends java/lang/Object implements javax/management/Descriptor flags 21 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanAttributeInfo -header extends javax/management/MBeanFeatureInfo implements java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanConstructorInfo -header extends javax/management/MBeanFeatureInfo implements java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanNotificationInfo -header extends javax/management/MBeanFeatureInfo implements java/lang/Cloneable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanOperationInfo -header extends javax/management/MBeanFeatureInfo implements java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanParameterInfo -header extends javax/management/MBeanFeatureInfo implements java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanPermission -header extends java/security/Permission flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanServerDelegate -header extends java/lang/Object implements javax/management/MBeanServerDelegateMBean,javax/management/NotificationEmitter flags 21 -innerclass innerClass java/lang/System$Logger outerClass java/lang/System innerClassName Logger flags 609 -innerclass innerClass java/lang/System$Logger$Level outerClass java/lang/System$Logger innerClassName Level flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanServerFactory -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/System$Logger outerClass java/lang/System innerClassName Logger flags 609 -innerclass innerClass java/lang/System$Logger$Level outerClass java/lang/System$Logger innerClassName Level flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanServerInvocationHandler -header extends java/lang/Object implements java/lang/reflect/InvocationHandler flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanServerNotification -header extends javax/management/Notification flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanServerPermission -header extends java/security/BasicPermission flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanTrustPermission -header extends java/security/BasicPermission flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/Notification -header extends java/util/EventObject flags 21 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/ObjectInstance -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 - -class name javax/management/Query -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/StandardEmitterMBean -header extends javax/management/StandardMBean implements javax/management/NotificationEmitter flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/StringValueExp -header extends java/lang/Object implements javax/management/ValueExp flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/loading/DefaultLoaderRepository -header extends java/lang/Object flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated; -innerclass innerClass java/lang/System$Logger outerClass java/lang/System innerClassName Logger flags 609 -innerclass innerClass java/lang/System$Logger$Level outerClass java/lang/System$Logger innerClassName Level flags 4019 - -class name javax/management/loading/MLetContent -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/modelmbean/InvalidTargetObjectTypeException -header extends java/lang/Exception flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/modelmbean/XMLParseException -header extends java/lang/Exception flags 21 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/ArrayType -header extends javax/management/openmbean/OpenType flags 21 signature Ljavax/management/openmbean/OpenType; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/CompositeDataInvocationHandler -header extends java/lang/Object implements java/lang/reflect/InvocationHandler flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/CompositeDataSupport -header extends java/lang/Object implements javax/management/openmbean/CompositeData,java/io/Serializable flags 21 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/CompositeType -header extends javax/management/openmbean/OpenType flags 21 signature Ljavax/management/openmbean/OpenType; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/OpenMBeanAttributeInfoSupport -header extends javax/management/MBeanAttributeInfo implements javax/management/openmbean/OpenMBeanAttributeInfo flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/OpenMBeanOperationInfoSupport -header extends javax/management/MBeanOperationInfo implements javax/management/openmbean/OpenMBeanOperationInfo flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/SimpleType -header extends javax/management/openmbean/OpenType flags 31 signature Ljavax/management/openmbean/OpenType; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/TabularDataSupport -header extends java/lang/Object implements javax/management/openmbean/TabularData,java/util/Map,java/lang/Cloneable,java/io/Serializable flags 21 signature Ljava/lang/Object;Ljavax/management/openmbean/TabularData;Ljava/util/Map;Ljava/lang/Cloneable;Ljava/io/Serializable; -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/TabularType -header extends javax/management/openmbean/OpenType flags 21 signature Ljavax/management/openmbean/OpenType; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/relation/RelationNotification -header extends javax/management/Notification flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 - -class name javax/management/relation/RelationSupport -header extends java/lang/Object implements javax/management/relation/RelationSupportMBean,javax/management/MBeanRegistration flags 21 -innerclass innerClass java/lang/System$Logger outerClass java/lang/System innerClassName Logger flags 609 -innerclass innerClass java/lang/System$Logger$Level outerClass java/lang/System$Logger innerClassName Level flags 4019 - -class name javax/management/relation/Role -header extends java/lang/Object implements java/io/Serializable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/relation/RoleInfo -header extends java/lang/Object implements java/io/Serializable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/relation/RoleResult -header extends java/lang/Object implements java/io/Serializable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 - -class name javax/management/relation/RoleUnresolved -header extends java/lang/Object implements java/io/Serializable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/remote/JMXConnectorServerFactory -header extends java/lang/Object flags 21 -innerclass innerClass java/util/ServiceLoader$Provider outerClass java/util/ServiceLoader innerClassName Provider flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/remote/JMXPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/remote/JMXServiceURL -header extends java/lang/Object implements java/io/Serializable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/remote/NotificationResult -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 - -class name javax/management/remote/TargetedNotification -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 +module name java.management +header exports java/lang/management,javax/management,javax/management/loading,javax/management/modelmbean,javax/management/monitor,javax/management/openmbean,javax/management/relation,javax/management/remote,javax/management/timer requires name\u0020;java.base\u0020;flags\u0020;8000 uses javax/management/remote/JMXConnectorProvider,javax/management/remote/JMXConnectorServerProvider,sun/management/spi/PlatformMBeanProvider provides interface\u0020;javax/security/auth/spi/LoginModule\u0020;impls\u0020;com/sun/jmx/remote/security/FileLoginModule target linux-amd64 flags 8000 diff --git a/src/jdk.compiler/share/data/symbols/java.management-K.sym.txt b/src/jdk.compiler/share/data/symbols/java.management-K.sym.txt index 492b1d051992a..48382f94f9e82 100644 --- a/src/jdk.compiler/share/data/symbols/java.management-K.sym.txt +++ b/src/jdk.compiler/share/data/symbols/java.management-K.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2022, 2023, 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,134 +29,6 @@ module name java.management header exports java/lang/management,javax/management,javax/management/loading,javax/management/modelmbean,javax/management/monitor,javax/management/openmbean,javax/management/relation,javax/management/remote,javax/management/timer requires name\u0020;java.base\u0020;flags\u0020;8000 uses javax/management/remote/JMXConnectorProvider,javax/management/remote/JMXConnectorServerProvider,sun/management/spi/PlatformMBeanProvider provides interface\u0020;javax/security/auth/spi/LoginModule\u0020;impls\u0020;com/sun/jmx/remote/security/FileLoginModule target linux-amd64 flags 8000 classAnnotations @Ljdk/internal/javac/ParticipatesInPreview; -class name java/lang/management/LockInfo -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/lang/management/ManagementPermission -header extends java/security/BasicPermission flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/lang/management/MemoryUsage -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/lang/management/MonitorInfo -header extends java/lang/management/LockInfo flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/lang/management/RuntimeMXBean -header extends java/lang/Object implements java/lang/management/PlatformManagedObject flags 601 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/Attribute -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 - -class name javax/management/AttributeList -header extends java/util/ArrayList flags 21 signature Ljava/util/ArrayList; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/BadAttributeValueExpException -header extends java/lang/Exception flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/BadBinaryOpValueExpException -header extends java/lang/Exception flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/BadStringOperationException -header extends java/lang/Exception flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/ConstructorParameters -header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Documented;@Ljava/lang/annotation/Target;(value={eLjava/lang/annotation/ElementType;CONSTRUCTOR;})@Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;RUNTIME;) - -class name javax/management/ImmutableDescriptor -header extends java/lang/Object implements javax/management/Descriptor flags 21 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanAttributeInfo -header extends javax/management/MBeanFeatureInfo implements java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanConstructorInfo -header extends javax/management/MBeanFeatureInfo implements java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanNotificationInfo -header extends javax/management/MBeanFeatureInfo implements java/lang/Cloneable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanOperationInfo -header extends javax/management/MBeanFeatureInfo implements java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanParameterInfo -header extends javax/management/MBeanFeatureInfo implements java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanPermission -header extends java/security/Permission flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanServerDelegate -header extends java/lang/Object implements javax/management/MBeanServerDelegateMBean,javax/management/NotificationEmitter flags 21 -innerclass innerClass java/lang/System$Logger outerClass java/lang/System innerClassName Logger flags 609 -innerclass innerClass java/lang/System$Logger$Level outerClass java/lang/System$Logger innerClassName Level flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanServerFactory -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/System$Logger outerClass java/lang/System innerClassName Logger flags 609 -innerclass innerClass java/lang/System$Logger$Level outerClass java/lang/System$Logger innerClassName Level flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanServerInvocationHandler -header extends java/lang/Object implements java/lang/reflect/InvocationHandler flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanServerNotification -header extends javax/management/Notification flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanServerPermission -header extends java/security/BasicPermission flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanTrustPermission -header extends java/security/BasicPermission flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/Notification -header extends java/util/EventObject flags 21 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/ObjectInstance -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 - -class name javax/management/Query -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/StandardEmitterMBean -header extends javax/management/StandardMBean implements javax/management/NotificationEmitter flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/StringValueExp -header extends java/lang/Object implements javax/management/ValueExp flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/loading/DefaultLoaderRepository -header extends java/lang/Object flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated; -innerclass innerClass java/lang/System$Logger outerClass java/lang/System innerClassName Logger flags 609 -innerclass innerClass java/lang/System$Logger$Level outerClass java/lang/System$Logger innerClassName Level flags 4019 - class name javax/management/loading/MLet header extends java/net/URLClassLoader implements javax/management/loading/MLetMBean,javax/management/MBeanRegistration,java/io/Externalizable flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="20") innerclass innerClass java/lang/System$Logger outerClass java/lang/System innerClassName Logger flags 609 @@ -173,108 +45,3 @@ header extends java/lang/Object flags 601 deprecated true runtimeAnnotations @Lj class name javax/management/loading/PrivateMLet header extends javax/management/loading/MLet implements javax/management/loading/PrivateClassLoader flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="20") -class name javax/management/modelmbean/InvalidTargetObjectTypeException -header extends java/lang/Exception flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/modelmbean/XMLParseException -header extends java/lang/Exception flags 21 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/ArrayType -header extends javax/management/openmbean/OpenType flags 21 signature Ljavax/management/openmbean/OpenType; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/CompositeDataInvocationHandler -header extends java/lang/Object implements java/lang/reflect/InvocationHandler flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/CompositeDataSupport -header extends java/lang/Object implements javax/management/openmbean/CompositeData,java/io/Serializable flags 21 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/CompositeType -header extends javax/management/openmbean/OpenType flags 21 signature Ljavax/management/openmbean/OpenType; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/OpenMBeanAttributeInfoSupport -header extends javax/management/MBeanAttributeInfo implements javax/management/openmbean/OpenMBeanAttributeInfo flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/OpenMBeanOperationInfoSupport -header extends javax/management/MBeanOperationInfo implements javax/management/openmbean/OpenMBeanOperationInfo flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/SimpleType -header extends javax/management/openmbean/OpenType flags 31 signature Ljavax/management/openmbean/OpenType; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/TabularDataSupport -header extends java/lang/Object implements javax/management/openmbean/TabularData,java/util/Map,java/lang/Cloneable,java/io/Serializable flags 21 signature Ljava/lang/Object;Ljavax/management/openmbean/TabularData;Ljava/util/Map;Ljava/lang/Cloneable;Ljava/io/Serializable; -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/TabularType -header extends javax/management/openmbean/OpenType flags 21 signature Ljavax/management/openmbean/OpenType; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/relation/RelationNotification -header extends javax/management/Notification flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 - -class name javax/management/relation/RelationSupport -header extends java/lang/Object implements javax/management/relation/RelationSupportMBean,javax/management/MBeanRegistration flags 21 -innerclass innerClass java/lang/System$Logger outerClass java/lang/System innerClassName Logger flags 609 -innerclass innerClass java/lang/System$Logger$Level outerClass java/lang/System$Logger innerClassName Level flags 4019 - -class name javax/management/relation/Role -header extends java/lang/Object implements java/io/Serializable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/relation/RoleInfo -header extends java/lang/Object implements java/io/Serializable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/relation/RoleResult -header extends java/lang/Object implements java/io/Serializable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 - -class name javax/management/relation/RoleUnresolved -header extends java/lang/Object implements java/io/Serializable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/remote/JMXConnectorServerFactory -header extends java/lang/Object flags 21 -innerclass innerClass java/util/ServiceLoader$Provider outerClass java/util/ServiceLoader innerClassName Provider flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/remote/JMXPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/remote/JMXServiceURL -header extends java/lang/Object implements java/io/Serializable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/remote/NotificationResult -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 - -class name javax/management/remote/TargetedNotification -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 - diff --git a/src/jdk.compiler/share/data/symbols/java.management-L.sym.txt b/src/jdk.compiler/share/data/symbols/java.management-L.sym.txt index a3ec73d1f7687..763c0ad739d39 100644 --- a/src/jdk.compiler/share/data/symbols/java.management-L.sym.txt +++ b/src/jdk.compiler/share/data/symbols/java.management-L.sym.txt @@ -29,240 +29,7 @@ module name java.management header exports java/lang/management,javax/management,javax/management/loading,javax/management/modelmbean,javax/management/monitor,javax/management/openmbean,javax/management/relation,javax/management/remote,javax/management/timer requires name\u0020;java.base\u0020;flags\u0020;8000 uses javax/management/remote/JMXConnectorProvider,javax/management/remote/JMXConnectorServerProvider,sun/management/spi/PlatformMBeanProvider provides interface\u0020;javax/security/auth/spi/LoginModule\u0020;impls\u0020;com/sun/jmx/remote/security/FileLoginModule target linux-amd64 flags 8000 -class name java/lang/management/LockInfo -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/lang/management/ManagementPermission -header extends java/security/BasicPermission flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/lang/management/MemoryUsage -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/lang/management/MonitorInfo -header extends java/lang/management/LockInfo flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/lang/management/RuntimeMXBean -header extends java/lang/Object implements java/lang/management/PlatformManagedObject flags 601 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/Attribute -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 - -class name javax/management/AttributeList -header extends java/util/ArrayList flags 21 signature Ljava/util/ArrayList; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/BadAttributeValueExpException -header extends java/lang/Exception flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/BadBinaryOpValueExpException -header extends java/lang/Exception flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/BadStringOperationException -header extends java/lang/Exception flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/ConstructorParameters -header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 runtimeAnnotations @Ljava/lang/annotation/Documented;@Ljava/lang/annotation/Target;(value={eLjava/lang/annotation/ElementType;CONSTRUCTOR;})@Ljava/lang/annotation/Retention;(value=eLjava/lang/annotation/RetentionPolicy;RUNTIME;) - -class name javax/management/ImmutableDescriptor -header extends java/lang/Object implements javax/management/Descriptor flags 21 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanAttributeInfo -header extends javax/management/MBeanFeatureInfo implements java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanConstructorInfo -header extends javax/management/MBeanFeatureInfo implements java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanNotificationInfo -header extends javax/management/MBeanFeatureInfo implements java/lang/Cloneable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanOperationInfo -header extends javax/management/MBeanFeatureInfo implements java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanParameterInfo -header extends javax/management/MBeanFeatureInfo implements java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanPermission -header extends java/security/Permission flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanServerDelegate -header extends java/lang/Object implements javax/management/MBeanServerDelegateMBean,javax/management/NotificationEmitter flags 21 -innerclass innerClass java/lang/System$Logger outerClass java/lang/System innerClassName Logger flags 609 -innerclass innerClass java/lang/System$Logger$Level outerClass java/lang/System$Logger innerClassName Level flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanServerFactory -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/System$Logger outerClass java/lang/System innerClassName Logger flags 609 -innerclass innerClass java/lang/System$Logger$Level outerClass java/lang/System$Logger innerClassName Level flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanServerInvocationHandler -header extends java/lang/Object implements java/lang/reflect/InvocationHandler flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanServerNotification -header extends javax/management/Notification flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanServerPermission -header extends java/security/BasicPermission flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/MBeanTrustPermission -header extends java/security/BasicPermission flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/Notification -header extends java/util/EventObject flags 21 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/ObjectInstance -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 - -class name javax/management/Query -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/StandardEmitterMBean -header extends javax/management/StandardMBean implements javax/management/NotificationEmitter flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/StringValueExp -header extends java/lang/Object implements javax/management/ValueExp flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/loading/DefaultLoaderRepository -header extends java/lang/Object flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated; -innerclass innerClass java/lang/System$Logger outerClass java/lang/System innerClassName Logger flags 609 -innerclass innerClass java/lang/System$Logger$Level outerClass java/lang/System$Logger innerClassName Level flags 4019 - -class name javax/management/modelmbean/InvalidTargetObjectTypeException -header extends java/lang/Exception flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/modelmbean/XMLParseException -header extends java/lang/Exception flags 21 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/ArrayType -header extends javax/management/openmbean/OpenType flags 21 signature Ljavax/management/openmbean/OpenType; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/CompositeDataInvocationHandler -header extends java/lang/Object implements java/lang/reflect/InvocationHandler flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/CompositeDataSupport -header extends java/lang/Object implements javax/management/openmbean/CompositeData,java/io/Serializable flags 21 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/CompositeType -header extends javax/management/openmbean/OpenType flags 21 signature Ljavax/management/openmbean/OpenType; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/OpenMBeanAttributeInfoSupport -header extends javax/management/MBeanAttributeInfo implements javax/management/openmbean/OpenMBeanAttributeInfo flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/OpenMBeanOperationInfoSupport -header extends javax/management/MBeanOperationInfo implements javax/management/openmbean/OpenMBeanOperationInfo flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/SimpleType -header extends javax/management/openmbean/OpenType flags 31 signature Ljavax/management/openmbean/OpenType; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/TabularDataSupport -header extends java/lang/Object implements javax/management/openmbean/TabularData,java/util/Map,java/lang/Cloneable,java/io/Serializable flags 21 signature Ljava/lang/Object;Ljavax/management/openmbean/TabularData;Ljava/util/Map;Ljava/lang/Cloneable;Ljava/io/Serializable; -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/openmbean/TabularType -header extends javax/management/openmbean/OpenType flags 21 signature Ljavax/management/openmbean/OpenType; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/relation/RelationNotification -header extends javax/management/Notification flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 - -class name javax/management/relation/RelationSupport -header extends java/lang/Object implements javax/management/relation/RelationSupportMBean,javax/management/MBeanRegistration flags 21 -innerclass innerClass java/lang/System$Logger outerClass java/lang/System innerClassName Logger flags 609 -innerclass innerClass java/lang/System$Logger$Level outerClass java/lang/System$Logger innerClassName Level flags 4019 - -class name javax/management/relation/Role -header extends java/lang/Object implements java/io/Serializable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/relation/RoleInfo -header extends java/lang/Object implements java/io/Serializable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/relation/RoleResult -header extends java/lang/Object implements java/io/Serializable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 - -class name javax/management/relation/RoleUnresolved -header extends java/lang/Object implements java/io/Serializable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name javax/management/remote/JMXConnector -method name getMBeanServerConnection descriptor (Ljavax/security/auth/Subject;)Ljavax/management/MBeanServerConnection; method name getMBeanServerConnection descriptor (Ljavax/security/auth/Subject;)Ljavax/management/MBeanServerConnection; thrownTypes java/io/IOException flags 401 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="21") -class name javax/management/remote/JMXConnectorServerFactory -header extends java/lang/Object flags 21 -innerclass innerClass java/util/ServiceLoader$Provider outerClass java/util/ServiceLoader innerClassName Provider flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/remote/JMXPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/remote/JMXServiceURL -header extends java/lang/Object implements java/io/Serializable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/remote/NotificationResult -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 - -class name javax/management/remote/TargetedNotification -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 - diff --git a/src/jdk.compiler/share/data/symbols/java.management.rmi-H.sym.txt b/src/jdk.compiler/share/data/symbols/java.management.rmi-H.sym.txt deleted file mode 100644 index 18477d6862fb9..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.management.rmi-H.sym.txt +++ /dev/null @@ -1,39 +0,0 @@ -# -# Copyright (c) 2021, 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 javax/management/remote/rmi/RMIConnectorServer -header extends javax/management/remote/JMXConnectorServer flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/remote/rmi/RMIIIOPServerImpl -header extends javax/management/remote/rmi/RMIServerImpl flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated; - -class name javax/management/remote/rmi/RMIServerImpl -header extends java/lang/Object implements java/io/Closeable,javax/management/remote/rmi/RMIServer flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.management.rmi-I.sym.txt b/src/jdk.compiler/share/data/symbols/java.management.rmi-I.sym.txt deleted file mode 100644 index 18477d6862fb9..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.management.rmi-I.sym.txt +++ /dev/null @@ -1,39 +0,0 @@ -# -# Copyright (c) 2021, 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 javax/management/remote/rmi/RMIConnectorServer -header extends javax/management/remote/JMXConnectorServer flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/remote/rmi/RMIIIOPServerImpl -header extends javax/management/remote/rmi/RMIServerImpl flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated; - -class name javax/management/remote/rmi/RMIServerImpl -header extends java/lang/Object implements java/io/Closeable,javax/management/remote/rmi/RMIServer flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.management.rmi-J.sym.txt b/src/jdk.compiler/share/data/symbols/java.management.rmi-J.sym.txt deleted file mode 100644 index 46b3d3b6adbee..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.management.rmi-J.sym.txt +++ /dev/null @@ -1,39 +0,0 @@ -# -# Copyright (c) 2022, 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 javax/management/remote/rmi/RMIConnectorServer -header extends javax/management/remote/JMXConnectorServer flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/remote/rmi/RMIIIOPServerImpl -header extends javax/management/remote/rmi/RMIServerImpl flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated; - -class name javax/management/remote/rmi/RMIServerImpl -header extends java/lang/Object implements java/io/Closeable,javax/management/remote/rmi/RMIServer flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.management.rmi-K.sym.txt b/src/jdk.compiler/share/data/symbols/java.management.rmi-K.sym.txt deleted file mode 100644 index 46b3d3b6adbee..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.management.rmi-K.sym.txt +++ /dev/null @@ -1,39 +0,0 @@ -# -# Copyright (c) 2022, 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 javax/management/remote/rmi/RMIConnectorServer -header extends javax/management/remote/JMXConnectorServer flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/remote/rmi/RMIIIOPServerImpl -header extends javax/management/remote/rmi/RMIServerImpl flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated; - -class name javax/management/remote/rmi/RMIServerImpl -header extends java/lang/Object implements java/io/Closeable,javax/management/remote/rmi/RMIServer flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.management.rmi-L.sym.txt b/src/jdk.compiler/share/data/symbols/java.management.rmi-L.sym.txt index 956cfb6f2ddc7..eb245fb98a587 100644 --- a/src/jdk.compiler/share/data/symbols/java.management.rmi-L.sym.txt +++ b/src/jdk.compiler/share/data/symbols/java.management.rmi-L.sym.txt @@ -26,13 +26,5 @@ # ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ### # ########################################################## # -class name javax/management/remote/rmi/RMIConnectorServer -header extends javax/management/remote/JMXConnectorServer flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/management/remote/rmi/RMIIIOPServerImpl -class name javax/management/remote/rmi/RMIServerImpl -header extends java/lang/Object implements java/io/Closeable,javax/management/remote/rmi/RMIServer flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.naming-H.sym.txt b/src/jdk.compiler/share/data/symbols/java.naming-H.sym.txt index 0d55209508e67..9e07ea30f72f3 100644 --- a/src/jdk.compiler/share/data/symbols/java.naming-H.sym.txt +++ b/src/jdk.compiler/share/data/symbols/java.naming-H.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -26,55 +26,7 @@ # ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ### # ########################################################## # -class name javax/naming/BinaryRefAddr -header extends javax/naming/RefAddr flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/Binding -header extends javax/naming/NameClassPair flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/CompositeName -header extends java/lang/Object implements javax/naming/Name flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/CompoundName -header extends java/lang/Object implements javax/naming/Name flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name javax/naming/Context -field name APPLET descriptor Ljava/lang/String; field name APPLET descriptor Ljava/lang/String; constantValue java.naming.applet flags 19 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="9") -class name javax/naming/LinkException -header extends javax/naming/NamingException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/NameClassPair -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 - -class name javax/naming/NamingException -header extends java/lang/Exception flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/RefAddr -header extends java/lang/Object implements java/io/Serializable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/Reference -header extends java/lang/Object implements java/lang/Cloneable,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/directory/AttributeModificationException -header extends javax/naming/NamingException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/directory/ModificationItem -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 - -class name javax/naming/directory/SearchResult -header extends javax/naming/Binding flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.naming-I.sym.txt b/src/jdk.compiler/share/data/symbols/java.naming-I.sym.txt deleted file mode 100644 index f913ec6f184bf..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.naming-I.sym.txt +++ /dev/null @@ -1,76 +0,0 @@ -# -# Copyright (c) 2021, 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 javax/naming/BinaryRefAddr -header extends javax/naming/RefAddr flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/Binding -header extends javax/naming/NameClassPair flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/CompositeName -header extends java/lang/Object implements javax/naming/Name flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/CompoundName -header extends java/lang/Object implements javax/naming/Name flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/LinkException -header extends javax/naming/NamingException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/NameClassPair -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 - -class name javax/naming/NamingException -header extends java/lang/Exception flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/RefAddr -header extends java/lang/Object implements java/io/Serializable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/Reference -header extends java/lang/Object implements java/lang/Cloneable,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/directory/AttributeModificationException -header extends javax/naming/NamingException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/directory/ModificationItem -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 - -class name javax/naming/directory/SearchResult -header extends javax/naming/Binding flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.naming-J.sym.txt b/src/jdk.compiler/share/data/symbols/java.naming-J.sym.txt deleted file mode 100644 index f1d6d17412c43..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.naming-J.sym.txt +++ /dev/null @@ -1,76 +0,0 @@ -# -# Copyright (c) 2022, 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 javax/naming/BinaryRefAddr -header extends javax/naming/RefAddr flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/Binding -header extends javax/naming/NameClassPair flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/CompositeName -header extends java/lang/Object implements javax/naming/Name flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/CompoundName -header extends java/lang/Object implements javax/naming/Name flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/LinkException -header extends javax/naming/NamingException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/NameClassPair -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 - -class name javax/naming/NamingException -header extends java/lang/Exception flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/RefAddr -header extends java/lang/Object implements java/io/Serializable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/Reference -header extends java/lang/Object implements java/lang/Cloneable,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/directory/AttributeModificationException -header extends javax/naming/NamingException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/directory/ModificationItem -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 - -class name javax/naming/directory/SearchResult -header extends javax/naming/Binding flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.naming-K.sym.txt b/src/jdk.compiler/share/data/symbols/java.naming-K.sym.txt index 335632cea8727..68c03c49d11de 100644 --- a/src/jdk.compiler/share/data/symbols/java.naming-K.sym.txt +++ b/src/jdk.compiler/share/data/symbols/java.naming-K.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -26,54 +26,6 @@ # ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ### # ########################################################## # -class name javax/naming/BinaryRefAddr -header extends javax/naming/RefAddr flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/Binding -header extends javax/naming/NameClassPair flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/CompositeName -header extends java/lang/Object implements javax/naming/Name flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/CompoundName -header extends java/lang/Object implements javax/naming/Name flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/LinkException -header extends javax/naming/NamingException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/NameClassPair -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 - -class name javax/naming/NamingException -header extends java/lang/Exception flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/RefAddr -header extends java/lang/Object implements java/io/Serializable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/Reference -header extends java/lang/Object implements java/lang/Cloneable,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/directory/AttributeModificationException -header extends javax/naming/NamingException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/directory/ModificationItem -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 - -class name javax/naming/directory/SearchResult -header extends javax/naming/Binding flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name javax/naming/spi/DirectoryManager header extends javax/naming/spi/NamingManager flags 21 innerclass innerClass javax/naming/spi/DirStateFactory$Result outerClass javax/naming/spi/DirStateFactory innerClassName Result flags 9 diff --git a/src/jdk.compiler/share/data/symbols/java.naming-L.sym.txt b/src/jdk.compiler/share/data/symbols/java.naming-L.sym.txt deleted file mode 100644 index 8253f7e15472c..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.naming-L.sym.txt +++ /dev/null @@ -1,76 +0,0 @@ -# -# Copyright (c) 2023, 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 javax/naming/BinaryRefAddr -header extends javax/naming/RefAddr flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/Binding -header extends javax/naming/NameClassPair flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/CompositeName -header extends java/lang/Object implements javax/naming/Name flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/CompoundName -header extends java/lang/Object implements javax/naming/Name flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/LinkException -header extends javax/naming/NamingException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/NameClassPair -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 - -class name javax/naming/NamingException -header extends java/lang/Exception flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/RefAddr -header extends java/lang/Object implements java/io/Serializable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/Reference -header extends java/lang/Object implements java/lang/Cloneable,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/directory/AttributeModificationException -header extends javax/naming/NamingException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/naming/directory/ModificationItem -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 - -class name javax/naming/directory/SearchResult -header extends javax/naming/Binding flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.rmi-H.sym.txt b/src/jdk.compiler/share/data/symbols/java.rmi-H.sym.txt index 2f143621aeff1..f4817386c8a83 100644 --- a/src/jdk.compiler/share/data/symbols/java.rmi-H.sym.txt +++ b/src/jdk.compiler/share/data/symbols/java.rmi-H.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2021, 2023, 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,10 +32,6 @@ header exports java/rmi,java/rmi/dgc,java/rmi/registry,java/rmi/server,javax/rmi class name java/rmi/RMISecurityManager header extends java/lang/SecurityManager flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="1.8") -class name java/rmi/RemoteException -header extends java/io/IOException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/rmi/activation/Activatable -class name java/rmi/activation/ActivateFailedException @@ -68,23 +64,3 @@ innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang -class name java/rmi/activation/UnknownObjectException -class name java/rmi/dgc/VMID -header extends java/lang/Object implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/rmi/server/ObjID -header extends java/lang/Object implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/rmi/server/RemoteObject -header extends java/lang/Object implements java/rmi/Remote,java/io/Serializable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/rmi/server/ServerCloneException -header extends java/lang/CloneNotSupportedException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/rmi/server/UID -header extends java/lang/Object implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.rmi-I.sym.txt b/src/jdk.compiler/share/data/symbols/java.rmi-I.sym.txt deleted file mode 100644 index 9e577bb975ca0..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.rmi-I.sym.txt +++ /dev/null @@ -1,52 +0,0 @@ -# -# Copyright (c) 2021, 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/RemoteException -header extends java/io/IOException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/rmi/dgc/VMID -header extends java/lang/Object implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/rmi/server/ObjID -header extends java/lang/Object implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/rmi/server/RemoteObject -header extends java/lang/Object implements java/rmi/Remote,java/io/Serializable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/rmi/server/ServerCloneException -header extends java/lang/CloneNotSupportedException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/rmi/server/UID -header extends java/lang/Object implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.rmi-J.sym.txt b/src/jdk.compiler/share/data/symbols/java.rmi-J.sym.txt deleted file mode 100644 index 20c9c67810952..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.rmi-J.sym.txt +++ /dev/null @@ -1,52 +0,0 @@ -# -# Copyright (c) 2022, 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/RemoteException -header extends java/io/IOException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/rmi/dgc/VMID -header extends java/lang/Object implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/rmi/server/ObjID -header extends java/lang/Object implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/rmi/server/RemoteObject -header extends java/lang/Object implements java/rmi/Remote,java/io/Serializable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/rmi/server/ServerCloneException -header extends java/lang/CloneNotSupportedException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/rmi/server/UID -header extends java/lang/Object implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.rmi-K.sym.txt b/src/jdk.compiler/share/data/symbols/java.rmi-K.sym.txt deleted file mode 100644 index 20c9c67810952..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.rmi-K.sym.txt +++ /dev/null @@ -1,52 +0,0 @@ -# -# Copyright (c) 2022, 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/RemoteException -header extends java/io/IOException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/rmi/dgc/VMID -header extends java/lang/Object implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/rmi/server/ObjID -header extends java/lang/Object implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/rmi/server/RemoteObject -header extends java/lang/Object implements java/rmi/Remote,java/io/Serializable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/rmi/server/ServerCloneException -header extends java/lang/CloneNotSupportedException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/rmi/server/UID -header extends java/lang/Object implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.rmi-L.sym.txt b/src/jdk.compiler/share/data/symbols/java.rmi-L.sym.txt deleted file mode 100644 index eef51cac29aef..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.rmi-L.sym.txt +++ /dev/null @@ -1,52 +0,0 @@ -# -# Copyright (c) 2023, 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/RemoteException -header extends java/io/IOException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/rmi/dgc/VMID -header extends java/lang/Object implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/rmi/server/ObjID -header extends java/lang/Object implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/rmi/server/RemoteObject -header extends java/lang/Object implements java/rmi/Remote,java/io/Serializable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/rmi/server/ServerCloneException -header extends java/lang/CloneNotSupportedException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/rmi/server/UID -header extends java/lang/Object implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.scripting-H.sym.txt b/src/jdk.compiler/share/data/symbols/java.scripting-H.sym.txt deleted file mode 100644 index 661fc972e825f..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.scripting-H.sym.txt +++ /dev/null @@ -1,32 +0,0 @@ -# -# Copyright (c) 2021, 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 javax/script/ScriptException -header extends java/lang/Exception flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.scripting-I.sym.txt b/src/jdk.compiler/share/data/symbols/java.scripting-I.sym.txt deleted file mode 100644 index 661fc972e825f..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.scripting-I.sym.txt +++ /dev/null @@ -1,32 +0,0 @@ -# -# Copyright (c) 2021, 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 javax/script/ScriptException -header extends java/lang/Exception flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.scripting-J.sym.txt b/src/jdk.compiler/share/data/symbols/java.scripting-J.sym.txt deleted file mode 100644 index 93890844c9942..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.scripting-J.sym.txt +++ /dev/null @@ -1,32 +0,0 @@ -# -# Copyright (c) 2022, 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 javax/script/ScriptException -header extends java/lang/Exception flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.scripting-K.sym.txt b/src/jdk.compiler/share/data/symbols/java.scripting-K.sym.txt deleted file mode 100644 index 93890844c9942..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.scripting-K.sym.txt +++ /dev/null @@ -1,32 +0,0 @@ -# -# Copyright (c) 2022, 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 javax/script/ScriptException -header extends java/lang/Exception flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.scripting-L.sym.txt b/src/jdk.compiler/share/data/symbols/java.scripting-L.sym.txt deleted file mode 100644 index 083b604bdd1eb..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.scripting-L.sym.txt +++ /dev/null @@ -1,32 +0,0 @@ -# -# Copyright (c) 2023, 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 javax/script/ScriptException -header extends java/lang/Exception flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.security.jgss-H.sym.txt b/src/jdk.compiler/share/data/symbols/java.security.jgss-H.sym.txt deleted file mode 100644 index 6af48bfea4aea..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.security.jgss-H.sym.txt +++ /dev/null @@ -1,69 +0,0 @@ -# -# Copyright (c) 2021, 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 javax/security/auth/kerberos/DelegationPermission -header extends java/security/BasicPermission implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/security/auth/kerberos/EncryptionKey -header extends java/lang/Object implements javax/crypto/SecretKey flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/security/auth/kerberos/KerberosCredMessage -header extends java/lang/Object implements javax/security/auth/Destroyable flags 31 -innerclass innerClass java/util/Base64$Encoder outerClass java/util/Base64 innerClassName Encoder flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/security/auth/kerberos/KerberosKey -header extends java/lang/Object implements javax/crypto/SecretKey flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/security/auth/kerberos/KerberosPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/security/auth/kerberos/KerberosTicket -header extends java/lang/Object implements javax/security/auth/Destroyable,javax/security/auth/Refreshable,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/security/auth/kerberos/KeyTab -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/security/auth/kerberos/ServicePermission -header extends java/security/Permission implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name org/ietf/jgss/GSSException -header extends java/lang/Exception flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name org/ietf/jgss/Oid -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.security.jgss-I.sym.txt b/src/jdk.compiler/share/data/symbols/java.security.jgss-I.sym.txt deleted file mode 100644 index 6af48bfea4aea..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.security.jgss-I.sym.txt +++ /dev/null @@ -1,69 +0,0 @@ -# -# Copyright (c) 2021, 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 javax/security/auth/kerberos/DelegationPermission -header extends java/security/BasicPermission implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/security/auth/kerberos/EncryptionKey -header extends java/lang/Object implements javax/crypto/SecretKey flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/security/auth/kerberos/KerberosCredMessage -header extends java/lang/Object implements javax/security/auth/Destroyable flags 31 -innerclass innerClass java/util/Base64$Encoder outerClass java/util/Base64 innerClassName Encoder flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/security/auth/kerberos/KerberosKey -header extends java/lang/Object implements javax/crypto/SecretKey flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/security/auth/kerberos/KerberosPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/security/auth/kerberos/KerberosTicket -header extends java/lang/Object implements javax/security/auth/Destroyable,javax/security/auth/Refreshable,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/security/auth/kerberos/KeyTab -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/security/auth/kerberos/ServicePermission -header extends java/security/Permission implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name org/ietf/jgss/GSSException -header extends java/lang/Exception flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name org/ietf/jgss/Oid -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.security.jgss-J.sym.txt b/src/jdk.compiler/share/data/symbols/java.security.jgss-J.sym.txt deleted file mode 100644 index d200d5018b3a9..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.security.jgss-J.sym.txt +++ /dev/null @@ -1,69 +0,0 @@ -# -# Copyright (c) 2022, 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 javax/security/auth/kerberos/DelegationPermission -header extends java/security/BasicPermission implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/security/auth/kerberos/EncryptionKey -header extends java/lang/Object implements javax/crypto/SecretKey flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/security/auth/kerberos/KerberosCredMessage -header extends java/lang/Object implements javax/security/auth/Destroyable flags 31 -innerclass innerClass java/util/Base64$Encoder outerClass java/util/Base64 innerClassName Encoder flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/security/auth/kerberos/KerberosKey -header extends java/lang/Object implements javax/crypto/SecretKey flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/security/auth/kerberos/KerberosPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/security/auth/kerberos/KerberosTicket -header extends java/lang/Object implements javax/security/auth/Destroyable,javax/security/auth/Refreshable,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/security/auth/kerberos/KeyTab -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/security/auth/kerberos/ServicePermission -header extends java/security/Permission implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name org/ietf/jgss/GSSException -header extends java/lang/Exception flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name org/ietf/jgss/Oid -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.security.jgss-K.sym.txt b/src/jdk.compiler/share/data/symbols/java.security.jgss-K.sym.txt deleted file mode 100644 index d200d5018b3a9..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.security.jgss-K.sym.txt +++ /dev/null @@ -1,69 +0,0 @@ -# -# Copyright (c) 2022, 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 javax/security/auth/kerberos/DelegationPermission -header extends java/security/BasicPermission implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/security/auth/kerberos/EncryptionKey -header extends java/lang/Object implements javax/crypto/SecretKey flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/security/auth/kerberos/KerberosCredMessage -header extends java/lang/Object implements javax/security/auth/Destroyable flags 31 -innerclass innerClass java/util/Base64$Encoder outerClass java/util/Base64 innerClassName Encoder flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/security/auth/kerberos/KerberosKey -header extends java/lang/Object implements javax/crypto/SecretKey flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/security/auth/kerberos/KerberosPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/security/auth/kerberos/KerberosTicket -header extends java/lang/Object implements javax/security/auth/Destroyable,javax/security/auth/Refreshable,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/security/auth/kerberos/KeyTab -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/security/auth/kerberos/ServicePermission -header extends java/security/Permission implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name org/ietf/jgss/GSSException -header extends java/lang/Exception flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name org/ietf/jgss/Oid -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.security.jgss-L.sym.txt b/src/jdk.compiler/share/data/symbols/java.security.jgss-L.sym.txt deleted file mode 100644 index 4391727d20804..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.security.jgss-L.sym.txt +++ /dev/null @@ -1,69 +0,0 @@ -# -# Copyright (c) 2023, 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 javax/security/auth/kerberos/DelegationPermission -header extends java/security/BasicPermission implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/security/auth/kerberos/EncryptionKey -header extends java/lang/Object implements javax/crypto/SecretKey flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/security/auth/kerberos/KerberosCredMessage -header extends java/lang/Object implements javax/security/auth/Destroyable flags 31 -innerclass innerClass java/util/Base64$Encoder outerClass java/util/Base64 innerClassName Encoder flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/security/auth/kerberos/KerberosKey -header extends java/lang/Object implements javax/crypto/SecretKey flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/security/auth/kerberos/KerberosPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/security/auth/kerberos/KerberosTicket -header extends java/lang/Object implements javax/security/auth/Destroyable,javax/security/auth/Refreshable,java/io/Serializable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/security/auth/kerberos/KeyTab -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/security/auth/kerberos/ServicePermission -header extends java/security/Permission implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name org/ietf/jgss/GSSException -header extends java/lang/Exception flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name org/ietf/jgss/Oid -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.security.sasl-H.sym.txt b/src/jdk.compiler/share/data/symbols/java.security.sasl-H.sym.txt deleted file mode 100644 index 37bab20606abb..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.security.sasl-H.sym.txt +++ /dev/null @@ -1,32 +0,0 @@ -# -# Copyright (c) 2021, 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 javax/security/sasl/SaslException -header extends java/io/IOException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.security.sasl-I.sym.txt b/src/jdk.compiler/share/data/symbols/java.security.sasl-I.sym.txt deleted file mode 100644 index 37bab20606abb..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.security.sasl-I.sym.txt +++ /dev/null @@ -1,32 +0,0 @@ -# -# Copyright (c) 2021, 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 javax/security/sasl/SaslException -header extends java/io/IOException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.security.sasl-J.sym.txt b/src/jdk.compiler/share/data/symbols/java.security.sasl-J.sym.txt deleted file mode 100644 index b89a95b8822f5..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.security.sasl-J.sym.txt +++ /dev/null @@ -1,32 +0,0 @@ -# -# Copyright (c) 2022, 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 javax/security/sasl/SaslException -header extends java/io/IOException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.security.sasl-K.sym.txt b/src/jdk.compiler/share/data/symbols/java.security.sasl-K.sym.txt deleted file mode 100644 index b89a95b8822f5..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.security.sasl-K.sym.txt +++ /dev/null @@ -1,32 +0,0 @@ -# -# Copyright (c) 2022, 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 javax/security/sasl/SaslException -header extends java/io/IOException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.security.sasl-L.sym.txt b/src/jdk.compiler/share/data/symbols/java.security.sasl-L.sym.txt deleted file mode 100644 index d979a055a9caf..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.security.sasl-L.sym.txt +++ /dev/null @@ -1,32 +0,0 @@ -# -# Copyright (c) 2023, 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 javax/security/sasl/SaslException -header extends java/io/IOException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.smartcardio-H.sym.txt b/src/jdk.compiler/share/data/symbols/java.smartcardio-H.sym.txt deleted file mode 100644 index 63ca75a641ec2..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.smartcardio-H.sym.txt +++ /dev/null @@ -1,62 +0,0 @@ -# -# Copyright (c) 2021, 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 javax/smartcardio/ATR -header extends java/lang/Object implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/smartcardio/Card -header extends java/lang/Object flags 421 - -class name javax/smartcardio/CardChannel -header extends java/lang/Object flags 421 - -class name javax/smartcardio/CardException -header extends java/lang/Exception flags 21 - -class name javax/smartcardio/CardNotPresentException -header extends javax/smartcardio/CardException flags 21 - -class name javax/smartcardio/CardPermission -header extends java/security/Permission flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/smartcardio/CardTerminal -header extends java/lang/Object flags 421 - -class name javax/smartcardio/CommandAPDU -header extends java/lang/Object implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/smartcardio/ResponseAPDU -header extends java/lang/Object implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/smartcardio/TerminalFactorySpi -header extends java/lang/Object flags 421 - diff --git a/src/jdk.compiler/share/data/symbols/java.smartcardio-I.sym.txt b/src/jdk.compiler/share/data/symbols/java.smartcardio-I.sym.txt deleted file mode 100644 index 63ca75a641ec2..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.smartcardio-I.sym.txt +++ /dev/null @@ -1,62 +0,0 @@ -# -# Copyright (c) 2021, 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 javax/smartcardio/ATR -header extends java/lang/Object implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/smartcardio/Card -header extends java/lang/Object flags 421 - -class name javax/smartcardio/CardChannel -header extends java/lang/Object flags 421 - -class name javax/smartcardio/CardException -header extends java/lang/Exception flags 21 - -class name javax/smartcardio/CardNotPresentException -header extends javax/smartcardio/CardException flags 21 - -class name javax/smartcardio/CardPermission -header extends java/security/Permission flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/smartcardio/CardTerminal -header extends java/lang/Object flags 421 - -class name javax/smartcardio/CommandAPDU -header extends java/lang/Object implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/smartcardio/ResponseAPDU -header extends java/lang/Object implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/smartcardio/TerminalFactorySpi -header extends java/lang/Object flags 421 - diff --git a/src/jdk.compiler/share/data/symbols/java.smartcardio-J.sym.txt b/src/jdk.compiler/share/data/symbols/java.smartcardio-J.sym.txt deleted file mode 100644 index a6ae9dbaf51cd..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.smartcardio-J.sym.txt +++ /dev/null @@ -1,62 +0,0 @@ -# -# Copyright (c) 2022, 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 javax/smartcardio/ATR -header extends java/lang/Object implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/smartcardio/Card -header extends java/lang/Object flags 421 - -class name javax/smartcardio/CardChannel -header extends java/lang/Object flags 421 - -class name javax/smartcardio/CardException -header extends java/lang/Exception flags 21 - -class name javax/smartcardio/CardNotPresentException -header extends javax/smartcardio/CardException flags 21 - -class name javax/smartcardio/CardPermission -header extends java/security/Permission flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/smartcardio/CardTerminal -header extends java/lang/Object flags 421 - -class name javax/smartcardio/CommandAPDU -header extends java/lang/Object implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/smartcardio/ResponseAPDU -header extends java/lang/Object implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/smartcardio/TerminalFactorySpi -header extends java/lang/Object flags 421 - diff --git a/src/jdk.compiler/share/data/symbols/java.smartcardio-K.sym.txt b/src/jdk.compiler/share/data/symbols/java.smartcardio-K.sym.txt deleted file mode 100644 index a6ae9dbaf51cd..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.smartcardio-K.sym.txt +++ /dev/null @@ -1,62 +0,0 @@ -# -# Copyright (c) 2022, 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 javax/smartcardio/ATR -header extends java/lang/Object implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/smartcardio/Card -header extends java/lang/Object flags 421 - -class name javax/smartcardio/CardChannel -header extends java/lang/Object flags 421 - -class name javax/smartcardio/CardException -header extends java/lang/Exception flags 21 - -class name javax/smartcardio/CardNotPresentException -header extends javax/smartcardio/CardException flags 21 - -class name javax/smartcardio/CardPermission -header extends java/security/Permission flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/smartcardio/CardTerminal -header extends java/lang/Object flags 421 - -class name javax/smartcardio/CommandAPDU -header extends java/lang/Object implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/smartcardio/ResponseAPDU -header extends java/lang/Object implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/smartcardio/TerminalFactorySpi -header extends java/lang/Object flags 421 - diff --git a/src/jdk.compiler/share/data/symbols/java.smartcardio-L.sym.txt b/src/jdk.compiler/share/data/symbols/java.smartcardio-L.sym.txt deleted file mode 100644 index 8e48ca3d44184..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.smartcardio-L.sym.txt +++ /dev/null @@ -1,62 +0,0 @@ -# -# Copyright (c) 2023, 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 javax/smartcardio/ATR -header extends java/lang/Object implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/smartcardio/Card -header extends java/lang/Object flags 421 - -class name javax/smartcardio/CardChannel -header extends java/lang/Object flags 421 - -class name javax/smartcardio/CardException -header extends java/lang/Exception flags 21 - -class name javax/smartcardio/CardNotPresentException -header extends javax/smartcardio/CardException flags 21 - -class name javax/smartcardio/CardPermission -header extends java/security/Permission flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/smartcardio/CardTerminal -header extends java/lang/Object flags 421 - -class name javax/smartcardio/CommandAPDU -header extends java/lang/Object implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/smartcardio/ResponseAPDU -header extends java/lang/Object implements java/io/Serializable flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/smartcardio/TerminalFactorySpi -header extends java/lang/Object flags 421 - diff --git a/src/jdk.compiler/share/data/symbols/java.sql-H.sym.txt b/src/jdk.compiler/share/data/symbols/java.sql-H.sym.txt deleted file mode 100644 index 16586cf28ca2f..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.sql-H.sym.txt +++ /dev/null @@ -1,60 +0,0 @@ -# -# Copyright (c) 2021, 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/sql/BatchUpdateException -header extends java/sql/SQLException flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 - -class name java/sql/ConnectionBuilder -header extends java/lang/Object flags 601 - -class name java/sql/JDBCType -header extends java/lang/Enum implements java/sql/SQLType flags 4031 signature Ljava/lang/Enum;Ljava/sql/SQLType; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/sql/SQLWarning -header extends java/sql/SQLException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/sql/ShardingKey -header extends java/lang/Object flags 601 - -class name java/sql/ShardingKeyBuilder -header extends java/lang/Object flags 601 - -class name java/sql/Statement -header extends java/lang/Object implements java/sql/Wrapper,java/lang/AutoCloseable flags 601 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sql/PooledConnectionBuilder -header extends java/lang/Object flags 601 - -class name javax/sql/XAConnectionBuilder -header extends java/lang/Object flags 601 - diff --git a/src/jdk.compiler/share/data/symbols/java.sql-I.sym.txt b/src/jdk.compiler/share/data/symbols/java.sql-I.sym.txt deleted file mode 100644 index 16586cf28ca2f..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.sql-I.sym.txt +++ /dev/null @@ -1,60 +0,0 @@ -# -# Copyright (c) 2021, 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/sql/BatchUpdateException -header extends java/sql/SQLException flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 - -class name java/sql/ConnectionBuilder -header extends java/lang/Object flags 601 - -class name java/sql/JDBCType -header extends java/lang/Enum implements java/sql/SQLType flags 4031 signature Ljava/lang/Enum;Ljava/sql/SQLType; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/sql/SQLWarning -header extends java/sql/SQLException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/sql/ShardingKey -header extends java/lang/Object flags 601 - -class name java/sql/ShardingKeyBuilder -header extends java/lang/Object flags 601 - -class name java/sql/Statement -header extends java/lang/Object implements java/sql/Wrapper,java/lang/AutoCloseable flags 601 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sql/PooledConnectionBuilder -header extends java/lang/Object flags 601 - -class name javax/sql/XAConnectionBuilder -header extends java/lang/Object flags 601 - diff --git a/src/jdk.compiler/share/data/symbols/java.sql-J.sym.txt b/src/jdk.compiler/share/data/symbols/java.sql-J.sym.txt deleted file mode 100644 index 445e6be3d1077..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.sql-J.sym.txt +++ /dev/null @@ -1,60 +0,0 @@ -# -# Copyright (c) 2022, 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/sql/BatchUpdateException -header extends java/sql/SQLException flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 - -class name java/sql/ConnectionBuilder -header extends java/lang/Object flags 601 - -class name java/sql/JDBCType -header extends java/lang/Enum implements java/sql/SQLType flags 4031 signature Ljava/lang/Enum;Ljava/sql/SQLType; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/sql/SQLWarning -header extends java/sql/SQLException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/sql/ShardingKey -header extends java/lang/Object flags 601 - -class name java/sql/ShardingKeyBuilder -header extends java/lang/Object flags 601 - -class name java/sql/Statement -header extends java/lang/Object implements java/sql/Wrapper,java/lang/AutoCloseable flags 601 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sql/PooledConnectionBuilder -header extends java/lang/Object flags 601 - -class name javax/sql/XAConnectionBuilder -header extends java/lang/Object flags 601 - diff --git a/src/jdk.compiler/share/data/symbols/java.sql-K.sym.txt b/src/jdk.compiler/share/data/symbols/java.sql-K.sym.txt deleted file mode 100644 index 445e6be3d1077..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.sql-K.sym.txt +++ /dev/null @@ -1,60 +0,0 @@ -# -# Copyright (c) 2022, 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/sql/BatchUpdateException -header extends java/sql/SQLException flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 - -class name java/sql/ConnectionBuilder -header extends java/lang/Object flags 601 - -class name java/sql/JDBCType -header extends java/lang/Enum implements java/sql/SQLType flags 4031 signature Ljava/lang/Enum;Ljava/sql/SQLType; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/sql/SQLWarning -header extends java/sql/SQLException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/sql/ShardingKey -header extends java/lang/Object flags 601 - -class name java/sql/ShardingKeyBuilder -header extends java/lang/Object flags 601 - -class name java/sql/Statement -header extends java/lang/Object implements java/sql/Wrapper,java/lang/AutoCloseable flags 601 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sql/PooledConnectionBuilder -header extends java/lang/Object flags 601 - -class name javax/sql/XAConnectionBuilder -header extends java/lang/Object flags 601 - diff --git a/src/jdk.compiler/share/data/symbols/java.sql-L.sym.txt b/src/jdk.compiler/share/data/symbols/java.sql-L.sym.txt deleted file mode 100644 index c95dcbcec08d8..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.sql-L.sym.txt +++ /dev/null @@ -1,60 +0,0 @@ -# -# Copyright (c) 2023, 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/sql/BatchUpdateException -header extends java/sql/SQLException flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 - -class name java/sql/ConnectionBuilder -header extends java/lang/Object flags 601 - -class name java/sql/JDBCType -header extends java/lang/Enum implements java/sql/SQLType flags 4031 signature Ljava/lang/Enum;Ljava/sql/SQLType; -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/sql/SQLWarning -header extends java/sql/SQLException flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name java/sql/ShardingKey -header extends java/lang/Object flags 601 - -class name java/sql/ShardingKeyBuilder -header extends java/lang/Object flags 601 - -class name java/sql/Statement -header extends java/lang/Object implements java/sql/Wrapper,java/lang/AutoCloseable flags 601 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sql/PooledConnectionBuilder -header extends java/lang/Object flags 601 - -class name javax/sql/XAConnectionBuilder -header extends java/lang/Object flags 601 - diff --git a/src/jdk.compiler/share/data/symbols/java.sql.rowset-H.sym.txt b/src/jdk.compiler/share/data/symbols/java.sql.rowset-H.sym.txt deleted file mode 100644 index ea90b56bbc736..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.sql.rowset-H.sym.txt +++ /dev/null @@ -1,69 +0,0 @@ -# -# Copyright (c) 2021, 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 javax/sql/rowset/BaseRowSet -header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sql/rowset/serial/SerialArray -header extends java/lang/Object implements java/sql/Array,java/io/Serializable,java/lang/Cloneable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 - -class name javax/sql/rowset/serial/SerialBlob -header extends java/lang/Object implements java/sql/Blob,java/io/Serializable,java/lang/Cloneable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 - -class name javax/sql/rowset/serial/SerialClob -header extends java/lang/Object implements java/sql/Clob,java/io/Serializable,java/lang/Cloneable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sql/rowset/serial/SerialDatalink -header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sql/rowset/serial/SerialJavaObject -header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 - -class name javax/sql/rowset/serial/SerialRef -header extends java/lang/Object implements java/sql/Ref,java/io/Serializable,java/lang/Cloneable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sql/rowset/serial/SerialStruct -header extends java/lang/Object implements java/sql/Struct,java/io/Serializable,java/lang/Cloneable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.sql.rowset-I.sym.txt b/src/jdk.compiler/share/data/symbols/java.sql.rowset-I.sym.txt deleted file mode 100644 index ea90b56bbc736..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.sql.rowset-I.sym.txt +++ /dev/null @@ -1,69 +0,0 @@ -# -# Copyright (c) 2021, 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 javax/sql/rowset/BaseRowSet -header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sql/rowset/serial/SerialArray -header extends java/lang/Object implements java/sql/Array,java/io/Serializable,java/lang/Cloneable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 - -class name javax/sql/rowset/serial/SerialBlob -header extends java/lang/Object implements java/sql/Blob,java/io/Serializable,java/lang/Cloneable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 - -class name javax/sql/rowset/serial/SerialClob -header extends java/lang/Object implements java/sql/Clob,java/io/Serializable,java/lang/Cloneable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sql/rowset/serial/SerialDatalink -header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sql/rowset/serial/SerialJavaObject -header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 - -class name javax/sql/rowset/serial/SerialRef -header extends java/lang/Object implements java/sql/Ref,java/io/Serializable,java/lang/Cloneable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sql/rowset/serial/SerialStruct -header extends java/lang/Object implements java/sql/Struct,java/io/Serializable,java/lang/Cloneable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.sql.rowset-J.sym.txt b/src/jdk.compiler/share/data/symbols/java.sql.rowset-J.sym.txt deleted file mode 100644 index c41075948fd01..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.sql.rowset-J.sym.txt +++ /dev/null @@ -1,69 +0,0 @@ -# -# Copyright (c) 2022, 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 javax/sql/rowset/BaseRowSet -header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sql/rowset/serial/SerialArray -header extends java/lang/Object implements java/sql/Array,java/io/Serializable,java/lang/Cloneable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 - -class name javax/sql/rowset/serial/SerialBlob -header extends java/lang/Object implements java/sql/Blob,java/io/Serializable,java/lang/Cloneable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 - -class name javax/sql/rowset/serial/SerialClob -header extends java/lang/Object implements java/sql/Clob,java/io/Serializable,java/lang/Cloneable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sql/rowset/serial/SerialDatalink -header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sql/rowset/serial/SerialJavaObject -header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 - -class name javax/sql/rowset/serial/SerialRef -header extends java/lang/Object implements java/sql/Ref,java/io/Serializable,java/lang/Cloneable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sql/rowset/serial/SerialStruct -header extends java/lang/Object implements java/sql/Struct,java/io/Serializable,java/lang/Cloneable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.sql.rowset-K.sym.txt b/src/jdk.compiler/share/data/symbols/java.sql.rowset-K.sym.txt index 11a7e503a8c36..96e792a20a556 100644 --- a/src/jdk.compiler/share/data/symbols/java.sql.rowset-K.sym.txt +++ b/src/jdk.compiler/share/data/symbols/java.sql.rowset-K.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -26,48 +26,7 @@ # ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ### # ########################################################## # -class name javax/sql/rowset/BaseRowSet -header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name javax/sql/rowset/serial/SQLOutputImpl header extends java/lang/Object implements java/sql/SQLOutput flags 21 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -class name javax/sql/rowset/serial/SerialArray -header extends java/lang/Object implements java/sql/Array,java/io/Serializable,java/lang/Cloneable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 - -class name javax/sql/rowset/serial/SerialBlob -header extends java/lang/Object implements java/sql/Blob,java/io/Serializable,java/lang/Cloneable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 - -class name javax/sql/rowset/serial/SerialClob -header extends java/lang/Object implements java/sql/Clob,java/io/Serializable,java/lang/Cloneable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sql/rowset/serial/SerialDatalink -header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sql/rowset/serial/SerialJavaObject -header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 - -class name javax/sql/rowset/serial/SerialRef -header extends java/lang/Object implements java/sql/Ref,java/io/Serializable,java/lang/Cloneable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sql/rowset/serial/SerialStruct -header extends java/lang/Object implements java/sql/Struct,java/io/Serializable,java/lang/Cloneable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.sql.rowset-L.sym.txt b/src/jdk.compiler/share/data/symbols/java.sql.rowset-L.sym.txt deleted file mode 100644 index 588fe07e513fc..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.sql.rowset-L.sym.txt +++ /dev/null @@ -1,69 +0,0 @@ -# -# Copyright (c) 2023, 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 javax/sql/rowset/BaseRowSet -header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sql/rowset/serial/SerialArray -header extends java/lang/Object implements java/sql/Array,java/io/Serializable,java/lang/Cloneable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 - -class name javax/sql/rowset/serial/SerialBlob -header extends java/lang/Object implements java/sql/Blob,java/io/Serializable,java/lang/Cloneable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 - -class name javax/sql/rowset/serial/SerialClob -header extends java/lang/Object implements java/sql/Clob,java/io/Serializable,java/lang/Cloneable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sql/rowset/serial/SerialDatalink -header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sql/rowset/serial/SerialJavaObject -header extends java/lang/Object implements java/io/Serializable,java/lang/Cloneable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 - -class name javax/sql/rowset/serial/SerialRef -header extends java/lang/Object implements java/sql/Ref,java/io/Serializable,java/lang/Cloneable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/sql/rowset/serial/SerialStruct -header extends java/lang/Object implements java/sql/Struct,java/io/Serializable,java/lang/Cloneable flags 21 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.xml-H.sym.txt b/src/jdk.compiler/share/data/symbols/java.xml-H.sym.txt deleted file mode 100644 index dabe60e2adf82..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.xml-H.sym.txt +++ /dev/null @@ -1,150 +0,0 @@ -# -# Copyright (c) 2021, 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 javax/xml/catalog/Catalog -header extends java/lang/Object flags 601 - -class name javax/xml/catalog/CatalogException -header extends java/lang/RuntimeException flags 21 - -class name javax/xml/catalog/CatalogManager -header extends java/lang/Object flags 31 - -class name javax/xml/catalog/CatalogResolver -header extends java/lang/Object implements org/xml/sax/EntityResolver,javax/xml/stream/XMLResolver,javax/xml/transform/URIResolver,org/w3c/dom/ls/LSResourceResolver flags 601 - -class name javax/xml/datatype/DatatypeFactory -header extends java/lang/Object flags 421 -innerclass innerClass javax/xml/datatype/DatatypeConstants$Field outerClass javax/xml/datatype/DatatypeConstants innerClassName Field flags 19 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/datatype/Duration -header extends java/lang/Object flags 421 -innerclass innerClass javax/xml/datatype/DatatypeConstants$Field outerClass javax/xml/datatype/DatatypeConstants innerClassName Field flags 19 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/namespace/QName -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 - -class name javax/xml/parsers/DocumentBuilder -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/parsers/DocumentBuilderFactory -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/parsers/SAXParser -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/parsers/SAXParserFactory -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/stream/XMLEventReader -header extends java/lang/Object implements java/util/Iterator flags 601 signature Ljava/lang/Object;Ljava/util/Iterator; - -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 - -class name javax/xml/stream/XMLStreamException -header extends java/lang/Exception flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/transform/Transformer -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/transform/TransformerException -header extends java/lang/Exception flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/validation/SchemaFactory -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/xpath/XPath -header extends java/lang/Object flags 601 -innerclass innerClass javax/xml/xpath/XPathEvaluationResult$XPathResultType outerClass javax/xml/xpath/XPathEvaluationResult innerClassName XPathResultType flags 4019 - -class name javax/xml/xpath/XPathException -header extends java/lang/Exception flags 21 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 - -class name javax/xml/xpath/XPathExpression -header extends java/lang/Object flags 601 -innerclass innerClass javax/xml/xpath/XPathEvaluationResult$XPathResultType outerClass javax/xml/xpath/XPathEvaluationResult innerClassName XPathResultType flags 4019 - -class name javax/xml/xpath/XPathFactory -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/xpath/XPathNodes -header extends java/lang/Object implements java/lang/Iterable flags 601 signature Ljava/lang/Object;Ljava/lang/Iterable; - -class name org/w3c/dom/ElementTraversal -header extends java/lang/Object flags 601 - -class name org/xml/sax/AttributeList -header extends java/lang/Object flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="1.5") - -class name org/xml/sax/DocumentHandler -header extends java/lang/Object flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="1.5") - -class name org/xml/sax/HandlerBase -header extends java/lang/Object implements org/xml/sax/EntityResolver,org/xml/sax/DTDHandler,org/xml/sax/DocumentHandler,org/xml/sax/ErrorHandler flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="1.5") - -class name org/xml/sax/Parser -header extends java/lang/Object flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="1.5") - -class name org/xml/sax/ext/Attributes2Impl -header extends org/xml/sax/helpers/AttributesImpl implements org/xml/sax/ext/Attributes2 flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name org/xml/sax/helpers/AttributeListImpl -header extends java/lang/Object implements org/xml/sax/AttributeList flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="1.5") - -class name org/xml/sax/helpers/AttributesImpl -header extends java/lang/Object implements org/xml/sax/Attributes flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name org/xml/sax/helpers/ParserFactory -header extends java/lang/Object flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="1.5") - -class name org/xml/sax/helpers/XMLFilterImpl -header extends java/lang/Object implements org/xml/sax/XMLFilter,org/xml/sax/EntityResolver,org/xml/sax/DTDHandler,org/xml/sax/ContentHandler,org/xml/sax/ErrorHandler flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name org/xml/sax/helpers/XMLReaderFactory -header extends java/lang/Object flags 31 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="9") -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.xml-I.sym.txt b/src/jdk.compiler/share/data/symbols/java.xml-I.sym.txt index ccadde9ba2187..3d8e58866e1c3 100644 --- a/src/jdk.compiler/share/data/symbols/java.xml-I.sym.txt +++ b/src/jdk.compiler/share/data/symbols/java.xml-I.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -26,133 +26,13 @@ # ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ### # ########################################################## # -class name javax/xml/catalog/Catalog -header extends java/lang/Object flags 601 - -class name javax/xml/catalog/CatalogException -header extends java/lang/RuntimeException flags 21 - class name javax/xml/catalog/CatalogFeatures header extends java/lang/Object nestMembers javax/xml/catalog/CatalogFeatures$Builder,javax/xml/catalog/CatalogFeatures$Feature flags 21 innerclass innerClass javax/xml/catalog/CatalogFeatures$Builder outerClass javax/xml/catalog/CatalogFeatures innerClassName Builder flags 9 innerclass innerClass javax/xml/catalog/CatalogFeatures$Feature outerClass javax/xml/catalog/CatalogFeatures innerClassName Feature flags 4019 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -class name javax/xml/catalog/CatalogManager -header extends java/lang/Object flags 31 - -class name javax/xml/catalog/CatalogResolver -header extends java/lang/Object implements org/xml/sax/EntityResolver,javax/xml/stream/XMLResolver,javax/xml/transform/URIResolver,org/w3c/dom/ls/LSResourceResolver flags 601 - -class name javax/xml/datatype/DatatypeFactory -header extends java/lang/Object flags 421 -innerclass innerClass javax/xml/datatype/DatatypeConstants$Field outerClass javax/xml/datatype/DatatypeConstants innerClassName Field flags 19 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/datatype/Duration -header extends java/lang/Object flags 421 -innerclass innerClass javax/xml/datatype/DatatypeConstants$Field outerClass javax/xml/datatype/DatatypeConstants innerClassName Field flags 19 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/namespace/QName -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 - -class name javax/xml/parsers/DocumentBuilder -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/parsers/DocumentBuilderFactory -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/parsers/SAXParser -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/parsers/SAXParserFactory -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/stream/XMLEventReader -header extends java/lang/Object implements java/util/Iterator flags 601 signature Ljava/lang/Object;Ljava/util/Iterator; - -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 - -class name javax/xml/stream/XMLStreamException -header extends java/lang/Exception flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/transform/Transformer -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/transform/TransformerException -header extends java/lang/Exception flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/validation/SchemaFactory -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/xpath/XPath -header extends java/lang/Object flags 601 -innerclass innerClass javax/xml/xpath/XPathEvaluationResult$XPathResultType outerClass javax/xml/xpath/XPathEvaluationResult innerClassName XPathResultType flags 4019 - -class name javax/xml/xpath/XPathException -header extends java/lang/Exception flags 21 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 - -class name javax/xml/xpath/XPathExpression -header extends java/lang/Object flags 601 -innerclass innerClass javax/xml/xpath/XPathEvaluationResult$XPathResultType outerClass javax/xml/xpath/XPathEvaluationResult innerClassName XPathResultType flags 4019 - class name javax/xml/xpath/XPathFactory -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 method name setProperty descriptor (Ljava/lang/String;Ljava/lang/String;)V flags 1 method name getProperty descriptor (Ljava/lang/String;)Ljava/lang/String; flags 1 -class name javax/xml/xpath/XPathNodes -header extends java/lang/Object implements java/lang/Iterable flags 601 signature Ljava/lang/Object;Ljava/lang/Iterable; - -class name org/w3c/dom/ElementTraversal -header extends java/lang/Object flags 601 - -class name org/xml/sax/AttributeList -header extends java/lang/Object flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="1.5") - -class name org/xml/sax/DocumentHandler -header extends java/lang/Object flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="1.5") - -class name org/xml/sax/HandlerBase -header extends java/lang/Object implements org/xml/sax/EntityResolver,org/xml/sax/DTDHandler,org/xml/sax/DocumentHandler,org/xml/sax/ErrorHandler flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="1.5") - -class name org/xml/sax/Parser -header extends java/lang/Object flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="1.5") - -class name org/xml/sax/ext/Attributes2Impl -header extends org/xml/sax/helpers/AttributesImpl implements org/xml/sax/ext/Attributes2 flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name org/xml/sax/helpers/AttributeListImpl -header extends java/lang/Object implements org/xml/sax/AttributeList flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="1.5") - -class name org/xml/sax/helpers/AttributesImpl -header extends java/lang/Object implements org/xml/sax/Attributes flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name org/xml/sax/helpers/ParserFactory -header extends java/lang/Object flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="1.5") - -class name org/xml/sax/helpers/XMLFilterImpl -header extends java/lang/Object implements org/xml/sax/XMLFilter,org/xml/sax/EntityResolver,org/xml/sax/DTDHandler,org/xml/sax/ContentHandler,org/xml/sax/ErrorHandler flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name org/xml/sax/helpers/XMLReaderFactory -header extends java/lang/Object flags 31 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="9") -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.xml-J.sym.txt b/src/jdk.compiler/share/data/symbols/java.xml-J.sym.txt deleted file mode 100644 index 9af87b0ca2a65..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.xml-J.sym.txt +++ /dev/null @@ -1,150 +0,0 @@ -# -# Copyright (c) 2022, 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 javax/xml/catalog/Catalog -header extends java/lang/Object flags 601 - -class name javax/xml/catalog/CatalogException -header extends java/lang/RuntimeException flags 21 - -class name javax/xml/catalog/CatalogManager -header extends java/lang/Object flags 31 - -class name javax/xml/catalog/CatalogResolver -header extends java/lang/Object implements org/xml/sax/EntityResolver,javax/xml/stream/XMLResolver,javax/xml/transform/URIResolver,org/w3c/dom/ls/LSResourceResolver flags 601 - -class name javax/xml/datatype/DatatypeFactory -header extends java/lang/Object flags 421 -innerclass innerClass javax/xml/datatype/DatatypeConstants$Field outerClass javax/xml/datatype/DatatypeConstants innerClassName Field flags 19 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/datatype/Duration -header extends java/lang/Object flags 421 -innerclass innerClass javax/xml/datatype/DatatypeConstants$Field outerClass javax/xml/datatype/DatatypeConstants innerClassName Field flags 19 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/namespace/QName -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 - -class name javax/xml/parsers/DocumentBuilder -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/parsers/DocumentBuilderFactory -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/parsers/SAXParser -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/parsers/SAXParserFactory -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/stream/XMLEventReader -header extends java/lang/Object implements java/util/Iterator flags 601 signature Ljava/lang/Object;Ljava/util/Iterator; - -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 - -class name javax/xml/stream/XMLStreamException -header extends java/lang/Exception flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/transform/Transformer -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/transform/TransformerException -header extends java/lang/Exception flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/validation/SchemaFactory -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/xpath/XPath -header extends java/lang/Object flags 601 -innerclass innerClass javax/xml/xpath/XPathEvaluationResult$XPathResultType outerClass javax/xml/xpath/XPathEvaluationResult innerClassName XPathResultType flags 4019 - -class name javax/xml/xpath/XPathException -header extends java/lang/Exception flags 21 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 - -class name javax/xml/xpath/XPathExpression -header extends java/lang/Object flags 601 -innerclass innerClass javax/xml/xpath/XPathEvaluationResult$XPathResultType outerClass javax/xml/xpath/XPathEvaluationResult innerClassName XPathResultType flags 4019 - -class name javax/xml/xpath/XPathFactory -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/xpath/XPathNodes -header extends java/lang/Object implements java/lang/Iterable flags 601 signature Ljava/lang/Object;Ljava/lang/Iterable; - -class name org/w3c/dom/ElementTraversal -header extends java/lang/Object flags 601 - -class name org/xml/sax/AttributeList -header extends java/lang/Object flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="1.5") - -class name org/xml/sax/DocumentHandler -header extends java/lang/Object flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="1.5") - -class name org/xml/sax/HandlerBase -header extends java/lang/Object implements org/xml/sax/EntityResolver,org/xml/sax/DTDHandler,org/xml/sax/DocumentHandler,org/xml/sax/ErrorHandler flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="1.5") - -class name org/xml/sax/Parser -header extends java/lang/Object flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="1.5") - -class name org/xml/sax/ext/Attributes2Impl -header extends org/xml/sax/helpers/AttributesImpl implements org/xml/sax/ext/Attributes2 flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name org/xml/sax/helpers/AttributeListImpl -header extends java/lang/Object implements org/xml/sax/AttributeList flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="1.5") - -class name org/xml/sax/helpers/AttributesImpl -header extends java/lang/Object implements org/xml/sax/Attributes flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name org/xml/sax/helpers/ParserFactory -header extends java/lang/Object flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="1.5") - -class name org/xml/sax/helpers/XMLFilterImpl -header extends java/lang/Object implements org/xml/sax/XMLFilter,org/xml/sax/EntityResolver,org/xml/sax/DTDHandler,org/xml/sax/ContentHandler,org/xml/sax/ErrorHandler flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name org/xml/sax/helpers/XMLReaderFactory -header extends java/lang/Object flags 31 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="9") -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.xml-K.sym.txt b/src/jdk.compiler/share/data/symbols/java.xml-K.sym.txt deleted file mode 100644 index 9af87b0ca2a65..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.xml-K.sym.txt +++ /dev/null @@ -1,150 +0,0 @@ -# -# Copyright (c) 2022, 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 javax/xml/catalog/Catalog -header extends java/lang/Object flags 601 - -class name javax/xml/catalog/CatalogException -header extends java/lang/RuntimeException flags 21 - -class name javax/xml/catalog/CatalogManager -header extends java/lang/Object flags 31 - -class name javax/xml/catalog/CatalogResolver -header extends java/lang/Object implements org/xml/sax/EntityResolver,javax/xml/stream/XMLResolver,javax/xml/transform/URIResolver,org/w3c/dom/ls/LSResourceResolver flags 601 - -class name javax/xml/datatype/DatatypeFactory -header extends java/lang/Object flags 421 -innerclass innerClass javax/xml/datatype/DatatypeConstants$Field outerClass javax/xml/datatype/DatatypeConstants innerClassName Field flags 19 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/datatype/Duration -header extends java/lang/Object flags 421 -innerclass innerClass javax/xml/datatype/DatatypeConstants$Field outerClass javax/xml/datatype/DatatypeConstants innerClassName Field flags 19 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/namespace/QName -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 - -class name javax/xml/parsers/DocumentBuilder -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/parsers/DocumentBuilderFactory -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/parsers/SAXParser -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/parsers/SAXParserFactory -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/stream/XMLEventReader -header extends java/lang/Object implements java/util/Iterator flags 601 signature Ljava/lang/Object;Ljava/util/Iterator; - -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 - -class name javax/xml/stream/XMLStreamException -header extends java/lang/Exception flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/transform/Transformer -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/transform/TransformerException -header extends java/lang/Exception flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/validation/SchemaFactory -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/xpath/XPath -header extends java/lang/Object flags 601 -innerclass innerClass javax/xml/xpath/XPathEvaluationResult$XPathResultType outerClass javax/xml/xpath/XPathEvaluationResult innerClassName XPathResultType flags 4019 - -class name javax/xml/xpath/XPathException -header extends java/lang/Exception flags 21 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 - -class name javax/xml/xpath/XPathExpression -header extends java/lang/Object flags 601 -innerclass innerClass javax/xml/xpath/XPathEvaluationResult$XPathResultType outerClass javax/xml/xpath/XPathEvaluationResult innerClassName XPathResultType flags 4019 - -class name javax/xml/xpath/XPathFactory -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/xpath/XPathNodes -header extends java/lang/Object implements java/lang/Iterable flags 601 signature Ljava/lang/Object;Ljava/lang/Iterable; - -class name org/w3c/dom/ElementTraversal -header extends java/lang/Object flags 601 - -class name org/xml/sax/AttributeList -header extends java/lang/Object flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="1.5") - -class name org/xml/sax/DocumentHandler -header extends java/lang/Object flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="1.5") - -class name org/xml/sax/HandlerBase -header extends java/lang/Object implements org/xml/sax/EntityResolver,org/xml/sax/DTDHandler,org/xml/sax/DocumentHandler,org/xml/sax/ErrorHandler flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="1.5") - -class name org/xml/sax/Parser -header extends java/lang/Object flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="1.5") - -class name org/xml/sax/ext/Attributes2Impl -header extends org/xml/sax/helpers/AttributesImpl implements org/xml/sax/ext/Attributes2 flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name org/xml/sax/helpers/AttributeListImpl -header extends java/lang/Object implements org/xml/sax/AttributeList flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="1.5") - -class name org/xml/sax/helpers/AttributesImpl -header extends java/lang/Object implements org/xml/sax/Attributes flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name org/xml/sax/helpers/ParserFactory -header extends java/lang/Object flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="1.5") - -class name org/xml/sax/helpers/XMLFilterImpl -header extends java/lang/Object implements org/xml/sax/XMLFilter,org/xml/sax/EntityResolver,org/xml/sax/DTDHandler,org/xml/sax/ContentHandler,org/xml/sax/ErrorHandler flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name org/xml/sax/helpers/XMLReaderFactory -header extends java/lang/Object flags 31 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="9") -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.xml-L.sym.txt b/src/jdk.compiler/share/data/symbols/java.xml-L.sym.txt deleted file mode 100644 index 972eb717aacb4..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.xml-L.sym.txt +++ /dev/null @@ -1,150 +0,0 @@ -# -# Copyright (c) 2023, 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 javax/xml/catalog/Catalog -header extends java/lang/Object flags 601 - -class name javax/xml/catalog/CatalogException -header extends java/lang/RuntimeException flags 21 - -class name javax/xml/catalog/CatalogManager -header extends java/lang/Object flags 31 - -class name javax/xml/catalog/CatalogResolver -header extends java/lang/Object implements org/xml/sax/EntityResolver,javax/xml/stream/XMLResolver,javax/xml/transform/URIResolver,org/w3c/dom/ls/LSResourceResolver flags 601 - -class name javax/xml/datatype/DatatypeFactory -header extends java/lang/Object flags 421 -innerclass innerClass javax/xml/datatype/DatatypeConstants$Field outerClass javax/xml/datatype/DatatypeConstants innerClassName Field flags 19 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/datatype/Duration -header extends java/lang/Object flags 421 -innerclass innerClass javax/xml/datatype/DatatypeConstants$Field outerClass javax/xml/datatype/DatatypeConstants innerClassName Field flags 19 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/namespace/QName -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 - -class name javax/xml/parsers/DocumentBuilder -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/parsers/DocumentBuilderFactory -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/parsers/SAXParser -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/parsers/SAXParserFactory -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/stream/XMLEventReader -header extends java/lang/Object implements java/util/Iterator flags 601 signature Ljava/lang/Object;Ljava/util/Iterator; - -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 - -class name javax/xml/stream/XMLStreamException -header extends java/lang/Exception flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/transform/Transformer -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/transform/TransformerException -header extends java/lang/Exception flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/validation/SchemaFactory -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/xpath/XPath -header extends java/lang/Object flags 601 -innerclass innerClass javax/xml/xpath/XPathEvaluationResult$XPathResultType outerClass javax/xml/xpath/XPathEvaluationResult innerClassName XPathResultType flags 4019 - -class name javax/xml/xpath/XPathException -header extends java/lang/Exception flags 21 -innerclass innerClass java/io/ObjectOutputStream$PutField outerClass java/io/ObjectOutputStream innerClassName PutField flags 409 -innerclass innerClass java/io/ObjectInputStream$GetField outerClass java/io/ObjectInputStream innerClassName GetField flags 409 - -class name javax/xml/xpath/XPathExpression -header extends java/lang/Object flags 601 -innerclass innerClass javax/xml/xpath/XPathEvaluationResult$XPathResultType outerClass javax/xml/xpath/XPathEvaluationResult innerClassName XPathResultType flags 4019 - -class name javax/xml/xpath/XPathFactory -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/xpath/XPathNodes -header extends java/lang/Object implements java/lang/Iterable flags 601 signature Ljava/lang/Object;Ljava/lang/Iterable; - -class name org/w3c/dom/ElementTraversal -header extends java/lang/Object flags 601 - -class name org/xml/sax/AttributeList -header extends java/lang/Object flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="1.5") - -class name org/xml/sax/DocumentHandler -header extends java/lang/Object flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="1.5") - -class name org/xml/sax/HandlerBase -header extends java/lang/Object implements org/xml/sax/EntityResolver,org/xml/sax/DTDHandler,org/xml/sax/DocumentHandler,org/xml/sax/ErrorHandler flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="1.5") - -class name org/xml/sax/Parser -header extends java/lang/Object flags 601 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="1.5") - -class name org/xml/sax/ext/Attributes2Impl -header extends org/xml/sax/helpers/AttributesImpl implements org/xml/sax/ext/Attributes2 flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name org/xml/sax/helpers/AttributeListImpl -header extends java/lang/Object implements org/xml/sax/AttributeList flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="1.5") - -class name org/xml/sax/helpers/AttributesImpl -header extends java/lang/Object implements org/xml/sax/Attributes flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name org/xml/sax/helpers/ParserFactory -header extends java/lang/Object flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="1.5") - -class name org/xml/sax/helpers/XMLFilterImpl -header extends java/lang/Object implements org/xml/sax/XMLFilter,org/xml/sax/EntityResolver,org/xml/sax/DTDHandler,org/xml/sax/ContentHandler,org/xml/sax/ErrorHandler flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name org/xml/sax/helpers/XMLReaderFactory -header extends java/lang/Object flags 31 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="9") -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.xml.crypto-H.sym.txt b/src/jdk.compiler/share/data/symbols/java.xml.crypto-H.sym.txt index 8acb0648b277e..ec25e7e31ecc9 100644 --- a/src/jdk.compiler/share/data/symbols/java.xml.crypto-H.sym.txt +++ b/src/jdk.compiler/share/data/symbols/java.xml.crypto-H.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -26,27 +26,9 @@ # ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ### # ########################################################## # -class name javax/xml/crypto/NodeSetData -header extends java/lang/Object implements javax/xml/crypto/Data,java/lang/Iterable flags 601 signature Ljava/lang/Object;Ljavax/xml/crypto/Data;Ljava/lang/Iterable; - -class name javax/xml/crypto/dom/DOMCryptoContext -header extends java/lang/Object implements javax/xml/crypto/XMLCryptoContext flags 21 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name javax/xml/crypto/dsig/SignatureMethod field name RSA_PSS descriptor Ljava/lang/String; constantValue http://www.w3.org/2007/05/xmldsig-more#rsa-pss flags 19 -class name javax/xml/crypto/dsig/XMLSignatureFactory -header extends java/lang/Object flags 421 -innerclass innerClass java/security/Provider$Service outerClass java/security/Provider innerClassName Service flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/crypto/dsig/keyinfo/KeyInfoFactory -header extends java/lang/Object flags 421 -innerclass innerClass java/security/Provider$Service outerClass java/security/Provider innerClassName Service flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name javax/xml/crypto/dsig/spec/RSAPSSParameterSpec header extends java/lang/Object implements javax/xml/crypto/dsig/spec/SignatureMethodParameterSpec flags 31 method name descriptor (Ljava/security/spec/PSSParameterSpec;)V flags 1 diff --git a/src/jdk.compiler/share/data/symbols/java.xml.crypto-I.sym.txt b/src/jdk.compiler/share/data/symbols/java.xml.crypto-I.sym.txt deleted file mode 100644 index 257909a317c7b..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.xml.crypto-I.sym.txt +++ /dev/null @@ -1,46 +0,0 @@ -# -# Copyright (c) 2021, 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 javax/xml/crypto/NodeSetData -header extends java/lang/Object implements javax/xml/crypto/Data,java/lang/Iterable flags 601 signature Ljava/lang/Object;Ljavax/xml/crypto/Data;Ljava/lang/Iterable; - -class name javax/xml/crypto/dom/DOMCryptoContext -header extends java/lang/Object implements javax/xml/crypto/XMLCryptoContext flags 21 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/crypto/dsig/XMLSignatureFactory -header extends java/lang/Object flags 421 -innerclass innerClass java/security/Provider$Service outerClass java/security/Provider innerClassName Service flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/crypto/dsig/keyinfo/KeyInfoFactory -header extends java/lang/Object flags 421 -innerclass innerClass java/security/Provider$Service outerClass java/security/Provider innerClassName Service flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.xml.crypto-J.sym.txt b/src/jdk.compiler/share/data/symbols/java.xml.crypto-J.sym.txt deleted file mode 100644 index af622ef859b04..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.xml.crypto-J.sym.txt +++ /dev/null @@ -1,46 +0,0 @@ -# -# Copyright (c) 2022, 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 javax/xml/crypto/NodeSetData -header extends java/lang/Object implements javax/xml/crypto/Data,java/lang/Iterable flags 601 signature Ljava/lang/Object;Ljavax/xml/crypto/Data;Ljava/lang/Iterable; - -class name javax/xml/crypto/dom/DOMCryptoContext -header extends java/lang/Object implements javax/xml/crypto/XMLCryptoContext flags 21 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/crypto/dsig/XMLSignatureFactory -header extends java/lang/Object flags 421 -innerclass innerClass java/security/Provider$Service outerClass java/security/Provider innerClassName Service flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/crypto/dsig/keyinfo/KeyInfoFactory -header extends java/lang/Object flags 421 -innerclass innerClass java/security/Provider$Service outerClass java/security/Provider innerClassName Service flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.xml.crypto-K.sym.txt b/src/jdk.compiler/share/data/symbols/java.xml.crypto-K.sym.txt deleted file mode 100644 index af622ef859b04..0000000000000 --- a/src/jdk.compiler/share/data/symbols/java.xml.crypto-K.sym.txt +++ /dev/null @@ -1,46 +0,0 @@ -# -# Copyright (c) 2022, 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 javax/xml/crypto/NodeSetData -header extends java/lang/Object implements javax/xml/crypto/Data,java/lang/Iterable flags 601 signature Ljava/lang/Object;Ljavax/xml/crypto/Data;Ljava/lang/Iterable; - -class name javax/xml/crypto/dom/DOMCryptoContext -header extends java/lang/Object implements javax/xml/crypto/XMLCryptoContext flags 21 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/crypto/dsig/XMLSignatureFactory -header extends java/lang/Object flags 421 -innerclass innerClass java/security/Provider$Service outerClass java/security/Provider innerClassName Service flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/crypto/dsig/keyinfo/KeyInfoFactory -header extends java/lang/Object flags 421 -innerclass innerClass java/security/Provider$Service outerClass java/security/Provider innerClassName Service flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/java.xml.crypto-L.sym.txt b/src/jdk.compiler/share/data/symbols/java.xml.crypto-L.sym.txt index 66c7be3ace53c..e8f9058864384 100644 --- a/src/jdk.compiler/share/data/symbols/java.xml.crypto-L.sym.txt +++ b/src/jdk.compiler/share/data/symbols/java.xml.crypto-L.sym.txt @@ -26,25 +26,7 @@ # ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ### # ########################################################## # -class name javax/xml/crypto/NodeSetData -header extends java/lang/Object implements javax/xml/crypto/Data,java/lang/Iterable flags 601 signature Ljava/lang/Object;Ljavax/xml/crypto/Data;Ljava/lang/Iterable; - -class name javax/xml/crypto/dom/DOMCryptoContext -header extends java/lang/Object implements javax/xml/crypto/XMLCryptoContext flags 21 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name javax/xml/crypto/dsig/SignatureMethod field name ED25519 descriptor Ljava/lang/String; constantValue http://www.w3.org/2021/04/xmldsig-more#eddsa-ed25519 flags 19 field name ED448 descriptor Ljava/lang/String; constantValue http://www.w3.org/2021/04/xmldsig-more#eddsa-ed448 flags 19 -class name javax/xml/crypto/dsig/XMLSignatureFactory -header extends java/lang/Object flags 421 -innerclass innerClass java/security/Provider$Service outerClass java/security/Provider innerClassName Service flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name javax/xml/crypto/dsig/keyinfo/KeyInfoFactory -header extends java/lang/Object flags 421 -innerclass innerClass java/security/Provider$Service outerClass java/security/Provider innerClassName Service flags 9 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.accessibility-H.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.accessibility-H.sym.txt deleted file mode 100644 index 5b305d6057b7d..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.accessibility-H.sym.txt +++ /dev/null @@ -1,44 +0,0 @@ -# -# Copyright (c) 2021, 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/java/accessibility/util/AccessibilityListenerList -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/java/accessibility/util/EventID -header extends java/lang/Object flags 21 - -class name com/sun/java/accessibility/util/GUIInitializedListener -header extends java/lang/Object implements java/util/EventListener flags 601 - -class name com/sun/java/accessibility/util/TopLevelWindowListener -header extends java/lang/Object implements java/util/EventListener flags 601 - -class name com/sun/java/accessibility/util/Translator -header extends javax/accessibility/AccessibleContext implements javax/accessibility/Accessible,javax/accessibility/AccessibleComponent flags 21 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.accessibility-I.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.accessibility-I.sym.txt index eee9c4105f302..26e2b62eb10e9 100644 --- a/src/jdk.compiler/share/data/symbols/jdk.accessibility-I.sym.txt +++ b/src/jdk.compiler/share/data/symbols/jdk.accessibility-I.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2021, 2023, 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 @@ -40,19 +40,3 @@ class name com/sun/java/accessibility/util/AWTEventMonitor -field name itemListener descriptor Ljava/awt/event/ItemListener; -field name textListener descriptor Ljava/awt/event/TextListener; -class name com/sun/java/accessibility/util/AccessibilityListenerList -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/java/accessibility/util/EventID -header extends java/lang/Object flags 21 - -class name com/sun/java/accessibility/util/GUIInitializedListener -header extends java/lang/Object implements java/util/EventListener flags 601 - -class name com/sun/java/accessibility/util/TopLevelWindowListener -header extends java/lang/Object implements java/util/EventListener flags 601 - -class name com/sun/java/accessibility/util/Translator -header extends javax/accessibility/AccessibleContext implements javax/accessibility/Accessible,javax/accessibility/AccessibleComponent flags 21 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.accessibility-J.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.accessibility-J.sym.txt deleted file mode 100644 index 542df1b173453..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.accessibility-J.sym.txt +++ /dev/null @@ -1,44 +0,0 @@ -# -# Copyright (c) 2022, 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/java/accessibility/util/AccessibilityListenerList -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/java/accessibility/util/EventID -header extends java/lang/Object flags 21 - -class name com/sun/java/accessibility/util/GUIInitializedListener -header extends java/lang/Object implements java/util/EventListener flags 601 - -class name com/sun/java/accessibility/util/TopLevelWindowListener -header extends java/lang/Object implements java/util/EventListener flags 601 - -class name com/sun/java/accessibility/util/Translator -header extends javax/accessibility/AccessibleContext implements javax/accessibility/Accessible,javax/accessibility/AccessibleComponent flags 21 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.accessibility-K.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.accessibility-K.sym.txt deleted file mode 100644 index 542df1b173453..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.accessibility-K.sym.txt +++ /dev/null @@ -1,44 +0,0 @@ -# -# Copyright (c) 2022, 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/java/accessibility/util/AccessibilityListenerList -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/java/accessibility/util/EventID -header extends java/lang/Object flags 21 - -class name com/sun/java/accessibility/util/GUIInitializedListener -header extends java/lang/Object implements java/util/EventListener flags 601 - -class name com/sun/java/accessibility/util/TopLevelWindowListener -header extends java/lang/Object implements java/util/EventListener flags 601 - -class name com/sun/java/accessibility/util/Translator -header extends javax/accessibility/AccessibleContext implements javax/accessibility/Accessible,javax/accessibility/AccessibleComponent flags 21 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.accessibility-L.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.accessibility-L.sym.txt deleted file mode 100644 index f60356ee3d8b9..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.accessibility-L.sym.txt +++ /dev/null @@ -1,44 +0,0 @@ -# -# Copyright (c) 2023, 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/java/accessibility/util/AccessibilityListenerList -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/java/accessibility/util/EventID -header extends java/lang/Object flags 21 - -class name com/sun/java/accessibility/util/GUIInitializedListener -header extends java/lang/Object implements java/util/EventListener flags 601 - -class name com/sun/java/accessibility/util/TopLevelWindowListener -header extends java/lang/Object implements java/util/EventListener flags 601 - -class name com/sun/java/accessibility/util/Translator -header extends javax/accessibility/AccessibleContext implements javax/accessibility/Accessible,javax/accessibility/AccessibleComponent flags 21 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.attach-H.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.attach-H.sym.txt deleted file mode 100644 index bbe7de3e07f93..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.attach-H.sym.txt +++ /dev/null @@ -1,55 +0,0 @@ -# -# Copyright (c) 2021, 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/tools/attach/AgentInitializationException -header extends java/lang/Exception flags 21 - -class name com/sun/tools/attach/AgentLoadException -header extends java/lang/Exception flags 21 - -class name com/sun/tools/attach/AttachNotSupportedException -header extends java/lang/Exception flags 21 - -class name com/sun/tools/attach/AttachOperationFailedException -header extends java/io/IOException flags 21 - -class name com/sun/tools/attach/AttachPermission -header extends java/security/BasicPermission flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/tools/attach/VirtualMachine -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/tools/attach/VirtualMachineDescriptor -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/tools/attach/spi/AttachProvider -header extends java/lang/Object flags 421 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.attach-I.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.attach-I.sym.txt deleted file mode 100644 index bbe7de3e07f93..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.attach-I.sym.txt +++ /dev/null @@ -1,55 +0,0 @@ -# -# Copyright (c) 2021, 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/tools/attach/AgentInitializationException -header extends java/lang/Exception flags 21 - -class name com/sun/tools/attach/AgentLoadException -header extends java/lang/Exception flags 21 - -class name com/sun/tools/attach/AttachNotSupportedException -header extends java/lang/Exception flags 21 - -class name com/sun/tools/attach/AttachOperationFailedException -header extends java/io/IOException flags 21 - -class name com/sun/tools/attach/AttachPermission -header extends java/security/BasicPermission flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/tools/attach/VirtualMachine -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/tools/attach/VirtualMachineDescriptor -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/tools/attach/spi/AttachProvider -header extends java/lang/Object flags 421 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.attach-J.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.attach-J.sym.txt deleted file mode 100644 index e27029fddda4d..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.attach-J.sym.txt +++ /dev/null @@ -1,55 +0,0 @@ -# -# Copyright (c) 2022, 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/tools/attach/AgentInitializationException -header extends java/lang/Exception flags 21 - -class name com/sun/tools/attach/AgentLoadException -header extends java/lang/Exception flags 21 - -class name com/sun/tools/attach/AttachNotSupportedException -header extends java/lang/Exception flags 21 - -class name com/sun/tools/attach/AttachOperationFailedException -header extends java/io/IOException flags 21 - -class name com/sun/tools/attach/AttachPermission -header extends java/security/BasicPermission flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/tools/attach/VirtualMachine -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/tools/attach/VirtualMachineDescriptor -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/tools/attach/spi/AttachProvider -header extends java/lang/Object flags 421 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.attach-K.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.attach-K.sym.txt deleted file mode 100644 index e27029fddda4d..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.attach-K.sym.txt +++ /dev/null @@ -1,55 +0,0 @@ -# -# Copyright (c) 2022, 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/tools/attach/AgentInitializationException -header extends java/lang/Exception flags 21 - -class name com/sun/tools/attach/AgentLoadException -header extends java/lang/Exception flags 21 - -class name com/sun/tools/attach/AttachNotSupportedException -header extends java/lang/Exception flags 21 - -class name com/sun/tools/attach/AttachOperationFailedException -header extends java/io/IOException flags 21 - -class name com/sun/tools/attach/AttachPermission -header extends java/security/BasicPermission flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/tools/attach/VirtualMachine -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/tools/attach/VirtualMachineDescriptor -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/tools/attach/spi/AttachProvider -header extends java/lang/Object flags 421 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.attach-L.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.attach-L.sym.txt deleted file mode 100644 index 8074cc25b757d..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.attach-L.sym.txt +++ /dev/null @@ -1,55 +0,0 @@ -# -# Copyright (c) 2023, 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/tools/attach/AgentInitializationException -header extends java/lang/Exception flags 21 - -class name com/sun/tools/attach/AgentLoadException -header extends java/lang/Exception flags 21 - -class name com/sun/tools/attach/AttachNotSupportedException -header extends java/lang/Exception flags 21 - -class name com/sun/tools/attach/AttachOperationFailedException -header extends java/io/IOException flags 21 - -class name com/sun/tools/attach/AttachPermission -header extends java/security/BasicPermission flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/tools/attach/VirtualMachine -header extends java/lang/Object flags 421 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/tools/attach/VirtualMachineDescriptor -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/tools/attach/spi/AttachProvider -header extends java/lang/Object flags 421 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.compiler-H.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.compiler-H.sym.txt index 3a4967e9e4649..e4626f30e9325 100644 --- a/src/jdk.compiler/share/data/symbols/jdk.compiler-H.sym.txt +++ b/src/jdk.compiler/share/data/symbols/jdk.compiler-H.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -26,379 +26,54 @@ # ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ### # ########################################################## # -class name com/sun/source/doctree/AuthorTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/BlockTagTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/CommentTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/DeprecatedTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/DocCommentTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/DocRootTree -header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601 - -class name com/sun/source/doctree/DocTreeVisitor -header extends java/lang/Object flags 601 signature Ljava/lang/Object; - -class name com/sun/source/doctree/DocTypeTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/EndElementTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/EntityTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/ErroneousTree -header extends java/lang/Object implements com/sun/source/doctree/TextTree flags 601 - -class name com/sun/source/doctree/HiddenTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/IdentifierTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/IndexTree -header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601 - -class name com/sun/source/doctree/InheritDocTree -header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601 - -class name com/sun/source/doctree/InlineTagTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/LinkTree -header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601 - -class name com/sun/source/doctree/LiteralTree -header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601 - -class name com/sun/source/doctree/ParamTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/ProvidesTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/ReferenceTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/SeeTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/SerialDataTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/SerialFieldTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/SerialTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/SinceTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/StartElementTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/SummaryTree -header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601 - -class name com/sun/source/doctree/TextTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/ThrowsTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/UnknownBlockTagTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/UnknownInlineTagTree -header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601 - -class name com/sun/source/doctree/UsesTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/ValueTree -header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601 - -class name com/sun/source/doctree/VersionTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/tree/AnnotatedTypeTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/AnnotationTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/ArrayAccessTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/ArrayTypeTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/AssertTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/AssignmentTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/BinaryTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/BlockTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/BreakTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - class name com/sun/source/tree/CaseLabelTree header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;SWITCH_PATTERN_MATCHING;,reflective=Ztrue) class name com/sun/source/tree/CaseTree method name getLabels descriptor ()Ljava/util/List; flags 401 signature ()Ljava/util/List<+Lcom/sun/source/tree/CaseLabelTree;>; classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;SWITCH_PATTERN_MATCHING;,reflective=Ztrue) -class name com/sun/source/tree/CatchTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - class name com/sun/source/tree/ClassTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 -method name getPermitsClause descriptor ()Ljava/util/List; method name getPermitsClause descriptor ()Ljava/util/List; flags 1 signature ()Ljava/util/List<+Lcom/sun/source/tree/Tree;>; class name com/sun/source/tree/CompilationUnitTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 method name getModule descriptor ()Lcom/sun/source/tree/ModuleTree; flags 1 -class name com/sun/source/tree/CompoundAssignmentTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/ConditionalExpressionTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/ContinueTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - class name com/sun/source/tree/DefaultCaseLabelTree header extends java/lang/Object implements com/sun/source/tree/CaseLabelTree flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;SWITCH_PATTERN_MATCHING;,reflective=Ztrue) -class name com/sun/source/tree/DirectiveTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/DoWhileLoopTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/EmptyStatementTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/EnhancedForLoopTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/ErroneousTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/ExportsTree -header extends java/lang/Object implements com/sun/source/tree/DirectiveTree flags 601 - -class name com/sun/source/tree/ExpressionStatementTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - class name com/sun/source/tree/ExpressionTree header extends java/lang/Object implements com/sun/source/tree/Tree,com/sun/source/tree/CaseLabelTree flags 601 classAnnotations @Ljdk/internal/javac/NoPreview; -class name com/sun/source/tree/ForLoopTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - class name com/sun/source/tree/GuardedPatternTree header extends java/lang/Object implements com/sun/source/tree/PatternTree flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;SWITCH_PATTERN_MATCHING;,reflective=Ztrue) method name getPattern descriptor ()Lcom/sun/source/tree/PatternTree; flags 401 method name getExpression descriptor ()Lcom/sun/source/tree/ExpressionTree; flags 401 -class name com/sun/source/tree/IdentifierTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/IfTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/ImportTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/InstanceOfTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/IntersectionTypeTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/LabeledStatementTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/LineMap -header extends java/lang/Object flags 601 - -class name com/sun/source/tree/LiteralTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/MemberSelectTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/MethodInvocationTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/MethodTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/ModifiersTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/NewArrayTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/NewClassTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/OpensTree -header extends java/lang/Object implements com/sun/source/tree/DirectiveTree flags 601 - -class name com/sun/source/tree/PackageTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/ParameterizedTypeTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - class name com/sun/source/tree/ParenthesizedPatternTree header extends java/lang/Object implements com/sun/source/tree/PatternTree flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;SWITCH_PATTERN_MATCHING;,reflective=Ztrue) method name getPattern descriptor ()Lcom/sun/source/tree/PatternTree; flags 401 -class name com/sun/source/tree/ParenthesizedTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - class name com/sun/source/tree/PatternTree header extends java/lang/Object implements com/sun/source/tree/Tree,com/sun/source/tree/CaseLabelTree flags 601 -class name com/sun/source/tree/PrimitiveTypeTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/ProvidesTree -header extends java/lang/Object implements com/sun/source/tree/DirectiveTree flags 601 - -class name com/sun/source/tree/RequiresTree -header extends java/lang/Object implements com/sun/source/tree/DirectiveTree flags 601 - -class name com/sun/source/tree/ReturnTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/Scope -header extends java/lang/Object flags 601 - -class name com/sun/source/tree/StatementTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/SwitchTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/SynchronizedTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/ThrowTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - class name com/sun/source/tree/Tree$Kind field name GUARDED_PATTERN descriptor Lcom/sun/source/tree/Tree$Kind; flags 4019 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;SWITCH_PATTERN_MATCHING;,reflective=Ztrue) field name PARENTHESIZED_PATTERN descriptor Lcom/sun/source/tree/Tree$Kind; flags 4019 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;SWITCH_PATTERN_MATCHING;,reflective=Ztrue) field name DEFAULT_CASE_LABEL descriptor Lcom/sun/source/tree/Tree$Kind; flags 4019 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;SWITCH_PATTERN_MATCHING;,reflective=Ztrue) class name com/sun/source/tree/TreeVisitor -header extends java/lang/Object flags 601 signature Ljava/lang/Object; method name visitDefaultCaseLabel descriptor (Lcom/sun/source/tree/DefaultCaseLabelTree;Ljava/lang/Object;)Ljava/lang/Object; flags 401 signature (Lcom/sun/source/tree/DefaultCaseLabelTree;TP;)TR; classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;SWITCH_PATTERN_MATCHING;,reflective=Ztrue) method name visitGuardedPattern descriptor (Lcom/sun/source/tree/GuardedPatternTree;Ljava/lang/Object;)Ljava/lang/Object; flags 401 signature (Lcom/sun/source/tree/GuardedPatternTree;TP;)TR; classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;SWITCH_PATTERN_MATCHING;,reflective=Ztrue) method name visitParenthesizedPattern descriptor (Lcom/sun/source/tree/ParenthesizedPatternTree;Ljava/lang/Object;)Ljava/lang/Object; flags 401 signature (Lcom/sun/source/tree/ParenthesizedPatternTree;TP;)TR; classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;SWITCH_PATTERN_MATCHING;,reflective=Ztrue) -class name com/sun/source/tree/TryTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/TypeCastTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/TypeParameterTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/UnaryTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/UnionTypeTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/UsesTree -header extends java/lang/Object implements com/sun/source/tree/DirectiveTree flags 601 - -class name com/sun/source/tree/VariableTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/WhileLoopTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/WildcardTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/util/DocSourcePositions -header extends java/lang/Object implements com/sun/source/util/SourcePositions flags 601 - -class name com/sun/source/util/DocTreeFactory -header extends java/lang/Object flags 601 -innerclass innerClass com/sun/source/doctree/AttributeTree$ValueKind outerClass com/sun/source/doctree/AttributeTree innerClassName ValueKind flags 4019 - -class name com/sun/source/util/DocTreePathScanner -header extends com/sun/source/util/DocTreeScanner flags 21 signature Lcom/sun/source/util/DocTreeScanner; - -class name com/sun/source/util/DocTreeScanner -header extends java/lang/Object implements com/sun/source/doctree/DocTreeVisitor flags 21 signature Ljava/lang/Object;Lcom/sun/source/doctree/DocTreeVisitor; - -class name com/sun/source/util/DocTrees -header extends com/sun/source/util/Trees flags 421 -innerclass innerClass javax/tools/JavaCompiler$CompilationTask outerClass javax/tools/JavaCompiler innerClassName CompilationTask flags 609 -innerclass innerClass javax/tools/Diagnostic$Kind outerClass javax/tools/Diagnostic innerClassName Kind flags 4019 - -class name com/sun/source/util/JavacTask -header extends java/lang/Object implements javax/tools/JavaCompiler$CompilationTask flags 421 -innerclass innerClass javax/tools/JavaCompiler$CompilationTask outerClass javax/tools/JavaCompiler innerClassName CompilationTask flags 609 - -class name com/sun/source/util/Plugin -header extends java/lang/Object flags 601 - -class name com/sun/source/util/SimpleDocTreeVisitor -header extends java/lang/Object implements com/sun/source/doctree/DocTreeVisitor flags 21 signature Ljava/lang/Object;Lcom/sun/source/doctree/DocTreeVisitor; - class name com/sun/source/util/SimpleTreeVisitor -header extends java/lang/Object implements com/sun/source/tree/TreeVisitor flags 21 signature Ljava/lang/Object;Lcom/sun/source/tree/TreeVisitor; method name visitDefaultCaseLabel descriptor (Lcom/sun/source/tree/DefaultCaseLabelTree;Ljava/lang/Object;)Ljava/lang/Object; flags 1 signature (Lcom/sun/source/tree/DefaultCaseLabelTree;TP;)TR; classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;SWITCH_PATTERN_MATCHING;,reflective=Ztrue) method name visitParenthesizedPattern descriptor (Lcom/sun/source/tree/ParenthesizedPatternTree;Ljava/lang/Object;)Ljava/lang/Object; flags 1 signature (Lcom/sun/source/tree/ParenthesizedPatternTree;TP;)TR; classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;SWITCH_PATTERN_MATCHING;,reflective=Ztrue) method name visitGuardedPattern descriptor (Lcom/sun/source/tree/GuardedPatternTree;Ljava/lang/Object;)Ljava/lang/Object; flags 1 signature (Lcom/sun/source/tree/GuardedPatternTree;TP;)TR; classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;SWITCH_PATTERN_MATCHING;,reflective=Ztrue) -class name com/sun/source/util/SourcePositions -header extends java/lang/Object flags 601 - -class name com/sun/source/util/TaskListener -header extends java/lang/Object flags 601 - -class name com/sun/source/util/TreePathScanner -header extends com/sun/source/util/TreeScanner flags 21 signature Lcom/sun/source/util/TreeScanner; - class name com/sun/source/util/TreeScanner method name visitDefaultCaseLabel descriptor (Lcom/sun/source/tree/DefaultCaseLabelTree;Ljava/lang/Object;)Ljava/lang/Object; flags 1 signature (Lcom/sun/source/tree/DefaultCaseLabelTree;TP;)TR; classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;SWITCH_PATTERN_MATCHING;,reflective=Ztrue) method name visitParenthesizedPattern descriptor (Lcom/sun/source/tree/ParenthesizedPatternTree;Ljava/lang/Object;)Ljava/lang/Object; flags 1 signature (Lcom/sun/source/tree/ParenthesizedPatternTree;TP;)TR; classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;SWITCH_PATTERN_MATCHING;,reflective=Ztrue) method name visitGuardedPattern descriptor (Lcom/sun/source/tree/GuardedPatternTree;Ljava/lang/Object;)Ljava/lang/Object; flags 1 signature (Lcom/sun/source/tree/GuardedPatternTree;TP;)TR; classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;SWITCH_PATTERN_MATCHING;,reflective=Ztrue) -class name com/sun/source/util/Trees -header extends java/lang/Object flags 421 -innerclass innerClass javax/tools/JavaCompiler$CompilationTask outerClass javax/tools/JavaCompiler innerClassName CompilationTask flags 609 -innerclass innerClass javax/tools/Diagnostic$Kind outerClass javax/tools/Diagnostic innerClassName Kind flags 4019 - -class name com/sun/tools/javac/Main -header extends java/lang/Object flags 21 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.compiler-I.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.compiler-I.sym.txt index 7546b9fea2746..c26675dec4c35 100644 --- a/src/jdk.compiler/share/data/symbols/jdk.compiler-I.sym.txt +++ b/src/jdk.compiler/share/data/symbols/jdk.compiler-I.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -26,348 +26,23 @@ # ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ### # ########################################################## # -class name com/sun/source/doctree/AuthorTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/BlockTagTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/CommentTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/DeprecatedTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/DocCommentTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/DocRootTree -header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601 - class name com/sun/source/doctree/DocTree$Kind field name SNIPPET descriptor Lcom/sun/source/doctree/DocTree$Kind; flags 4019 class name com/sun/source/doctree/DocTreeVisitor -header extends java/lang/Object flags 601 signature Ljava/lang/Object; method name visitSnippet descriptor (Lcom/sun/source/doctree/SnippetTree;Ljava/lang/Object;)Ljava/lang/Object; flags 1 signature (Lcom/sun/source/doctree/SnippetTree;TP;)TR; -class name com/sun/source/doctree/DocTypeTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/EndElementTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/EntityTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/ErroneousTree -header extends java/lang/Object implements com/sun/source/doctree/TextTree flags 601 - -class name com/sun/source/doctree/HiddenTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/IdentifierTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/IndexTree -header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601 - -class name com/sun/source/doctree/InheritDocTree -header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601 - -class name com/sun/source/doctree/InlineTagTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/LinkTree -header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601 - -class name com/sun/source/doctree/LiteralTree -header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601 - -class name com/sun/source/doctree/ParamTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/ProvidesTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/ReferenceTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/SeeTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/SerialDataTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/SerialFieldTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/SerialTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/SinceTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - class name com/sun/source/doctree/SnippetTree header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601 method name getAttributes descriptor ()Ljava/util/List; flags 401 signature ()Ljava/util/List<+Lcom/sun/source/doctree/DocTree;>; method name getBody descriptor ()Lcom/sun/source/doctree/TextTree; flags 401 -class name com/sun/source/doctree/StartElementTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/SummaryTree -header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601 - -class name com/sun/source/doctree/TextTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/ThrowsTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/UnknownBlockTagTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/UnknownInlineTagTree -header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601 - -class name com/sun/source/doctree/UsesTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/ValueTree -header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601 - -class name com/sun/source/doctree/VersionTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/tree/AnnotatedTypeTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/AnnotationTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/ArrayAccessTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/ArrayTypeTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/AssertTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/AssignmentTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/BinaryTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/BlockTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/BreakTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/CatchTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/ClassTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/CompilationUnitTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/CompoundAssignmentTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/ConditionalExpressionTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/ContinueTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/DirectiveTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/DoWhileLoopTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/EmptyStatementTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/EnhancedForLoopTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/ErroneousTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/ExportsTree -header extends java/lang/Object implements com/sun/source/tree/DirectiveTree flags 601 - -class name com/sun/source/tree/ExpressionStatementTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/ForLoopTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/IdentifierTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/IfTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/ImportTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/InstanceOfTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/IntersectionTypeTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/LabeledStatementTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/LineMap -header extends java/lang/Object flags 601 - -class name com/sun/source/tree/LiteralTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/MemberSelectTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/MethodInvocationTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/MethodTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/ModifiersTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/NewArrayTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/NewClassTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/OpensTree -header extends java/lang/Object implements com/sun/source/tree/DirectiveTree flags 601 - -class name com/sun/source/tree/PackageTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/ParameterizedTypeTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/ParenthesizedTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/PrimitiveTypeTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/ProvidesTree -header extends java/lang/Object implements com/sun/source/tree/DirectiveTree flags 601 - -class name com/sun/source/tree/RequiresTree -header extends java/lang/Object implements com/sun/source/tree/DirectiveTree flags 601 - -class name com/sun/source/tree/ReturnTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/Scope -header extends java/lang/Object flags 601 - -class name com/sun/source/tree/StatementTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/SwitchTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/SynchronizedTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/ThrowTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/TreeVisitor -header extends java/lang/Object flags 601 signature Ljava/lang/Object; - -class name com/sun/source/tree/TryTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/TypeCastTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/TypeParameterTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/UnaryTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/UnionTypeTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/UsesTree -header extends java/lang/Object implements com/sun/source/tree/DirectiveTree flags 601 - -class name com/sun/source/tree/VariableTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/WhileLoopTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/WildcardTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/util/DocSourcePositions -header extends java/lang/Object implements com/sun/source/util/SourcePositions flags 601 - class name com/sun/source/util/DocTreeFactory -header extends java/lang/Object flags 601 -innerclass innerClass com/sun/source/doctree/AttributeTree$ValueKind outerClass com/sun/source/doctree/AttributeTree innerClassName ValueKind flags 4019 method name newSnippetTree descriptor (Ljava/util/List;Lcom/sun/source/doctree/TextTree;)Lcom/sun/source/doctree/SnippetTree; flags 401 signature (Ljava/util/List<+Lcom/sun/source/doctree/DocTree;>;Lcom/sun/source/doctree/TextTree;)Lcom/sun/source/doctree/SnippetTree; -class name com/sun/source/util/DocTreePathScanner -header extends com/sun/source/util/DocTreeScanner flags 21 signature Lcom/sun/source/util/DocTreeScanner; - class name com/sun/source/util/DocTreeScanner -header extends java/lang/Object implements com/sun/source/doctree/DocTreeVisitor flags 21 signature Ljava/lang/Object;Lcom/sun/source/doctree/DocTreeVisitor; method name visitSnippet descriptor (Lcom/sun/source/doctree/SnippetTree;Ljava/lang/Object;)Ljava/lang/Object; flags 1 signature (Lcom/sun/source/doctree/SnippetTree;TP;)TR; -class name com/sun/source/util/DocTrees -header extends com/sun/source/util/Trees flags 421 -innerclass innerClass javax/tools/JavaCompiler$CompilationTask outerClass javax/tools/JavaCompiler innerClassName CompilationTask flags 609 -innerclass innerClass javax/tools/Diagnostic$Kind outerClass javax/tools/Diagnostic innerClassName Kind flags 4019 - -class name com/sun/source/util/JavacTask -header extends java/lang/Object implements javax/tools/JavaCompiler$CompilationTask flags 421 -innerclass innerClass javax/tools/JavaCompiler$CompilationTask outerClass javax/tools/JavaCompiler innerClassName CompilationTask flags 609 - -class name com/sun/source/util/Plugin -header extends java/lang/Object flags 601 - class name com/sun/source/util/SimpleDocTreeVisitor -header extends java/lang/Object implements com/sun/source/doctree/DocTreeVisitor flags 21 signature Ljava/lang/Object;Lcom/sun/source/doctree/DocTreeVisitor; method name visitSnippet descriptor (Lcom/sun/source/doctree/SnippetTree;Ljava/lang/Object;)Ljava/lang/Object; flags 1 signature (Lcom/sun/source/doctree/SnippetTree;TP;)TR; -class name com/sun/source/util/SimpleTreeVisitor -header extends java/lang/Object implements com/sun/source/tree/TreeVisitor flags 21 signature Ljava/lang/Object;Lcom/sun/source/tree/TreeVisitor; - -class name com/sun/source/util/SourcePositions -header extends java/lang/Object flags 601 - -class name com/sun/source/util/TaskListener -header extends java/lang/Object flags 601 - -class name com/sun/source/util/TreePathScanner -header extends com/sun/source/util/TreeScanner flags 21 signature Lcom/sun/source/util/TreeScanner; - -class name com/sun/source/util/Trees -header extends java/lang/Object flags 421 -innerclass innerClass javax/tools/JavaCompiler$CompilationTask outerClass javax/tools/JavaCompiler innerClassName CompilationTask flags 609 -innerclass innerClass javax/tools/Diagnostic$Kind outerClass javax/tools/Diagnostic innerClassName Kind flags 4019 - -class name com/sun/tools/javac/Main -header extends java/lang/Object flags 21 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.compiler-J.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.compiler-J.sym.txt index 146a9073bb97f..0345c0ebcc53c 100644 --- a/src/jdk.compiler/share/data/symbols/jdk.compiler-J.sym.txt +++ b/src/jdk.compiler/share/data/symbols/jdk.compiler-J.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2022, 2023, 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,249 +29,21 @@ module name jdk.compiler header exports com/sun/source/doctree,com/sun/source/tree,com/sun/source/util,com/sun/tools/javac requires name\u0020;java.base\u0020;flags\u0020;8000,name\u0020;java.compiler\u0020;flags\u0020;20,name\u0020;jdk.zipfs\u0020;flags\u0020;0 uses javax/annotation/processing/Processor,com/sun/source/util/Plugin,com/sun/tools/doclint/DocLint,com/sun/tools/javac/platform/PlatformProvider provides interface\u0020;java/util/spi/ToolProvider\u0020;impls\u0020;com/sun/tools/javac/main/JavacToolProvider,interface\u0020;com/sun/tools/javac/platform/PlatformProvider\u0020;impls\u0020;com/sun/tools/javac/platform/JDKPlatformProvider,interface\u0020;javax/tools/JavaCompiler\u0020;impls\u0020;com/sun/tools/javac/api/JavacTool,interface\u0020;javax/tools/Tool\u0020;impls\u0020;com/sun/tools/javac/api/JavacTool target linux-amd64 flags 8000 -class name com/sun/source/doctree/AuthorTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/BlockTagTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/CommentTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/DeprecatedTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/DocCommentTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/DocRootTree -header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601 - -class name com/sun/source/doctree/DocTreeVisitor -header extends java/lang/Object flags 601 signature Ljava/lang/Object; - -class name com/sun/source/doctree/DocTypeTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/EndElementTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/EntityTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/ErroneousTree -header extends java/lang/Object implements com/sun/source/doctree/TextTree flags 601 - -class name com/sun/source/doctree/HiddenTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/IdentifierTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/IndexTree -header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601 - -class name com/sun/source/doctree/InheritDocTree -header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601 - -class name com/sun/source/doctree/InlineTagTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/LinkTree -header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601 - -class name com/sun/source/doctree/LiteralTree -header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601 - -class name com/sun/source/doctree/ParamTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/ProvidesTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/ReferenceTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/SeeTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/SerialDataTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/SerialFieldTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/SerialTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/SinceTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/StartElementTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/SummaryTree -header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601 - -class name com/sun/source/doctree/TextTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/ThrowsTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/UnknownBlockTagTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/UnknownInlineTagTree -header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601 - -class name com/sun/source/doctree/UsesTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/ValueTree -header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601 - -class name com/sun/source/doctree/VersionTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/tree/AnnotatedTypeTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/AnnotationTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/ArrayAccessTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/ArrayTypeTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/AssertTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/AssignmentTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/BinaryTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/BlockTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/BreakTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/CatchTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/ClassTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/CompilationUnitTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/CompoundAssignmentTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/ConditionalExpressionTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - class name com/sun/source/tree/ConstantCaseLabelTree header extends java/lang/Object implements com/sun/source/tree/CaseLabelTree flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;SWITCH_PATTERN_MATCHING;,reflective=Ztrue) method name getConstantExpression descriptor ()Lcom/sun/source/tree/ExpressionTree; flags 401 -class name com/sun/source/tree/ContinueTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - class name com/sun/source/tree/DeconstructionPatternTree header extends java/lang/Object implements com/sun/source/tree/PatternTree flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;RECORD_PATTERNS;,reflective=Ztrue) method name getDeconstructor descriptor ()Lcom/sun/source/tree/ExpressionTree; flags 401 method name getNestedPatterns descriptor ()Ljava/util/List; flags 401 signature ()Ljava/util/List<+Lcom/sun/source/tree/PatternTree;>; method name getVariable descriptor ()Lcom/sun/source/tree/VariableTree; flags 401 -class name com/sun/source/tree/DirectiveTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/DoWhileLoopTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/EmptyStatementTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/EnhancedForLoopTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/ErroneousTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/ExportsTree -header extends java/lang/Object implements com/sun/source/tree/DirectiveTree flags 601 - -class name com/sun/source/tree/ExpressionStatementTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - class name com/sun/source/tree/ExpressionTree header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 -class name com/sun/source/tree/ForLoopTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/GuardedPatternTree -class name com/sun/source/tree/IdentifierTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/IfTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/ImportTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/InstanceOfTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/IntersectionTypeTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/LabeledStatementTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/LineMap -header extends java/lang/Object flags 601 - -class name com/sun/source/tree/LiteralTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/MemberSelectTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/MethodInvocationTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/MethodTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/ModifiersTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/NewArrayTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/NewClassTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/OpensTree -header extends java/lang/Object implements com/sun/source/tree/DirectiveTree flags 601 - -class name com/sun/source/tree/PackageTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/ParameterizedTypeTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/ParenthesizedTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - class name com/sun/source/tree/PatternCaseLabelTree header extends java/lang/Object implements com/sun/source/tree/CaseLabelTree flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;SWITCH_PATTERN_MATCHING;,reflective=Ztrue) method name getPattern descriptor ()Lcom/sun/source/tree/PatternTree; flags 401 @@ -280,33 +52,6 @@ method name getGuard descriptor ()Lcom/sun/source/tree/ExpressionTree; flags 401 class name com/sun/source/tree/PatternTree header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 -class name com/sun/source/tree/PrimitiveTypeTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/ProvidesTree -header extends java/lang/Object implements com/sun/source/tree/DirectiveTree flags 601 - -class name com/sun/source/tree/RequiresTree -header extends java/lang/Object implements com/sun/source/tree/DirectiveTree flags 601 - -class name com/sun/source/tree/ReturnTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/Scope -header extends java/lang/Object flags 601 - -class name com/sun/source/tree/StatementTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/SwitchTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/SynchronizedTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/ThrowTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - class name com/sun/source/tree/Tree$Kind -field name GUARDED_PATTERN descriptor Lcom/sun/source/tree/Tree$Kind; field name DECONSTRUCTION_PATTERN descriptor Lcom/sun/source/tree/Tree$Kind; flags 4019 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;RECORD_PATTERNS;,reflective=Ztrue) @@ -314,94 +59,20 @@ field name CONSTANT_CASE_LABEL descriptor Lcom/sun/source/tree/Tree$Kind; flags field name PATTERN_CASE_LABEL descriptor Lcom/sun/source/tree/Tree$Kind; flags 4019 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;SWITCH_PATTERN_MATCHING;,reflective=Ztrue) class name com/sun/source/tree/TreeVisitor -header extends java/lang/Object flags 601 signature Ljava/lang/Object; -method name visitGuardedPattern descriptor (Lcom/sun/source/tree/GuardedPatternTree;Ljava/lang/Object;)Ljava/lang/Object; method name visitDeconstructionPattern descriptor (Lcom/sun/source/tree/DeconstructionPatternTree;Ljava/lang/Object;)Ljava/lang/Object; flags 401 signature (Lcom/sun/source/tree/DeconstructionPatternTree;TP;)TR; classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;RECORD_PATTERNS;,reflective=Ztrue) method name visitConstantCaseLabel descriptor (Lcom/sun/source/tree/ConstantCaseLabelTree;Ljava/lang/Object;)Ljava/lang/Object; flags 401 signature (Lcom/sun/source/tree/ConstantCaseLabelTree;TP;)TR; classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;SWITCH_PATTERN_MATCHING;,reflective=Ztrue) method name visitPatternCaseLabel descriptor (Lcom/sun/source/tree/PatternCaseLabelTree;Ljava/lang/Object;)Ljava/lang/Object; flags 401 signature (Lcom/sun/source/tree/PatternCaseLabelTree;TP;)TR; classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;SWITCH_PATTERN_MATCHING;,reflective=Ztrue) -class name com/sun/source/tree/TryTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/TypeCastTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/TypeParameterTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/UnaryTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/UnionTypeTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/UsesTree -header extends java/lang/Object implements com/sun/source/tree/DirectiveTree flags 601 - -class name com/sun/source/tree/VariableTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/WhileLoopTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/WildcardTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/util/DocSourcePositions -header extends java/lang/Object implements com/sun/source/util/SourcePositions flags 601 - -class name com/sun/source/util/DocTreeFactory -header extends java/lang/Object flags 601 -innerclass innerClass com/sun/source/doctree/AttributeTree$ValueKind outerClass com/sun/source/doctree/AttributeTree innerClassName ValueKind flags 4019 - -class name com/sun/source/util/DocTreePathScanner -header extends com/sun/source/util/DocTreeScanner flags 21 signature Lcom/sun/source/util/DocTreeScanner; - -class name com/sun/source/util/DocTreeScanner -header extends java/lang/Object implements com/sun/source/doctree/DocTreeVisitor flags 21 signature Ljava/lang/Object;Lcom/sun/source/doctree/DocTreeVisitor; - -class name com/sun/source/util/DocTrees -header extends com/sun/source/util/Trees flags 421 -innerclass innerClass javax/tools/JavaCompiler$CompilationTask outerClass javax/tools/JavaCompiler innerClassName CompilationTask flags 609 -innerclass innerClass javax/tools/Diagnostic$Kind outerClass javax/tools/Diagnostic innerClassName Kind flags 4019 - -class name com/sun/source/util/JavacTask -header extends java/lang/Object implements javax/tools/JavaCompiler$CompilationTask flags 421 -innerclass innerClass javax/tools/JavaCompiler$CompilationTask outerClass javax/tools/JavaCompiler innerClassName CompilationTask flags 609 - -class name com/sun/source/util/Plugin -header extends java/lang/Object flags 601 - -class name com/sun/source/util/SimpleDocTreeVisitor -header extends java/lang/Object implements com/sun/source/doctree/DocTreeVisitor flags 21 signature Ljava/lang/Object;Lcom/sun/source/doctree/DocTreeVisitor; - class name com/sun/source/util/SimpleTreeVisitor -header extends java/lang/Object implements com/sun/source/tree/TreeVisitor flags 21 signature Ljava/lang/Object;Lcom/sun/source/tree/TreeVisitor; -method name visitGuardedPattern descriptor (Lcom/sun/source/tree/GuardedPatternTree;Ljava/lang/Object;)Ljava/lang/Object; method name visitDeconstructionPattern descriptor (Lcom/sun/source/tree/DeconstructionPatternTree;Ljava/lang/Object;)Ljava/lang/Object; flags 1 signature (Lcom/sun/source/tree/DeconstructionPatternTree;TP;)TR; classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;RECORD_PATTERNS;,reflective=Ztrue) method name visitConstantCaseLabel descriptor (Lcom/sun/source/tree/ConstantCaseLabelTree;Ljava/lang/Object;)Ljava/lang/Object; flags 1 signature (Lcom/sun/source/tree/ConstantCaseLabelTree;TP;)TR; classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;SWITCH_PATTERN_MATCHING;,reflective=Ztrue) method name visitPatternCaseLabel descriptor (Lcom/sun/source/tree/PatternCaseLabelTree;Ljava/lang/Object;)Ljava/lang/Object; flags 1 signature (Lcom/sun/source/tree/PatternCaseLabelTree;TP;)TR; classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;SWITCH_PATTERN_MATCHING;,reflective=Ztrue) -class name com/sun/source/util/SourcePositions -header extends java/lang/Object flags 601 - -class name com/sun/source/util/TaskListener -header extends java/lang/Object flags 601 - -class name com/sun/source/util/TreePathScanner -header extends com/sun/source/util/TreeScanner flags 21 signature Lcom/sun/source/util/TreeScanner; - class name com/sun/source/util/TreeScanner -method name visitGuardedPattern descriptor (Lcom/sun/source/tree/GuardedPatternTree;Ljava/lang/Object;)Ljava/lang/Object; method name visitDeconstructionPattern descriptor (Lcom/sun/source/tree/DeconstructionPatternTree;Ljava/lang/Object;)Ljava/lang/Object; flags 1 signature (Lcom/sun/source/tree/DeconstructionPatternTree;TP;)TR; classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;RECORD_PATTERNS;,reflective=Ztrue) method name visitConstantCaseLabel descriptor (Lcom/sun/source/tree/ConstantCaseLabelTree;Ljava/lang/Object;)Ljava/lang/Object; flags 1 signature (Lcom/sun/source/tree/ConstantCaseLabelTree;TP;)TR; classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;SWITCH_PATTERN_MATCHING;,reflective=Ztrue) method name visitPatternCaseLabel descriptor (Lcom/sun/source/tree/PatternCaseLabelTree;Ljava/lang/Object;)Ljava/lang/Object; flags 1 signature (Lcom/sun/source/tree/PatternCaseLabelTree;TP;)TR; classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;SWITCH_PATTERN_MATCHING;,reflective=Ztrue) -class name com/sun/source/util/Trees -header extends java/lang/Object flags 421 -innerclass innerClass javax/tools/JavaCompiler$CompilationTask outerClass javax/tools/JavaCompiler innerClassName CompilationTask flags 609 -innerclass innerClass javax/tools/Diagnostic$Kind outerClass javax/tools/Diagnostic innerClassName Kind flags 4019 - -class name com/sun/tools/javac/Main -header extends java/lang/Object flags 21 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.compiler-K.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.compiler-K.sym.txt index b55f0c82adb15..ecfc832a1b790 100644 --- a/src/jdk.compiler/share/data/symbols/jdk.compiler-K.sym.txt +++ b/src/jdk.compiler/share/data/symbols/jdk.compiler-K.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -26,178 +26,23 @@ # ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ### # ########################################################## # -class name com/sun/source/doctree/AuthorTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/BlockTagTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/CommentTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/DeprecatedTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/DocCommentTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/DocRootTree -header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601 - class name com/sun/source/doctree/DocTree$Kind field name SPEC descriptor Lcom/sun/source/doctree/DocTree$Kind; flags 4019 class name com/sun/source/doctree/DocTreeVisitor -header extends java/lang/Object flags 601 signature Ljava/lang/Object; method name visitSpec descriptor (Lcom/sun/source/doctree/SpecTree;Ljava/lang/Object;)Ljava/lang/Object; flags 1 signature (Lcom/sun/source/doctree/SpecTree;TP;)TR; -class name com/sun/source/doctree/DocTypeTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/EndElementTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/EntityTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/ErroneousTree -header extends java/lang/Object implements com/sun/source/doctree/TextTree flags 601 - -class name com/sun/source/doctree/HiddenTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/IdentifierTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/IndexTree -header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601 - -class name com/sun/source/doctree/InheritDocTree -header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601 - -class name com/sun/source/doctree/InlineTagTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/LinkTree -header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601 - -class name com/sun/source/doctree/LiteralTree -header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601 - -class name com/sun/source/doctree/ParamTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/ProvidesTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/ReferenceTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/SeeTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/SerialDataTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/SerialFieldTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/SerialTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/SinceTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - class name com/sun/source/doctree/SpecTree header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 method name getURL descriptor ()Lcom/sun/source/doctree/TextTree; flags 401 method name getTitle descriptor ()Ljava/util/List; flags 401 signature ()Ljava/util/List<+Lcom/sun/source/doctree/DocTree;>; -class name com/sun/source/doctree/StartElementTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/SummaryTree -header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601 - -class name com/sun/source/doctree/TextTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/ThrowsTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/UnknownBlockTagTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/UnknownInlineTagTree -header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601 - -class name com/sun/source/doctree/UsesTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - class name com/sun/source/doctree/ValueTree -header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601 method name getFormat descriptor ()Lcom/sun/source/doctree/TextTree; flags 1 -class name com/sun/source/doctree/VersionTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/tree/AnnotatedTypeTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/AnnotationTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/ArrayAccessTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/ArrayTypeTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/AssertTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/AssignmentTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/BinaryTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/BlockTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/BreakTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/CatchTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/ClassTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/CompilationUnitTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/CompoundAssignmentTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/ConditionalExpressionTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/ContinueTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - class name com/sun/source/tree/DeconstructionPatternTree -method name getVariable descriptor ()Lcom/sun/source/tree/VariableTree; -class name com/sun/source/tree/DirectiveTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/DoWhileLoopTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/EmptyStatementTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - class name com/sun/source/tree/EnhancedForLoopTree header extends java/lang/Object implements com/sun/source/tree/StatementTree nestMembers com/sun/source/tree/EnhancedForLoopTree$DeclarationKind flags 601 innerclass innerClass com/sun/source/tree/EnhancedForLoopTree$DeclarationKind outerClass com/sun/source/tree/EnhancedForLoopTree innerClassName DeclarationKind flags 4019 @@ -212,30 +57,6 @@ field name PATTERN descriptor Lcom/sun/source/tree/EnhancedForLoopTree$Declarati method name values descriptor ()[Lcom/sun/source/tree/EnhancedForLoopTree$DeclarationKind; flags 9 method name valueOf descriptor (Ljava/lang/String;)Lcom/sun/source/tree/EnhancedForLoopTree$DeclarationKind; flags 9 -class name com/sun/source/tree/ErroneousTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/ExportsTree -header extends java/lang/Object implements com/sun/source/tree/DirectiveTree flags 601 - -class name com/sun/source/tree/ExpressionStatementTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/ExpressionTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/ForLoopTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/IdentifierTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/IfTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/ImportTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - class name com/sun/source/tree/InstanceOfTree header extends java/lang/Object implements com/sun/source/tree/ExpressionTree nestMembers com/sun/source/tree/InstanceOfTree$TestKind flags 601 innerclass innerClass com/sun/source/tree/InstanceOfTree$TestKind outerClass com/sun/source/tree/InstanceOfTree innerClassName TestKind flags 4019 @@ -249,157 +70,13 @@ field name PATTERN descriptor Lcom/sun/source/tree/InstanceOfTree$TestKind; flag method name values descriptor ()[Lcom/sun/source/tree/InstanceOfTree$TestKind; flags 9 method name valueOf descriptor (Ljava/lang/String;)Lcom/sun/source/tree/InstanceOfTree$TestKind; flags 9 -class name com/sun/source/tree/IntersectionTypeTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/LabeledStatementTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/LineMap -header extends java/lang/Object flags 601 - -class name com/sun/source/tree/LiteralTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/MemberSelectTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/MethodInvocationTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/MethodTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/ModifiersTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/NewArrayTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/NewClassTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/OpensTree -header extends java/lang/Object implements com/sun/source/tree/DirectiveTree flags 601 - -class name com/sun/source/tree/PackageTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/ParameterizedTypeTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/ParenthesizedTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/PatternTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/PrimitiveTypeTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/ProvidesTree -header extends java/lang/Object implements com/sun/source/tree/DirectiveTree flags 601 - -class name com/sun/source/tree/RequiresTree -header extends java/lang/Object implements com/sun/source/tree/DirectiveTree flags 601 - -class name com/sun/source/tree/ReturnTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/Scope -header extends java/lang/Object flags 601 - -class name com/sun/source/tree/StatementTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/SwitchTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/SynchronizedTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/ThrowTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/TreeVisitor -header extends java/lang/Object flags 601 signature Ljava/lang/Object; - -class name com/sun/source/tree/TryTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/TypeCastTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/TypeParameterTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/UnaryTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/UnionTypeTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/UsesTree -header extends java/lang/Object implements com/sun/source/tree/DirectiveTree flags 601 - -class name com/sun/source/tree/VariableTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/WhileLoopTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/WildcardTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/util/DocSourcePositions -header extends java/lang/Object implements com/sun/source/util/SourcePositions flags 601 - class name com/sun/source/util/DocTreeFactory -header extends java/lang/Object flags 601 -innerclass innerClass com/sun/source/doctree/AttributeTree$ValueKind outerClass com/sun/source/doctree/AttributeTree innerClassName ValueKind flags 4019 method name newSpecTree descriptor (Lcom/sun/source/doctree/TextTree;Ljava/util/List;)Lcom/sun/source/doctree/SpecTree; flags 401 signature (Lcom/sun/source/doctree/TextTree;Ljava/util/List<+Lcom/sun/source/doctree/DocTree;>;)Lcom/sun/source/doctree/SpecTree; method name newValueTree descriptor (Lcom/sun/source/doctree/TextTree;Lcom/sun/source/doctree/ReferenceTree;)Lcom/sun/source/doctree/ValueTree; flags 1 -class name com/sun/source/util/DocTreePathScanner -header extends com/sun/source/util/DocTreeScanner flags 21 signature Lcom/sun/source/util/DocTreeScanner; - class name com/sun/source/util/DocTreeScanner -header extends java/lang/Object implements com/sun/source/doctree/DocTreeVisitor flags 21 signature Ljava/lang/Object;Lcom/sun/source/doctree/DocTreeVisitor; method name visitSpec descriptor (Lcom/sun/source/doctree/SpecTree;Ljava/lang/Object;)Ljava/lang/Object; flags 1 signature (Lcom/sun/source/doctree/SpecTree;TP;)TR; -class name com/sun/source/util/DocTrees -header extends com/sun/source/util/Trees flags 421 -innerclass innerClass javax/tools/JavaCompiler$CompilationTask outerClass javax/tools/JavaCompiler innerClassName CompilationTask flags 609 -innerclass innerClass javax/tools/Diagnostic$Kind outerClass javax/tools/Diagnostic innerClassName Kind flags 4019 - -class name com/sun/source/util/JavacTask -header extends java/lang/Object implements javax/tools/JavaCompiler$CompilationTask flags 421 -innerclass innerClass javax/tools/JavaCompiler$CompilationTask outerClass javax/tools/JavaCompiler innerClassName CompilationTask flags 609 - -class name com/sun/source/util/Plugin -header extends java/lang/Object flags 601 - class name com/sun/source/util/SimpleDocTreeVisitor -header extends java/lang/Object implements com/sun/source/doctree/DocTreeVisitor flags 21 signature Ljava/lang/Object;Lcom/sun/source/doctree/DocTreeVisitor; method name visitSpec descriptor (Lcom/sun/source/doctree/SpecTree;Ljava/lang/Object;)Ljava/lang/Object; flags 1 signature (Lcom/sun/source/doctree/SpecTree;TP;)TR; -class name com/sun/source/util/SimpleTreeVisitor -header extends java/lang/Object implements com/sun/source/tree/TreeVisitor flags 21 signature Ljava/lang/Object;Lcom/sun/source/tree/TreeVisitor; - -class name com/sun/source/util/SourcePositions -header extends java/lang/Object flags 601 - -class name com/sun/source/util/TaskListener -header extends java/lang/Object flags 601 - -class name com/sun/source/util/TreePathScanner -header extends com/sun/source/util/TreeScanner flags 21 signature Lcom/sun/source/util/TreeScanner; - -class name com/sun/source/util/Trees -header extends java/lang/Object flags 421 -innerclass innerClass javax/tools/JavaCompiler$CompilationTask outerClass javax/tools/JavaCompiler innerClassName CompilationTask flags 609 -innerclass innerClass javax/tools/Diagnostic$Kind outerClass javax/tools/Diagnostic innerClassName Kind flags 4019 - -class name com/sun/tools/javac/Main -header extends java/lang/Object flags 21 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.compiler-L.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.compiler-L.sym.txt index f8ec12678547c..8cdc16e89119b 100644 --- a/src/jdk.compiler/share/data/symbols/jdk.compiler-L.sym.txt +++ b/src/jdk.compiler/share/data/symbols/jdk.compiler-L.sym.txt @@ -29,149 +29,19 @@ module name jdk.compiler header exports com/sun/source/doctree,com/sun/source/tree,com/sun/source/util,com/sun/tools/javac requires name\u0020;java.base\u0020;flags\u0020;8000,name\u0020;java.compiler\u0020;flags\u0020;20,name\u0020;jdk.internal.opt\u0020;flags\u0020;0,name\u0020;jdk.zipfs\u0020;flags\u0020;0 uses javax/annotation/processing/Processor,com/sun/source/util/Plugin,com/sun/tools/doclint/DocLint,com/sun/tools/javac/platform/PlatformProvider provides interface\u0020;java/util/spi/ToolProvider\u0020;impls\u0020;com/sun/tools/javac/main/JavacToolProvider,interface\u0020;com/sun/tools/javac/platform/PlatformProvider\u0020;impls\u0020;com/sun/tools/javac/platform/JDKPlatformProvider,interface\u0020;javax/tools/JavaCompiler\u0020;impls\u0020;com/sun/tools/javac/api/JavacTool,interface\u0020;javax/tools/Tool\u0020;impls\u0020;com/sun/tools/javac/api/JavacTool target linux-amd64 flags 8000 -class name com/sun/source/doctree/AuthorTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/BlockTagTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/CommentTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/DeprecatedTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/DocCommentTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/DocRootTree -header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601 - class name com/sun/source/doctree/DocTree$Kind field name ESCAPE descriptor Lcom/sun/source/doctree/DocTree$Kind; flags 4019 class name com/sun/source/doctree/DocTreeVisitor -header extends java/lang/Object flags 601 signature Ljava/lang/Object; method name visitEscape descriptor (Lcom/sun/source/doctree/EscapeTree;Ljava/lang/Object;)Ljava/lang/Object; flags 1 signature (Lcom/sun/source/doctree/EscapeTree;TP;)TR; -class name com/sun/source/doctree/DocTypeTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/EndElementTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/EntityTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/ErroneousTree -header extends java/lang/Object implements com/sun/source/doctree/TextTree flags 601 - class name com/sun/source/doctree/EscapeTree header extends java/lang/Object implements com/sun/source/doctree/TextTree flags 601 method name getBody descriptor ()Ljava/lang/String; flags 401 -class name com/sun/source/doctree/HiddenTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/IdentifierTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/IndexTree -header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601 - -class name com/sun/source/doctree/InheritDocTree -header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601 - -class name com/sun/source/doctree/InlineTagTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/LinkTree -header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601 - -class name com/sun/source/doctree/LiteralTree -header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601 - -class name com/sun/source/doctree/ParamTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/ProvidesTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/ReferenceTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/SeeTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/SerialDataTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/SerialFieldTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/SerialTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/SinceTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/StartElementTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/SummaryTree -header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601 - -class name com/sun/source/doctree/TextTree -header extends java/lang/Object implements com/sun/source/doctree/DocTree flags 601 - -class name com/sun/source/doctree/ThrowsTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/UnknownBlockTagTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/UnknownInlineTagTree -header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601 - -class name com/sun/source/doctree/UsesTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/doctree/ValueTree -header extends java/lang/Object implements com/sun/source/doctree/InlineTagTree flags 601 - -class name com/sun/source/doctree/VersionTree -header extends java/lang/Object implements com/sun/source/doctree/BlockTagTree flags 601 - -class name com/sun/source/tree/AnnotatedTypeTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/AnnotationTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - class name com/sun/source/tree/AnyPatternTree header extends java/lang/Object implements com/sun/source/tree/PatternTree flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;UNNAMED;) -class name com/sun/source/tree/ArrayAccessTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/ArrayTypeTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/AssertTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/AssignmentTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/BinaryTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/BlockTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/BreakTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - class name com/sun/source/tree/CaseLabelTree header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 @@ -180,42 +50,15 @@ class name com/sun/source/tree/CaseTree method name getLabels descriptor ()Ljava/util/List; flags 401 signature ()Ljava/util/List<+Lcom/sun/source/tree/CaseLabelTree;>; method name getGuard descriptor ()Lcom/sun/source/tree/ExpressionTree; flags 401 -class name com/sun/source/tree/CatchTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/ClassTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/CompilationUnitTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/CompoundAssignmentTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/ConditionalExpressionTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - class name com/sun/source/tree/ConstantCaseLabelTree header extends java/lang/Object implements com/sun/source/tree/CaseLabelTree flags 601 -class name com/sun/source/tree/ContinueTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - class name com/sun/source/tree/DeconstructionPatternTree header extends java/lang/Object implements com/sun/source/tree/PatternTree flags 601 class name com/sun/source/tree/DefaultCaseLabelTree header extends java/lang/Object implements com/sun/source/tree/CaseLabelTree flags 601 -class name com/sun/source/tree/DirectiveTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/DoWhileLoopTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/EmptyStatementTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - class name com/sun/source/tree/EnhancedForLoopTree header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 -method name getVariableOrRecordPattern descriptor ()Lcom/sun/source/tree/Tree; @@ -223,120 +66,24 @@ header extends java/lang/Object implements com/sun/source/tree/StatementTree fla -class name com/sun/source/tree/EnhancedForLoopTree$DeclarationKind -class name com/sun/source/tree/ErroneousTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/ExportsTree -header extends java/lang/Object implements com/sun/source/tree/DirectiveTree flags 601 - -class name com/sun/source/tree/ExpressionStatementTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/ExpressionTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/ForLoopTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/IdentifierTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/IfTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/ImportTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - class name com/sun/source/tree/InstanceOfTree header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 -method name getTestKind descriptor ()Lcom/sun/source/tree/InstanceOfTree$TestKind; -class name com/sun/source/tree/InstanceOfTree$TestKind -class name com/sun/source/tree/IntersectionTypeTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/LabeledStatementTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/LineMap -header extends java/lang/Object flags 601 - -class name com/sun/source/tree/LiteralTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/MemberSelectTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/MethodInvocationTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/MethodTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/ModifiersTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/NewArrayTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/NewClassTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/OpensTree -header extends java/lang/Object implements com/sun/source/tree/DirectiveTree flags 601 - -class name com/sun/source/tree/PackageTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/ParameterizedTypeTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/ParenthesizedPatternTree -class name com/sun/source/tree/ParenthesizedTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - class name com/sun/source/tree/PatternCaseLabelTree header extends java/lang/Object implements com/sun/source/tree/CaseLabelTree flags 601 -method name getGuard descriptor ()Lcom/sun/source/tree/ExpressionTree; -class name com/sun/source/tree/PatternTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/PrimitiveTypeTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/ProvidesTree -header extends java/lang/Object implements com/sun/source/tree/DirectiveTree flags 601 - -class name com/sun/source/tree/RequiresTree -header extends java/lang/Object implements com/sun/source/tree/DirectiveTree flags 601 - -class name com/sun/source/tree/ReturnTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/Scope -header extends java/lang/Object flags 601 - -class name com/sun/source/tree/StatementTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - class name com/sun/source/tree/StringTemplateTree header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;STRING_TEMPLATES;,reflective=Ztrue) method name getProcessor descriptor ()Lcom/sun/source/tree/ExpressionTree; flags 401 method name getFragments descriptor ()Ljava/util/List; flags 401 signature ()Ljava/util/List; method name getExpressions descriptor ()Ljava/util/List; flags 401 signature ()Ljava/util/List<+Lcom/sun/source/tree/ExpressionTree;>; -class name com/sun/source/tree/SwitchTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/SynchronizedTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/ThrowTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - class name com/sun/source/tree/Tree$Kind -field name PARENTHESIZED_PATTERN descriptor Lcom/sun/source/tree/Tree$Kind; -field name DEFAULT_CASE_LABEL descriptor Lcom/sun/source/tree/Tree$Kind; @@ -351,7 +98,6 @@ field name PATTERN_CASE_LABEL descriptor Lcom/sun/source/tree/Tree$Kind; flags 4 field name DECONSTRUCTION_PATTERN descriptor Lcom/sun/source/tree/Tree$Kind; flags 4019 class name com/sun/source/tree/TreeVisitor -header extends java/lang/Object flags 601 signature Ljava/lang/Object; -method name visitDefaultCaseLabel descriptor (Lcom/sun/source/tree/DefaultCaseLabelTree;Ljava/lang/Object;)Ljava/lang/Object; -method name visitParenthesizedPattern descriptor (Lcom/sun/source/tree/ParenthesizedPatternTree;Ljava/lang/Object;)Ljava/lang/Object; -method name visitDeconstructionPattern descriptor (Lcom/sun/source/tree/DeconstructionPatternTree;Ljava/lang/Object;)Ljava/lang/Object; @@ -364,68 +110,20 @@ method name visitConstantCaseLabel descriptor (Lcom/sun/source/tree/ConstantCase method name visitPatternCaseLabel descriptor (Lcom/sun/source/tree/PatternCaseLabelTree;Ljava/lang/Object;)Ljava/lang/Object; flags 401 signature (Lcom/sun/source/tree/PatternCaseLabelTree;TP;)TR; method name visitDeconstructionPattern descriptor (Lcom/sun/source/tree/DeconstructionPatternTree;Ljava/lang/Object;)Ljava/lang/Object; flags 401 signature (Lcom/sun/source/tree/DeconstructionPatternTree;TP;)TR; -class name com/sun/source/tree/TryTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/TypeCastTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/TypeParameterTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/UnaryTree -header extends java/lang/Object implements com/sun/source/tree/ExpressionTree flags 601 - -class name com/sun/source/tree/UnionTypeTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/tree/UsesTree -header extends java/lang/Object implements com/sun/source/tree/DirectiveTree flags 601 - -class name com/sun/source/tree/VariableTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/WhileLoopTree -header extends java/lang/Object implements com/sun/source/tree/StatementTree flags 601 - -class name com/sun/source/tree/WildcardTree -header extends java/lang/Object implements com/sun/source/tree/Tree flags 601 - -class name com/sun/source/util/DocSourcePositions -header extends java/lang/Object implements com/sun/source/util/SourcePositions flags 601 - class name com/sun/source/util/DocTreeFactory -header extends java/lang/Object flags 601 -innerclass innerClass com/sun/source/doctree/AttributeTree$ValueKind outerClass com/sun/source/doctree/AttributeTree innerClassName ValueKind flags 4019 method name newEscapeTree descriptor (C)Lcom/sun/source/doctree/EscapeTree; flags 401 -class name com/sun/source/util/DocTreePathScanner -header extends com/sun/source/util/DocTreeScanner flags 21 signature Lcom/sun/source/util/DocTreeScanner; - class name com/sun/source/util/DocTreeScanner -header extends java/lang/Object implements com/sun/source/doctree/DocTreeVisitor flags 21 signature Ljava/lang/Object;Lcom/sun/source/doctree/DocTreeVisitor; method name visitEscape descriptor (Lcom/sun/source/doctree/EscapeTree;Ljava/lang/Object;)Ljava/lang/Object; flags 1 signature (Lcom/sun/source/doctree/EscapeTree;TP;)TR; -class name com/sun/source/util/DocTrees -header extends com/sun/source/util/Trees flags 421 -innerclass innerClass javax/tools/JavaCompiler$CompilationTask outerClass javax/tools/JavaCompiler innerClassName CompilationTask flags 609 -innerclass innerClass javax/tools/Diagnostic$Kind outerClass javax/tools/Diagnostic innerClassName Kind flags 4019 - class name com/sun/source/util/JavacTask -header extends java/lang/Object implements javax/tools/JavaCompiler$CompilationTask flags 421 -innerclass innerClass javax/tools/JavaCompiler$CompilationTask outerClass javax/tools/JavaCompiler innerClassName CompilationTask flags 609 -method name descriptor ()V method name descriptor ()V flags 4 -class name com/sun/source/util/Plugin -header extends java/lang/Object flags 601 - class name com/sun/source/util/SimpleDocTreeVisitor -header extends java/lang/Object implements com/sun/source/doctree/DocTreeVisitor flags 21 signature Ljava/lang/Object;Lcom/sun/source/doctree/DocTreeVisitor; method name visitEscape descriptor (Lcom/sun/source/doctree/EscapeTree;Ljava/lang/Object;)Ljava/lang/Object; flags 1 signature (Lcom/sun/source/doctree/EscapeTree;TP;)TR; class name com/sun/source/util/SimpleTreeVisitor -header extends java/lang/Object implements com/sun/source/tree/TreeVisitor flags 21 signature Ljava/lang/Object;Lcom/sun/source/tree/TreeVisitor; -method name visitDefaultCaseLabel descriptor (Lcom/sun/source/tree/DefaultCaseLabelTree;Ljava/lang/Object;)Ljava/lang/Object; -method name visitParenthesizedPattern descriptor (Lcom/sun/source/tree/ParenthesizedPatternTree;Ljava/lang/Object;)Ljava/lang/Object; -method name visitDeconstructionPattern descriptor (Lcom/sun/source/tree/DeconstructionPatternTree;Ljava/lang/Object;)Ljava/lang/Object; @@ -438,15 +136,6 @@ method name visitConstantCaseLabel descriptor (Lcom/sun/source/tree/ConstantCase method name visitDeconstructionPattern descriptor (Lcom/sun/source/tree/DeconstructionPatternTree;Ljava/lang/Object;)Ljava/lang/Object; flags 1 signature (Lcom/sun/source/tree/DeconstructionPatternTree;TP;)TR; method name visitPatternCaseLabel descriptor (Lcom/sun/source/tree/PatternCaseLabelTree;Ljava/lang/Object;)Ljava/lang/Object; flags 1 signature (Lcom/sun/source/tree/PatternCaseLabelTree;TP;)TR; -class name com/sun/source/util/SourcePositions -header extends java/lang/Object flags 601 - -class name com/sun/source/util/TaskListener -header extends java/lang/Object flags 601 - -class name com/sun/source/util/TreePathScanner -header extends com/sun/source/util/TreeScanner flags 21 signature Lcom/sun/source/util/TreeScanner; - class name com/sun/source/util/TreeScanner -method name visitDefaultCaseLabel descriptor (Lcom/sun/source/tree/DefaultCaseLabelTree;Ljava/lang/Object;)Ljava/lang/Object; -method name visitParenthesizedPattern descriptor (Lcom/sun/source/tree/ParenthesizedPatternTree;Ljava/lang/Object;)Ljava/lang/Object; @@ -460,11 +149,3 @@ method name visitConstantCaseLabel descriptor (Lcom/sun/source/tree/ConstantCase method name visitPatternCaseLabel descriptor (Lcom/sun/source/tree/PatternCaseLabelTree;Ljava/lang/Object;)Ljava/lang/Object; flags 1 signature (Lcom/sun/source/tree/PatternCaseLabelTree;TP;)TR; method name visitDeconstructionPattern descriptor (Lcom/sun/source/tree/DeconstructionPatternTree;Ljava/lang/Object;)Ljava/lang/Object; flags 1 signature (Lcom/sun/source/tree/DeconstructionPatternTree;TP;)TR; -class name com/sun/source/util/Trees -header extends java/lang/Object flags 421 -innerclass innerClass javax/tools/JavaCompiler$CompilationTask outerClass javax/tools/JavaCompiler innerClassName CompilationTask flags 609 -innerclass innerClass javax/tools/Diagnostic$Kind outerClass javax/tools/Diagnostic innerClassName Kind flags 4019 - -class name com/sun/tools/javac/Main -header extends java/lang/Object flags 21 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.dynalink-H.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.dynalink-H.sym.txt deleted file mode 100644 index 854dbd70888eb..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.dynalink-H.sym.txt +++ /dev/null @@ -1,136 +0,0 @@ -# -# Copyright (c) 2021, 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 jdk/dynalink/CallSiteDescriptor -header extends jdk/dynalink/SecureLookupSupplier flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/DynamicLinker -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/StackWalker$StackFrame outerClass java/lang/StackWalker innerClassName StackFrame flags 609 -innerclass innerClass java/lang/StackWalker$Option outerClass java/lang/StackWalker innerClassName Option flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/NamedOperation -header extends java/lang/Object implements jdk/dynalink/Operation flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/Namespace -header extends java/lang/Object flags 601 - -class name jdk/dynalink/NamespaceOperation -header extends java/lang/Object implements jdk/dynalink/Operation flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/NoSuchDynamicMethodException -header extends java/lang/RuntimeException flags 21 - -class name jdk/dynalink/Operation -header extends java/lang/Object flags 601 - -class name jdk/dynalink/RelinkableCallSite -header extends java/lang/Object flags 601 - -class name jdk/dynalink/SecureLookupSupplier -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/StandardNamespace -header extends java/lang/Enum implements jdk/dynalink/Namespace flags 4031 signature Ljava/lang/Enum;Ljdk/dynalink/Namespace; - -class name jdk/dynalink/StandardOperation -header extends java/lang/Enum implements jdk/dynalink/Operation flags 4031 signature Ljava/lang/Enum;Ljdk/dynalink/Operation; - -class name jdk/dynalink/beans/MissingMemberHandlerFactory -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; - -class name jdk/dynalink/linker/GuardedInvocation -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/linker/GuardedInvocationTransformer -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; - -class name jdk/dynalink/linker/GuardingDynamicLinker -header extends java/lang/Object flags 601 - -class name jdk/dynalink/linker/GuardingDynamicLinkerExporter -header extends java/lang/Object implements java/util/function/Supplier flags 421 signature Ljava/lang/Object;Ljava/util/function/Supplier;>; - -class name jdk/dynalink/linker/GuardingTypeConverterFactory -header extends java/lang/Object flags 601 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/linker/LinkRequest -header extends java/lang/Object flags 601 - -class name jdk/dynalink/linker/LinkerServices -header extends java/lang/Object flags 601 -innerclass innerClass jdk/dynalink/linker/ConversionComparator$Comparison outerClass jdk/dynalink/linker/ConversionComparator innerClassName Comparison flags 4019 - -class name jdk/dynalink/linker/MethodHandleTransformer -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; - -class name jdk/dynalink/linker/MethodTypeConversionStrategy -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; - -class name jdk/dynalink/linker/TypeBasedGuardingDynamicLinker -header extends java/lang/Object implements jdk/dynalink/linker/GuardingDynamicLinker flags 601 - -class name jdk/dynalink/linker/support/CompositeGuardingDynamicLinker -header extends java/lang/Object implements jdk/dynalink/linker/GuardingDynamicLinker flags 21 - -class name jdk/dynalink/linker/support/DefaultInternalObjectFilter -header extends java/lang/Object implements jdk/dynalink/linker/MethodHandleTransformer flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/linker/support/Guards -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/linker/support/Lookup -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/linker/support/SimpleLinkRequest -header extends java/lang/Object implements jdk/dynalink/linker/LinkRequest flags 21 - -class name jdk/dynalink/linker/support/TypeUtilities -header extends java/lang/Object flags 31 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 - -class name jdk/dynalink/support/AbstractRelinkableCallSite -header extends java/lang/invoke/MutableCallSite implements jdk/dynalink/RelinkableCallSite flags 421 - -class name jdk/dynalink/support/ChainedCallSite -header extends jdk/dynalink/support/AbstractRelinkableCallSite flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/support/SimpleRelinkableCallSite -header extends jdk/dynalink/support/AbstractRelinkableCallSite flags 21 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.dynalink-I.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.dynalink-I.sym.txt deleted file mode 100644 index 854dbd70888eb..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.dynalink-I.sym.txt +++ /dev/null @@ -1,136 +0,0 @@ -# -# Copyright (c) 2021, 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 jdk/dynalink/CallSiteDescriptor -header extends jdk/dynalink/SecureLookupSupplier flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/DynamicLinker -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/StackWalker$StackFrame outerClass java/lang/StackWalker innerClassName StackFrame flags 609 -innerclass innerClass java/lang/StackWalker$Option outerClass java/lang/StackWalker innerClassName Option flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/NamedOperation -header extends java/lang/Object implements jdk/dynalink/Operation flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/Namespace -header extends java/lang/Object flags 601 - -class name jdk/dynalink/NamespaceOperation -header extends java/lang/Object implements jdk/dynalink/Operation flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/NoSuchDynamicMethodException -header extends java/lang/RuntimeException flags 21 - -class name jdk/dynalink/Operation -header extends java/lang/Object flags 601 - -class name jdk/dynalink/RelinkableCallSite -header extends java/lang/Object flags 601 - -class name jdk/dynalink/SecureLookupSupplier -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/StandardNamespace -header extends java/lang/Enum implements jdk/dynalink/Namespace flags 4031 signature Ljava/lang/Enum;Ljdk/dynalink/Namespace; - -class name jdk/dynalink/StandardOperation -header extends java/lang/Enum implements jdk/dynalink/Operation flags 4031 signature Ljava/lang/Enum;Ljdk/dynalink/Operation; - -class name jdk/dynalink/beans/MissingMemberHandlerFactory -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; - -class name jdk/dynalink/linker/GuardedInvocation -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/linker/GuardedInvocationTransformer -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; - -class name jdk/dynalink/linker/GuardingDynamicLinker -header extends java/lang/Object flags 601 - -class name jdk/dynalink/linker/GuardingDynamicLinkerExporter -header extends java/lang/Object implements java/util/function/Supplier flags 421 signature Ljava/lang/Object;Ljava/util/function/Supplier;>; - -class name jdk/dynalink/linker/GuardingTypeConverterFactory -header extends java/lang/Object flags 601 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/linker/LinkRequest -header extends java/lang/Object flags 601 - -class name jdk/dynalink/linker/LinkerServices -header extends java/lang/Object flags 601 -innerclass innerClass jdk/dynalink/linker/ConversionComparator$Comparison outerClass jdk/dynalink/linker/ConversionComparator innerClassName Comparison flags 4019 - -class name jdk/dynalink/linker/MethodHandleTransformer -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; - -class name jdk/dynalink/linker/MethodTypeConversionStrategy -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; - -class name jdk/dynalink/linker/TypeBasedGuardingDynamicLinker -header extends java/lang/Object implements jdk/dynalink/linker/GuardingDynamicLinker flags 601 - -class name jdk/dynalink/linker/support/CompositeGuardingDynamicLinker -header extends java/lang/Object implements jdk/dynalink/linker/GuardingDynamicLinker flags 21 - -class name jdk/dynalink/linker/support/DefaultInternalObjectFilter -header extends java/lang/Object implements jdk/dynalink/linker/MethodHandleTransformer flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/linker/support/Guards -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/linker/support/Lookup -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/linker/support/SimpleLinkRequest -header extends java/lang/Object implements jdk/dynalink/linker/LinkRequest flags 21 - -class name jdk/dynalink/linker/support/TypeUtilities -header extends java/lang/Object flags 31 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 - -class name jdk/dynalink/support/AbstractRelinkableCallSite -header extends java/lang/invoke/MutableCallSite implements jdk/dynalink/RelinkableCallSite flags 421 - -class name jdk/dynalink/support/ChainedCallSite -header extends jdk/dynalink/support/AbstractRelinkableCallSite flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/support/SimpleRelinkableCallSite -header extends jdk/dynalink/support/AbstractRelinkableCallSite flags 21 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.dynalink-J.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.dynalink-J.sym.txt deleted file mode 100644 index d881760d53a68..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.dynalink-J.sym.txt +++ /dev/null @@ -1,136 +0,0 @@ -# -# Copyright (c) 2022, 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 jdk/dynalink/CallSiteDescriptor -header extends jdk/dynalink/SecureLookupSupplier flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/DynamicLinker -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/StackWalker$StackFrame outerClass java/lang/StackWalker innerClassName StackFrame flags 609 -innerclass innerClass java/lang/StackWalker$Option outerClass java/lang/StackWalker innerClassName Option flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/NamedOperation -header extends java/lang/Object implements jdk/dynalink/Operation flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/Namespace -header extends java/lang/Object flags 601 - -class name jdk/dynalink/NamespaceOperation -header extends java/lang/Object implements jdk/dynalink/Operation flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/NoSuchDynamicMethodException -header extends java/lang/RuntimeException flags 21 - -class name jdk/dynalink/Operation -header extends java/lang/Object flags 601 - -class name jdk/dynalink/RelinkableCallSite -header extends java/lang/Object flags 601 - -class name jdk/dynalink/SecureLookupSupplier -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/StandardNamespace -header extends java/lang/Enum implements jdk/dynalink/Namespace flags 4031 signature Ljava/lang/Enum;Ljdk/dynalink/Namespace; - -class name jdk/dynalink/StandardOperation -header extends java/lang/Enum implements jdk/dynalink/Operation flags 4031 signature Ljava/lang/Enum;Ljdk/dynalink/Operation; - -class name jdk/dynalink/beans/MissingMemberHandlerFactory -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; - -class name jdk/dynalink/linker/GuardedInvocation -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/linker/GuardedInvocationTransformer -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; - -class name jdk/dynalink/linker/GuardingDynamicLinker -header extends java/lang/Object flags 601 - -class name jdk/dynalink/linker/GuardingDynamicLinkerExporter -header extends java/lang/Object implements java/util/function/Supplier flags 421 signature Ljava/lang/Object;Ljava/util/function/Supplier;>; - -class name jdk/dynalink/linker/GuardingTypeConverterFactory -header extends java/lang/Object flags 601 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/linker/LinkRequest -header extends java/lang/Object flags 601 - -class name jdk/dynalink/linker/LinkerServices -header extends java/lang/Object flags 601 -innerclass innerClass jdk/dynalink/linker/ConversionComparator$Comparison outerClass jdk/dynalink/linker/ConversionComparator innerClassName Comparison flags 4019 - -class name jdk/dynalink/linker/MethodHandleTransformer -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; - -class name jdk/dynalink/linker/MethodTypeConversionStrategy -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; - -class name jdk/dynalink/linker/TypeBasedGuardingDynamicLinker -header extends java/lang/Object implements jdk/dynalink/linker/GuardingDynamicLinker flags 601 - -class name jdk/dynalink/linker/support/CompositeGuardingDynamicLinker -header extends java/lang/Object implements jdk/dynalink/linker/GuardingDynamicLinker flags 21 - -class name jdk/dynalink/linker/support/DefaultInternalObjectFilter -header extends java/lang/Object implements jdk/dynalink/linker/MethodHandleTransformer flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/linker/support/Guards -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/linker/support/Lookup -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/linker/support/SimpleLinkRequest -header extends java/lang/Object implements jdk/dynalink/linker/LinkRequest flags 21 - -class name jdk/dynalink/linker/support/TypeUtilities -header extends java/lang/Object flags 31 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 - -class name jdk/dynalink/support/AbstractRelinkableCallSite -header extends java/lang/invoke/MutableCallSite implements jdk/dynalink/RelinkableCallSite flags 421 - -class name jdk/dynalink/support/ChainedCallSite -header extends jdk/dynalink/support/AbstractRelinkableCallSite flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/support/SimpleRelinkableCallSite -header extends jdk/dynalink/support/AbstractRelinkableCallSite flags 21 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.dynalink-K.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.dynalink-K.sym.txt deleted file mode 100644 index d881760d53a68..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.dynalink-K.sym.txt +++ /dev/null @@ -1,136 +0,0 @@ -# -# Copyright (c) 2022, 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 jdk/dynalink/CallSiteDescriptor -header extends jdk/dynalink/SecureLookupSupplier flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/DynamicLinker -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/StackWalker$StackFrame outerClass java/lang/StackWalker innerClassName StackFrame flags 609 -innerclass innerClass java/lang/StackWalker$Option outerClass java/lang/StackWalker innerClassName Option flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/NamedOperation -header extends java/lang/Object implements jdk/dynalink/Operation flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/Namespace -header extends java/lang/Object flags 601 - -class name jdk/dynalink/NamespaceOperation -header extends java/lang/Object implements jdk/dynalink/Operation flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/NoSuchDynamicMethodException -header extends java/lang/RuntimeException flags 21 - -class name jdk/dynalink/Operation -header extends java/lang/Object flags 601 - -class name jdk/dynalink/RelinkableCallSite -header extends java/lang/Object flags 601 - -class name jdk/dynalink/SecureLookupSupplier -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/StandardNamespace -header extends java/lang/Enum implements jdk/dynalink/Namespace flags 4031 signature Ljava/lang/Enum;Ljdk/dynalink/Namespace; - -class name jdk/dynalink/StandardOperation -header extends java/lang/Enum implements jdk/dynalink/Operation flags 4031 signature Ljava/lang/Enum;Ljdk/dynalink/Operation; - -class name jdk/dynalink/beans/MissingMemberHandlerFactory -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; - -class name jdk/dynalink/linker/GuardedInvocation -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/linker/GuardedInvocationTransformer -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; - -class name jdk/dynalink/linker/GuardingDynamicLinker -header extends java/lang/Object flags 601 - -class name jdk/dynalink/linker/GuardingDynamicLinkerExporter -header extends java/lang/Object implements java/util/function/Supplier flags 421 signature Ljava/lang/Object;Ljava/util/function/Supplier;>; - -class name jdk/dynalink/linker/GuardingTypeConverterFactory -header extends java/lang/Object flags 601 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/linker/LinkRequest -header extends java/lang/Object flags 601 - -class name jdk/dynalink/linker/LinkerServices -header extends java/lang/Object flags 601 -innerclass innerClass jdk/dynalink/linker/ConversionComparator$Comparison outerClass jdk/dynalink/linker/ConversionComparator innerClassName Comparison flags 4019 - -class name jdk/dynalink/linker/MethodHandleTransformer -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; - -class name jdk/dynalink/linker/MethodTypeConversionStrategy -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; - -class name jdk/dynalink/linker/TypeBasedGuardingDynamicLinker -header extends java/lang/Object implements jdk/dynalink/linker/GuardingDynamicLinker flags 601 - -class name jdk/dynalink/linker/support/CompositeGuardingDynamicLinker -header extends java/lang/Object implements jdk/dynalink/linker/GuardingDynamicLinker flags 21 - -class name jdk/dynalink/linker/support/DefaultInternalObjectFilter -header extends java/lang/Object implements jdk/dynalink/linker/MethodHandleTransformer flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/linker/support/Guards -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/linker/support/Lookup -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/linker/support/SimpleLinkRequest -header extends java/lang/Object implements jdk/dynalink/linker/LinkRequest flags 21 - -class name jdk/dynalink/linker/support/TypeUtilities -header extends java/lang/Object flags 31 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 - -class name jdk/dynalink/support/AbstractRelinkableCallSite -header extends java/lang/invoke/MutableCallSite implements jdk/dynalink/RelinkableCallSite flags 421 - -class name jdk/dynalink/support/ChainedCallSite -header extends jdk/dynalink/support/AbstractRelinkableCallSite flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/support/SimpleRelinkableCallSite -header extends jdk/dynalink/support/AbstractRelinkableCallSite flags 21 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.dynalink-L.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.dynalink-L.sym.txt deleted file mode 100644 index 62666ffdd4c2b..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.dynalink-L.sym.txt +++ /dev/null @@ -1,136 +0,0 @@ -# -# Copyright (c) 2023, 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 jdk/dynalink/CallSiteDescriptor -header extends jdk/dynalink/SecureLookupSupplier flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/DynamicLinker -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/StackWalker$StackFrame outerClass java/lang/StackWalker innerClassName StackFrame flags 609 -innerclass innerClass java/lang/StackWalker$Option outerClass java/lang/StackWalker innerClassName Option flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/NamedOperation -header extends java/lang/Object implements jdk/dynalink/Operation flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/Namespace -header extends java/lang/Object flags 601 - -class name jdk/dynalink/NamespaceOperation -header extends java/lang/Object implements jdk/dynalink/Operation flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/NoSuchDynamicMethodException -header extends java/lang/RuntimeException flags 21 - -class name jdk/dynalink/Operation -header extends java/lang/Object flags 601 - -class name jdk/dynalink/RelinkableCallSite -header extends java/lang/Object flags 601 - -class name jdk/dynalink/SecureLookupSupplier -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/StandardNamespace -header extends java/lang/Enum implements jdk/dynalink/Namespace flags 4031 signature Ljava/lang/Enum;Ljdk/dynalink/Namespace; - -class name jdk/dynalink/StandardOperation -header extends java/lang/Enum implements jdk/dynalink/Operation flags 4031 signature Ljava/lang/Enum;Ljdk/dynalink/Operation; - -class name jdk/dynalink/beans/MissingMemberHandlerFactory -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; - -class name jdk/dynalink/linker/GuardedInvocation -header extends java/lang/Object flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/linker/GuardedInvocationTransformer -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; - -class name jdk/dynalink/linker/GuardingDynamicLinker -header extends java/lang/Object flags 601 - -class name jdk/dynalink/linker/GuardingDynamicLinkerExporter -header extends java/lang/Object implements java/util/function/Supplier flags 421 signature Ljava/lang/Object;Ljava/util/function/Supplier;>; - -class name jdk/dynalink/linker/GuardingTypeConverterFactory -header extends java/lang/Object flags 601 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/linker/LinkRequest -header extends java/lang/Object flags 601 - -class name jdk/dynalink/linker/LinkerServices -header extends java/lang/Object flags 601 -innerclass innerClass jdk/dynalink/linker/ConversionComparator$Comparison outerClass jdk/dynalink/linker/ConversionComparator innerClassName Comparison flags 4019 - -class name jdk/dynalink/linker/MethodHandleTransformer -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; - -class name jdk/dynalink/linker/MethodTypeConversionStrategy -header extends java/lang/Object flags 601 runtimeAnnotations @Ljava/lang/FunctionalInterface; - -class name jdk/dynalink/linker/TypeBasedGuardingDynamicLinker -header extends java/lang/Object implements jdk/dynalink/linker/GuardingDynamicLinker flags 601 - -class name jdk/dynalink/linker/support/CompositeGuardingDynamicLinker -header extends java/lang/Object implements jdk/dynalink/linker/GuardingDynamicLinker flags 21 - -class name jdk/dynalink/linker/support/DefaultInternalObjectFilter -header extends java/lang/Object implements jdk/dynalink/linker/MethodHandleTransformer flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/linker/support/Guards -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/linker/support/Lookup -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/linker/support/SimpleLinkRequest -header extends java/lang/Object implements jdk/dynalink/linker/LinkRequest flags 21 - -class name jdk/dynalink/linker/support/TypeUtilities -header extends java/lang/Object flags 31 -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 - -class name jdk/dynalink/support/AbstractRelinkableCallSite -header extends java/lang/invoke/MutableCallSite implements jdk/dynalink/RelinkableCallSite flags 421 - -class name jdk/dynalink/support/ChainedCallSite -header extends jdk/dynalink/support/AbstractRelinkableCallSite flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/dynalink/support/SimpleRelinkableCallSite -header extends jdk/dynalink/support/AbstractRelinkableCallSite flags 21 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.httpserver-H.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.httpserver-H.sym.txt index 9562d8d4f75c8..eeee816b038ef 100644 --- a/src/jdk.compiler/share/data/symbols/jdk.httpserver-H.sym.txt +++ b/src/jdk.compiler/share/data/symbols/jdk.httpserver-H.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -30,35 +30,3 @@ class name com/sun/net/httpserver/Filter method name beforeHandler descriptor (Ljava/lang/String;Ljava/util/function/Consumer;)Lcom/sun/net/httpserver/Filter; flags 9 signature (Ljava/lang/String;Ljava/util/function/Consumer;)Lcom/sun/net/httpserver/Filter; method name afterHandler descriptor (Ljava/lang/String;Ljava/util/function/Consumer;)Lcom/sun/net/httpserver/Filter; flags 9 signature (Ljava/lang/String;Ljava/util/function/Consumer;)Lcom/sun/net/httpserver/Filter; -class name com/sun/net/httpserver/Headers -header extends java/lang/Object implements java/util/Map flags 21 signature Ljava/lang/Object;Ljava/util/Map;>; -innerclass innerClass java/util/Map$Entry outerClass java/util/Map innerClassName Entry flags 609 - -class name com/sun/net/httpserver/HttpContext -header extends java/lang/Object flags 421 - -class name com/sun/net/httpserver/HttpHandler -header extends java/lang/Object flags 601 - -class name com/sun/net/httpserver/HttpPrincipal -header extends java/lang/Object implements java/security/Principal flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/net/httpserver/HttpServer -header extends java/lang/Object flags 421 - -class name com/sun/net/httpserver/HttpsConfigurator -header extends java/lang/Object flags 21 - -class name com/sun/net/httpserver/HttpsExchange -header extends com/sun/net/httpserver/HttpExchange flags 421 - -class name com/sun/net/httpserver/HttpsParameters -header extends java/lang/Object flags 421 - -class name com/sun/net/httpserver/HttpsServer -header extends com/sun/net/httpserver/HttpServer flags 421 - -class name com/sun/net/httpserver/spi/HttpServerProvider -header extends java/lang/Object flags 421 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.httpserver-I.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.httpserver-I.sym.txt index 5803e61c4ba94..b96329bca1a7b 100644 --- a/src/jdk.compiler/share/data/symbols/jdk.httpserver-I.sym.txt +++ b/src/jdk.compiler/share/data/symbols/jdk.httpserver-I.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2021, 2023, 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 @@ -42,39 +42,20 @@ method name toString descriptor ()Ljava/lang/String; flags 1 method name of descriptor ([Ljava/lang/String;)Lcom/sun/net/httpserver/Headers; flags 89 method name of descriptor (Ljava/util/Map;)Lcom/sun/net/httpserver/Headers; flags 9 signature (Ljava/util/Map;>;)Lcom/sun/net/httpserver/Headers; -class name com/sun/net/httpserver/HttpContext -header extends java/lang/Object flags 421 - class name com/sun/net/httpserver/HttpExchange header extends java/lang/Object implements java/lang/AutoCloseable,com/sun/net/httpserver/Request flags 421 -class name com/sun/net/httpserver/HttpHandler -header extends java/lang/Object flags 601 - class name com/sun/net/httpserver/HttpHandlers header extends java/lang/Object flags 31 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 method name handleOrElse descriptor (Ljava/util/function/Predicate;Lcom/sun/net/httpserver/HttpHandler;Lcom/sun/net/httpserver/HttpHandler;)Lcom/sun/net/httpserver/HttpHandler; flags 9 signature (Ljava/util/function/Predicate;Lcom/sun/net/httpserver/HttpHandler;Lcom/sun/net/httpserver/HttpHandler;)Lcom/sun/net/httpserver/HttpHandler; method name of descriptor (ILcom/sun/net/httpserver/Headers;Ljava/lang/String;)Lcom/sun/net/httpserver/HttpHandler; flags 9 -class name com/sun/net/httpserver/HttpPrincipal -header extends java/lang/Object implements java/security/Principal flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name com/sun/net/httpserver/HttpServer header extends java/lang/Object flags 421 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 method name create descriptor (Ljava/net/InetSocketAddress;ILjava/lang/String;Lcom/sun/net/httpserver/HttpHandler;[Lcom/sun/net/httpserver/Filter;)Lcom/sun/net/httpserver/HttpServer; thrownTypes java/io/IOException flags 89 -class name com/sun/net/httpserver/HttpsConfigurator -header extends java/lang/Object flags 21 - -class name com/sun/net/httpserver/HttpsExchange -header extends com/sun/net/httpserver/HttpExchange flags 421 - -class name com/sun/net/httpserver/HttpsParameters -header extends java/lang/Object flags 421 - class name com/sun/net/httpserver/HttpsServer header extends com/sun/net/httpserver/HttpServer flags 421 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 diff --git a/src/jdk.compiler/share/data/symbols/jdk.httpserver-J.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.httpserver-J.sym.txt deleted file mode 100644 index f0e62cb28d6b5..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.httpserver-J.sym.txt +++ /dev/null @@ -1,47 +0,0 @@ -# -# Copyright (c) 2022, 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/net/httpserver/HttpContext -header extends java/lang/Object flags 421 - -class name com/sun/net/httpserver/HttpHandler -header extends java/lang/Object flags 601 - -class name com/sun/net/httpserver/HttpPrincipal -header extends java/lang/Object implements java/security/Principal flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/net/httpserver/HttpsConfigurator -header extends java/lang/Object flags 21 - -class name com/sun/net/httpserver/HttpsExchange -header extends com/sun/net/httpserver/HttpExchange flags 421 - -class name com/sun/net/httpserver/HttpsParameters -header extends java/lang/Object flags 421 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.httpserver-K.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.httpserver-K.sym.txt deleted file mode 100644 index f0e62cb28d6b5..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.httpserver-K.sym.txt +++ /dev/null @@ -1,47 +0,0 @@ -# -# Copyright (c) 2022, 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/net/httpserver/HttpContext -header extends java/lang/Object flags 421 - -class name com/sun/net/httpserver/HttpHandler -header extends java/lang/Object flags 601 - -class name com/sun/net/httpserver/HttpPrincipal -header extends java/lang/Object implements java/security/Principal flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/net/httpserver/HttpsConfigurator -header extends java/lang/Object flags 21 - -class name com/sun/net/httpserver/HttpsExchange -header extends com/sun/net/httpserver/HttpExchange flags 421 - -class name com/sun/net/httpserver/HttpsParameters -header extends java/lang/Object flags 421 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.httpserver-L.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.httpserver-L.sym.txt deleted file mode 100644 index a74ed7cc74b24..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.httpserver-L.sym.txt +++ /dev/null @@ -1,47 +0,0 @@ -# -# Copyright (c) 2023, 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/net/httpserver/HttpContext -header extends java/lang/Object flags 421 - -class name com/sun/net/httpserver/HttpHandler -header extends java/lang/Object flags 601 - -class name com/sun/net/httpserver/HttpPrincipal -header extends java/lang/Object implements java/security/Principal flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/net/httpserver/HttpsConfigurator -header extends java/lang/Object flags 21 - -class name com/sun/net/httpserver/HttpsExchange -header extends com/sun/net/httpserver/HttpExchange flags 421 - -class name com/sun/net/httpserver/HttpsParameters -header extends java/lang/Object flags 421 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.incubator.foreign-H.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.incubator.foreign-H.sym.txt index d5349d378bfd7..dd4e9bdecbe79 100644 --- a/src/jdk.compiler/share/data/symbols/jdk.incubator.foreign-H.sym.txt +++ b/src/jdk.compiler/share/data/symbols/jdk.incubator.foreign-H.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -26,8 +26,11 @@ # ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ### # ########################################################## # +module name jdk.incubator.foreign +header exports jdk/incubator/foreign extraModulePackages jdk/internal/foreign,jdk/internal/foreign/abi,jdk/internal/foreign/abi/aarch64/linux,jdk/internal/foreign/abi/aarch64/macos,jdk/internal/foreign/abi/x64/sysv,jdk/internal/foreign/abi/x64/windows requires name\u0020;java.base\u0020;flags\u0020;8000 target linux-amd64 resolution 9 flags 8000 + class name jdk/incubator/foreign/CLinker -header extends java/lang/Object nestMembers jdk/incubator/foreign/CLinker$TypeKind,jdk/incubator/foreign/CLinker$VaList,jdk/incubator/foreign/CLinker$VaList$Builder sealed true flags 601 +header extends java/lang/Object nestMembers jdk/incubator/foreign/CLinker$TypeKind,jdk/incubator/foreign/CLinker$VaList,jdk/incubator/foreign/CLinker$VaList$Builder sealed true permittedSubclasses jdk/internal/foreign/AbstractCLinker flags 601 innerclass innerClass jdk/incubator/foreign/CLinker$TypeKind outerClass jdk/incubator/foreign/CLinker innerClassName TypeKind flags 4019 innerclass innerClass jdk/incubator/foreign/CLinker$VaList outerClass jdk/incubator/foreign/CLinker innerClassName VaList flags 609 innerclass innerClass jdk/incubator/foreign/CLinker$VaList$Builder outerClass jdk/incubator/foreign/CLinker$VaList innerClassName Builder flags 609 @@ -54,9 +57,10 @@ method name allocateMemory descriptor (J)Ljdk/incubator/foreign/MemoryAddress; f method name freeMemory descriptor (Ljdk/incubator/foreign/MemoryAddress;)V flags 9 runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive; class name jdk/incubator/foreign/CLinker$VaList -header extends java/lang/Object implements jdk/incubator/foreign/Addressable nestHost jdk/incubator/foreign/CLinker sealed true flags 601 +header extends java/lang/Object implements jdk/incubator/foreign/Addressable nestHost jdk/incubator/foreign/CLinker sealed true permittedSubclasses jdk/internal/foreign/abi/x64/windows/WinVaList,jdk/internal/foreign/abi/x64/sysv/SysVVaList,jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList,jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList,jdk/internal/foreign/abi/SharedUtils$EmptyVaList flags 601 innerclass innerClass jdk/incubator/foreign/CLinker$VaList outerClass jdk/incubator/foreign/CLinker innerClassName VaList flags 609 innerclass innerClass jdk/incubator/foreign/CLinker$VaList$Builder outerClass jdk/incubator/foreign/CLinker$VaList innerClassName Builder flags 609 +innerclass innerClass jdk/internal/foreign/abi/SharedUtils$EmptyVaList outerClass jdk/internal/foreign/abi/SharedUtils innerClassName EmptyVaList flags 9 -method name vargAsSegment descriptor (Ljdk/incubator/foreign/MemoryLayout;)Ljdk/incubator/foreign/MemorySegment; -method name vargAsSegment descriptor (Ljdk/incubator/foreign/MemoryLayout;Ljdk/incubator/foreign/NativeScope;)Ljdk/incubator/foreign/MemorySegment; -method name isAlive descriptor ()Z @@ -73,9 +77,13 @@ method name ofAddress descriptor (Ljdk/incubator/foreign/MemoryAddress;Ljdk/incu method name make descriptor (Ljava/util/function/Consumer;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/CLinker$VaList; flags 9 signature (Ljava/util/function/Consumer;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/CLinker$VaList; class name jdk/incubator/foreign/CLinker$VaList$Builder -header extends java/lang/Object nestHost jdk/incubator/foreign/CLinker sealed true flags 601 +header extends java/lang/Object nestHost jdk/incubator/foreign/CLinker sealed true permittedSubclasses jdk/internal/foreign/abi/x64/windows/WinVaList$Builder,jdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder,jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder,jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder flags 601 innerclass innerClass jdk/incubator/foreign/CLinker$VaList outerClass jdk/incubator/foreign/CLinker innerClassName VaList flags 609 innerclass innerClass jdk/incubator/foreign/CLinker$VaList$Builder outerClass jdk/incubator/foreign/CLinker$VaList innerClassName Builder flags 609 +innerclass innerClass jdk/internal/foreign/abi/x64/windows/WinVaList$Builder outerClass jdk/internal/foreign/abi/x64/windows/WinVaList innerClassName Builder flags 9 +innerclass innerClass jdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder outerClass jdk/internal/foreign/abi/x64/sysv/SysVVaList innerClassName Builder flags 9 +innerclass innerClass jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder outerClass jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList innerClassName Builder flags 9 +innerclass innerClass jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder outerClass jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList innerClassName Builder flags 9 class name jdk/incubator/foreign/GroupLayout header extends jdk/incubator/foreign/AbstractLayout implements jdk/incubator/foreign/MemoryLayout flags 31 @@ -88,7 +96,7 @@ innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang -class name jdk/incubator/foreign/MappedMemorySegments class name jdk/incubator/foreign/MemoryAddress -header extends java/lang/Object implements jdk/incubator/foreign/Addressable sealed true flags 601 +header extends java/lang/Object implements jdk/incubator/foreign/Addressable sealed true permittedSubclasses jdk/internal/foreign/MemoryAddressImpl flags 601 -method name asSegmentRestricted descriptor (J)Ljdk/incubator/foreign/MemorySegment; -method name asSegmentRestricted descriptor (JLjava/lang/Runnable;Ljava/lang/Object;)Ljdk/incubator/foreign/MemorySegment; method name scope descriptor ()Ljdk/incubator/foreign/ResourceScope; flags 401 @@ -97,7 +105,8 @@ method name asSegment descriptor (JLjava/lang/Runnable;Ljdk/incubator/foreign/Re method name isNative descriptor ()Z flags 401 class name jdk/incubator/foreign/MemoryLayout -header extends java/lang/Object implements java/lang/constant/Constable nestMembers jdk/incubator/foreign/MemoryLayout$PathElement sealed true flags 601 +header extends java/lang/Object implements java/lang/constant/Constable nestMembers jdk/incubator/foreign/MemoryLayout$PathElement sealed true permittedSubclasses jdk/incubator/foreign/AbstractLayout,jdk/incubator/foreign/SequenceLayout,jdk/incubator/foreign/GroupLayout,jdk/incubator/foreign/PaddingLayout,jdk/incubator/foreign/ValueLayout flags 601 +innerclass innerClass jdk/internal/foreign/LayoutPath$PathElementImpl outerClass jdk/internal/foreign/LayoutPath innerClassName PathElementImpl flags 19 innerclass innerClass jdk/incubator/foreign/MemoryLayout$PathElement outerClass jdk/incubator/foreign/MemoryLayout innerClassName PathElement flags 609 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -method name ofPaddingBits descriptor (J)Ljdk/incubator/foreign/MemoryLayout; @@ -115,12 +124,13 @@ method name structLayout descriptor ([Ljdk/incubator/foreign/MemoryLayout;)Ljdk/ method name unionLayout descriptor ([Ljdk/incubator/foreign/MemoryLayout;)Ljdk/incubator/foreign/GroupLayout; flags 89 class name jdk/incubator/foreign/MemoryLayout$PathElement -header extends java/lang/Object nestHost jdk/incubator/foreign/MemoryLayout sealed true flags 601 +header extends java/lang/Object nestHost jdk/incubator/foreign/MemoryLayout sealed true permittedSubclasses jdk/internal/foreign/LayoutPath$PathElementImpl flags 601 +innerclass innerClass jdk/internal/foreign/LayoutPath$PathElementImpl outerClass jdk/internal/foreign/LayoutPath innerClassName PathElementImpl flags 19 innerclass innerClass jdk/incubator/foreign/MemoryLayout$PathElement outerClass jdk/incubator/foreign/MemoryLayout innerClassName PathElement flags 609 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 class name jdk/incubator/foreign/MemorySegment -header extends java/lang/Object implements jdk/incubator/foreign/Addressable sealed true flags 601 +header extends java/lang/Object implements jdk/incubator/foreign/Addressable sealed true permittedSubclasses jdk/internal/foreign/AbstractMemorySegmentImpl flags 601 innerclass innerClass java/nio/channels/FileChannel$MapMode outerClass java/nio/channels/FileChannel innerClassName MapMode flags 9 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -field name READ descriptor I @@ -163,8 +173,26 @@ method name globalNativeSegment descriptor ()Ljdk/incubator/foreign/MemorySegmen -class name jdk/incubator/foreign/NativeScope +class name jdk/incubator/foreign/PaddingLayout +header extends jdk/incubator/foreign/AbstractLayout implements jdk/incubator/foreign/MemoryLayout flags 30 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +method name toString descriptor ()Ljava/lang/String; flags 1 +method name equals descriptor (Ljava/lang/Object;)Z flags 1 +method name hashCode descriptor ()I flags 1 +method name hasNaturalAlignment descriptor ()Z flags 1 +method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional;>; +method name withName descriptor (Ljava/lang/String;)Ljdk/incubator/foreign/PaddingLayout; flags 1 +method name withBitAlignment descriptor (J)Ljdk/incubator/foreign/PaddingLayout; flags 1 +method name withAttribute descriptor (Ljava/lang/String;Ljava/lang/constant/Constable;)Ljdk/incubator/foreign/PaddingLayout; flags 1 +method name withBitAlignment descriptor (J)Ljdk/incubator/foreign/AbstractLayout; flags 1041 +method name withAttribute descriptor (Ljava/lang/String;Ljava/lang/constant/Constable;)Ljdk/incubator/foreign/AbstractLayout; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljdk/incubator/foreign/AbstractLayout; flags 1041 +method name withAttribute descriptor (Ljava/lang/String;Ljava/lang/constant/Constable;)Ljdk/incubator/foreign/MemoryLayout; flags 1041 +method name withBitAlignment descriptor (J)Ljdk/incubator/foreign/MemoryLayout; flags 1041 +method name withName descriptor (Ljava/lang/String;)Ljdk/incubator/foreign/MemoryLayout; flags 1041 + class name jdk/incubator/foreign/ResourceScope -header extends java/lang/Object implements java/lang/AutoCloseable nestMembers jdk/incubator/foreign/ResourceScope$Handle sealed true flags 601 +header extends java/lang/Object implements java/lang/AutoCloseable nestMembers jdk/incubator/foreign/ResourceScope$Handle sealed true permittedSubclasses jdk/internal/foreign/ResourceScopeImpl flags 601 innerclass innerClass jdk/incubator/foreign/ResourceScope$Handle outerClass jdk/incubator/foreign/ResourceScope innerClassName Handle flags 609 method name isAlive descriptor ()Z flags 401 method name ownerThread descriptor ()Ljava/lang/Thread; flags 401 @@ -181,8 +209,9 @@ method name newImplicitScope descriptor ()Ljdk/incubator/foreign/ResourceScope; method name globalScope descriptor ()Ljdk/incubator/foreign/ResourceScope; flags 9 class name jdk/incubator/foreign/ResourceScope$Handle -header extends java/lang/Object nestHost jdk/incubator/foreign/ResourceScope sealed true flags 601 +header extends java/lang/Object nestHost jdk/incubator/foreign/ResourceScope sealed true permittedSubclasses jdk/internal/foreign/ResourceScopeImpl$HandleImpl flags 601 innerclass innerClass jdk/incubator/foreign/ResourceScope$Handle outerClass jdk/incubator/foreign/ResourceScope innerClassName Handle flags 609 +innerclass innerClass jdk/internal/foreign/ResourceScopeImpl$HandleImpl outerClass jdk/internal/foreign/ResourceScopeImpl innerClassName HandleImpl flags 609 method name scope descriptor ()Ljdk/incubator/foreign/ResourceScope; flags 401 class name jdk/incubator/foreign/SegmentAllocator @@ -224,3 +253,363 @@ innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang method name lookup descriptor (Ljava/lang/String;)Ljava/util/Optional; flags 401 signature (Ljava/lang/String;)Ljava/util/Optional; method name loaderLookup descriptor ()Ljdk/incubator/foreign/SymbolLookup; flags 9 runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive; +class name jdk/internal/foreign/AbstractCLinker +header extends java/lang/Object implements jdk/incubator/foreign/CLinker flags 421 +method name descriptor ()V flags 1 +method name downcallHandle descriptor (Ljdk/incubator/foreign/Addressable;Ljava/lang/invoke/MethodType;Ljdk/incubator/foreign/FunctionDescriptor;)Ljava/lang/invoke/MethodHandle; flags 11 +method name downcallHandle descriptor (Ljdk/incubator/foreign/Addressable;Ljdk/incubator/foreign/SegmentAllocator;Ljava/lang/invoke/MethodType;Ljdk/incubator/foreign/FunctionDescriptor;)Ljava/lang/invoke/MethodHandle; flags 11 + +class name jdk/internal/foreign/AbstractMemorySegmentImpl +header extends jdk/internal/access/foreign/MemorySegmentProxy implements jdk/incubator/foreign/MemorySegment flags 421 +innerclass innerClass jdk/internal/misc/ScopedMemoryAccess$Scope outerClass jdk/internal/misc/ScopedMemoryAccess innerClassName Scope flags 609 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +method name asReadOnly descriptor ()Ljdk/internal/foreign/AbstractMemorySegmentImpl; flags 1 +method name isReadOnly descriptor ()Z flags 1 +method name asSlice descriptor (JJ)Ljdk/internal/foreign/AbstractMemorySegmentImpl; flags 1 +method name asSlice descriptor (J)Ljdk/internal/foreign/AbstractMemorySegmentImpl; flags 1 +method name spliterator descriptor (Ljdk/incubator/foreign/MemoryLayout;)Ljava/util/Spliterator; flags 1 signature (Ljdk/incubator/foreign/MemoryLayout;)Ljava/util/Spliterator; +method name elements descriptor (Ljdk/incubator/foreign/MemoryLayout;)Ljava/util/stream/Stream; flags 1 signature (Ljdk/incubator/foreign/MemoryLayout;)Ljava/util/stream/Stream; +method name fill descriptor (B)Ljdk/incubator/foreign/MemorySegment; flags 11 +method name copyFrom descriptor (Ljdk/incubator/foreign/MemorySegment;)V flags 1 +method name copyFromSwap descriptor (Ljdk/incubator/foreign/MemorySegment;J)V flags 1 +method name mismatch descriptor (Ljdk/incubator/foreign/MemorySegment;)J flags 1 +method name address descriptor ()Ljdk/incubator/foreign/MemoryAddress; flags 11 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name asByteBuffer descriptor ()Ljava/nio/ByteBuffer; flags 11 +method name byteSize descriptor ()J flags 11 +method name isAlive descriptor ()Z flags 11 +method name ownerThread descriptor ()Ljava/lang/Thread; flags 1 +method name isMapped descriptor ()Z flags 1 +method name isNative descriptor ()Z flags 1 +method name load descriptor ()V flags 1 +method name unload descriptor ()V flags 1 +method name isLoaded descriptor ()Z flags 1 +method name force descriptor ()V flags 1 +method name toByteArray descriptor ()[B flags 11 +method name toShortArray descriptor ()[S flags 11 +method name toCharArray descriptor ()[C flags 11 +method name toIntArray descriptor ()[I flags 11 +method name toFloatArray descriptor ()[F flags 11 +method name toLongArray descriptor ()[J flags 11 +method name toDoubleArray descriptor ()[D flags 11 +method name isSmall descriptor ()Z flags 1 +method name checkAccess descriptor (JJZ)V flags 1 +method name unsafeGetOffset descriptor ()J flags 1 +method name unsafeGetBase descriptor ()Ljava/lang/Object; flags 1 +method name scope descriptor ()Ljdk/internal/foreign/ResourceScopeImpl; flags 1 +method name id descriptor ()I flags 4 +method name toString descriptor ()Ljava/lang/String; flags 1 +method name ofBuffer descriptor (Ljava/nio/ByteBuffer;)Ljdk/internal/foreign/AbstractMemorySegmentImpl; flags 9 +method name scope descriptor ()Ljdk/internal/misc/ScopedMemoryAccess$Scope; flags 1041 +method name asReadOnly descriptor ()Ljdk/incubator/foreign/MemorySegment; flags 1041 +method name asSlice descriptor (J)Ljdk/incubator/foreign/MemorySegment; flags 1041 +method name asSlice descriptor (JJ)Ljdk/incubator/foreign/MemorySegment; flags 1041 +method name scope descriptor ()Ljdk/incubator/foreign/ResourceScope; flags 1041 + +class name jdk/internal/foreign/LayoutPath +header extends java/lang/Object nestMembers jdk/internal/foreign/LayoutPath$PathElementImpl flags 21 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +innerclass innerClass jdk/internal/foreign/LayoutPath$PathElementImpl outerClass jdk/internal/foreign/LayoutPath innerClassName PathElementImpl flags 19 +method name sequenceElement descriptor ()Ljdk/internal/foreign/LayoutPath; flags 1 +method name sequenceElement descriptor (JJ)Ljdk/internal/foreign/LayoutPath; flags 1 +method name sequenceElement descriptor (J)Ljdk/internal/foreign/LayoutPath; flags 1 +method name groupElement descriptor (Ljava/lang/String;)Ljdk/internal/foreign/LayoutPath; flags 1 +method name offset descriptor ()J flags 1 +method name dereferenceHandle descriptor (Ljava/lang/Class;)Ljava/lang/invoke/VarHandle; flags 1 signature (Ljava/lang/Class<*>;)Ljava/lang/invoke/VarHandle; +method name offsetHandle descriptor ()Ljava/lang/invoke/MethodHandle; flags 1 +method name sliceHandle descriptor ()Ljava/lang/invoke/MethodHandle; flags 1 +method name layout descriptor ()Ljdk/incubator/foreign/MemoryLayout; flags 1 +method name map descriptor (Ljava/util/function/UnaryOperator;)Ljdk/incubator/foreign/MemoryLayout; flags 1 signature (Ljava/util/function/UnaryOperator;)Ljdk/incubator/foreign/MemoryLayout; +method name rootPath descriptor (Ljdk/incubator/foreign/MemoryLayout;Ljava/util/function/ToLongFunction;)Ljdk/internal/foreign/LayoutPath; flags 9 signature (Ljdk/incubator/foreign/MemoryLayout;Ljava/util/function/ToLongFunction;)Ljdk/internal/foreign/LayoutPath; + +class name jdk/internal/foreign/LayoutPath$PathElementImpl +header extends java/lang/Object implements jdk/incubator/foreign/MemoryLayout$PathElement,java/util/function/UnaryOperator nestHost jdk/internal/foreign/LayoutPath flags 31 signature Ljava/lang/Object;Ljdk/incubator/foreign/MemoryLayout$PathElement;Ljava/util/function/UnaryOperator; +innerclass innerClass jdk/internal/foreign/LayoutPath$PathElementImpl outerClass jdk/internal/foreign/LayoutPath innerClassName PathElementImpl flags 19 +innerclass innerClass jdk/incubator/foreign/MemoryLayout$PathElement outerClass jdk/incubator/foreign/MemoryLayout innerClassName PathElement flags 609 +method name descriptor (Ljdk/internal/foreign/LayoutPath$PathElementImpl$PathKind;Ljava/util/function/UnaryOperator;)V flags 1 signature (Ljdk/internal/foreign/LayoutPath$PathElementImpl$PathKind;Ljava/util/function/UnaryOperator;)V +method name apply descriptor (Ljdk/internal/foreign/LayoutPath;)Ljdk/internal/foreign/LayoutPath; flags 1 +method name kind descriptor ()Ljdk/internal/foreign/LayoutPath$PathElementImpl$PathKind; flags 1 +method name apply descriptor (Ljava/lang/Object;)Ljava/lang/Object; flags 1041 + +class name jdk/internal/foreign/MemoryAddressImpl +header extends java/lang/Object implements jdk/incubator/foreign/MemoryAddress flags 31 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +method name descriptor (Ljdk/internal/foreign/AbstractMemorySegmentImpl;J)V flags 1 +method name scope descriptor ()Ljdk/incubator/foreign/ResourceScope; flags 1 +method name addOffset descriptor (J)Ljdk/incubator/foreign/MemoryAddress; flags 1 +method name segmentOffset descriptor (Ljdk/incubator/foreign/MemorySegment;)J flags 1 +method name isNative descriptor ()Z flags 1 +method name toRawLongValue descriptor ()J flags 1 +method name hashCode descriptor ()I flags 1 +method name equals descriptor (Ljava/lang/Object;)Z flags 1 +method name toString descriptor ()Ljava/lang/String; flags 1 +method name asSegment descriptor (JLjdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/MemorySegment; flags 11 runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive; +method name asSegment descriptor (JLjava/lang/Runnable;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/MemorySegment; flags 11 runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive; +method name ofLongUnchecked descriptor (J)Ljdk/incubator/foreign/MemorySegment; flags 9 +method name ofLongUnchecked descriptor (JJLjdk/internal/foreign/ResourceScopeImpl;)Ljdk/incubator/foreign/MemorySegment; flags 9 +method name ofLongUnchecked descriptor (JJ)Ljdk/incubator/foreign/MemorySegment; flags 9 + +class name jdk/internal/foreign/ResourceScopeImpl +header extends java/lang/Object implements jdk/incubator/foreign/ResourceScope,jdk/internal/misc/ScopedMemoryAccess$Scope,jdk/incubator/foreign/SegmentAllocator nestMembers jdk/internal/foreign/ResourceScopeImpl$ResourceList,jdk/internal/foreign/ResourceScopeImpl$ResourceList$ResourceCleanup,jdk/internal/foreign/ResourceScopeImpl$HandleImpl flags 421 +innerclass innerClass jdk/internal/foreign/ResourceScopeImpl$ResourceList outerClass jdk/internal/foreign/ResourceScopeImpl innerClassName ResourceList flags 409 +innerclass innerClass jdk/internal/foreign/ResourceScopeImpl$ResourceList$ResourceCleanup outerClass jdk/internal/foreign/ResourceScopeImpl$ResourceList innerClassName ResourceCleanup flags 409 +innerclass innerClass jdk/internal/misc/ScopedMemoryAccess$Scope outerClass jdk/internal/misc/ScopedMemoryAccess innerClassName Scope flags 609 +innerclass innerClass java/lang/ref/Cleaner$Cleanable outerClass java/lang/ref/Cleaner innerClassName Cleanable flags 609 +innerclass innerClass jdk/internal/foreign/ResourceScopeImpl$HandleImpl outerClass jdk/internal/foreign/ResourceScopeImpl innerClassName HandleImpl flags 609 +innerclass innerClass jdk/incubator/foreign/ResourceScope$Handle outerClass jdk/incubator/foreign/ResourceScope innerClassName Handle flags 609 +innerclass innerClass jdk/internal/misc/ScopedMemoryAccess$Scope$Handle outerClass jdk/internal/misc/ScopedMemoryAccess$Scope innerClassName Handle flags 609 +field name GLOBAL descriptor Ljdk/internal/foreign/ResourceScopeImpl; flags 19 +method name addCloseAction descriptor (Ljava/lang/Runnable;)V flags 1 +method name isImplicit descriptor ()Z flags 1 +method name addOrCleanupIfFail descriptor (Ljdk/internal/foreign/ResourceScopeImpl$ResourceList$ResourceCleanup;)V flags 1 +method name descriptor (Ljava/lang/ref/Cleaner;Ljdk/internal/foreign/ResourceScopeImpl$ResourceList;)V flags 4 +method name createImplicitScope descriptor ()Ljdk/internal/foreign/ResourceScopeImpl; flags 9 +method name createConfined descriptor (Ljava/lang/Thread;Ljava/lang/ref/Cleaner;)Ljdk/internal/foreign/ResourceScopeImpl; flags 9 +method name createConfined descriptor (Ljava/lang/ref/Cleaner;)Ljdk/internal/foreign/ResourceScopeImpl; flags 9 +method name createShared descriptor (Ljava/lang/ref/Cleaner;)Ljdk/internal/foreign/ResourceScopeImpl; flags 9 +method name release descriptor (Ljdk/incubator/foreign/ResourceScope$Handle;)V flags 11 +method name release descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope$Handle;)V flags 11 +method name acquire descriptor ()Ljdk/internal/foreign/ResourceScopeImpl$HandleImpl; flags 401 +method name close descriptor ()V flags 1 +method name ownerThread descriptor ()Ljava/lang/Thread; flags 401 +method name isAlive descriptor ()Z flags 401 +method name checkValidState descriptor ()V flags 401 +method name checkValidStateSlow descriptor ()V flags 11 +method name clone descriptor ()Ljava/lang/Object; thrownTypes java/lang/CloneNotSupportedException flags 4 +method name allocate descriptor (JJ)Ljdk/incubator/foreign/MemorySegment; flags 1 +method name acquire descriptor ()Ljdk/incubator/foreign/ResourceScope$Handle; flags 1041 +method name acquire descriptor ()Ljdk/internal/misc/ScopedMemoryAccess$Scope$Handle; flags 1041 + +class name jdk/internal/foreign/ResourceScopeImpl$HandleImpl +header extends java/lang/Object implements jdk/incubator/foreign/ResourceScope$Handle,jdk/internal/misc/ScopedMemoryAccess$Scope$Handle nestHost jdk/internal/foreign/ResourceScopeImpl flags 601 +innerclass innerClass jdk/internal/foreign/ResourceScopeImpl$HandleImpl outerClass jdk/internal/foreign/ResourceScopeImpl innerClassName HandleImpl flags 609 +innerclass innerClass jdk/incubator/foreign/ResourceScope$Handle outerClass jdk/incubator/foreign/ResourceScope innerClassName Handle flags 609 +innerclass innerClass jdk/internal/misc/ScopedMemoryAccess$Scope outerClass jdk/internal/misc/ScopedMemoryAccess innerClassName Scope flags 609 +innerclass innerClass jdk/internal/misc/ScopedMemoryAccess$Scope$Handle outerClass jdk/internal/misc/ScopedMemoryAccess$Scope innerClassName Handle flags 609 +method name scope descriptor ()Ljdk/internal/foreign/ResourceScopeImpl; flags 401 +method name release descriptor ()V flags 401 +method name scope descriptor ()Ljdk/incubator/foreign/ResourceScope; flags 1041 +method name scope descriptor ()Ljdk/internal/misc/ScopedMemoryAccess$Scope; flags 1041 + +class name jdk/internal/foreign/ResourceScopeImpl$ResourceList +header extends java/lang/Object implements java/lang/Runnable nestHost jdk/internal/foreign/ResourceScopeImpl flags 421 +innerclass innerClass jdk/internal/foreign/ResourceScopeImpl$ResourceList outerClass jdk/internal/foreign/ResourceScopeImpl innerClassName ResourceList flags 409 +innerclass innerClass jdk/internal/foreign/ResourceScopeImpl$ResourceList$ResourceCleanup outerClass jdk/internal/foreign/ResourceScopeImpl$ResourceList innerClassName ResourceCleanup flags 409 +method name descriptor ()V flags 1 +method name run descriptor ()V flags 11 + +class name jdk/internal/foreign/ResourceScopeImpl$ResourceList$ResourceCleanup +header extends java/lang/Object nestHost jdk/internal/foreign/ResourceScopeImpl flags 421 +innerclass innerClass jdk/internal/foreign/ResourceScopeImpl$ResourceList outerClass jdk/internal/foreign/ResourceScopeImpl innerClassName ResourceList flags 409 +innerclass innerClass jdk/internal/foreign/ResourceScopeImpl$ResourceList$ResourceCleanup outerClass jdk/internal/foreign/ResourceScopeImpl$ResourceList innerClassName ResourceCleanup flags 409 +method name descriptor ()V flags 1 +method name cleanup descriptor ()V flags 401 + +class name jdk/internal/foreign/abi/SharedUtils +header extends java/lang/Object nestMembers jdk/internal/foreign/abi/SharedUtils$EmptyVaList flags 21 +innerclass innerClass jdk/incubator/foreign/CLinker$VaList outerClass jdk/incubator/foreign/CLinker innerClassName VaList flags 609 +innerclass innerClass jdk/incubator/foreign/MemoryLayout$PathElement outerClass jdk/incubator/foreign/MemoryLayout innerClassName PathElement flags 609 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +innerclass innerClass jdk/internal/foreign/abi/SharedUtils$EmptyVaList outerClass jdk/internal/foreign/abi/SharedUtils innerClassName EmptyVaList flags 9 +innerclass innerClass jdk/incubator/foreign/CLinker$VaList$Builder outerClass jdk/incubator/foreign/CLinker$VaList innerClassName Builder flags 609 +field name THROWING_ALLOCATOR descriptor Ljdk/incubator/foreign/SegmentAllocator; flags 19 +method name descriptor ()V flags 1 +method name align descriptor (Ljdk/incubator/foreign/MemoryLayout;ZJ)J flags 9 +method name alignUp descriptor (JJ)J flags 9 +method name alignment descriptor (Ljdk/incubator/foreign/MemoryLayout;Z)J flags 9 +method name adaptDowncallForIMR descriptor (Ljava/lang/invoke/MethodHandle;Ljdk/incubator/foreign/FunctionDescriptor;)Ljava/lang/invoke/MethodHandle; flags 9 +method name adaptUpcallForIMR descriptor (Ljava/lang/invoke/MethodHandle;Z)Ljava/lang/invoke/MethodHandle; flags 9 +method name checkCompatibleType descriptor (Ljava/lang/Class;Ljdk/incubator/foreign/MemoryLayout;J)V flags 9 signature (Ljava/lang/Class<*>;Ljdk/incubator/foreign/MemoryLayout;J)V +method name checkFunctionTypes descriptor (Ljava/lang/invoke/MethodType;Ljdk/incubator/foreign/FunctionDescriptor;J)V flags 9 +method name primitiveCarrierForSize descriptor (JZ)Ljava/lang/Class; flags 9 signature (JZ)Ljava/lang/Class<*>; +method name getSystemLinker descriptor ()Ljdk/incubator/foreign/CLinker; flags 9 +method name toJavaStringInternal descriptor (Ljdk/incubator/foreign/MemorySegment;J)Ljava/lang/String; flags 9 +method name checkSymbol descriptor (Ljdk/incubator/foreign/Addressable;)Ljdk/incubator/foreign/MemoryAddress; flags 9 +method name checkAddress descriptor (Ljdk/incubator/foreign/MemoryAddress;)Ljdk/incubator/foreign/MemoryAddress; flags 9 +method name allocateMemoryInternal descriptor (J)Ljdk/incubator/foreign/MemoryAddress; flags 9 +method name freeMemoryInternal descriptor (Ljdk/incubator/foreign/MemoryAddress;)V flags 9 +method name newVaList descriptor (Ljava/util/function/Consumer;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/CLinker$VaList; flags 9 signature (Ljava/util/function/Consumer;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/CLinker$VaList; +method name vhPrimitiveOrAddress descriptor (Ljava/lang/Class;Ljdk/incubator/foreign/MemoryLayout;)Ljava/lang/invoke/VarHandle; flags 9 signature (Ljava/lang/Class<*>;Ljdk/incubator/foreign/MemoryLayout;)Ljava/lang/invoke/VarHandle; +method name newVaListOfAddress descriptor (Ljdk/incubator/foreign/MemoryAddress;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/CLinker$VaList; flags 9 +method name emptyVaList descriptor ()Ljdk/incubator/foreign/CLinker$VaList; flags 9 +method name convertVaListCarriers descriptor (Ljava/lang/invoke/MethodType;Ljava/lang/Class;)Ljava/lang/invoke/MethodType; flags 9 signature (Ljava/lang/invoke/MethodType;Ljava/lang/Class<*>;)Ljava/lang/invoke/MethodType; +method name unboxVaLists descriptor (Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle; flags 9 +method name boxVaLists descriptor (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle; flags 9 +method name isTrivial descriptor (Ljdk/incubator/foreign/FunctionDescriptor;)Z flags 9 + +class name jdk/internal/foreign/abi/SharedUtils$EmptyVaList +header extends java/lang/Object implements jdk/incubator/foreign/CLinker$VaList nestHost jdk/internal/foreign/abi/SharedUtils flags 21 +innerclass innerClass jdk/internal/foreign/abi/SharedUtils$EmptyVaList outerClass jdk/internal/foreign/abi/SharedUtils innerClassName EmptyVaList flags 9 +innerclass innerClass jdk/incubator/foreign/CLinker$VaList outerClass jdk/incubator/foreign/CLinker innerClassName VaList flags 609 +method name descriptor (Ljdk/incubator/foreign/MemoryAddress;)V flags 1 +method name vargAsInt descriptor (Ljdk/incubator/foreign/MemoryLayout;)I flags 1 +method name vargAsLong descriptor (Ljdk/incubator/foreign/MemoryLayout;)J flags 1 +method name vargAsDouble descriptor (Ljdk/incubator/foreign/MemoryLayout;)D flags 1 +method name vargAsAddress descriptor (Ljdk/incubator/foreign/MemoryLayout;)Ljdk/incubator/foreign/MemoryAddress; flags 1 +method name vargAsSegment descriptor (Ljdk/incubator/foreign/MemoryLayout;Ljdk/incubator/foreign/SegmentAllocator;)Ljdk/incubator/foreign/MemorySegment; flags 1 +method name vargAsSegment descriptor (Ljdk/incubator/foreign/MemoryLayout;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/MemorySegment; flags 1 +method name skip descriptor ([Ljdk/incubator/foreign/MemoryLayout;)V flags 81 +method name scope descriptor ()Ljdk/incubator/foreign/ResourceScope; flags 1 +method name copy descriptor ()Ljdk/incubator/foreign/CLinker$VaList; flags 1 +method name address descriptor ()Ljdk/incubator/foreign/MemoryAddress; flags 1 + +class name jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList +header extends java/lang/Object implements jdk/incubator/foreign/CLinker$VaList nestMembers jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder flags 21 +innerclass innerClass java/lang/ref/Cleaner$Cleanable outerClass java/lang/ref/Cleaner innerClassName Cleanable flags 609 +innerclass innerClass jdk/incubator/foreign/CLinker$VaList outerClass jdk/incubator/foreign/CLinker innerClassName VaList flags 609 +innerclass innerClass jdk/incubator/foreign/MemoryLayout$PathElement outerClass jdk/incubator/foreign/MemoryLayout innerClassName PathElement flags 609 +innerclass innerClass jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder outerClass jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList innerClassName Builder flags 9 +innerclass innerClass jdk/internal/foreign/abi/SharedUtils$EmptyVaList outerClass jdk/internal/foreign/abi/SharedUtils innerClassName EmptyVaList flags 9 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +method name empty descriptor ()Ljdk/incubator/foreign/CLinker$VaList; flags 9 +method name vargAsInt descriptor (Ljdk/incubator/foreign/MemoryLayout;)I flags 1 +method name vargAsLong descriptor (Ljdk/incubator/foreign/MemoryLayout;)J flags 1 +method name vargAsDouble descriptor (Ljdk/incubator/foreign/MemoryLayout;)D flags 1 +method name vargAsAddress descriptor (Ljdk/incubator/foreign/MemoryLayout;)Ljdk/incubator/foreign/MemoryAddress; flags 1 +method name vargAsSegment descriptor (Ljdk/incubator/foreign/MemoryLayout;Ljdk/incubator/foreign/SegmentAllocator;)Ljdk/incubator/foreign/MemorySegment; flags 1 +method name vargAsSegment descriptor (Ljdk/incubator/foreign/MemoryLayout;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/MemorySegment; flags 1 +method name skip descriptor ([Ljdk/incubator/foreign/MemoryLayout;)V flags 81 +method name ofAddress descriptor (Ljdk/incubator/foreign/MemoryAddress;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/CLinker$VaList; flags 9 +method name scope descriptor ()Ljdk/incubator/foreign/ResourceScope; flags 1 +method name copy descriptor ()Ljdk/incubator/foreign/CLinker$VaList; flags 1 +method name address descriptor ()Ljdk/incubator/foreign/MemoryAddress; flags 1 +method name toString descriptor ()Ljava/lang/String; flags 1 + +class name jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder +header extends java/lang/Object implements jdk/incubator/foreign/CLinker$VaList$Builder nestHost jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList flags 21 +innerclass innerClass jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder outerClass jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList innerClassName Builder flags 9 +innerclass innerClass jdk/incubator/foreign/MemoryLayout$PathElement outerClass jdk/incubator/foreign/MemoryLayout innerClassName PathElement flags 609 +innerclass innerClass jdk/incubator/foreign/CLinker$VaList outerClass jdk/incubator/foreign/CLinker innerClassName VaList flags 609 +innerclass innerClass jdk/incubator/foreign/CLinker$VaList$Builder outerClass jdk/incubator/foreign/CLinker$VaList innerClassName Builder flags 609 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +method name vargFromInt descriptor (Ljdk/incubator/foreign/ValueLayout;I)Ljdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder; flags 1 +method name vargFromLong descriptor (Ljdk/incubator/foreign/ValueLayout;J)Ljdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder; flags 1 +method name vargFromDouble descriptor (Ljdk/incubator/foreign/ValueLayout;D)Ljdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder; flags 1 +method name vargFromAddress descriptor (Ljdk/incubator/foreign/ValueLayout;Ljdk/incubator/foreign/Addressable;)Ljdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder; flags 1 +method name vargFromSegment descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/MemorySegment;)Ljdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder; flags 1 +method name build descriptor ()Ljdk/incubator/foreign/CLinker$VaList; flags 1 +method name vargFromSegment descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/MemorySegment;)Ljdk/incubator/foreign/CLinker$VaList$Builder; flags 1041 +method name vargFromAddress descriptor (Ljdk/incubator/foreign/ValueLayout;Ljdk/incubator/foreign/Addressable;)Ljdk/incubator/foreign/CLinker$VaList$Builder; flags 1041 +method name vargFromDouble descriptor (Ljdk/incubator/foreign/ValueLayout;D)Ljdk/incubator/foreign/CLinker$VaList$Builder; flags 1041 +method name vargFromLong descriptor (Ljdk/incubator/foreign/ValueLayout;J)Ljdk/incubator/foreign/CLinker$VaList$Builder; flags 1041 +method name vargFromInt descriptor (Ljdk/incubator/foreign/ValueLayout;I)Ljdk/incubator/foreign/CLinker$VaList$Builder; flags 1041 + +class name jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList +header extends java/lang/Object implements jdk/incubator/foreign/CLinker$VaList nestMembers jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder flags 21 +innerclass innerClass jdk/incubator/foreign/CLinker$VaList outerClass jdk/incubator/foreign/CLinker innerClassName VaList flags 609 +innerclass innerClass jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder outerClass jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList innerClassName Builder flags 9 +innerclass innerClass jdk/incubator/foreign/MemoryLayout$PathElement outerClass jdk/incubator/foreign/MemoryLayout innerClassName PathElement flags 609 +innerclass innerClass jdk/internal/foreign/abi/SharedUtils$EmptyVaList outerClass jdk/internal/foreign/abi/SharedUtils innerClassName EmptyVaList flags 9 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +field name CARRIER descriptor Ljava/lang/Class; flags 19 signature Ljava/lang/Class<*>; +method name empty descriptor ()Ljdk/incubator/foreign/CLinker$VaList; flags 19 +method name vargAsInt descriptor (Ljdk/incubator/foreign/MemoryLayout;)I flags 1 +method name vargAsLong descriptor (Ljdk/incubator/foreign/MemoryLayout;)J flags 1 +method name vargAsDouble descriptor (Ljdk/incubator/foreign/MemoryLayout;)D flags 1 +method name vargAsAddress descriptor (Ljdk/incubator/foreign/MemoryLayout;)Ljdk/incubator/foreign/MemoryAddress; flags 1 +method name vargAsSegment descriptor (Ljdk/incubator/foreign/MemoryLayout;Ljdk/incubator/foreign/SegmentAllocator;)Ljdk/incubator/foreign/MemorySegment; flags 1 +method name vargAsSegment descriptor (Ljdk/incubator/foreign/MemoryLayout;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/MemorySegment; flags 1 +method name skip descriptor ([Ljdk/incubator/foreign/MemoryLayout;)V flags 81 +method name scope descriptor ()Ljdk/incubator/foreign/ResourceScope; flags 1 +method name copy descriptor ()Ljdk/incubator/foreign/CLinker$VaList; flags 1 +method name address descriptor ()Ljdk/incubator/foreign/MemoryAddress; flags 1 + +class name jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder +header extends java/lang/Object implements jdk/incubator/foreign/CLinker$VaList$Builder nestHost jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList flags 21 +innerclass innerClass jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder outerClass jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList innerClassName Builder flags 9 +innerclass innerClass jdk/incubator/foreign/CLinker$VaList outerClass jdk/incubator/foreign/CLinker innerClassName VaList flags 609 +innerclass innerClass jdk/incubator/foreign/CLinker$VaList$Builder outerClass jdk/incubator/foreign/CLinker$VaList innerClassName Builder flags 609 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +method name descriptor (Ljdk/incubator/foreign/ResourceScope;)V flags 1 +method name vargFromInt descriptor (Ljdk/incubator/foreign/ValueLayout;I)Ljdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder; flags 1 +method name vargFromLong descriptor (Ljdk/incubator/foreign/ValueLayout;J)Ljdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder; flags 1 +method name vargFromDouble descriptor (Ljdk/incubator/foreign/ValueLayout;D)Ljdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder; flags 1 +method name vargFromAddress descriptor (Ljdk/incubator/foreign/ValueLayout;Ljdk/incubator/foreign/Addressable;)Ljdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder; flags 1 +method name vargFromSegment descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/MemorySegment;)Ljdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder; flags 1 +method name build descriptor ()Ljdk/incubator/foreign/CLinker$VaList; flags 1 +method name vargFromSegment descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/MemorySegment;)Ljdk/incubator/foreign/CLinker$VaList$Builder; flags 1041 +method name vargFromAddress descriptor (Ljdk/incubator/foreign/ValueLayout;Ljdk/incubator/foreign/Addressable;)Ljdk/incubator/foreign/CLinker$VaList$Builder; flags 1041 +method name vargFromDouble descriptor (Ljdk/incubator/foreign/ValueLayout;D)Ljdk/incubator/foreign/CLinker$VaList$Builder; flags 1041 +method name vargFromLong descriptor (Ljdk/incubator/foreign/ValueLayout;J)Ljdk/incubator/foreign/CLinker$VaList$Builder; flags 1041 +method name vargFromInt descriptor (Ljdk/incubator/foreign/ValueLayout;I)Ljdk/incubator/foreign/CLinker$VaList$Builder; flags 1041 + +class name jdk/internal/foreign/abi/x64/sysv/SysVVaList +header extends java/lang/Object implements jdk/incubator/foreign/CLinker$VaList nestMembers jdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder flags 21 +innerclass innerClass java/lang/ref/Cleaner$Cleanable outerClass java/lang/ref/Cleaner innerClassName Cleanable flags 609 +innerclass innerClass jdk/incubator/foreign/CLinker$VaList outerClass jdk/incubator/foreign/CLinker innerClassName VaList flags 609 +innerclass innerClass jdk/incubator/foreign/MemoryLayout$PathElement outerClass jdk/incubator/foreign/MemoryLayout innerClassName PathElement flags 609 +innerclass innerClass jdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder outerClass jdk/internal/foreign/abi/x64/sysv/SysVVaList innerClassName Builder flags 9 +innerclass innerClass jdk/internal/foreign/abi/SharedUtils$EmptyVaList outerClass jdk/internal/foreign/abi/SharedUtils innerClassName EmptyVaList flags 9 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +method name empty descriptor ()Ljdk/incubator/foreign/CLinker$VaList; flags 9 +method name vargAsInt descriptor (Ljdk/incubator/foreign/MemoryLayout;)I flags 1 +method name vargAsLong descriptor (Ljdk/incubator/foreign/MemoryLayout;)J flags 1 +method name vargAsDouble descriptor (Ljdk/incubator/foreign/MemoryLayout;)D flags 1 +method name vargAsAddress descriptor (Ljdk/incubator/foreign/MemoryLayout;)Ljdk/incubator/foreign/MemoryAddress; flags 1 +method name vargAsSegment descriptor (Ljdk/incubator/foreign/MemoryLayout;Ljdk/incubator/foreign/SegmentAllocator;)Ljdk/incubator/foreign/MemorySegment; flags 1 +method name vargAsSegment descriptor (Ljdk/incubator/foreign/MemoryLayout;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/MemorySegment; flags 1 +method name skip descriptor ([Ljdk/incubator/foreign/MemoryLayout;)V flags 81 +method name ofAddress descriptor (Ljdk/incubator/foreign/MemoryAddress;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/CLinker$VaList; flags 9 +method name scope descriptor ()Ljdk/incubator/foreign/ResourceScope; flags 1 +method name copy descriptor ()Ljdk/incubator/foreign/CLinker$VaList; flags 1 +method name address descriptor ()Ljdk/incubator/foreign/MemoryAddress; flags 1 +method name toString descriptor ()Ljava/lang/String; flags 1 + +class name jdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder +header extends java/lang/Object implements jdk/incubator/foreign/CLinker$VaList$Builder nestHost jdk/internal/foreign/abi/x64/sysv/SysVVaList flags 21 +innerclass innerClass jdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder outerClass jdk/internal/foreign/abi/x64/sysv/SysVVaList innerClassName Builder flags 9 +innerclass innerClass jdk/incubator/foreign/MemoryLayout$PathElement outerClass jdk/incubator/foreign/MemoryLayout innerClassName PathElement flags 609 +innerclass innerClass jdk/incubator/foreign/CLinker$VaList outerClass jdk/incubator/foreign/CLinker innerClassName VaList flags 609 +innerclass innerClass jdk/incubator/foreign/CLinker$VaList$Builder outerClass jdk/incubator/foreign/CLinker$VaList innerClassName Builder flags 609 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +method name descriptor (Ljdk/incubator/foreign/ResourceScope;)V flags 1 +method name vargFromInt descriptor (Ljdk/incubator/foreign/ValueLayout;I)Ljdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder; flags 1 +method name vargFromLong descriptor (Ljdk/incubator/foreign/ValueLayout;J)Ljdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder; flags 1 +method name vargFromDouble descriptor (Ljdk/incubator/foreign/ValueLayout;D)Ljdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder; flags 1 +method name vargFromAddress descriptor (Ljdk/incubator/foreign/ValueLayout;Ljdk/incubator/foreign/Addressable;)Ljdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder; flags 1 +method name vargFromSegment descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/MemorySegment;)Ljdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder; flags 1 +method name build descriptor ()Ljdk/incubator/foreign/CLinker$VaList; flags 1 +method name vargFromSegment descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/MemorySegment;)Ljdk/incubator/foreign/CLinker$VaList$Builder; flags 1041 +method name vargFromAddress descriptor (Ljdk/incubator/foreign/ValueLayout;Ljdk/incubator/foreign/Addressable;)Ljdk/incubator/foreign/CLinker$VaList$Builder; flags 1041 +method name vargFromDouble descriptor (Ljdk/incubator/foreign/ValueLayout;D)Ljdk/incubator/foreign/CLinker$VaList$Builder; flags 1041 +method name vargFromLong descriptor (Ljdk/incubator/foreign/ValueLayout;J)Ljdk/incubator/foreign/CLinker$VaList$Builder; flags 1041 +method name vargFromInt descriptor (Ljdk/incubator/foreign/ValueLayout;I)Ljdk/incubator/foreign/CLinker$VaList$Builder; flags 1041 + +class name jdk/internal/foreign/abi/x64/windows/WinVaList +header extends java/lang/Object implements jdk/incubator/foreign/CLinker$VaList nestMembers jdk/internal/foreign/abi/x64/windows/WinVaList$Builder flags 21 +innerclass innerClass jdk/incubator/foreign/CLinker$VaList outerClass jdk/incubator/foreign/CLinker innerClassName VaList flags 609 +innerclass innerClass jdk/internal/foreign/abi/x64/windows/WinVaList$Builder outerClass jdk/internal/foreign/abi/x64/windows/WinVaList innerClassName Builder flags 9 +innerclass innerClass jdk/incubator/foreign/MemoryLayout$PathElement outerClass jdk/incubator/foreign/MemoryLayout innerClassName PathElement flags 609 +innerclass innerClass jdk/internal/foreign/abi/SharedUtils$EmptyVaList outerClass jdk/internal/foreign/abi/SharedUtils innerClassName EmptyVaList flags 9 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +field name CARRIER descriptor Ljava/lang/Class; flags 19 signature Ljava/lang/Class<*>; +method name empty descriptor ()Ljdk/incubator/foreign/CLinker$VaList; flags 19 +method name vargAsInt descriptor (Ljdk/incubator/foreign/MemoryLayout;)I flags 1 +method name vargAsLong descriptor (Ljdk/incubator/foreign/MemoryLayout;)J flags 1 +method name vargAsDouble descriptor (Ljdk/incubator/foreign/MemoryLayout;)D flags 1 +method name vargAsAddress descriptor (Ljdk/incubator/foreign/MemoryLayout;)Ljdk/incubator/foreign/MemoryAddress; flags 1 +method name vargAsSegment descriptor (Ljdk/incubator/foreign/MemoryLayout;Ljdk/incubator/foreign/SegmentAllocator;)Ljdk/incubator/foreign/MemorySegment; flags 1 +method name vargAsSegment descriptor (Ljdk/incubator/foreign/MemoryLayout;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/MemorySegment; flags 1 +method name skip descriptor ([Ljdk/incubator/foreign/MemoryLayout;)V flags 81 +method name scope descriptor ()Ljdk/incubator/foreign/ResourceScope; flags 1 +method name copy descriptor ()Ljdk/incubator/foreign/CLinker$VaList; flags 1 +method name address descriptor ()Ljdk/incubator/foreign/MemoryAddress; flags 1 + +class name jdk/internal/foreign/abi/x64/windows/WinVaList$Builder +header extends java/lang/Object implements jdk/incubator/foreign/CLinker$VaList$Builder nestHost jdk/internal/foreign/abi/x64/windows/WinVaList flags 21 +innerclass innerClass jdk/internal/foreign/abi/x64/windows/WinVaList$Builder outerClass jdk/internal/foreign/abi/x64/windows/WinVaList innerClassName Builder flags 9 +innerclass innerClass jdk/incubator/foreign/CLinker$VaList outerClass jdk/incubator/foreign/CLinker innerClassName VaList flags 609 +innerclass innerClass jdk/incubator/foreign/CLinker$VaList$Builder outerClass jdk/incubator/foreign/CLinker$VaList innerClassName Builder flags 609 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +method name descriptor (Ljdk/incubator/foreign/ResourceScope;)V flags 1 +method name vargFromInt descriptor (Ljdk/incubator/foreign/ValueLayout;I)Ljdk/internal/foreign/abi/x64/windows/WinVaList$Builder; flags 1 +method name vargFromLong descriptor (Ljdk/incubator/foreign/ValueLayout;J)Ljdk/internal/foreign/abi/x64/windows/WinVaList$Builder; flags 1 +method name vargFromDouble descriptor (Ljdk/incubator/foreign/ValueLayout;D)Ljdk/internal/foreign/abi/x64/windows/WinVaList$Builder; flags 1 +method name vargFromAddress descriptor (Ljdk/incubator/foreign/ValueLayout;Ljdk/incubator/foreign/Addressable;)Ljdk/internal/foreign/abi/x64/windows/WinVaList$Builder; flags 1 +method name vargFromSegment descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/MemorySegment;)Ljdk/internal/foreign/abi/x64/windows/WinVaList$Builder; flags 1 +method name build descriptor ()Ljdk/incubator/foreign/CLinker$VaList; flags 1 +method name vargFromSegment descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/MemorySegment;)Ljdk/incubator/foreign/CLinker$VaList$Builder; flags 1041 +method name vargFromAddress descriptor (Ljdk/incubator/foreign/ValueLayout;Ljdk/incubator/foreign/Addressable;)Ljdk/incubator/foreign/CLinker$VaList$Builder; flags 1041 +method name vargFromDouble descriptor (Ljdk/incubator/foreign/ValueLayout;D)Ljdk/incubator/foreign/CLinker$VaList$Builder; flags 1041 +method name vargFromLong descriptor (Ljdk/incubator/foreign/ValueLayout;J)Ljdk/incubator/foreign/CLinker$VaList$Builder; flags 1041 +method name vargFromInt descriptor (Ljdk/incubator/foreign/ValueLayout;I)Ljdk/incubator/foreign/CLinker$VaList$Builder; flags 1041 + diff --git a/src/jdk.compiler/share/data/symbols/jdk.incubator.foreign-I.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.incubator.foreign-I.sym.txt index c8b457ba73374..ec39943792d16 100644 --- a/src/jdk.compiler/share/data/symbols/jdk.incubator.foreign-I.sym.txt +++ b/src/jdk.compiler/share/data/symbols/jdk.incubator.foreign-I.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2021, 2023, 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 @@ -39,10 +39,10 @@ method name descriptor (Ljava/util/OptionalLong;JLjava/util/Optional;)V f method name byteSize descriptor ()J flags 1 class name jdk/incubator/foreign/Addressable -header extends java/lang/Object sealed true flags 601 +header extends java/lang/Object sealed true permittedSubclasses jdk/incubator/foreign/MemorySegment,jdk/incubator/foreign/MemoryAddress,jdk/incubator/foreign/NativeSymbol,jdk/incubator/foreign/VaList flags 601 class name jdk/incubator/foreign/CLinker -header extends java/lang/Object implements jdk/incubator/foreign/SymbolLookup sealed true flags 601 +header extends java/lang/Object implements jdk/incubator/foreign/SymbolLookup sealed true permittedSubclasses jdk/internal/foreign/abi/x64/windows/Windowsx64Linker,jdk/internal/foreign/abi/x64/sysv/SysVx64Linker,jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64Linker,jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64Linker flags 601 -field name C_CHAR descriptor Ljdk/incubator/foreign/ValueLayout; -field name C_SHORT descriptor Ljdk/incubator/foreign/ValueLayout; -field name C_INT descriptor Ljdk/incubator/foreign/ValueLayout; @@ -80,7 +80,8 @@ method name upcallType descriptor (Ljdk/incubator/foreign/FunctionDescriptor;)Lj -class name jdk/incubator/foreign/CLinker$VaList$Builder class name jdk/incubator/foreign/FunctionDescriptor -header extends java/lang/Object implements java/lang/constant/Constable sealed true flags 21 +header extends java/lang/Object implements java/lang/constant/Constable nestMembers jdk/incubator/foreign/FunctionDescriptor$VariadicFunction sealed true permittedSubclasses jdk/incubator/foreign/FunctionDescriptor$VariadicFunction flags 21 +innerclass innerClass jdk/incubator/foreign/FunctionDescriptor$VariadicFunction outerClass jdk/incubator/foreign/FunctionDescriptor innerClassName VariadicFunction flags 18 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -field name TRIVIAL_ATTRIBUTE_NAME descriptor Ljava/lang/String; -method name attribute descriptor (Ljava/lang/String;)Ljava/util/Optional; @@ -96,6 +97,17 @@ method name insertArgumentLayouts descriptor (I[Ljdk/incubator/foreign/MemoryLay method name changeReturnLayout descriptor (Ljdk/incubator/foreign/MemoryLayout;)Ljdk/incubator/foreign/FunctionDescriptor; flags 1 method name dropReturnLayout descriptor ()Ljdk/incubator/foreign/FunctionDescriptor; flags 1 +class name jdk/incubator/foreign/FunctionDescriptor$VariadicFunction +header extends jdk/incubator/foreign/FunctionDescriptor nestHost jdk/incubator/foreign/FunctionDescriptor flags 30 +innerclass innerClass jdk/incubator/foreign/FunctionDescriptor$VariadicFunction outerClass jdk/incubator/foreign/FunctionDescriptor innerClassName VariadicFunction flags 18 +method name descriptor (Ljdk/incubator/foreign/FunctionDescriptor;[Ljdk/incubator/foreign/MemoryLayout;)V flags 81 +method name firstVariadicArgumentIndex descriptor ()I flags 1 +method name appendArgumentLayouts descriptor ([Ljdk/incubator/foreign/MemoryLayout;)Ljdk/incubator/foreign/FunctionDescriptor; flags 81 +method name insertArgumentLayouts descriptor (I[Ljdk/incubator/foreign/MemoryLayout;)Ljdk/incubator/foreign/FunctionDescriptor; flags 81 +method name changeReturnLayout descriptor (Ljdk/incubator/foreign/MemoryLayout;)Ljdk/incubator/foreign/FunctionDescriptor; flags 1 +method name dropReturnLayout descriptor ()Ljdk/incubator/foreign/FunctionDescriptor; flags 1 +method name describeConstable descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional;>; + class name jdk/incubator/foreign/GroupLayout -method name withAttribute descriptor (Ljava/lang/String;Ljava/lang/constant/Constable;)Ljdk/incubator/foreign/GroupLayout; -method name withAttribute descriptor (Ljava/lang/String;Ljava/lang/constant/Constable;)Ljdk/incubator/foreign/AbstractLayout; @@ -107,7 +119,7 @@ method name byteSize descriptor ()J flags 1041 -class name jdk/incubator/foreign/MemoryAccess class name jdk/incubator/foreign/MemoryAddress -header extends java/lang/Object implements jdk/incubator/foreign/Addressable sealed true flags 601 +header extends java/lang/Object implements jdk/incubator/foreign/Addressable sealed true permittedSubclasses jdk/internal/foreign/MemoryAddressImpl flags 601 innerclass innerClass jdk/incubator/foreign/ValueLayout$OfByte outerClass jdk/incubator/foreign/ValueLayout innerClassName OfByte flags 19 innerclass innerClass jdk/incubator/foreign/ValueLayout$OfBoolean outerClass jdk/incubator/foreign/ValueLayout innerClassName OfBoolean flags 19 innerclass innerClass jdk/incubator/foreign/ValueLayout$OfChar outerClass jdk/incubator/foreign/ValueLayout innerClassName OfChar flags 19 @@ -165,7 +177,8 @@ class name jdk/incubator/foreign/MemoryHandles method name varHandle descriptor (Ljdk/incubator/foreign/ValueLayout;)Ljava/lang/invoke/VarHandle; flags 9 class name jdk/incubator/foreign/MemoryLayout -header extends java/lang/Object implements java/lang/constant/Constable nestMembers jdk/incubator/foreign/MemoryLayout$PathElement sealed true flags 601 +header extends java/lang/Object implements java/lang/constant/Constable nestMembers jdk/incubator/foreign/MemoryLayout$PathElement sealed true permittedSubclasses jdk/incubator/foreign/AbstractLayout,jdk/incubator/foreign/SequenceLayout,jdk/incubator/foreign/GroupLayout,jdk/incubator/foreign/PaddingLayout,jdk/incubator/foreign/ValueLayout flags 601 +innerclass innerClass jdk/internal/foreign/LayoutPath$PathElementImpl outerClass jdk/internal/foreign/LayoutPath innerClassName PathElementImpl flags 19 innerclass innerClass jdk/incubator/foreign/MemoryLayout$PathElement outerClass jdk/incubator/foreign/MemoryLayout innerClassName PathElement flags 609 innerclass innerClass jdk/incubator/foreign/ValueLayout$OfBoolean outerClass jdk/incubator/foreign/ValueLayout innerClassName OfBoolean flags 19 innerclass innerClass jdk/incubator/foreign/ValueLayout$OfChar outerClass jdk/incubator/foreign/ValueLayout innerClassName OfChar flags 19 @@ -188,17 +201,13 @@ method name byteSize descriptor ()J flags 401 method name varHandle descriptor ([Ljdk/incubator/foreign/MemoryLayout$PathElement;)Ljava/lang/invoke/VarHandle; flags 81 method name valueLayout descriptor (Ljava/lang/Class;Ljava/nio/ByteOrder;)Ljdk/incubator/foreign/ValueLayout; flags 9 signature (Ljava/lang/Class<*>;Ljava/nio/ByteOrder;)Ljdk/incubator/foreign/ValueLayout; -class name jdk/incubator/foreign/MemoryLayout$PathElement -header extends java/lang/Object nestHost jdk/incubator/foreign/MemoryLayout sealed true flags 601 -innerclass innerClass jdk/incubator/foreign/MemoryLayout$PathElement outerClass jdk/incubator/foreign/MemoryLayout innerClassName PathElement flags 609 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/incubator/foreign/MemoryLayouts class name jdk/incubator/foreign/MemorySegment -header extends java/lang/Object implements jdk/incubator/foreign/Addressable sealed true flags 601 +header extends java/lang/Object implements jdk/incubator/foreign/Addressable sealed true permittedSubclasses jdk/internal/foreign/AbstractMemorySegmentImpl flags 601 innerclass innerClass java/nio/channels/FileChannel$MapMode outerClass java/nio/channels/FileChannel innerClassName MapMode flags 9 innerclass innerClass jdk/incubator/foreign/ValueLayout$OfByte outerClass jdk/incubator/foreign/ValueLayout innerClassName OfByte flags 19 +innerclass innerClass jdk/internal/misc/ScopedMemoryAccess$Scope outerClass jdk/internal/misc/ScopedMemoryAccess innerClassName Scope flags 609 innerclass innerClass jdk/incubator/foreign/ValueLayout$OfBoolean outerClass jdk/incubator/foreign/ValueLayout innerClassName OfBoolean flags 19 innerclass innerClass jdk/incubator/foreign/ValueLayout$OfChar outerClass jdk/incubator/foreign/ValueLayout innerClassName OfChar flags 19 innerclass innerClass jdk/incubator/foreign/ValueLayout$OfShort outerClass jdk/incubator/foreign/ValueLayout innerClassName OfShort flags 19 @@ -218,11 +227,7 @@ innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang -method name toFloatArray descriptor ()[F -method name toLongArray descriptor ()[J -method name toDoubleArray descriptor ()[D --method name asReadOnly descriptor ()Ljdk/incubator/foreign/MemorySegment; --method name isReadOnly descriptor ()Z -method name globalNativeSegment descriptor ()Ljdk/incubator/foreign/MemorySegment; -method name asReadOnly descriptor ()Ljdk/incubator/foreign/MemorySegment; flags 401 -method name isReadOnly descriptor ()Z flags 401 method name asOverlappingSlice descriptor (Ljdk/incubator/foreign/MemorySegment;)Ljdk/incubator/foreign/MemorySegment; flags 401 method name segmentOffset descriptor (Ljdk/incubator/foreign/MemorySegment;)J flags 401 method name copyFrom descriptor (Ljdk/incubator/foreign/MemorySegment;)Ljdk/incubator/foreign/MemorySegment; flags 1 @@ -274,14 +279,19 @@ method name copy descriptor (Ljdk/incubator/foreign/MemorySegment;Ljdk/incubator method name copy descriptor (Ljava/lang/Object;ILjdk/incubator/foreign/MemorySegment;Ljdk/incubator/foreign/ValueLayout;JI)V flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; class name jdk/incubator/foreign/NativeSymbol -header extends java/lang/Object implements jdk/incubator/foreign/Addressable sealed true flags 601 +header extends java/lang/Object implements jdk/incubator/foreign/Addressable sealed true permittedSubclasses jdk/internal/foreign/NativeSymbolImpl flags 601 method name name descriptor ()Ljava/lang/String; flags 401 method name scope descriptor ()Ljdk/incubator/foreign/ResourceScope; flags 401 method name address descriptor ()Ljdk/incubator/foreign/MemoryAddress; flags 401 method name ofAddress descriptor (Ljava/lang/String;Ljdk/incubator/foreign/MemoryAddress;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/NativeSymbol; flags 9 runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive; +class name jdk/incubator/foreign/PaddingLayout +-method name withAttribute descriptor (Ljava/lang/String;Ljava/lang/constant/Constable;)Ljdk/incubator/foreign/PaddingLayout; +-method name withAttribute descriptor (Ljava/lang/String;Ljava/lang/constant/Constable;)Ljdk/incubator/foreign/AbstractLayout; +-method name withAttribute descriptor (Ljava/lang/String;Ljava/lang/constant/Constable;)Ljdk/incubator/foreign/MemoryLayout; + class name jdk/incubator/foreign/ResourceScope -header extends java/lang/Object implements java/lang/AutoCloseable sealed true flags 601 +header extends java/lang/Object implements java/lang/AutoCloseable sealed true permittedSubclasses jdk/internal/foreign/ResourceScopeImpl flags 601 -method name isImplicit descriptor ()Z -method name acquire descriptor ()Ljdk/incubator/foreign/ResourceScope$Handle; -method name release descriptor (Ljdk/incubator/foreign/ResourceScope$Handle;)V @@ -357,12 +367,13 @@ class name jdk/incubator/foreign/SymbolLookup method name lookup descriptor (Ljava/lang/String;)Ljava/util/Optional; flags 401 signature (Ljava/lang/String;)Ljava/util/Optional; class name jdk/incubator/foreign/VaList -header extends java/lang/Object implements jdk/incubator/foreign/Addressable nestMembers jdk/incubator/foreign/VaList$Builder sealed true flags 601 +header extends java/lang/Object implements jdk/incubator/foreign/Addressable nestMembers jdk/incubator/foreign/VaList$Builder sealed true permittedSubclasses jdk/internal/foreign/abi/x64/windows/WinVaList,jdk/internal/foreign/abi/x64/sysv/SysVVaList,jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList,jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList,jdk/internal/foreign/abi/SharedUtils$EmptyVaList flags 601 innerclass innerClass jdk/incubator/foreign/VaList$Builder outerClass jdk/incubator/foreign/VaList innerClassName Builder flags 609 innerclass innerClass jdk/incubator/foreign/ValueLayout$OfInt outerClass jdk/incubator/foreign/ValueLayout innerClassName OfInt flags 19 innerclass innerClass jdk/incubator/foreign/ValueLayout$OfLong outerClass jdk/incubator/foreign/ValueLayout innerClassName OfLong flags 19 innerclass innerClass jdk/incubator/foreign/ValueLayout$OfDouble outerClass jdk/incubator/foreign/ValueLayout innerClassName OfDouble flags 19 innerclass innerClass jdk/incubator/foreign/ValueLayout$OfAddress outerClass jdk/incubator/foreign/ValueLayout innerClassName OfAddress flags 19 +innerclass innerClass jdk/internal/foreign/abi/SharedUtils$EmptyVaList outerClass jdk/internal/foreign/abi/SharedUtils innerClassName EmptyVaList flags 9 method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfInt;)I flags 401 method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfLong;)J flags 401 method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfDouble;)D flags 401 @@ -377,12 +388,16 @@ method name make descriptor (Ljava/util/function/Consumer;Ljdk/incubator/foreign method name empty descriptor ()Ljdk/incubator/foreign/VaList; flags 9 class name jdk/incubator/foreign/VaList$Builder -header extends java/lang/Object nestHost jdk/incubator/foreign/VaList sealed true flags 601 +header extends java/lang/Object nestHost jdk/incubator/foreign/VaList sealed true permittedSubclasses jdk/internal/foreign/abi/x64/windows/WinVaList$Builder,jdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder,jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder,jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder flags 601 innerclass innerClass jdk/incubator/foreign/VaList$Builder outerClass jdk/incubator/foreign/VaList innerClassName Builder flags 609 innerclass innerClass jdk/incubator/foreign/ValueLayout$OfInt outerClass jdk/incubator/foreign/ValueLayout innerClassName OfInt flags 19 innerclass innerClass jdk/incubator/foreign/ValueLayout$OfLong outerClass jdk/incubator/foreign/ValueLayout innerClassName OfLong flags 19 innerclass innerClass jdk/incubator/foreign/ValueLayout$OfDouble outerClass jdk/incubator/foreign/ValueLayout innerClassName OfDouble flags 19 innerclass innerClass jdk/incubator/foreign/ValueLayout$OfAddress outerClass jdk/incubator/foreign/ValueLayout innerClassName OfAddress flags 19 +innerclass innerClass jdk/internal/foreign/abi/x64/windows/WinVaList$Builder outerClass jdk/internal/foreign/abi/x64/windows/WinVaList innerClassName Builder flags 9 +innerclass innerClass jdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder outerClass jdk/internal/foreign/abi/x64/sysv/SysVVaList innerClassName Builder flags 9 +innerclass innerClass jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder outerClass jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList innerClassName Builder flags 9 +innerclass innerClass jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder outerClass jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList innerClassName Builder flags 9 method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfInt;I)Ljdk/incubator/foreign/VaList$Builder; flags 401 method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfLong;J)Ljdk/incubator/foreign/VaList$Builder; flags 401 method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfDouble;D)Ljdk/incubator/foreign/VaList$Builder; flags 401 @@ -390,7 +405,7 @@ method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfAddress;Ljd method name addVarg descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/MemorySegment;)Ljdk/incubator/foreign/VaList$Builder; flags 401 class name jdk/incubator/foreign/ValueLayout -header extends jdk/incubator/foreign/AbstractLayout implements jdk/incubator/foreign/MemoryLayout nestMembers jdk/incubator/foreign/ValueLayout$OfAddress,jdk/incubator/foreign/ValueLayout$OfDouble,jdk/incubator/foreign/ValueLayout$OfLong,jdk/incubator/foreign/ValueLayout$OfFloat,jdk/incubator/foreign/ValueLayout$OfInt,jdk/incubator/foreign/ValueLayout$OfShort,jdk/incubator/foreign/ValueLayout$OfChar,jdk/incubator/foreign/ValueLayout$OfByte,jdk/incubator/foreign/ValueLayout$OfBoolean sealed true flags 21 +header extends jdk/incubator/foreign/AbstractLayout implements jdk/incubator/foreign/MemoryLayout nestMembers jdk/incubator/foreign/ValueLayout$OfAddress,jdk/incubator/foreign/ValueLayout$OfDouble,jdk/incubator/foreign/ValueLayout$OfLong,jdk/incubator/foreign/ValueLayout$OfFloat,jdk/incubator/foreign/ValueLayout$OfInt,jdk/incubator/foreign/ValueLayout$OfShort,jdk/incubator/foreign/ValueLayout$OfChar,jdk/incubator/foreign/ValueLayout$OfByte,jdk/incubator/foreign/ValueLayout$OfBoolean sealed true permittedSubclasses jdk/incubator/foreign/ValueLayout$OfAddress,jdk/incubator/foreign/ValueLayout$OfByte,jdk/incubator/foreign/ValueLayout$OfBoolean,jdk/incubator/foreign/ValueLayout$OfChar,jdk/incubator/foreign/ValueLayout$OfShort,jdk/incubator/foreign/ValueLayout$OfInt,jdk/incubator/foreign/ValueLayout$OfLong,jdk/incubator/foreign/ValueLayout$OfFloat,jdk/incubator/foreign/ValueLayout$OfDouble flags 21 innerclass innerClass jdk/incubator/foreign/ValueLayout$OfAddress outerClass jdk/incubator/foreign/ValueLayout innerClassName OfAddress flags 19 innerclass innerClass jdk/incubator/foreign/ValueLayout$OfByte outerClass jdk/incubator/foreign/ValueLayout innerClassName OfByte flags 19 innerclass innerClass jdk/incubator/foreign/ValueLayout$OfBoolean outerClass jdk/incubator/foreign/ValueLayout innerClassName OfBoolean flags 19 @@ -580,3 +595,501 @@ method name byteSize descriptor ()J flags 1041 method name withBitAlignment descriptor (J)Ljdk/incubator/foreign/AbstractLayout; flags 1041 method name withName descriptor (Ljava/lang/String;)Ljdk/incubator/foreign/AbstractLayout; flags 1041 +-class name jdk/internal/foreign/AbstractCLinker + +class name jdk/internal/foreign/AbstractMemorySegmentImpl +header extends jdk/internal/access/foreign/MemorySegmentProxy implements jdk/incubator/foreign/MemorySegment,jdk/incubator/foreign/SegmentAllocator,jdk/internal/foreign/Scoped flags 421 +innerclass innerClass jdk/internal/misc/ScopedMemoryAccess$Scope outerClass jdk/internal/misc/ScopedMemoryAccess innerClassName Scope flags 609 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfByte outerClass jdk/incubator/foreign/ValueLayout innerClassName OfByte flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfShort outerClass jdk/incubator/foreign/ValueLayout innerClassName OfShort flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfChar outerClass jdk/incubator/foreign/ValueLayout innerClassName OfChar flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfInt outerClass jdk/incubator/foreign/ValueLayout innerClassName OfInt flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfFloat outerClass jdk/incubator/foreign/ValueLayout innerClassName OfFloat flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfLong outerClass jdk/incubator/foreign/ValueLayout innerClassName OfLong flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfDouble outerClass jdk/incubator/foreign/ValueLayout innerClassName OfDouble flags 19 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +-method name copyFrom descriptor (Ljdk/incubator/foreign/MemorySegment;)V +-method name copyFromSwap descriptor (Ljdk/incubator/foreign/MemorySegment;J)V +-method name address descriptor ()Ljdk/incubator/foreign/MemoryAddress; +-method name toByteArray descriptor ()[B +-method name toShortArray descriptor ()[S +-method name toCharArray descriptor ()[C +-method name toIntArray descriptor ()[I +-method name toFloatArray descriptor ()[F +-method name toLongArray descriptor ()[J +-method name toDoubleArray descriptor ()[D +method name allocate descriptor (JJ)Ljdk/incubator/foreign/MemorySegment; flags 1 +method name address descriptor ()Ljdk/incubator/foreign/MemoryAddress; flags 1 +method name asOverlappingSlice descriptor (Ljdk/incubator/foreign/MemorySegment;)Ljdk/incubator/foreign/MemorySegment; flags 11 +method name segmentOffset descriptor (Ljdk/incubator/foreign/MemorySegment;)J flags 11 +method name toArray descriptor (Ljdk/incubator/foreign/ValueLayout$OfByte;)[B flags 11 +method name toArray descriptor (Ljdk/incubator/foreign/ValueLayout$OfShort;)[S flags 11 +method name toArray descriptor (Ljdk/incubator/foreign/ValueLayout$OfChar;)[C flags 11 +method name toArray descriptor (Ljdk/incubator/foreign/ValueLayout$OfInt;)[I flags 11 +method name toArray descriptor (Ljdk/incubator/foreign/ValueLayout$OfFloat;)[F flags 11 +method name toArray descriptor (Ljdk/incubator/foreign/ValueLayout$OfLong;)[J flags 11 +method name toArray descriptor (Ljdk/incubator/foreign/ValueLayout$OfDouble;)[D flags 11 +method name isAlignedForElement descriptor (JLjdk/incubator/foreign/MemoryLayout;)Z flags 11 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; + +class name jdk/internal/foreign/LayoutPath +-method name dereferenceHandle descriptor (Ljava/lang/Class;)Ljava/lang/invoke/VarHandle; +method name dereferenceHandle descriptor ()Ljava/lang/invoke/VarHandle; flags 1 + +class name jdk/internal/foreign/MemoryAddressImpl +header extends java/lang/Object implements jdk/incubator/foreign/MemoryAddress,jdk/internal/foreign/Scoped flags 31 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfByte outerClass jdk/incubator/foreign/ValueLayout innerClassName OfByte flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfBoolean outerClass jdk/incubator/foreign/ValueLayout innerClassName OfBoolean flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfChar outerClass jdk/incubator/foreign/ValueLayout innerClassName OfChar flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfShort outerClass jdk/incubator/foreign/ValueLayout innerClassName OfShort flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfInt outerClass jdk/incubator/foreign/ValueLayout innerClassName OfInt flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfFloat outerClass jdk/incubator/foreign/ValueLayout innerClassName OfFloat flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfLong outerClass jdk/incubator/foreign/ValueLayout innerClassName OfLong flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfDouble outerClass jdk/incubator/foreign/ValueLayout innerClassName OfDouble flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfAddress outerClass jdk/incubator/foreign/ValueLayout innerClassName OfAddress flags 19 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +-method name descriptor (Ljdk/internal/foreign/AbstractMemorySegmentImpl;J)V +-method name segmentOffset descriptor (Ljdk/incubator/foreign/MemorySegment;)J +-method name isNative descriptor ()Z +-method name asSegment descriptor (JLjdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/MemorySegment; +-method name asSegment descriptor (JLjava/lang/Runnable;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/MemorySegment; +method name descriptor (J)V flags 1 +method name address descriptor ()Ljdk/incubator/foreign/MemoryAddress; flags 11 +method name getUtf8String descriptor (J)Ljava/lang/String; flags 1 runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive;@Ljdk/internal/vm/annotation/ForceInline; +method name setUtf8String descriptor (JLjava/lang/String;)V flags 1 runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive;@Ljdk/internal/vm/annotation/ForceInline; +method name get descriptor (Ljdk/incubator/foreign/ValueLayout$OfByte;J)B flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name set descriptor (Ljdk/incubator/foreign/ValueLayout$OfByte;JB)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name get descriptor (Ljdk/incubator/foreign/ValueLayout$OfBoolean;J)Z flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name set descriptor (Ljdk/incubator/foreign/ValueLayout$OfBoolean;JZ)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name get descriptor (Ljdk/incubator/foreign/ValueLayout$OfChar;J)C flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name set descriptor (Ljdk/incubator/foreign/ValueLayout$OfChar;JC)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name get descriptor (Ljdk/incubator/foreign/ValueLayout$OfShort;J)S flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name set descriptor (Ljdk/incubator/foreign/ValueLayout$OfShort;JS)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name get descriptor (Ljdk/incubator/foreign/ValueLayout$OfInt;J)I flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name set descriptor (Ljdk/incubator/foreign/ValueLayout$OfInt;JI)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name get descriptor (Ljdk/incubator/foreign/ValueLayout$OfFloat;J)F flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name set descriptor (Ljdk/incubator/foreign/ValueLayout$OfFloat;JF)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name get descriptor (Ljdk/incubator/foreign/ValueLayout$OfLong;J)J flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name set descriptor (Ljdk/incubator/foreign/ValueLayout$OfLong;JJ)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name get descriptor (Ljdk/incubator/foreign/ValueLayout$OfDouble;J)D flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name set descriptor (Ljdk/incubator/foreign/ValueLayout$OfDouble;JD)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name get descriptor (Ljdk/incubator/foreign/ValueLayout$OfAddress;J)Ljdk/incubator/foreign/MemoryAddress; flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name set descriptor (Ljdk/incubator/foreign/ValueLayout$OfAddress;JLjdk/incubator/foreign/Addressable;)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name getAtIndex descriptor (Ljdk/incubator/foreign/ValueLayout$OfChar;J)C flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name setAtIndex descriptor (Ljdk/incubator/foreign/ValueLayout$OfChar;JC)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name getAtIndex descriptor (Ljdk/incubator/foreign/ValueLayout$OfShort;J)S flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name setAtIndex descriptor (Ljdk/incubator/foreign/ValueLayout$OfShort;JS)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name getAtIndex descriptor (Ljdk/incubator/foreign/ValueLayout$OfInt;J)I flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name setAtIndex descriptor (Ljdk/incubator/foreign/ValueLayout$OfInt;JI)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name getAtIndex descriptor (Ljdk/incubator/foreign/ValueLayout$OfFloat;J)F flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name setAtIndex descriptor (Ljdk/incubator/foreign/ValueLayout$OfFloat;JF)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name getAtIndex descriptor (Ljdk/incubator/foreign/ValueLayout$OfLong;J)J flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name setAtIndex descriptor (Ljdk/incubator/foreign/ValueLayout$OfLong;JJ)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name getAtIndex descriptor (Ljdk/incubator/foreign/ValueLayout$OfDouble;J)D flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name setAtIndex descriptor (Ljdk/incubator/foreign/ValueLayout$OfDouble;JD)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name getAtIndex descriptor (Ljdk/incubator/foreign/ValueLayout$OfAddress;J)Ljdk/incubator/foreign/MemoryAddress; flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name setAtIndex descriptor (Ljdk/incubator/foreign/ValueLayout$OfAddress;JLjdk/incubator/foreign/Addressable;)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; + +class name jdk/internal/foreign/NativeSymbolImpl +header extends java/lang/Record implements jdk/incubator/foreign/NativeSymbol,jdk/internal/foreign/Scoped record true flags 31 +recordcomponent name name descriptor Ljava/lang/String; +recordcomponent name address descriptor Ljdk/incubator/foreign/MemoryAddress; +recordcomponent name scope descriptor Ljdk/incubator/foreign/ResourceScope; +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +method name descriptor (Ljava/lang/String;Ljdk/incubator/foreign/MemoryAddress;Ljdk/incubator/foreign/ResourceScope;)V flags 1 methodParameters 0:name,0:address,0:scope +method name address descriptor ()Ljdk/incubator/foreign/MemoryAddress; flags 1 +method name toString descriptor ()Ljava/lang/String; flags 11 +method name hashCode descriptor ()I flags 11 +method name equals descriptor (Ljava/lang/Object;)Z flags 11 +method name name descriptor ()Ljava/lang/String; flags 1 +method name scope descriptor ()Ljdk/incubator/foreign/ResourceScope; flags 1 + +class name jdk/internal/foreign/ResourceScopeImpl +header extends java/lang/Object implements jdk/incubator/foreign/ResourceScope,jdk/incubator/foreign/SegmentAllocator,jdk/internal/misc/ScopedMemoryAccess$Scope nestMembers jdk/internal/foreign/ResourceScopeImpl$ResourceList,jdk/internal/foreign/ResourceScopeImpl$ResourceList$ResourceCleanup flags 421 +innerclass innerClass jdk/internal/foreign/ResourceScopeImpl$ResourceList outerClass jdk/internal/foreign/ResourceScopeImpl innerClassName ResourceList flags 409 +innerclass innerClass jdk/internal/foreign/ResourceScopeImpl$ResourceList$ResourceCleanup outerClass jdk/internal/foreign/ResourceScopeImpl$ResourceList innerClassName ResourceCleanup flags 409 +innerclass innerClass jdk/internal/misc/ScopedMemoryAccess$Scope outerClass jdk/internal/misc/ScopedMemoryAccess innerClassName Scope flags 609 +innerclass innerClass java/lang/ref/Cleaner$Cleanable outerClass java/lang/ref/Cleaner innerClassName Cleanable flags 609 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +-method name isImplicit descriptor ()Z +-method name descriptor (Ljava/lang/ref/Cleaner;Ljdk/internal/foreign/ResourceScopeImpl$ResourceList;)V +-method name createImplicitScope descriptor ()Ljdk/internal/foreign/ResourceScopeImpl; +-method name createConfined descriptor (Ljava/lang/ref/Cleaner;)Ljdk/internal/foreign/ResourceScopeImpl; +-method name release descriptor (Ljdk/incubator/foreign/ResourceScope$Handle;)V +-method name release descriptor (Ljdk/internal/misc/ScopedMemoryAccess$Scope$Handle;)V +-method name acquire descriptor ()Ljdk/internal/foreign/ResourceScopeImpl$HandleImpl; +-method name ownerThread descriptor ()Ljava/lang/Thread; +-method name checkValidState descriptor ()V +-method name acquire descriptor ()Ljdk/incubator/foreign/ResourceScope$Handle; +-method name acquire descriptor ()Ljdk/internal/misc/ScopedMemoryAccess$Scope$Handle; +method name descriptor (Ljava/lang/Thread;Ljdk/internal/foreign/ResourceScopeImpl$ResourceList;Ljava/lang/ref/Cleaner;)V flags 4 +method name release0 descriptor ()V flags 401 +method name acquire0 descriptor ()V flags 401 +method name keepAlive descriptor (Ljdk/incubator/foreign/ResourceScope;)V flags 1 +method name ownerThread descriptor ()Ljava/lang/Thread; flags 11 +method name checkValidState descriptor ()V flags 11 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name heapScope descriptor (Ljava/lang/Object;)Ljdk/internal/foreign/ResourceScopeImpl; flags 9 + +-class name jdk/internal/foreign/ResourceScopeImpl$HandleImpl + +class name jdk/internal/foreign/Scoped +header extends java/lang/Object flags 601 +method name scope descriptor ()Ljdk/incubator/foreign/ResourceScope; flags 401 + +class name jdk/internal/foreign/abi/SharedUtils +header extends java/lang/Object nestMembers jdk/internal/foreign/abi/SharedUtils$EmptyVaList flags 21 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfByte outerClass jdk/incubator/foreign/ValueLayout innerClassName OfByte flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfLong outerClass jdk/incubator/foreign/ValueLayout innerClassName OfLong flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfFloat outerClass jdk/incubator/foreign/ValueLayout innerClassName OfFloat flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfDouble outerClass jdk/incubator/foreign/ValueLayout innerClassName OfDouble flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfBoolean outerClass jdk/incubator/foreign/ValueLayout innerClassName OfBoolean flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfInt outerClass jdk/incubator/foreign/ValueLayout innerClassName OfInt flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfShort outerClass jdk/incubator/foreign/ValueLayout innerClassName OfShort flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfChar outerClass jdk/incubator/foreign/ValueLayout innerClassName OfChar flags 19 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +innerclass innerClass jdk/internal/foreign/abi/SharedUtils$EmptyVaList outerClass jdk/internal/foreign/abi/SharedUtils innerClassName EmptyVaList flags 9 +innerclass innerClass jdk/incubator/foreign/VaList$Builder outerClass jdk/incubator/foreign/VaList innerClassName Builder flags 609 +-method name checkCompatibleType descriptor (Ljava/lang/Class;Ljdk/incubator/foreign/MemoryLayout;J)V +-method name checkFunctionTypes descriptor (Ljava/lang/invoke/MethodType;Ljdk/incubator/foreign/FunctionDescriptor;J)V +-method name checkSymbol descriptor (Ljdk/incubator/foreign/Addressable;)Ljdk/incubator/foreign/MemoryAddress; +-method name checkAddress descriptor (Ljdk/incubator/foreign/MemoryAddress;)Ljdk/incubator/foreign/MemoryAddress; +-method name newVaList descriptor (Ljava/util/function/Consumer;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/CLinker$VaList; +-method name vhPrimitiveOrAddress descriptor (Ljava/lang/Class;Ljdk/incubator/foreign/MemoryLayout;)Ljava/lang/invoke/VarHandle; +-method name newVaListOfAddress descriptor (Ljdk/incubator/foreign/MemoryAddress;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/CLinker$VaList; +-method name emptyVaList descriptor ()Ljdk/incubator/foreign/CLinker$VaList; +-method name convertVaListCarriers descriptor (Ljava/lang/invoke/MethodType;Ljava/lang/Class;)Ljava/lang/invoke/MethodType; +-method name unboxVaLists descriptor (Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle; +-method name boxVaLists descriptor (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle; +method name acquire descriptor ([Ljdk/internal/foreign/Scoped;)V flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name release descriptor ([Ljdk/internal/foreign/Scoped;)V flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name wrapDowncall descriptor (Ljava/lang/invoke/MethodHandle;Ljdk/incubator/foreign/FunctionDescriptor;)Ljava/lang/invoke/MethodHandle; flags 9 +method name checkExceptions descriptor (Ljava/lang/invoke/MethodHandle;)V flags 9 +method name checkSymbol descriptor (Ljdk/incubator/foreign/NativeSymbol;)V flags 9 +method name checkAddress descriptor (Ljdk/incubator/foreign/MemoryAddress;)V flags 9 +method name newVaList descriptor (Ljava/util/function/Consumer;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/VaList; flags 9 signature (Ljava/util/function/Consumer;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/VaList; +method name newVaListOfAddress descriptor (Ljdk/incubator/foreign/MemoryAddress;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/VaList; flags 9 +method name emptyVaList descriptor ()Ljdk/incubator/foreign/VaList; flags 9 +method name isVarargsIndex descriptor (Ljdk/incubator/foreign/FunctionDescriptor;I)Z flags 9 +method name inferMethodType descriptor (Ljdk/incubator/foreign/FunctionDescriptor;Z)Ljava/lang/invoke/MethodType; flags 9 + +class name jdk/internal/foreign/abi/SharedUtils$EmptyVaList +header extends java/lang/Object implements jdk/incubator/foreign/VaList,jdk/internal/foreign/Scoped nestHost jdk/internal/foreign/abi/SharedUtils flags 21 +innerclass innerClass jdk/internal/foreign/abi/SharedUtils$EmptyVaList outerClass jdk/internal/foreign/abi/SharedUtils innerClassName EmptyVaList flags 9 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfInt outerClass jdk/incubator/foreign/ValueLayout innerClassName OfInt flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfLong outerClass jdk/incubator/foreign/ValueLayout innerClassName OfLong flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfDouble outerClass jdk/incubator/foreign/ValueLayout innerClassName OfDouble flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfAddress outerClass jdk/incubator/foreign/ValueLayout innerClassName OfAddress flags 19 +-method name vargAsInt descriptor (Ljdk/incubator/foreign/MemoryLayout;)I +-method name vargAsLong descriptor (Ljdk/incubator/foreign/MemoryLayout;)J +-method name vargAsDouble descriptor (Ljdk/incubator/foreign/MemoryLayout;)D +-method name vargAsAddress descriptor (Ljdk/incubator/foreign/MemoryLayout;)Ljdk/incubator/foreign/MemoryAddress; +-method name vargAsSegment descriptor (Ljdk/incubator/foreign/MemoryLayout;Ljdk/incubator/foreign/SegmentAllocator;)Ljdk/incubator/foreign/MemorySegment; +-method name vargAsSegment descriptor (Ljdk/incubator/foreign/MemoryLayout;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/MemorySegment; +-method name copy descriptor ()Ljdk/incubator/foreign/CLinker$VaList; +method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfInt;)I flags 1 +method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfLong;)J flags 1 +method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfDouble;)D flags 1 +method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfAddress;)Ljdk/incubator/foreign/MemoryAddress; flags 1 +method name nextVarg descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/SegmentAllocator;)Ljdk/incubator/foreign/MemorySegment; flags 1 +method name copy descriptor ()Ljdk/incubator/foreign/VaList; flags 1 + +class name jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64Linker +header extends java/lang/Object implements jdk/incubator/foreign/CLinker flags 31 +innerclass innerClass jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder outerClass jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList innerClassName Builder flags 9 +innerclass innerClass jdk/incubator/foreign/VaList$Builder outerClass jdk/incubator/foreign/VaList innerClassName Builder flags 609 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +method name descriptor ()V flags 1 +method name getInstance descriptor ()Ljdk/internal/foreign/abi/aarch64/linux/LinuxAArch64Linker; flags 9 +method name downcallHandle descriptor (Ljdk/incubator/foreign/FunctionDescriptor;)Ljava/lang/invoke/MethodHandle; flags 11 +method name upcallStub descriptor (Ljava/lang/invoke/MethodHandle;Ljdk/incubator/foreign/FunctionDescriptor;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/NativeSymbol; flags 11 +method name newVaList descriptor (Ljava/util/function/Consumer;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/VaList; flags 9 signature (Ljava/util/function/Consumer;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/VaList; +method name newVaListOfAddress descriptor (Ljdk/incubator/foreign/MemoryAddress;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/VaList; flags 9 +method name emptyVaList descriptor ()Ljdk/incubator/foreign/VaList; flags 9 + +class name jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList +header extends java/lang/Object implements jdk/incubator/foreign/VaList,jdk/internal/foreign/Scoped nestMembers jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder flags 21 +innerclass innerClass jdk/incubator/foreign/MemoryLayout$PathElement outerClass jdk/incubator/foreign/MemoryLayout innerClassName PathElement flags 609 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfAddress outerClass jdk/incubator/foreign/ValueLayout innerClassName OfAddress flags 19 +innerclass innerClass jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder outerClass jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList innerClassName Builder flags 9 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfInt outerClass jdk/incubator/foreign/ValueLayout innerClassName OfInt flags 19 +innerclass innerClass jdk/internal/foreign/abi/SharedUtils$EmptyVaList outerClass jdk/internal/foreign/abi/SharedUtils innerClassName EmptyVaList flags 9 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfLong outerClass jdk/incubator/foreign/ValueLayout innerClassName OfLong flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfDouble outerClass jdk/incubator/foreign/ValueLayout innerClassName OfDouble flags 19 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +-method name empty descriptor ()Ljdk/incubator/foreign/CLinker$VaList; +-method name vargAsInt descriptor (Ljdk/incubator/foreign/MemoryLayout;)I +-method name vargAsLong descriptor (Ljdk/incubator/foreign/MemoryLayout;)J +-method name vargAsDouble descriptor (Ljdk/incubator/foreign/MemoryLayout;)D +-method name vargAsAddress descriptor (Ljdk/incubator/foreign/MemoryLayout;)Ljdk/incubator/foreign/MemoryAddress; +-method name vargAsSegment descriptor (Ljdk/incubator/foreign/MemoryLayout;Ljdk/incubator/foreign/SegmentAllocator;)Ljdk/incubator/foreign/MemorySegment; +-method name vargAsSegment descriptor (Ljdk/incubator/foreign/MemoryLayout;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/MemorySegment; +-method name ofAddress descriptor (Ljdk/incubator/foreign/MemoryAddress;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/CLinker$VaList; +-method name copy descriptor ()Ljdk/incubator/foreign/CLinker$VaList; +method name empty descriptor ()Ljdk/incubator/foreign/VaList; flags 9 +method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfInt;)I flags 1 +method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfLong;)J flags 1 +method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfDouble;)D flags 1 +method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfAddress;)Ljdk/incubator/foreign/MemoryAddress; flags 1 +method name nextVarg descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/SegmentAllocator;)Ljdk/incubator/foreign/MemorySegment; flags 1 +method name ofAddress descriptor (Ljdk/incubator/foreign/MemoryAddress;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/VaList; flags 9 +method name copy descriptor ()Ljdk/incubator/foreign/VaList; flags 1 + +class name jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder +header extends java/lang/Object implements jdk/incubator/foreign/VaList$Builder nestHost jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList flags 21 +innerclass innerClass jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder outerClass jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList innerClassName Builder flags 9 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfAddress outerClass jdk/incubator/foreign/ValueLayout innerClassName OfAddress flags 19 +innerclass innerClass jdk/incubator/foreign/MemoryLayout$PathElement outerClass jdk/incubator/foreign/MemoryLayout innerClassName PathElement flags 609 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfDouble outerClass jdk/incubator/foreign/ValueLayout innerClassName OfDouble flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfLong outerClass jdk/incubator/foreign/ValueLayout innerClassName OfLong flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfInt outerClass jdk/incubator/foreign/ValueLayout innerClassName OfInt flags 19 +innerclass innerClass jdk/incubator/foreign/VaList$Builder outerClass jdk/incubator/foreign/VaList innerClassName Builder flags 609 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +-method name vargFromInt descriptor (Ljdk/incubator/foreign/ValueLayout;I)Ljdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder; +-method name vargFromLong descriptor (Ljdk/incubator/foreign/ValueLayout;J)Ljdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder; +-method name vargFromDouble descriptor (Ljdk/incubator/foreign/ValueLayout;D)Ljdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder; +-method name vargFromAddress descriptor (Ljdk/incubator/foreign/ValueLayout;Ljdk/incubator/foreign/Addressable;)Ljdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder; +-method name vargFromSegment descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/MemorySegment;)Ljdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder; +-method name build descriptor ()Ljdk/incubator/foreign/CLinker$VaList; +-method name vargFromSegment descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/MemorySegment;)Ljdk/incubator/foreign/CLinker$VaList$Builder; +-method name vargFromAddress descriptor (Ljdk/incubator/foreign/ValueLayout;Ljdk/incubator/foreign/Addressable;)Ljdk/incubator/foreign/CLinker$VaList$Builder; +-method name vargFromDouble descriptor (Ljdk/incubator/foreign/ValueLayout;D)Ljdk/incubator/foreign/CLinker$VaList$Builder; +-method name vargFromLong descriptor (Ljdk/incubator/foreign/ValueLayout;J)Ljdk/incubator/foreign/CLinker$VaList$Builder; +-method name vargFromInt descriptor (Ljdk/incubator/foreign/ValueLayout;I)Ljdk/incubator/foreign/CLinker$VaList$Builder; +method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfInt;I)Ljdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder; flags 1 +method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfLong;J)Ljdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder; flags 1 +method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfDouble;D)Ljdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder; flags 1 +method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfAddress;Ljdk/incubator/foreign/Addressable;)Ljdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder; flags 1 +method name addVarg descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/MemorySegment;)Ljdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder; flags 1 +method name build descriptor ()Ljdk/incubator/foreign/VaList; flags 1 +method name addVarg descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/MemorySegment;)Ljdk/incubator/foreign/VaList$Builder; flags 1041 +method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfAddress;Ljdk/incubator/foreign/Addressable;)Ljdk/incubator/foreign/VaList$Builder; flags 1041 +method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfDouble;D)Ljdk/incubator/foreign/VaList$Builder; flags 1041 +method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfLong;J)Ljdk/incubator/foreign/VaList$Builder; flags 1041 +method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfInt;I)Ljdk/incubator/foreign/VaList$Builder; flags 1041 + +class name jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64Linker +header extends java/lang/Object implements jdk/incubator/foreign/CLinker flags 31 +innerclass innerClass jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder outerClass jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList innerClassName Builder flags 9 +innerclass innerClass jdk/incubator/foreign/VaList$Builder outerClass jdk/incubator/foreign/VaList innerClassName Builder flags 609 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +method name descriptor ()V flags 1 +method name getInstance descriptor ()Ljdk/internal/foreign/abi/aarch64/macos/MacOsAArch64Linker; flags 9 +method name downcallHandle descriptor (Ljdk/incubator/foreign/FunctionDescriptor;)Ljava/lang/invoke/MethodHandle; flags 11 +method name upcallStub descriptor (Ljava/lang/invoke/MethodHandle;Ljdk/incubator/foreign/FunctionDescriptor;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/NativeSymbol; flags 11 +method name newVaList descriptor (Ljava/util/function/Consumer;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/VaList; flags 9 signature (Ljava/util/function/Consumer;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/VaList; +method name newVaListOfAddress descriptor (Ljdk/incubator/foreign/MemoryAddress;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/VaList; flags 9 +method name emptyVaList descriptor ()Ljdk/incubator/foreign/VaList; flags 9 + +class name jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList +header extends java/lang/Object implements jdk/incubator/foreign/VaList,jdk/internal/foreign/Scoped nestMembers jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder flags 21 +innerclass innerClass jdk/incubator/foreign/MemoryLayout$PathElement outerClass jdk/incubator/foreign/MemoryLayout innerClassName PathElement flags 609 +innerclass innerClass jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder outerClass jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList innerClassName Builder flags 9 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfAddress outerClass jdk/incubator/foreign/ValueLayout innerClassName OfAddress flags 19 +innerclass innerClass jdk/internal/foreign/abi/SharedUtils$EmptyVaList outerClass jdk/internal/foreign/abi/SharedUtils innerClassName EmptyVaList flags 9 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfInt outerClass jdk/incubator/foreign/ValueLayout innerClassName OfInt flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfLong outerClass jdk/incubator/foreign/ValueLayout innerClassName OfLong flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfDouble outerClass jdk/incubator/foreign/ValueLayout innerClassName OfDouble flags 19 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +-method name empty descriptor ()Ljdk/incubator/foreign/CLinker$VaList; +-method name vargAsInt descriptor (Ljdk/incubator/foreign/MemoryLayout;)I +-method name vargAsLong descriptor (Ljdk/incubator/foreign/MemoryLayout;)J +-method name vargAsDouble descriptor (Ljdk/incubator/foreign/MemoryLayout;)D +-method name vargAsAddress descriptor (Ljdk/incubator/foreign/MemoryLayout;)Ljdk/incubator/foreign/MemoryAddress; +-method name vargAsSegment descriptor (Ljdk/incubator/foreign/MemoryLayout;Ljdk/incubator/foreign/SegmentAllocator;)Ljdk/incubator/foreign/MemorySegment; +-method name vargAsSegment descriptor (Ljdk/incubator/foreign/MemoryLayout;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/MemorySegment; +-method name copy descriptor ()Ljdk/incubator/foreign/CLinker$VaList; +method name empty descriptor ()Ljdk/incubator/foreign/VaList; flags 19 +method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfInt;)I flags 1 +method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfLong;)J flags 1 +method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfDouble;)D flags 1 +method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfAddress;)Ljdk/incubator/foreign/MemoryAddress; flags 1 +method name nextVarg descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/SegmentAllocator;)Ljdk/incubator/foreign/MemorySegment; flags 1 +method name copy descriptor ()Ljdk/incubator/foreign/VaList; flags 1 + +class name jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder +header extends java/lang/Object implements jdk/incubator/foreign/VaList$Builder nestHost jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList flags 21 +innerclass innerClass jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder outerClass jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList innerClassName Builder flags 9 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfAddress outerClass jdk/incubator/foreign/ValueLayout innerClassName OfAddress flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfDouble outerClass jdk/incubator/foreign/ValueLayout innerClassName OfDouble flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfLong outerClass jdk/incubator/foreign/ValueLayout innerClassName OfLong flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfInt outerClass jdk/incubator/foreign/ValueLayout innerClassName OfInt flags 19 +innerclass innerClass jdk/incubator/foreign/VaList$Builder outerClass jdk/incubator/foreign/VaList innerClassName Builder flags 609 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +-method name vargFromInt descriptor (Ljdk/incubator/foreign/ValueLayout;I)Ljdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder; +-method name vargFromLong descriptor (Ljdk/incubator/foreign/ValueLayout;J)Ljdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder; +-method name vargFromDouble descriptor (Ljdk/incubator/foreign/ValueLayout;D)Ljdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder; +-method name vargFromAddress descriptor (Ljdk/incubator/foreign/ValueLayout;Ljdk/incubator/foreign/Addressable;)Ljdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder; +-method name vargFromSegment descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/MemorySegment;)Ljdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder; +-method name build descriptor ()Ljdk/incubator/foreign/CLinker$VaList; +-method name vargFromSegment descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/MemorySegment;)Ljdk/incubator/foreign/CLinker$VaList$Builder; +-method name vargFromAddress descriptor (Ljdk/incubator/foreign/ValueLayout;Ljdk/incubator/foreign/Addressable;)Ljdk/incubator/foreign/CLinker$VaList$Builder; +-method name vargFromDouble descriptor (Ljdk/incubator/foreign/ValueLayout;D)Ljdk/incubator/foreign/CLinker$VaList$Builder; +-method name vargFromLong descriptor (Ljdk/incubator/foreign/ValueLayout;J)Ljdk/incubator/foreign/CLinker$VaList$Builder; +-method name vargFromInt descriptor (Ljdk/incubator/foreign/ValueLayout;I)Ljdk/incubator/foreign/CLinker$VaList$Builder; +method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfInt;I)Ljdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder; flags 1 +method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfLong;J)Ljdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder; flags 1 +method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfDouble;D)Ljdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder; flags 1 +method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfAddress;Ljdk/incubator/foreign/Addressable;)Ljdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder; flags 1 +method name addVarg descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/MemorySegment;)Ljdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder; flags 1 +method name build descriptor ()Ljdk/incubator/foreign/VaList; flags 1 +method name addVarg descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/MemorySegment;)Ljdk/incubator/foreign/VaList$Builder; flags 1041 +method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfAddress;Ljdk/incubator/foreign/Addressable;)Ljdk/incubator/foreign/VaList$Builder; flags 1041 +method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfDouble;D)Ljdk/incubator/foreign/VaList$Builder; flags 1041 +method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfLong;J)Ljdk/incubator/foreign/VaList$Builder; flags 1041 +method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfInt;I)Ljdk/incubator/foreign/VaList$Builder; flags 1041 + +class name jdk/internal/foreign/abi/x64/sysv/SysVVaList +header extends java/lang/Object implements jdk/incubator/foreign/VaList,jdk/internal/foreign/Scoped nestMembers jdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder flags 21 +innerclass innerClass jdk/incubator/foreign/MemoryLayout$PathElement outerClass jdk/incubator/foreign/MemoryLayout innerClassName PathElement flags 609 +innerclass innerClass jdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder outerClass jdk/internal/foreign/abi/x64/sysv/SysVVaList innerClassName Builder flags 9 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfInt outerClass jdk/incubator/foreign/ValueLayout innerClassName OfInt flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfAddress outerClass jdk/incubator/foreign/ValueLayout innerClassName OfAddress flags 19 +innerclass innerClass jdk/internal/foreign/abi/SharedUtils$EmptyVaList outerClass jdk/internal/foreign/abi/SharedUtils innerClassName EmptyVaList flags 9 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfLong outerClass jdk/incubator/foreign/ValueLayout innerClassName OfLong flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfDouble outerClass jdk/incubator/foreign/ValueLayout innerClassName OfDouble flags 19 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +-method name empty descriptor ()Ljdk/incubator/foreign/CLinker$VaList; +-method name vargAsInt descriptor (Ljdk/incubator/foreign/MemoryLayout;)I +-method name vargAsLong descriptor (Ljdk/incubator/foreign/MemoryLayout;)J +-method name vargAsDouble descriptor (Ljdk/incubator/foreign/MemoryLayout;)D +-method name vargAsAddress descriptor (Ljdk/incubator/foreign/MemoryLayout;)Ljdk/incubator/foreign/MemoryAddress; +-method name vargAsSegment descriptor (Ljdk/incubator/foreign/MemoryLayout;Ljdk/incubator/foreign/SegmentAllocator;)Ljdk/incubator/foreign/MemorySegment; +-method name vargAsSegment descriptor (Ljdk/incubator/foreign/MemoryLayout;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/MemorySegment; +-method name ofAddress descriptor (Ljdk/incubator/foreign/MemoryAddress;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/CLinker$VaList; +-method name copy descriptor ()Ljdk/incubator/foreign/CLinker$VaList; +method name empty descriptor ()Ljdk/incubator/foreign/VaList; flags 9 +method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfInt;)I flags 1 +method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfLong;)J flags 1 +method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfDouble;)D flags 1 +method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfAddress;)Ljdk/incubator/foreign/MemoryAddress; flags 1 +method name nextVarg descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/SegmentAllocator;)Ljdk/incubator/foreign/MemorySegment; flags 1 +method name ofAddress descriptor (Ljdk/incubator/foreign/MemoryAddress;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/VaList; flags 9 +method name copy descriptor ()Ljdk/incubator/foreign/VaList; flags 1 + +class name jdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder +header extends java/lang/Object implements jdk/incubator/foreign/VaList$Builder nestHost jdk/internal/foreign/abi/x64/sysv/SysVVaList flags 21 +innerclass innerClass jdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder outerClass jdk/internal/foreign/abi/x64/sysv/SysVVaList innerClassName Builder flags 9 +innerclass innerClass jdk/incubator/foreign/MemoryLayout$PathElement outerClass jdk/incubator/foreign/MemoryLayout innerClassName PathElement flags 609 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfAddress outerClass jdk/incubator/foreign/ValueLayout innerClassName OfAddress flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfDouble outerClass jdk/incubator/foreign/ValueLayout innerClassName OfDouble flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfLong outerClass jdk/incubator/foreign/ValueLayout innerClassName OfLong flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfInt outerClass jdk/incubator/foreign/ValueLayout innerClassName OfInt flags 19 +innerclass innerClass jdk/incubator/foreign/VaList$Builder outerClass jdk/incubator/foreign/VaList innerClassName Builder flags 609 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +-method name vargFromInt descriptor (Ljdk/incubator/foreign/ValueLayout;I)Ljdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder; +-method name vargFromLong descriptor (Ljdk/incubator/foreign/ValueLayout;J)Ljdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder; +-method name vargFromDouble descriptor (Ljdk/incubator/foreign/ValueLayout;D)Ljdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder; +-method name vargFromAddress descriptor (Ljdk/incubator/foreign/ValueLayout;Ljdk/incubator/foreign/Addressable;)Ljdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder; +-method name vargFromSegment descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/MemorySegment;)Ljdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder; +-method name build descriptor ()Ljdk/incubator/foreign/CLinker$VaList; +-method name vargFromSegment descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/MemorySegment;)Ljdk/incubator/foreign/CLinker$VaList$Builder; +-method name vargFromAddress descriptor (Ljdk/incubator/foreign/ValueLayout;Ljdk/incubator/foreign/Addressable;)Ljdk/incubator/foreign/CLinker$VaList$Builder; +-method name vargFromDouble descriptor (Ljdk/incubator/foreign/ValueLayout;D)Ljdk/incubator/foreign/CLinker$VaList$Builder; +-method name vargFromLong descriptor (Ljdk/incubator/foreign/ValueLayout;J)Ljdk/incubator/foreign/CLinker$VaList$Builder; +-method name vargFromInt descriptor (Ljdk/incubator/foreign/ValueLayout;I)Ljdk/incubator/foreign/CLinker$VaList$Builder; +method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfInt;I)Ljdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder; flags 1 +method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfLong;J)Ljdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder; flags 1 +method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfDouble;D)Ljdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder; flags 1 +method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfAddress;Ljdk/incubator/foreign/Addressable;)Ljdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder; flags 1 +method name addVarg descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/MemorySegment;)Ljdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder; flags 1 +method name build descriptor ()Ljdk/incubator/foreign/VaList; flags 1 +method name addVarg descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/MemorySegment;)Ljdk/incubator/foreign/VaList$Builder; flags 1041 +method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfAddress;Ljdk/incubator/foreign/Addressable;)Ljdk/incubator/foreign/VaList$Builder; flags 1041 +method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfDouble;D)Ljdk/incubator/foreign/VaList$Builder; flags 1041 +method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfLong;J)Ljdk/incubator/foreign/VaList$Builder; flags 1041 +method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfInt;I)Ljdk/incubator/foreign/VaList$Builder; flags 1041 + +class name jdk/internal/foreign/abi/x64/sysv/SysVx64Linker +header extends java/lang/Object implements jdk/incubator/foreign/CLinker flags 31 +innerclass innerClass jdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder outerClass jdk/internal/foreign/abi/x64/sysv/SysVVaList innerClassName Builder flags 9 +innerclass innerClass jdk/incubator/foreign/VaList$Builder outerClass jdk/incubator/foreign/VaList innerClassName Builder flags 609 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +field name MAX_INTEGER_ARGUMENT_REGISTERS descriptor I constantValue 6 flags 19 +field name MAX_INTEGER_RETURN_REGISTERS descriptor I constantValue 2 flags 19 +field name MAX_VECTOR_ARGUMENT_REGISTERS descriptor I constantValue 8 flags 19 +field name MAX_VECTOR_RETURN_REGISTERS descriptor I constantValue 2 flags 19 +field name MAX_X87_RETURN_REGISTERS descriptor I constantValue 2 flags 19 +method name descriptor ()V flags 1 +method name getInstance descriptor ()Ljdk/internal/foreign/abi/x64/sysv/SysVx64Linker; flags 9 +method name newVaList descriptor (Ljava/util/function/Consumer;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/VaList; flags 9 signature (Ljava/util/function/Consumer;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/VaList; +method name downcallHandle descriptor (Ljdk/incubator/foreign/FunctionDescriptor;)Ljava/lang/invoke/MethodHandle; flags 11 +method name upcallStub descriptor (Ljava/lang/invoke/MethodHandle;Ljdk/incubator/foreign/FunctionDescriptor;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/NativeSymbol; flags 11 +method name newVaListOfAddress descriptor (Ljdk/incubator/foreign/MemoryAddress;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/VaList; flags 9 +method name emptyVaList descriptor ()Ljdk/incubator/foreign/VaList; flags 9 + +class name jdk/internal/foreign/abi/x64/windows/WinVaList +header extends java/lang/Object implements jdk/incubator/foreign/VaList,jdk/internal/foreign/Scoped nestMembers jdk/internal/foreign/abi/x64/windows/WinVaList$Builder flags 21 +innerclass innerClass jdk/incubator/foreign/MemoryLayout$PathElement outerClass jdk/incubator/foreign/MemoryLayout innerClassName PathElement flags 609 +innerclass innerClass jdk/internal/foreign/abi/x64/windows/WinVaList$Builder outerClass jdk/internal/foreign/abi/x64/windows/WinVaList innerClassName Builder flags 9 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfAddress outerClass jdk/incubator/foreign/ValueLayout innerClassName OfAddress flags 19 +innerclass innerClass jdk/internal/foreign/abi/SharedUtils$EmptyVaList outerClass jdk/internal/foreign/abi/SharedUtils innerClassName EmptyVaList flags 9 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfInt outerClass jdk/incubator/foreign/ValueLayout innerClassName OfInt flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfLong outerClass jdk/incubator/foreign/ValueLayout innerClassName OfLong flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfDouble outerClass jdk/incubator/foreign/ValueLayout innerClassName OfDouble flags 19 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +-method name empty descriptor ()Ljdk/incubator/foreign/CLinker$VaList; +-method name vargAsInt descriptor (Ljdk/incubator/foreign/MemoryLayout;)I +-method name vargAsLong descriptor (Ljdk/incubator/foreign/MemoryLayout;)J +-method name vargAsDouble descriptor (Ljdk/incubator/foreign/MemoryLayout;)D +-method name vargAsAddress descriptor (Ljdk/incubator/foreign/MemoryLayout;)Ljdk/incubator/foreign/MemoryAddress; +-method name vargAsSegment descriptor (Ljdk/incubator/foreign/MemoryLayout;Ljdk/incubator/foreign/SegmentAllocator;)Ljdk/incubator/foreign/MemorySegment; +-method name vargAsSegment descriptor (Ljdk/incubator/foreign/MemoryLayout;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/MemorySegment; +-method name copy descriptor ()Ljdk/incubator/foreign/CLinker$VaList; +method name empty descriptor ()Ljdk/incubator/foreign/VaList; flags 19 +method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfInt;)I flags 1 +method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfLong;)J flags 1 +method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfDouble;)D flags 1 +method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfAddress;)Ljdk/incubator/foreign/MemoryAddress; flags 1 +method name nextVarg descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/SegmentAllocator;)Ljdk/incubator/foreign/MemorySegment; flags 1 +method name copy descriptor ()Ljdk/incubator/foreign/VaList; flags 1 + +class name jdk/internal/foreign/abi/x64/windows/WinVaList$Builder +header extends java/lang/Object implements jdk/incubator/foreign/VaList$Builder nestHost jdk/internal/foreign/abi/x64/windows/WinVaList flags 21 +innerclass innerClass jdk/internal/foreign/abi/x64/windows/WinVaList$Builder outerClass jdk/internal/foreign/abi/x64/windows/WinVaList innerClassName Builder flags 9 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfAddress outerClass jdk/incubator/foreign/ValueLayout innerClassName OfAddress flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfDouble outerClass jdk/incubator/foreign/ValueLayout innerClassName OfDouble flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfLong outerClass jdk/incubator/foreign/ValueLayout innerClassName OfLong flags 19 +innerclass innerClass jdk/incubator/foreign/ValueLayout$OfInt outerClass jdk/incubator/foreign/ValueLayout innerClassName OfInt flags 19 +innerclass innerClass jdk/incubator/foreign/VaList$Builder outerClass jdk/incubator/foreign/VaList innerClassName Builder flags 609 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +-method name vargFromInt descriptor (Ljdk/incubator/foreign/ValueLayout;I)Ljdk/internal/foreign/abi/x64/windows/WinVaList$Builder; +-method name vargFromLong descriptor (Ljdk/incubator/foreign/ValueLayout;J)Ljdk/internal/foreign/abi/x64/windows/WinVaList$Builder; +-method name vargFromDouble descriptor (Ljdk/incubator/foreign/ValueLayout;D)Ljdk/internal/foreign/abi/x64/windows/WinVaList$Builder; +-method name vargFromAddress descriptor (Ljdk/incubator/foreign/ValueLayout;Ljdk/incubator/foreign/Addressable;)Ljdk/internal/foreign/abi/x64/windows/WinVaList$Builder; +-method name vargFromSegment descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/MemorySegment;)Ljdk/internal/foreign/abi/x64/windows/WinVaList$Builder; +-method name build descriptor ()Ljdk/incubator/foreign/CLinker$VaList; +-method name vargFromSegment descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/MemorySegment;)Ljdk/incubator/foreign/CLinker$VaList$Builder; +-method name vargFromAddress descriptor (Ljdk/incubator/foreign/ValueLayout;Ljdk/incubator/foreign/Addressable;)Ljdk/incubator/foreign/CLinker$VaList$Builder; +-method name vargFromDouble descriptor (Ljdk/incubator/foreign/ValueLayout;D)Ljdk/incubator/foreign/CLinker$VaList$Builder; +-method name vargFromLong descriptor (Ljdk/incubator/foreign/ValueLayout;J)Ljdk/incubator/foreign/CLinker$VaList$Builder; +-method name vargFromInt descriptor (Ljdk/incubator/foreign/ValueLayout;I)Ljdk/incubator/foreign/CLinker$VaList$Builder; +method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfInt;I)Ljdk/internal/foreign/abi/x64/windows/WinVaList$Builder; flags 1 +method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfLong;J)Ljdk/internal/foreign/abi/x64/windows/WinVaList$Builder; flags 1 +method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfDouble;D)Ljdk/internal/foreign/abi/x64/windows/WinVaList$Builder; flags 1 +method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfAddress;Ljdk/incubator/foreign/Addressable;)Ljdk/internal/foreign/abi/x64/windows/WinVaList$Builder; flags 1 +method name addVarg descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/MemorySegment;)Ljdk/internal/foreign/abi/x64/windows/WinVaList$Builder; flags 1 +method name build descriptor ()Ljdk/incubator/foreign/VaList; flags 1 +method name addVarg descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/MemorySegment;)Ljdk/incubator/foreign/VaList$Builder; flags 1041 +method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfAddress;Ljdk/incubator/foreign/Addressable;)Ljdk/incubator/foreign/VaList$Builder; flags 1041 +method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfDouble;D)Ljdk/incubator/foreign/VaList$Builder; flags 1041 +method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfLong;J)Ljdk/incubator/foreign/VaList$Builder; flags 1041 +method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfInt;I)Ljdk/incubator/foreign/VaList$Builder; flags 1041 + +class name jdk/internal/foreign/abi/x64/windows/Windowsx64Linker +header extends java/lang/Object implements jdk/incubator/foreign/CLinker flags 31 +innerclass innerClass jdk/internal/foreign/abi/x64/windows/WinVaList$Builder outerClass jdk/internal/foreign/abi/x64/windows/WinVaList innerClassName Builder flags 9 +innerclass innerClass jdk/incubator/foreign/VaList$Builder outerClass jdk/incubator/foreign/VaList innerClassName Builder flags 609 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +field name MAX_INTEGER_ARGUMENT_REGISTERS descriptor I constantValue 4 flags 19 +field name MAX_INTEGER_RETURN_REGISTERS descriptor I constantValue 1 flags 19 +field name MAX_VECTOR_ARGUMENT_REGISTERS descriptor I constantValue 4 flags 19 +field name MAX_VECTOR_RETURN_REGISTERS descriptor I constantValue 1 flags 19 +field name MAX_REGISTER_ARGUMENTS descriptor I constantValue 4 flags 19 +field name MAX_REGISTER_RETURNS descriptor I constantValue 1 flags 19 +method name descriptor ()V flags 1 +method name getInstance descriptor ()Ljdk/internal/foreign/abi/x64/windows/Windowsx64Linker; flags 9 +method name newVaList descriptor (Ljava/util/function/Consumer;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/VaList; flags 9 signature (Ljava/util/function/Consumer;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/VaList; +method name downcallHandle descriptor (Ljdk/incubator/foreign/FunctionDescriptor;)Ljava/lang/invoke/MethodHandle; flags 11 +method name upcallStub descriptor (Ljava/lang/invoke/MethodHandle;Ljdk/incubator/foreign/FunctionDescriptor;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/NativeSymbol; flags 11 +method name newVaListOfAddress descriptor (Ljdk/incubator/foreign/MemoryAddress;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/VaList; flags 9 +method name emptyVaList descriptor ()Ljdk/incubator/foreign/VaList; flags 9 + diff --git a/src/jdk.compiler/share/data/symbols/jdk.incubator.foreign-J.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.incubator.foreign-J.sym.txt index 37398f0f6f57f..9180f04c442a1 100644 --- a/src/jdk.compiler/share/data/symbols/jdk.incubator.foreign-J.sym.txt +++ b/src/jdk.compiler/share/data/symbols/jdk.incubator.foreign-J.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2022, 2023, 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 @@ -36,6 +36,8 @@ -class name jdk/incubator/foreign/FunctionDescriptor +-class name jdk/incubator/foreign/FunctionDescriptor$VariadicFunction + -class name jdk/incubator/foreign/GroupLayout -class name jdk/incubator/foreign/MemoryAddress @@ -50,6 +52,8 @@ -class name jdk/incubator/foreign/NativeSymbol +-class name jdk/incubator/foreign/PaddingLayout + -class name jdk/incubator/foreign/ResourceScope -class name jdk/incubator/foreign/SegmentAllocator @@ -82,3 +86,673 @@ -class name jdk/incubator/foreign/ValueLayout$OfShort +class name jdk/internal/foreign/AbstractMemorySegmentImpl +header extends java/lang/Object implements java/lang/foreign/MemorySegment,java/lang/foreign/SegmentAllocator,jdk/internal/foreign/Scoped,java/util/function/BiFunction flags 421 signature Ljava/lang/Object;Ljava/lang/foreign/MemorySegment;Ljava/lang/foreign/SegmentAllocator;Ljdk/internal/foreign/Scoped;Ljava/util/function/BiFunction;Ljava/lang/RuntimeException;>; +innerclass innerClass java/lang/foreign/ValueLayout$OfByte outerClass java/lang/foreign/ValueLayout innerClassName OfByte flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfShort outerClass java/lang/foreign/ValueLayout innerClassName OfShort flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfChar outerClass java/lang/foreign/ValueLayout innerClassName OfChar flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfInt outerClass java/lang/foreign/ValueLayout innerClassName OfInt flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfFloat outerClass java/lang/foreign/ValueLayout innerClassName OfFloat flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfLong outerClass java/lang/foreign/ValueLayout innerClassName OfLong flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfDouble outerClass java/lang/foreign/ValueLayout innerClassName OfDouble flags 19 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +-method name spliterator descriptor (Ljdk/incubator/foreign/MemoryLayout;)Ljava/util/Spliterator; +-method name elements descriptor (Ljdk/incubator/foreign/MemoryLayout;)Ljava/util/stream/Stream; +-method name fill descriptor (B)Ljdk/incubator/foreign/MemorySegment; +-method name mismatch descriptor (Ljdk/incubator/foreign/MemorySegment;)J +-method name isAlive descriptor ()Z +-method name ownerThread descriptor ()Ljava/lang/Thread; +-method name isSmall descriptor ()Z +-method name checkAccess descriptor (JJZ)V +-method name unsafeGetOffset descriptor ()J +-method name unsafeGetBase descriptor ()Ljava/lang/Object; +-method name scope descriptor ()Ljdk/internal/foreign/ResourceScopeImpl; +-method name ofBuffer descriptor (Ljava/nio/ByteBuffer;)Ljdk/internal/foreign/AbstractMemorySegmentImpl; +-method name scope descriptor ()Ljdk/internal/misc/ScopedMemoryAccess$Scope; +-method name asReadOnly descriptor ()Ljdk/incubator/foreign/MemorySegment; +-method name asSlice descriptor (J)Ljdk/incubator/foreign/MemorySegment; +-method name asSlice descriptor (JJ)Ljdk/incubator/foreign/MemorySegment; +-method name scope descriptor ()Ljdk/incubator/foreign/ResourceScope; +-method name allocate descriptor (JJ)Ljdk/incubator/foreign/MemorySegment; +-method name address descriptor ()Ljdk/incubator/foreign/MemoryAddress; +-method name asOverlappingSlice descriptor (Ljdk/incubator/foreign/MemorySegment;)Ljdk/incubator/foreign/MemorySegment; +-method name segmentOffset descriptor (Ljdk/incubator/foreign/MemorySegment;)J +-method name toArray descriptor (Ljdk/incubator/foreign/ValueLayout$OfByte;)[B +-method name toArray descriptor (Ljdk/incubator/foreign/ValueLayout$OfShort;)[S +-method name toArray descriptor (Ljdk/incubator/foreign/ValueLayout$OfChar;)[C +-method name toArray descriptor (Ljdk/incubator/foreign/ValueLayout$OfInt;)[I +-method name toArray descriptor (Ljdk/incubator/foreign/ValueLayout$OfFloat;)[F +-method name toArray descriptor (Ljdk/incubator/foreign/ValueLayout$OfLong;)[J +-method name toArray descriptor (Ljdk/incubator/foreign/ValueLayout$OfDouble;)[D +-method name isAlignedForElement descriptor (JLjdk/incubator/foreign/MemoryLayout;)Z +method name spliterator descriptor (Ljava/lang/foreign/MemoryLayout;)Ljava/util/Spliterator; flags 1 signature (Ljava/lang/foreign/MemoryLayout;)Ljava/util/Spliterator; +method name elements descriptor (Ljava/lang/foreign/MemoryLayout;)Ljava/util/stream/Stream; flags 1 signature (Ljava/lang/foreign/MemoryLayout;)Ljava/util/stream/Stream; +method name fill descriptor (B)Ljava/lang/foreign/MemorySegment; flags 11 +method name allocate descriptor (JJ)Ljava/lang/foreign/MemorySegment; flags 1 +method name mismatch descriptor (Ljava/lang/foreign/MemorySegment;)J flags 1 +method name address descriptor ()Ljava/lang/foreign/MemoryAddress; flags 1 +method name asOverlappingSlice descriptor (Ljava/lang/foreign/MemorySegment;)Ljava/util/Optional; flags 11 signature (Ljava/lang/foreign/MemorySegment;)Ljava/util/Optional; +method name segmentOffset descriptor (Ljava/lang/foreign/MemorySegment;)J flags 11 +method name toArray descriptor (Ljava/lang/foreign/ValueLayout$OfByte;)[B flags 11 +method name toArray descriptor (Ljava/lang/foreign/ValueLayout$OfShort;)[S flags 11 +method name toArray descriptor (Ljava/lang/foreign/ValueLayout$OfChar;)[C flags 11 +method name toArray descriptor (Ljava/lang/foreign/ValueLayout$OfInt;)[I flags 11 +method name toArray descriptor (Ljava/lang/foreign/ValueLayout$OfFloat;)[F flags 11 +method name toArray descriptor (Ljava/lang/foreign/ValueLayout$OfLong;)[J flags 11 +method name toArray descriptor (Ljava/lang/foreign/ValueLayout$OfDouble;)[D flags 11 +method name checkAccess descriptor (JJZ)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name checkValidState descriptor ()V flags 1 +method name unsafeGetOffset descriptor ()J flags 401 +method name unsafeGetBase descriptor ()Ljava/lang/Object; flags 401 +method name maxAlignMask descriptor ()J flags 401 +method name isAlignedForElement descriptor (JLjava/lang/foreign/MemoryLayout;)Z flags 11 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name apply descriptor (Ljava/lang/String;Ljava/util/List;)Ljava/lang/RuntimeException; flags 1 signature (Ljava/lang/String;Ljava/util/List;)Ljava/lang/RuntimeException; +method name session descriptor ()Ljava/lang/foreign/MemorySession; flags 1 +method name equals descriptor (Ljava/lang/Object;)Z flags 1 +method name hashCode descriptor ()I flags 1 +method name ofBuffer descriptor (Ljava/nio/Buffer;)Ljdk/internal/foreign/AbstractMemorySegmentImpl; flags 9 +method name asReadOnly descriptor ()Ljava/lang/foreign/MemorySegment; flags 1041 +method name asSlice descriptor (J)Ljava/lang/foreign/MemorySegment; flags 1041 +method name asSlice descriptor (JJ)Ljava/lang/foreign/MemorySegment; flags 1041 +method name apply descriptor (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; flags 1041 + +class name jdk/internal/foreign/LayoutPath +-method name layout descriptor ()Ljdk/incubator/foreign/MemoryLayout; +-method name map descriptor (Ljava/util/function/UnaryOperator;)Ljdk/incubator/foreign/MemoryLayout; +-method name rootPath descriptor (Ljdk/incubator/foreign/MemoryLayout;Ljava/util/function/ToLongFunction;)Ljdk/internal/foreign/LayoutPath; +method name layout descriptor ()Ljava/lang/foreign/MemoryLayout; flags 1 +method name rootPath descriptor (Ljava/lang/foreign/MemoryLayout;)Ljdk/internal/foreign/LayoutPath; flags 9 + +class name jdk/internal/foreign/LayoutPath$PathElementImpl +header extends java/lang/Object implements java/lang/foreign/MemoryLayout$PathElement,java/util/function/UnaryOperator nestHost jdk/internal/foreign/LayoutPath flags 31 signature Ljava/lang/Object;Ljava/lang/foreign/MemoryLayout$PathElement;Ljava/util/function/UnaryOperator; +innerclass innerClass jdk/internal/foreign/LayoutPath$PathElementImpl outerClass jdk/internal/foreign/LayoutPath innerClassName PathElementImpl flags 19 +innerclass innerClass java/lang/foreign/MemoryLayout$PathElement outerClass java/lang/foreign/MemoryLayout innerClassName PathElement flags 609 + +class name jdk/internal/foreign/MemoryAddressImpl +header extends java/lang/Object implements java/lang/foreign/MemoryAddress,jdk/internal/foreign/Scoped flags 31 +innerclass innerClass java/lang/foreign/ValueLayout$OfByte outerClass java/lang/foreign/ValueLayout innerClassName OfByte flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfBoolean outerClass java/lang/foreign/ValueLayout innerClassName OfBoolean flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfChar outerClass java/lang/foreign/ValueLayout innerClassName OfChar flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfShort outerClass java/lang/foreign/ValueLayout innerClassName OfShort flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfInt outerClass java/lang/foreign/ValueLayout innerClassName OfInt flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfFloat outerClass java/lang/foreign/ValueLayout innerClassName OfFloat flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfLong outerClass java/lang/foreign/ValueLayout innerClassName OfLong flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfDouble outerClass java/lang/foreign/ValueLayout innerClassName OfDouble flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfAddress outerClass java/lang/foreign/ValueLayout innerClassName OfAddress flags 19 +-method name scope descriptor ()Ljdk/incubator/foreign/ResourceScope; +-method name addOffset descriptor (J)Ljdk/incubator/foreign/MemoryAddress; +-method name ofLongUnchecked descriptor (J)Ljdk/incubator/foreign/MemorySegment; +-method name ofLongUnchecked descriptor (JJLjdk/internal/foreign/ResourceScopeImpl;)Ljdk/incubator/foreign/MemorySegment; +-method name ofLongUnchecked descriptor (JJ)Ljdk/incubator/foreign/MemorySegment; +-method name address descriptor ()Ljdk/incubator/foreign/MemoryAddress; +-method name get descriptor (Ljdk/incubator/foreign/ValueLayout$OfByte;J)B +-method name set descriptor (Ljdk/incubator/foreign/ValueLayout$OfByte;JB)V +-method name get descriptor (Ljdk/incubator/foreign/ValueLayout$OfBoolean;J)Z +-method name set descriptor (Ljdk/incubator/foreign/ValueLayout$OfBoolean;JZ)V +-method name get descriptor (Ljdk/incubator/foreign/ValueLayout$OfChar;J)C +-method name set descriptor (Ljdk/incubator/foreign/ValueLayout$OfChar;JC)V +-method name get descriptor (Ljdk/incubator/foreign/ValueLayout$OfShort;J)S +-method name set descriptor (Ljdk/incubator/foreign/ValueLayout$OfShort;JS)V +-method name get descriptor (Ljdk/incubator/foreign/ValueLayout$OfInt;J)I +-method name set descriptor (Ljdk/incubator/foreign/ValueLayout$OfInt;JI)V +-method name get descriptor (Ljdk/incubator/foreign/ValueLayout$OfFloat;J)F +-method name set descriptor (Ljdk/incubator/foreign/ValueLayout$OfFloat;JF)V +-method name get descriptor (Ljdk/incubator/foreign/ValueLayout$OfLong;J)J +-method name set descriptor (Ljdk/incubator/foreign/ValueLayout$OfLong;JJ)V +-method name get descriptor (Ljdk/incubator/foreign/ValueLayout$OfDouble;J)D +-method name set descriptor (Ljdk/incubator/foreign/ValueLayout$OfDouble;JD)V +-method name get descriptor (Ljdk/incubator/foreign/ValueLayout$OfAddress;J)Ljdk/incubator/foreign/MemoryAddress; +-method name set descriptor (Ljdk/incubator/foreign/ValueLayout$OfAddress;JLjdk/incubator/foreign/Addressable;)V +-method name getAtIndex descriptor (Ljdk/incubator/foreign/ValueLayout$OfChar;J)C +-method name setAtIndex descriptor (Ljdk/incubator/foreign/ValueLayout$OfChar;JC)V +-method name getAtIndex descriptor (Ljdk/incubator/foreign/ValueLayout$OfShort;J)S +-method name setAtIndex descriptor (Ljdk/incubator/foreign/ValueLayout$OfShort;JS)V +-method name getAtIndex descriptor (Ljdk/incubator/foreign/ValueLayout$OfInt;J)I +-method name setAtIndex descriptor (Ljdk/incubator/foreign/ValueLayout$OfInt;JI)V +-method name getAtIndex descriptor (Ljdk/incubator/foreign/ValueLayout$OfFloat;J)F +-method name setAtIndex descriptor (Ljdk/incubator/foreign/ValueLayout$OfFloat;JF)V +-method name getAtIndex descriptor (Ljdk/incubator/foreign/ValueLayout$OfLong;J)J +-method name setAtIndex descriptor (Ljdk/incubator/foreign/ValueLayout$OfLong;JJ)V +-method name getAtIndex descriptor (Ljdk/incubator/foreign/ValueLayout$OfDouble;J)D +-method name setAtIndex descriptor (Ljdk/incubator/foreign/ValueLayout$OfDouble;JD)V +-method name getAtIndex descriptor (Ljdk/incubator/foreign/ValueLayout$OfAddress;J)Ljdk/incubator/foreign/MemoryAddress; +-method name setAtIndex descriptor (Ljdk/incubator/foreign/ValueLayout$OfAddress;JLjdk/incubator/foreign/Addressable;)V +method name addOffset descriptor (J)Ljava/lang/foreign/MemoryAddress; flags 1 +method name address descriptor ()Ljava/lang/foreign/MemoryAddress; flags 11 +method name ofLongUnchecked descriptor (J)Ljava/lang/foreign/MemorySegment; flags 9 +method name ofLongUnchecked descriptor (JJLjava/lang/foreign/MemorySession;)Ljava/lang/foreign/MemorySegment; flags 9 +method name ofLongUnchecked descriptor (JJ)Ljava/lang/foreign/MemorySegment; flags 9 +method name session descriptor ()Ljdk/internal/foreign/MemorySessionImpl; flags 1 +method name get descriptor (Ljava/lang/foreign/ValueLayout$OfByte;J)B flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name set descriptor (Ljava/lang/foreign/ValueLayout$OfByte;JB)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name get descriptor (Ljava/lang/foreign/ValueLayout$OfBoolean;J)Z flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name set descriptor (Ljava/lang/foreign/ValueLayout$OfBoolean;JZ)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name get descriptor (Ljava/lang/foreign/ValueLayout$OfChar;J)C flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name set descriptor (Ljava/lang/foreign/ValueLayout$OfChar;JC)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name get descriptor (Ljava/lang/foreign/ValueLayout$OfShort;J)S flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name set descriptor (Ljava/lang/foreign/ValueLayout$OfShort;JS)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name get descriptor (Ljava/lang/foreign/ValueLayout$OfInt;J)I flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name set descriptor (Ljava/lang/foreign/ValueLayout$OfInt;JI)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name get descriptor (Ljava/lang/foreign/ValueLayout$OfFloat;J)F flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name set descriptor (Ljava/lang/foreign/ValueLayout$OfFloat;JF)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name get descriptor (Ljava/lang/foreign/ValueLayout$OfLong;J)J flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name set descriptor (Ljava/lang/foreign/ValueLayout$OfLong;JJ)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name get descriptor (Ljava/lang/foreign/ValueLayout$OfDouble;J)D flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name set descriptor (Ljava/lang/foreign/ValueLayout$OfDouble;JD)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name get descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;J)Ljava/lang/foreign/MemoryAddress; flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name set descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;JLjava/lang/foreign/Addressable;)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name getAtIndex descriptor (Ljava/lang/foreign/ValueLayout$OfChar;J)C flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name setAtIndex descriptor (Ljava/lang/foreign/ValueLayout$OfChar;JC)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name getAtIndex descriptor (Ljava/lang/foreign/ValueLayout$OfShort;J)S flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name setAtIndex descriptor (Ljava/lang/foreign/ValueLayout$OfShort;JS)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name getAtIndex descriptor (Ljava/lang/foreign/ValueLayout$OfInt;J)I flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name setAtIndex descriptor (Ljava/lang/foreign/ValueLayout$OfInt;JI)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name getAtIndex descriptor (Ljava/lang/foreign/ValueLayout$OfFloat;J)F flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name setAtIndex descriptor (Ljava/lang/foreign/ValueLayout$OfFloat;JF)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name getAtIndex descriptor (Ljava/lang/foreign/ValueLayout$OfLong;J)J flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name setAtIndex descriptor (Ljava/lang/foreign/ValueLayout$OfLong;JJ)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name getAtIndex descriptor (Ljava/lang/foreign/ValueLayout$OfDouble;J)D flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name setAtIndex descriptor (Ljava/lang/foreign/ValueLayout$OfDouble;JD)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name getAtIndex descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;J)Ljava/lang/foreign/MemoryAddress; flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name setAtIndex descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;JLjava/lang/foreign/Addressable;)V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline;@Ljdk/internal/reflect/CallerSensitive; +method name session descriptor ()Ljava/lang/foreign/MemorySession; flags 1041 + +class name jdk/internal/foreign/MemorySessionImpl +header extends java/lang/Object implements java/lang/foreign/MemorySession,java/lang/foreign/SegmentAllocator nestMembers jdk/internal/foreign/MemorySessionImpl$ResourceList,jdk/internal/foreign/MemorySessionImpl$ResourceList$ResourceCleanup,jdk/internal/foreign/MemorySessionImpl$NonCloseableView flags 421 +innerclass innerClass jdk/internal/foreign/MemorySessionImpl$ResourceList outerClass jdk/internal/foreign/MemorySessionImpl innerClassName ResourceList flags 409 +innerclass innerClass jdk/internal/foreign/MemorySessionImpl$ResourceList$ResourceCleanup outerClass jdk/internal/foreign/MemorySessionImpl$ResourceList innerClassName ResourceCleanup flags 409 +innerclass innerClass java/lang/ref/Cleaner$Cleanable outerClass java/lang/ref/Cleaner innerClassName Cleanable flags 609 +innerclass innerClass jdk/internal/foreign/MemorySessionImpl$NonCloseableView outerClass jdk/internal/foreign/MemorySessionImpl innerClassName NonCloseableView flags 19 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +field name GLOBAL descriptor Ljdk/internal/foreign/MemorySessionImpl; flags 19 +method name addCloseAction descriptor (Ljava/lang/Runnable;)V flags 1 +method name addOrCleanupIfFail descriptor (Ljdk/internal/foreign/MemorySessionImpl$ResourceList$ResourceCleanup;)V flags 1 +method name descriptor (Ljava/lang/Thread;Ljdk/internal/foreign/MemorySessionImpl$ResourceList;Ljava/lang/ref/Cleaner;)V flags 4 +method name createConfined descriptor (Ljava/lang/Thread;Ljava/lang/ref/Cleaner;)Ljava/lang/foreign/MemorySession; flags 9 +method name createShared descriptor (Ljava/lang/ref/Cleaner;)Ljava/lang/foreign/MemorySession; flags 9 +method name createImplicit descriptor ()Ljdk/internal/foreign/MemorySessionImpl; flags 9 +method name allocate descriptor (JJ)Ljava/lang/foreign/MemorySegment; flags 1 +method name release0 descriptor ()V flags 401 +method name acquire0 descriptor ()V flags 401 +method name equals descriptor (Ljava/lang/Object;)Z flags 11 +method name hashCode descriptor ()I flags 11 +method name whileAlive descriptor (Ljava/lang/Runnable;)V flags 1 +method name ownerThread descriptor ()Ljava/lang/Thread; flags 11 +method name isAlive descriptor ()Z flags 1 +method name asNonCloseable descriptor ()Ljava/lang/foreign/MemorySession; flags 1 +method name toSessionImpl descriptor (Ljava/lang/foreign/MemorySession;)Ljdk/internal/foreign/MemorySessionImpl; flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name checkValidStateRaw descriptor ()V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name checkValidState descriptor ()V flags 1 +method name clone descriptor ()Ljava/lang/Object; thrownTypes java/lang/CloneNotSupportedException flags 4 +method name isCloseable descriptor ()Z flags 1 +method name close descriptor ()V flags 1 +method name heapSession descriptor (Ljava/lang/Object;)Ljdk/internal/foreign/MemorySessionImpl; flags 9 + +class name jdk/internal/foreign/MemorySessionImpl$NonCloseableView +header extends java/lang/Object implements java/lang/foreign/MemorySession nestHost jdk/internal/foreign/MemorySessionImpl flags 31 +innerclass innerClass jdk/internal/foreign/MemorySessionImpl$NonCloseableView outerClass jdk/internal/foreign/MemorySessionImpl innerClassName NonCloseableView flags 19 +method name descriptor (Ljdk/internal/foreign/MemorySessionImpl;)V flags 1 +method name isAlive descriptor ()Z flags 1 +method name isCloseable descriptor ()Z flags 1 +method name ownerThread descriptor ()Ljava/lang/Thread; flags 1 +method name equals descriptor (Ljava/lang/Object;)Z flags 1 +method name hashCode descriptor ()I flags 1 +method name whileAlive descriptor (Ljava/lang/Runnable;)V flags 1 +method name asNonCloseable descriptor ()Ljava/lang/foreign/MemorySession; flags 1 +method name addCloseAction descriptor (Ljava/lang/Runnable;)V flags 1 +method name close descriptor ()V flags 1 + +class name jdk/internal/foreign/MemorySessionImpl$ResourceList +header extends java/lang/Object implements java/lang/Runnable nestHost jdk/internal/foreign/MemorySessionImpl flags 421 +innerclass innerClass jdk/internal/foreign/MemorySessionImpl$ResourceList outerClass jdk/internal/foreign/MemorySessionImpl innerClassName ResourceList flags 409 +innerclass innerClass jdk/internal/foreign/MemorySessionImpl$ResourceList$ResourceCleanup outerClass jdk/internal/foreign/MemorySessionImpl$ResourceList innerClassName ResourceCleanup flags 409 +method name descriptor ()V flags 1 +method name run descriptor ()V flags 11 + +class name jdk/internal/foreign/MemorySessionImpl$ResourceList$ResourceCleanup +header extends java/lang/Object nestHost jdk/internal/foreign/MemorySessionImpl flags 421 +innerclass innerClass jdk/internal/foreign/MemorySessionImpl$ResourceList outerClass jdk/internal/foreign/MemorySessionImpl innerClassName ResourceList flags 409 +innerclass innerClass jdk/internal/foreign/MemorySessionImpl$ResourceList$ResourceCleanup outerClass jdk/internal/foreign/MemorySessionImpl$ResourceList innerClassName ResourceCleanup flags 409 +method name descriptor ()V flags 1 +method name cleanup descriptor ()V flags 401 + +-class name jdk/internal/foreign/NativeSymbolImpl + +-class name jdk/internal/foreign/ResourceScopeImpl + +-class name jdk/internal/foreign/ResourceScopeImpl$ResourceList + +-class name jdk/internal/foreign/ResourceScopeImpl$ResourceList$ResourceCleanup + +class name jdk/internal/foreign/Scoped +-method name scope descriptor ()Ljdk/incubator/foreign/ResourceScope; +method name sessionImpl descriptor ()Ljdk/internal/foreign/MemorySessionImpl; flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name session descriptor ()Ljava/lang/foreign/MemorySession; flags 401 + +class name jdk/internal/foreign/abi/AbstractLinker +header extends java/lang/Object implements java/lang/foreign/Linker sealed true permittedSubclasses jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64Linker,jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64Linker,jdk/internal/foreign/abi/x64/sysv/SysVx64Linker,jdk/internal/foreign/abi/x64/windows/Windowsx64Linker flags 421 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +method name descriptor ()V flags 1 +method name downcallHandle descriptor (Ljava/lang/foreign/FunctionDescriptor;)Ljava/lang/invoke/MethodHandle; flags 1 +method name arrangeDowncall descriptor (Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;)Ljava/lang/invoke/MethodHandle; flags 404 +method name upcallStub descriptor (Ljava/lang/invoke/MethodHandle;Ljava/lang/foreign/FunctionDescriptor;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/MemorySegment; flags 1 +method name arrangeUpcall descriptor (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/MemorySegment; flags 404 +method name defaultLookup descriptor ()Ljdk/internal/foreign/SystemLookup; flags 1 +method name defaultLookup descriptor ()Ljava/lang/foreign/SymbolLookup; flags 1041 + +class name jdk/internal/foreign/abi/SharedUtils +header extends java/lang/Object nestMembers jdk/internal/foreign/abi/SharedUtils$EmptyVaList flags 21 +innerclass innerClass java/lang/foreign/ValueLayout$OfByte outerClass java/lang/foreign/ValueLayout innerClassName OfByte flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfLong outerClass java/lang/foreign/ValueLayout innerClassName OfLong flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfFloat outerClass java/lang/foreign/ValueLayout innerClassName OfFloat flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfDouble outerClass java/lang/foreign/ValueLayout innerClassName OfDouble flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfInt outerClass java/lang/foreign/ValueLayout innerClassName OfInt flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfShort outerClass java/lang/foreign/ValueLayout innerClassName OfShort flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfChar outerClass java/lang/foreign/ValueLayout innerClassName OfChar flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfBoolean outerClass java/lang/foreign/ValueLayout innerClassName OfBoolean flags 19 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +innerclass innerClass jdk/internal/foreign/abi/SharedUtils$EmptyVaList outerClass jdk/internal/foreign/abi/SharedUtils innerClassName EmptyVaList flags 9 +innerclass innerClass java/lang/foreign/VaList$Builder outerClass java/lang/foreign/VaList innerClassName Builder flags 609 +-field name THROWING_ALLOCATOR descriptor Ljdk/incubator/foreign/SegmentAllocator; +-method name align descriptor (Ljdk/incubator/foreign/MemoryLayout;ZJ)J +-method name alignment descriptor (Ljdk/incubator/foreign/MemoryLayout;Z)J +-method name adaptDowncallForIMR descriptor (Ljava/lang/invoke/MethodHandle;Ljdk/incubator/foreign/FunctionDescriptor;)Ljava/lang/invoke/MethodHandle; +-method name getSystemLinker descriptor ()Ljdk/incubator/foreign/CLinker; +-method name toJavaStringInternal descriptor (Ljdk/incubator/foreign/MemorySegment;J)Ljava/lang/String; +-method name allocateMemoryInternal descriptor (J)Ljdk/incubator/foreign/MemoryAddress; +-method name freeMemoryInternal descriptor (Ljdk/incubator/foreign/MemoryAddress;)V +-method name isTrivial descriptor (Ljdk/incubator/foreign/FunctionDescriptor;)Z +-method name acquire descriptor ([Ljdk/internal/foreign/Scoped;)V +-method name release descriptor ([Ljdk/internal/foreign/Scoped;)V +-method name wrapDowncall descriptor (Ljava/lang/invoke/MethodHandle;Ljdk/incubator/foreign/FunctionDescriptor;)Ljava/lang/invoke/MethodHandle; +-method name checkSymbol descriptor (Ljdk/incubator/foreign/NativeSymbol;)V +-method name checkAddress descriptor (Ljdk/incubator/foreign/MemoryAddress;)V +-method name newVaList descriptor (Ljava/util/function/Consumer;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/VaList; +-method name newVaListOfAddress descriptor (Ljdk/incubator/foreign/MemoryAddress;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/VaList; +-method name emptyVaList descriptor ()Ljdk/incubator/foreign/VaList; +-method name isVarargsIndex descriptor (Ljdk/incubator/foreign/FunctionDescriptor;I)Z +-method name inferMethodType descriptor (Ljdk/incubator/foreign/FunctionDescriptor;Z)Ljava/lang/invoke/MethodType; +field name THROWING_ALLOCATOR descriptor Ljava/lang/foreign/SegmentAllocator; flags 19 +field name JAVA_SHORT_UNALIGNED descriptor Ljava/lang/foreign/ValueLayout$OfShort; flags 19 +field name JAVA_CHAR_UNALIGNED descriptor Ljava/lang/foreign/ValueLayout$OfChar; flags 19 +field name JAVA_INT_UNALIGNED descriptor Ljava/lang/foreign/ValueLayout$OfInt; flags 19 +field name JAVA_LONG_UNALIGNED descriptor Ljava/lang/foreign/ValueLayout$OfLong; flags 19 +field name JAVA_FLOAT_UNALIGNED descriptor Ljava/lang/foreign/ValueLayout$OfFloat; flags 19 +field name JAVA_DOUBLE_UNALIGNED descriptor Ljava/lang/foreign/ValueLayout$OfDouble; flags 19 +method name align descriptor (Ljava/lang/foreign/MemoryLayout;ZJ)J flags 9 +method name alignment descriptor (Ljava/lang/foreign/MemoryLayout;Z)J flags 9 +method name adaptDowncallForIMR descriptor (Ljava/lang/invoke/MethodHandle;Ljava/lang/foreign/FunctionDescriptor;)Ljava/lang/invoke/MethodHandle; flags 9 +method name getSystemLinker descriptor ()Ljava/lang/foreign/Linker; flags 9 +method name toJavaStringInternal descriptor (Ljava/lang/foreign/MemorySegment;J)Ljava/lang/String; flags 9 +method name maybeInsertAllocator descriptor (Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle; flags 9 +method name checkSymbol descriptor (Ljava/lang/foreign/Addressable;)V flags 9 +method name checkAddress descriptor (Ljava/lang/foreign/MemoryAddress;)V flags 9 +method name newVaList descriptor (Ljava/util/function/Consumer;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/VaList; flags 9 signature (Ljava/util/function/Consumer;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/VaList; +method name newVaListOfAddress descriptor (Ljava/lang/foreign/MemoryAddress;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/VaList; flags 9 +method name emptyVaList descriptor ()Ljava/lang/foreign/VaList; flags 9 +method name isVarargsIndex descriptor (Ljava/lang/foreign/FunctionDescriptor;I)Z flags 9 +method name newVaListNSEE descriptor (Ljava/lang/foreign/MemoryLayout;)Ljava/util/NoSuchElementException; flags 9 +method name inferMethodType descriptor (Ljava/lang/foreign/FunctionDescriptor;Z)Ljava/lang/invoke/MethodType; flags 9 + +class name jdk/internal/foreign/abi/SharedUtils$EmptyVaList +header extends java/lang/Object implements java/lang/foreign/VaList,jdk/internal/foreign/Scoped nestHost jdk/internal/foreign/abi/SharedUtils flags 21 +innerclass innerClass jdk/internal/foreign/abi/SharedUtils$EmptyVaList outerClass jdk/internal/foreign/abi/SharedUtils innerClassName EmptyVaList flags 9 +innerclass innerClass java/lang/foreign/ValueLayout$OfInt outerClass java/lang/foreign/ValueLayout innerClassName OfInt flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfLong outerClass java/lang/foreign/ValueLayout innerClassName OfLong flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfDouble outerClass java/lang/foreign/ValueLayout innerClassName OfDouble flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfAddress outerClass java/lang/foreign/ValueLayout innerClassName OfAddress flags 19 +-method name descriptor (Ljdk/incubator/foreign/MemoryAddress;)V +-method name skip descriptor ([Ljdk/incubator/foreign/MemoryLayout;)V +-method name scope descriptor ()Ljdk/incubator/foreign/ResourceScope; +-method name address descriptor ()Ljdk/incubator/foreign/MemoryAddress; +-method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfInt;)I +-method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfLong;)J +-method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfDouble;)D +-method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfAddress;)Ljdk/incubator/foreign/MemoryAddress; +-method name nextVarg descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/SegmentAllocator;)Ljdk/incubator/foreign/MemorySegment; +-method name copy descriptor ()Ljdk/incubator/foreign/VaList; +method name descriptor (Ljava/lang/foreign/MemoryAddress;)V flags 1 +method name nextVarg descriptor (Ljava/lang/foreign/ValueLayout$OfInt;)I flags 1 +method name nextVarg descriptor (Ljava/lang/foreign/ValueLayout$OfLong;)J flags 1 +method name nextVarg descriptor (Ljava/lang/foreign/ValueLayout$OfDouble;)D flags 1 +method name nextVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;)Ljava/lang/foreign/MemoryAddress; flags 1 +method name nextVarg descriptor (Ljava/lang/foreign/GroupLayout;Ljava/lang/foreign/SegmentAllocator;)Ljava/lang/foreign/MemorySegment; flags 1 +method name skip descriptor ([Ljava/lang/foreign/MemoryLayout;)V flags 81 +method name session descriptor ()Ljava/lang/foreign/MemorySession; flags 1 +method name copy descriptor ()Ljava/lang/foreign/VaList; flags 1 +method name address descriptor ()Ljava/lang/foreign/MemoryAddress; flags 1 + +class name jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64Linker +header extends jdk/internal/foreign/abi/AbstractLinker flags 31 +innerclass innerClass jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder outerClass jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList innerClassName Builder flags 9 +innerclass innerClass java/lang/foreign/VaList$Builder outerClass java/lang/foreign/VaList innerClassName Builder flags 609 +-method name downcallHandle descriptor (Ljdk/incubator/foreign/FunctionDescriptor;)Ljava/lang/invoke/MethodHandle; +-method name upcallStub descriptor (Ljava/lang/invoke/MethodHandle;Ljdk/incubator/foreign/FunctionDescriptor;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/NativeSymbol; +-method name newVaList descriptor (Ljava/util/function/Consumer;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/VaList; +-method name newVaListOfAddress descriptor (Ljdk/incubator/foreign/MemoryAddress;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/VaList; +-method name emptyVaList descriptor ()Ljdk/incubator/foreign/VaList; +method name arrangeDowncall descriptor (Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;)Ljava/lang/invoke/MethodHandle; flags 4 +method name arrangeUpcall descriptor (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/MemorySegment; flags 4 +method name newVaList descriptor (Ljava/util/function/Consumer;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/VaList; flags 9 signature (Ljava/util/function/Consumer;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/VaList; +method name newVaListOfAddress descriptor (Ljava/lang/foreign/MemoryAddress;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/VaList; flags 9 +method name emptyVaList descriptor ()Ljava/lang/foreign/VaList; flags 9 + +class name jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList +header extends java/lang/Object implements java/lang/foreign/VaList,jdk/internal/foreign/Scoped nestMembers jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder flags 21 +innerclass innerClass java/lang/foreign/MemoryLayout$PathElement outerClass java/lang/foreign/MemoryLayout innerClassName PathElement flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfAddress outerClass java/lang/foreign/ValueLayout innerClassName OfAddress flags 19 +innerclass innerClass jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder outerClass jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList innerClassName Builder flags 9 +innerclass innerClass java/lang/foreign/ValueLayout$OfInt outerClass java/lang/foreign/ValueLayout innerClassName OfInt flags 19 +innerclass innerClass jdk/internal/foreign/abi/SharedUtils$EmptyVaList outerClass jdk/internal/foreign/abi/SharedUtils innerClassName EmptyVaList flags 9 +innerclass innerClass java/lang/foreign/ValueLayout$OfLong outerClass java/lang/foreign/ValueLayout innerClassName OfLong flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfDouble outerClass java/lang/foreign/ValueLayout innerClassName OfDouble flags 19 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +-method name skip descriptor ([Ljdk/incubator/foreign/MemoryLayout;)V +-method name scope descriptor ()Ljdk/incubator/foreign/ResourceScope; +-method name address descriptor ()Ljdk/incubator/foreign/MemoryAddress; +-method name empty descriptor ()Ljdk/incubator/foreign/VaList; +-method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfInt;)I +-method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfLong;)J +-method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfDouble;)D +-method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfAddress;)Ljdk/incubator/foreign/MemoryAddress; +-method name nextVarg descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/SegmentAllocator;)Ljdk/incubator/foreign/MemorySegment; +-method name ofAddress descriptor (Ljdk/incubator/foreign/MemoryAddress;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/VaList; +-method name copy descriptor ()Ljdk/incubator/foreign/VaList; +method name empty descriptor ()Ljava/lang/foreign/VaList; flags 9 +method name nextVarg descriptor (Ljava/lang/foreign/ValueLayout$OfInt;)I flags 1 +method name nextVarg descriptor (Ljava/lang/foreign/ValueLayout$OfLong;)J flags 1 +method name nextVarg descriptor (Ljava/lang/foreign/ValueLayout$OfDouble;)D flags 1 +method name nextVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;)Ljava/lang/foreign/MemoryAddress; flags 1 +method name nextVarg descriptor (Ljava/lang/foreign/GroupLayout;Ljava/lang/foreign/SegmentAllocator;)Ljava/lang/foreign/MemorySegment; flags 1 +method name skip descriptor ([Ljava/lang/foreign/MemoryLayout;)V flags 81 +method name ofAddress descriptor (Ljava/lang/foreign/MemoryAddress;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/VaList; flags 9 +method name session descriptor ()Ljava/lang/foreign/MemorySession; flags 1 +method name copy descriptor ()Ljava/lang/foreign/VaList; flags 1 +method name address descriptor ()Ljava/lang/foreign/MemoryAddress; flags 1 + +class name jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder +header extends java/lang/Object implements java/lang/foreign/VaList$Builder nestHost jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList flags 21 +innerclass innerClass jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder outerClass jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList innerClassName Builder flags 9 +innerclass innerClass java/lang/foreign/ValueLayout$OfAddress outerClass java/lang/foreign/ValueLayout innerClassName OfAddress flags 19 +innerclass innerClass java/lang/foreign/MemoryLayout$PathElement outerClass java/lang/foreign/MemoryLayout innerClassName PathElement flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfDouble outerClass java/lang/foreign/ValueLayout innerClassName OfDouble flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfLong outerClass java/lang/foreign/ValueLayout innerClassName OfLong flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfInt outerClass java/lang/foreign/ValueLayout innerClassName OfInt flags 19 +innerclass innerClass java/lang/foreign/VaList$Builder outerClass java/lang/foreign/VaList innerClassName Builder flags 609 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +-method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfInt;I)Ljdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder; +-method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfLong;J)Ljdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder; +-method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfDouble;D)Ljdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder; +-method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfAddress;Ljdk/incubator/foreign/Addressable;)Ljdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder; +-method name addVarg descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/MemorySegment;)Ljdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder; +-method name build descriptor ()Ljdk/incubator/foreign/VaList; +-method name addVarg descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/MemorySegment;)Ljdk/incubator/foreign/VaList$Builder; +-method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfAddress;Ljdk/incubator/foreign/Addressable;)Ljdk/incubator/foreign/VaList$Builder; +-method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfDouble;D)Ljdk/incubator/foreign/VaList$Builder; +-method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfLong;J)Ljdk/incubator/foreign/VaList$Builder; +-method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfInt;I)Ljdk/incubator/foreign/VaList$Builder; +method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfInt;I)Ljdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder; flags 1 +method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfLong;J)Ljdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder; flags 1 +method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfDouble;D)Ljdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder; flags 1 +method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;Ljava/lang/foreign/Addressable;)Ljdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder; flags 1 +method name addVarg descriptor (Ljava/lang/foreign/GroupLayout;Ljava/lang/foreign/MemorySegment;)Ljdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder; flags 1 +method name build descriptor ()Ljava/lang/foreign/VaList; flags 1 +method name addVarg descriptor (Ljava/lang/foreign/GroupLayout;Ljava/lang/foreign/MemorySegment;)Ljava/lang/foreign/VaList$Builder; flags 1041 +method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;Ljava/lang/foreign/Addressable;)Ljava/lang/foreign/VaList$Builder; flags 1041 +method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfDouble;D)Ljava/lang/foreign/VaList$Builder; flags 1041 +method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfLong;J)Ljava/lang/foreign/VaList$Builder; flags 1041 +method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfInt;I)Ljava/lang/foreign/VaList$Builder; flags 1041 + +class name jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64Linker +header extends jdk/internal/foreign/abi/AbstractLinker flags 31 +innerclass innerClass jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder outerClass jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList innerClassName Builder flags 9 +innerclass innerClass java/lang/foreign/VaList$Builder outerClass java/lang/foreign/VaList innerClassName Builder flags 609 +-method name downcallHandle descriptor (Ljdk/incubator/foreign/FunctionDescriptor;)Ljava/lang/invoke/MethodHandle; +-method name upcallStub descriptor (Ljava/lang/invoke/MethodHandle;Ljdk/incubator/foreign/FunctionDescriptor;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/NativeSymbol; +-method name newVaList descriptor (Ljava/util/function/Consumer;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/VaList; +-method name newVaListOfAddress descriptor (Ljdk/incubator/foreign/MemoryAddress;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/VaList; +-method name emptyVaList descriptor ()Ljdk/incubator/foreign/VaList; +method name arrangeDowncall descriptor (Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;)Ljava/lang/invoke/MethodHandle; flags 4 +method name arrangeUpcall descriptor (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/MemorySegment; flags 4 +method name newVaList descriptor (Ljava/util/function/Consumer;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/VaList; flags 9 signature (Ljava/util/function/Consumer;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/VaList; +method name newVaListOfAddress descriptor (Ljava/lang/foreign/MemoryAddress;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/VaList; flags 9 +method name emptyVaList descriptor ()Ljava/lang/foreign/VaList; flags 9 + +class name jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList +header extends java/lang/Object implements java/lang/foreign/VaList,jdk/internal/foreign/Scoped nestMembers jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder flags 21 +innerclass innerClass java/lang/foreign/MemoryLayout$PathElement outerClass java/lang/foreign/MemoryLayout innerClassName PathElement flags 609 +innerclass innerClass jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder outerClass jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList innerClassName Builder flags 9 +innerclass innerClass java/lang/foreign/ValueLayout$OfAddress outerClass java/lang/foreign/ValueLayout innerClassName OfAddress flags 19 +innerclass innerClass jdk/internal/foreign/abi/SharedUtils$EmptyVaList outerClass jdk/internal/foreign/abi/SharedUtils innerClassName EmptyVaList flags 9 +innerclass innerClass java/lang/foreign/ValueLayout$OfInt outerClass java/lang/foreign/ValueLayout innerClassName OfInt flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfLong outerClass java/lang/foreign/ValueLayout innerClassName OfLong flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfDouble outerClass java/lang/foreign/ValueLayout innerClassName OfDouble flags 19 +-field name CARRIER descriptor Ljava/lang/Class; +-method name skip descriptor ([Ljdk/incubator/foreign/MemoryLayout;)V +-method name scope descriptor ()Ljdk/incubator/foreign/ResourceScope; +-method name address descriptor ()Ljdk/incubator/foreign/MemoryAddress; +-method name empty descriptor ()Ljdk/incubator/foreign/VaList; +-method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfInt;)I +-method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfLong;)J +-method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfDouble;)D +-method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfAddress;)Ljdk/incubator/foreign/MemoryAddress; +-method name nextVarg descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/SegmentAllocator;)Ljdk/incubator/foreign/MemorySegment; +-method name copy descriptor ()Ljdk/incubator/foreign/VaList; +method name empty descriptor ()Ljava/lang/foreign/VaList; flags 19 +method name nextVarg descriptor (Ljava/lang/foreign/ValueLayout$OfInt;)I flags 1 +method name nextVarg descriptor (Ljava/lang/foreign/ValueLayout$OfLong;)J flags 1 +method name nextVarg descriptor (Ljava/lang/foreign/ValueLayout$OfDouble;)D flags 1 +method name nextVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;)Ljava/lang/foreign/MemoryAddress; flags 1 +method name nextVarg descriptor (Ljava/lang/foreign/GroupLayout;Ljava/lang/foreign/SegmentAllocator;)Ljava/lang/foreign/MemorySegment; flags 1 +method name skip descriptor ([Ljava/lang/foreign/MemoryLayout;)V flags 81 +method name session descriptor ()Ljava/lang/foreign/MemorySession; flags 1 +method name copy descriptor ()Ljava/lang/foreign/VaList; flags 1 +method name address descriptor ()Ljava/lang/foreign/MemoryAddress; flags 1 + +class name jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder +header extends java/lang/Object implements java/lang/foreign/VaList$Builder nestHost jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList flags 21 +innerclass innerClass jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder outerClass jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList innerClassName Builder flags 9 +innerclass innerClass java/lang/foreign/ValueLayout$OfAddress outerClass java/lang/foreign/ValueLayout innerClassName OfAddress flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfDouble outerClass java/lang/foreign/ValueLayout innerClassName OfDouble flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfLong outerClass java/lang/foreign/ValueLayout innerClassName OfLong flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfInt outerClass java/lang/foreign/ValueLayout innerClassName OfInt flags 19 +innerclass innerClass java/lang/foreign/VaList$Builder outerClass java/lang/foreign/VaList innerClassName Builder flags 609 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +-method name descriptor (Ljdk/incubator/foreign/ResourceScope;)V +-method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfInt;I)Ljdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder; +-method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfLong;J)Ljdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder; +-method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfDouble;D)Ljdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder; +-method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfAddress;Ljdk/incubator/foreign/Addressable;)Ljdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder; +-method name addVarg descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/MemorySegment;)Ljdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder; +-method name build descriptor ()Ljdk/incubator/foreign/VaList; +-method name addVarg descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/MemorySegment;)Ljdk/incubator/foreign/VaList$Builder; +-method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfAddress;Ljdk/incubator/foreign/Addressable;)Ljdk/incubator/foreign/VaList$Builder; +-method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfDouble;D)Ljdk/incubator/foreign/VaList$Builder; +-method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfLong;J)Ljdk/incubator/foreign/VaList$Builder; +-method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfInt;I)Ljdk/incubator/foreign/VaList$Builder; +method name descriptor (Ljava/lang/foreign/MemorySession;)V flags 1 +method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfInt;I)Ljdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder; flags 1 +method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfLong;J)Ljdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder; flags 1 +method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfDouble;D)Ljdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder; flags 1 +method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;Ljava/lang/foreign/Addressable;)Ljdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder; flags 1 +method name addVarg descriptor (Ljava/lang/foreign/GroupLayout;Ljava/lang/foreign/MemorySegment;)Ljdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder; flags 1 +method name build descriptor ()Ljava/lang/foreign/VaList; flags 1 +method name addVarg descriptor (Ljava/lang/foreign/GroupLayout;Ljava/lang/foreign/MemorySegment;)Ljava/lang/foreign/VaList$Builder; flags 1041 +method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;Ljava/lang/foreign/Addressable;)Ljava/lang/foreign/VaList$Builder; flags 1041 +method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfDouble;D)Ljava/lang/foreign/VaList$Builder; flags 1041 +method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfLong;J)Ljava/lang/foreign/VaList$Builder; flags 1041 +method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfInt;I)Ljava/lang/foreign/VaList$Builder; flags 1041 + +class name jdk/internal/foreign/abi/x64/sysv/SysVVaList +header extends java/lang/Object implements java/lang/foreign/VaList,jdk/internal/foreign/Scoped nestMembers jdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder flags 21 +innerclass innerClass java/lang/foreign/MemoryLayout$PathElement outerClass java/lang/foreign/MemoryLayout innerClassName PathElement flags 609 +innerclass innerClass jdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder outerClass jdk/internal/foreign/abi/x64/sysv/SysVVaList innerClassName Builder flags 9 +innerclass innerClass java/lang/foreign/ValueLayout$OfInt outerClass java/lang/foreign/ValueLayout innerClassName OfInt flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfAddress outerClass java/lang/foreign/ValueLayout innerClassName OfAddress flags 19 +innerclass innerClass jdk/internal/foreign/abi/SharedUtils$EmptyVaList outerClass jdk/internal/foreign/abi/SharedUtils innerClassName EmptyVaList flags 9 +innerclass innerClass java/lang/foreign/ValueLayout$OfLong outerClass java/lang/foreign/ValueLayout innerClassName OfLong flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfDouble outerClass java/lang/foreign/ValueLayout innerClassName OfDouble flags 19 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +-method name skip descriptor ([Ljdk/incubator/foreign/MemoryLayout;)V +-method name scope descriptor ()Ljdk/incubator/foreign/ResourceScope; +-method name address descriptor ()Ljdk/incubator/foreign/MemoryAddress; +-method name empty descriptor ()Ljdk/incubator/foreign/VaList; +-method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfInt;)I +-method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfLong;)J +-method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfDouble;)D +-method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfAddress;)Ljdk/incubator/foreign/MemoryAddress; +-method name nextVarg descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/SegmentAllocator;)Ljdk/incubator/foreign/MemorySegment; +-method name ofAddress descriptor (Ljdk/incubator/foreign/MemoryAddress;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/VaList; +-method name copy descriptor ()Ljdk/incubator/foreign/VaList; +method name empty descriptor ()Ljava/lang/foreign/VaList; flags 9 +method name nextVarg descriptor (Ljava/lang/foreign/ValueLayout$OfInt;)I flags 1 +method name nextVarg descriptor (Ljava/lang/foreign/ValueLayout$OfLong;)J flags 1 +method name nextVarg descriptor (Ljava/lang/foreign/ValueLayout$OfDouble;)D flags 1 +method name nextVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;)Ljava/lang/foreign/MemoryAddress; flags 1 +method name nextVarg descriptor (Ljava/lang/foreign/GroupLayout;Ljava/lang/foreign/SegmentAllocator;)Ljava/lang/foreign/MemorySegment; flags 1 +method name skip descriptor ([Ljava/lang/foreign/MemoryLayout;)V flags 81 +method name ofAddress descriptor (Ljava/lang/foreign/MemoryAddress;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/VaList; flags 9 +method name session descriptor ()Ljava/lang/foreign/MemorySession; flags 1 +method name copy descriptor ()Ljava/lang/foreign/VaList; flags 1 +method name address descriptor ()Ljava/lang/foreign/MemoryAddress; flags 1 + +class name jdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder +header extends java/lang/Object implements java/lang/foreign/VaList$Builder nestHost jdk/internal/foreign/abi/x64/sysv/SysVVaList flags 21 +innerclass innerClass jdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder outerClass jdk/internal/foreign/abi/x64/sysv/SysVVaList innerClassName Builder flags 9 +innerclass innerClass java/lang/foreign/MemoryLayout$PathElement outerClass java/lang/foreign/MemoryLayout innerClassName PathElement flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfAddress outerClass java/lang/foreign/ValueLayout innerClassName OfAddress flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfDouble outerClass java/lang/foreign/ValueLayout innerClassName OfDouble flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfLong outerClass java/lang/foreign/ValueLayout innerClassName OfLong flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfInt outerClass java/lang/foreign/ValueLayout innerClassName OfInt flags 19 +innerclass innerClass java/lang/foreign/VaList$Builder outerClass java/lang/foreign/VaList innerClassName Builder flags 609 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +-method name descriptor (Ljdk/incubator/foreign/ResourceScope;)V +-method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfInt;I)Ljdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder; +-method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfLong;J)Ljdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder; +-method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfDouble;D)Ljdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder; +-method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfAddress;Ljdk/incubator/foreign/Addressable;)Ljdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder; +-method name addVarg descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/MemorySegment;)Ljdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder; +-method name build descriptor ()Ljdk/incubator/foreign/VaList; +-method name addVarg descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/MemorySegment;)Ljdk/incubator/foreign/VaList$Builder; +-method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfAddress;Ljdk/incubator/foreign/Addressable;)Ljdk/incubator/foreign/VaList$Builder; +-method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfDouble;D)Ljdk/incubator/foreign/VaList$Builder; +-method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfLong;J)Ljdk/incubator/foreign/VaList$Builder; +-method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfInt;I)Ljdk/incubator/foreign/VaList$Builder; +method name descriptor (Ljava/lang/foreign/MemorySession;)V flags 1 +method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfInt;I)Ljdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder; flags 1 +method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfLong;J)Ljdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder; flags 1 +method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfDouble;D)Ljdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder; flags 1 +method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;Ljava/lang/foreign/Addressable;)Ljdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder; flags 1 +method name addVarg descriptor (Ljava/lang/foreign/GroupLayout;Ljava/lang/foreign/MemorySegment;)Ljdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder; flags 1 +method name build descriptor ()Ljava/lang/foreign/VaList; flags 1 +method name addVarg descriptor (Ljava/lang/foreign/GroupLayout;Ljava/lang/foreign/MemorySegment;)Ljava/lang/foreign/VaList$Builder; flags 1041 +method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;Ljava/lang/foreign/Addressable;)Ljava/lang/foreign/VaList$Builder; flags 1041 +method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfDouble;D)Ljava/lang/foreign/VaList$Builder; flags 1041 +method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfLong;J)Ljava/lang/foreign/VaList$Builder; flags 1041 +method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfInt;I)Ljava/lang/foreign/VaList$Builder; flags 1041 + +class name jdk/internal/foreign/abi/x64/sysv/SysVx64Linker +header extends jdk/internal/foreign/abi/AbstractLinker flags 31 +innerclass innerClass jdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder outerClass jdk/internal/foreign/abi/x64/sysv/SysVVaList innerClassName Builder flags 9 +innerclass innerClass java/lang/foreign/VaList$Builder outerClass java/lang/foreign/VaList innerClassName Builder flags 609 +-field name MAX_INTEGER_ARGUMENT_REGISTERS descriptor I +-field name MAX_INTEGER_RETURN_REGISTERS descriptor I +-field name MAX_VECTOR_ARGUMENT_REGISTERS descriptor I +-field name MAX_VECTOR_RETURN_REGISTERS descriptor I +-field name MAX_X87_RETURN_REGISTERS descriptor I +-method name newVaList descriptor (Ljava/util/function/Consumer;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/VaList; +-method name downcallHandle descriptor (Ljdk/incubator/foreign/FunctionDescriptor;)Ljava/lang/invoke/MethodHandle; +-method name upcallStub descriptor (Ljava/lang/invoke/MethodHandle;Ljdk/incubator/foreign/FunctionDescriptor;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/NativeSymbol; +-method name newVaListOfAddress descriptor (Ljdk/incubator/foreign/MemoryAddress;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/VaList; +-method name emptyVaList descriptor ()Ljdk/incubator/foreign/VaList; +method name arrangeDowncall descriptor (Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;)Ljava/lang/invoke/MethodHandle; flags 4 +method name arrangeUpcall descriptor (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/MemorySegment; flags 4 +method name newVaList descriptor (Ljava/util/function/Consumer;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/VaList; flags 9 signature (Ljava/util/function/Consumer;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/VaList; +method name newVaListOfAddress descriptor (Ljava/lang/foreign/MemoryAddress;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/VaList; flags 9 +method name emptyVaList descriptor ()Ljava/lang/foreign/VaList; flags 9 + +class name jdk/internal/foreign/abi/x64/windows/WinVaList +header extends java/lang/Object implements java/lang/foreign/VaList,jdk/internal/foreign/Scoped nestMembers jdk/internal/foreign/abi/x64/windows/WinVaList$Builder flags 21 +innerclass innerClass java/lang/foreign/MemoryLayout$PathElement outerClass java/lang/foreign/MemoryLayout innerClassName PathElement flags 609 +innerclass innerClass jdk/internal/foreign/abi/x64/windows/WinVaList$Builder outerClass jdk/internal/foreign/abi/x64/windows/WinVaList innerClassName Builder flags 9 +innerclass innerClass java/lang/foreign/ValueLayout$OfAddress outerClass java/lang/foreign/ValueLayout innerClassName OfAddress flags 19 +innerclass innerClass jdk/internal/foreign/abi/SharedUtils$EmptyVaList outerClass jdk/internal/foreign/abi/SharedUtils innerClassName EmptyVaList flags 9 +innerclass innerClass java/lang/foreign/ValueLayout$OfInt outerClass java/lang/foreign/ValueLayout innerClassName OfInt flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfLong outerClass java/lang/foreign/ValueLayout innerClassName OfLong flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfDouble outerClass java/lang/foreign/ValueLayout innerClassName OfDouble flags 19 +-field name CARRIER descriptor Ljava/lang/Class; +-method name skip descriptor ([Ljdk/incubator/foreign/MemoryLayout;)V +-method name scope descriptor ()Ljdk/incubator/foreign/ResourceScope; +-method name address descriptor ()Ljdk/incubator/foreign/MemoryAddress; +-method name empty descriptor ()Ljdk/incubator/foreign/VaList; +-method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfInt;)I +-method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfLong;)J +-method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfDouble;)D +-method name nextVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfAddress;)Ljdk/incubator/foreign/MemoryAddress; +-method name nextVarg descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/SegmentAllocator;)Ljdk/incubator/foreign/MemorySegment; +-method name copy descriptor ()Ljdk/incubator/foreign/VaList; +method name empty descriptor ()Ljava/lang/foreign/VaList; flags 19 +method name nextVarg descriptor (Ljava/lang/foreign/ValueLayout$OfInt;)I flags 1 +method name nextVarg descriptor (Ljava/lang/foreign/ValueLayout$OfLong;)J flags 1 +method name nextVarg descriptor (Ljava/lang/foreign/ValueLayout$OfDouble;)D flags 1 +method name nextVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;)Ljava/lang/foreign/MemoryAddress; flags 1 +method name nextVarg descriptor (Ljava/lang/foreign/GroupLayout;Ljava/lang/foreign/SegmentAllocator;)Ljava/lang/foreign/MemorySegment; flags 1 +method name skip descriptor ([Ljava/lang/foreign/MemoryLayout;)V flags 81 +method name session descriptor ()Ljava/lang/foreign/MemorySession; flags 1 +method name copy descriptor ()Ljava/lang/foreign/VaList; flags 1 +method name address descriptor ()Ljava/lang/foreign/MemoryAddress; flags 1 + +class name jdk/internal/foreign/abi/x64/windows/WinVaList$Builder +header extends java/lang/Object implements java/lang/foreign/VaList$Builder nestHost jdk/internal/foreign/abi/x64/windows/WinVaList flags 21 +innerclass innerClass jdk/internal/foreign/abi/x64/windows/WinVaList$Builder outerClass jdk/internal/foreign/abi/x64/windows/WinVaList innerClassName Builder flags 9 +innerclass innerClass java/lang/foreign/ValueLayout$OfAddress outerClass java/lang/foreign/ValueLayout innerClassName OfAddress flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfDouble outerClass java/lang/foreign/ValueLayout innerClassName OfDouble flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfLong outerClass java/lang/foreign/ValueLayout innerClassName OfLong flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfInt outerClass java/lang/foreign/ValueLayout innerClassName OfInt flags 19 +innerclass innerClass java/lang/foreign/VaList$Builder outerClass java/lang/foreign/VaList innerClassName Builder flags 609 +-method name descriptor (Ljdk/incubator/foreign/ResourceScope;)V +-method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfInt;I)Ljdk/internal/foreign/abi/x64/windows/WinVaList$Builder; +-method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfLong;J)Ljdk/internal/foreign/abi/x64/windows/WinVaList$Builder; +-method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfDouble;D)Ljdk/internal/foreign/abi/x64/windows/WinVaList$Builder; +-method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfAddress;Ljdk/incubator/foreign/Addressable;)Ljdk/internal/foreign/abi/x64/windows/WinVaList$Builder; +-method name addVarg descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/MemorySegment;)Ljdk/internal/foreign/abi/x64/windows/WinVaList$Builder; +-method name build descriptor ()Ljdk/incubator/foreign/VaList; +-method name addVarg descriptor (Ljdk/incubator/foreign/GroupLayout;Ljdk/incubator/foreign/MemorySegment;)Ljdk/incubator/foreign/VaList$Builder; +-method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfAddress;Ljdk/incubator/foreign/Addressable;)Ljdk/incubator/foreign/VaList$Builder; +-method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfDouble;D)Ljdk/incubator/foreign/VaList$Builder; +-method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfLong;J)Ljdk/incubator/foreign/VaList$Builder; +-method name addVarg descriptor (Ljdk/incubator/foreign/ValueLayout$OfInt;I)Ljdk/incubator/foreign/VaList$Builder; +method name descriptor (Ljava/lang/foreign/MemorySession;)V flags 1 +method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfInt;I)Ljdk/internal/foreign/abi/x64/windows/WinVaList$Builder; flags 1 +method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfLong;J)Ljdk/internal/foreign/abi/x64/windows/WinVaList$Builder; flags 1 +method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfDouble;D)Ljdk/internal/foreign/abi/x64/windows/WinVaList$Builder; flags 1 +method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;Ljava/lang/foreign/Addressable;)Ljdk/internal/foreign/abi/x64/windows/WinVaList$Builder; flags 1 +method name addVarg descriptor (Ljava/lang/foreign/GroupLayout;Ljava/lang/foreign/MemorySegment;)Ljdk/internal/foreign/abi/x64/windows/WinVaList$Builder; flags 1 +method name build descriptor ()Ljava/lang/foreign/VaList; flags 1 +method name addVarg descriptor (Ljava/lang/foreign/GroupLayout;Ljava/lang/foreign/MemorySegment;)Ljava/lang/foreign/VaList$Builder; flags 1041 +method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;Ljava/lang/foreign/Addressable;)Ljava/lang/foreign/VaList$Builder; flags 1041 +method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfDouble;D)Ljava/lang/foreign/VaList$Builder; flags 1041 +method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfLong;J)Ljava/lang/foreign/VaList$Builder; flags 1041 +method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfInt;I)Ljava/lang/foreign/VaList$Builder; flags 1041 + +class name jdk/internal/foreign/abi/x64/windows/Windowsx64Linker +header extends jdk/internal/foreign/abi/AbstractLinker flags 31 +innerclass innerClass jdk/internal/foreign/abi/x64/windows/WinVaList$Builder outerClass jdk/internal/foreign/abi/x64/windows/WinVaList innerClassName Builder flags 9 +innerclass innerClass java/lang/foreign/VaList$Builder outerClass java/lang/foreign/VaList innerClassName Builder flags 609 +-field name MAX_INTEGER_ARGUMENT_REGISTERS descriptor I +-field name MAX_INTEGER_RETURN_REGISTERS descriptor I +-field name MAX_VECTOR_ARGUMENT_REGISTERS descriptor I +-field name MAX_VECTOR_RETURN_REGISTERS descriptor I +-field name MAX_REGISTER_ARGUMENTS descriptor I +-field name MAX_REGISTER_RETURNS descriptor I +-method name newVaList descriptor (Ljava/util/function/Consumer;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/VaList; +-method name downcallHandle descriptor (Ljdk/incubator/foreign/FunctionDescriptor;)Ljava/lang/invoke/MethodHandle; +-method name upcallStub descriptor (Ljava/lang/invoke/MethodHandle;Ljdk/incubator/foreign/FunctionDescriptor;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/NativeSymbol; +-method name newVaListOfAddress descriptor (Ljdk/incubator/foreign/MemoryAddress;Ljdk/incubator/foreign/ResourceScope;)Ljdk/incubator/foreign/VaList; +-method name emptyVaList descriptor ()Ljdk/incubator/foreign/VaList; +method name arrangeDowncall descriptor (Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;)Ljava/lang/invoke/MethodHandle; flags 4 +method name arrangeUpcall descriptor (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/MemorySegment; flags 4 +method name newVaList descriptor (Ljava/util/function/Consumer;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/VaList; flags 9 signature (Ljava/util/function/Consumer;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/VaList; +method name newVaListOfAddress descriptor (Ljava/lang/foreign/MemoryAddress;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/VaList; flags 9 +method name emptyVaList descriptor ()Ljava/lang/foreign/VaList; flags 9 + diff --git a/src/jdk.compiler/share/data/symbols/jdk.incubator.foreign-K.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.incubator.foreign-K.sym.txt new file mode 100644 index 0000000000000..fb8268293daff --- /dev/null +++ b/src/jdk.compiler/share/data/symbols/jdk.incubator.foreign-K.sym.txt @@ -0,0 +1,542 @@ +# +# Copyright (c) 2023, 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 jdk/internal/foreign/AbstractMemorySegmentImpl +header extends java/lang/Object implements java/lang/foreign/MemorySegment,java/lang/foreign/SegmentAllocator,java/util/function/BiFunction sealed true permittedSubclasses jdk/internal/foreign/HeapMemorySegmentImpl,jdk/internal/foreign/NativeMemorySegmentImpl flags 421 signature Ljava/lang/Object;Ljava/lang/foreign/MemorySegment;Ljava/lang/foreign/SegmentAllocator;Ljava/util/function/BiFunction;Ljava/lang/RuntimeException;>; +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfByte outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfByte flags 19 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfShort outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfShort flags 19 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfChar outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfChar flags 19 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfInt outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfInt flags 19 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfFloat outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfFloat flags 19 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfLong outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfLong flags 19 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfDouble outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfDouble flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfByte outerClass java/lang/foreign/ValueLayout innerClassName OfByte flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfShort outerClass java/lang/foreign/ValueLayout innerClassName OfShort flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfChar outerClass java/lang/foreign/ValueLayout innerClassName OfChar flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfInt outerClass java/lang/foreign/ValueLayout innerClassName OfInt flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfFloat outerClass java/lang/foreign/ValueLayout innerClassName OfFloat flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfLong outerClass java/lang/foreign/ValueLayout innerClassName OfLong flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfDouble outerClass java/lang/foreign/ValueLayout innerClassName OfDouble flags 609 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +-method name id descriptor ()I +-method name mismatch descriptor (Ljava/lang/foreign/MemorySegment;)J +-method name address descriptor ()Ljava/lang/foreign/MemoryAddress; +-method name session descriptor ()Ljava/lang/foreign/MemorySession; +method name vectorizedMismatchLargeForBytes descriptor (Ljdk/internal/foreign/MemorySessionImpl;Ljdk/internal/foreign/MemorySessionImpl;Ljava/lang/Object;JLjava/lang/Object;JJ)J flags 9 +method name scope descriptor ()Ljava/lang/foreign/SegmentScope; flags 1 +method name sessionImpl descriptor ()Ljdk/internal/foreign/MemorySessionImpl; flags 11 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name copy descriptor (Ljava/lang/foreign/MemorySegment;Ljava/lang/foreign/ValueLayout;JLjava/lang/foreign/MemorySegment;Ljava/lang/foreign/ValueLayout;JJ)V flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name copy descriptor (Ljava/lang/foreign/MemorySegment;Ljava/lang/foreign/ValueLayout;JLjava/lang/Object;II)V flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name copy descriptor (Ljava/lang/Object;ILjava/lang/foreign/MemorySegment;Ljava/lang/foreign/ValueLayout;JI)V flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name mismatch descriptor (Ljava/lang/foreign/MemorySegment;JJLjava/lang/foreign/MemorySegment;JJ)J flags 9 + +class name jdk/internal/foreign/ConfinedSession +header extends jdk/internal/foreign/MemorySessionImpl flags 30 +innerclass innerClass jdk/internal/foreign/MemorySessionImpl$ResourceList outerClass jdk/internal/foreign/MemorySessionImpl innerClassName ResourceList flags 409 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +method name descriptor (Ljava/lang/Thread;)V flags 1 +method name acquire0 descriptor ()V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name release0 descriptor ()V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; + +class name jdk/internal/foreign/FunctionDescriptorImpl +header extends java/lang/Object implements java/lang/foreign/FunctionDescriptor flags 31 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +method name returnLayout descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional; +method name argumentLayouts descriptor ()Ljava/util/List; flags 1 signature ()Ljava/util/List; +method name appendArgumentLayouts descriptor ([Ljava/lang/foreign/MemoryLayout;)Ljdk/internal/foreign/FunctionDescriptorImpl; flags 81 +method name insertArgumentLayouts descriptor (I[Ljava/lang/foreign/MemoryLayout;)Ljdk/internal/foreign/FunctionDescriptorImpl; flags 81 +method name changeReturnLayout descriptor (Ljava/lang/foreign/MemoryLayout;)Ljdk/internal/foreign/FunctionDescriptorImpl; flags 1 +method name dropReturnLayout descriptor ()Ljdk/internal/foreign/FunctionDescriptorImpl; flags 1 +method name toMethodType descriptor ()Ljava/lang/invoke/MethodType; flags 1 +method name toString descriptor ()Ljava/lang/String; flags 1 +method name equals descriptor (Ljava/lang/Object;)Z flags 1 +method name hashCode descriptor ()I flags 1 +method name of descriptor (Ljava/lang/foreign/MemoryLayout;Ljava/util/List;)Ljava/lang/foreign/FunctionDescriptor; flags 9 signature (Ljava/lang/foreign/MemoryLayout;Ljava/util/List;)Ljava/lang/foreign/FunctionDescriptor; +method name ofVoid descriptor (Ljava/util/List;)Ljava/lang/foreign/FunctionDescriptor; flags 9 signature (Ljava/util/List;)Ljava/lang/foreign/FunctionDescriptor; +method name dropReturnLayout descriptor ()Ljava/lang/foreign/FunctionDescriptor; flags 1041 +method name changeReturnLayout descriptor (Ljava/lang/foreign/MemoryLayout;)Ljava/lang/foreign/FunctionDescriptor; flags 1041 +method name insertArgumentLayouts descriptor (I[Ljava/lang/foreign/MemoryLayout;)Ljava/lang/foreign/FunctionDescriptor; flags 1041 +method name appendArgumentLayouts descriptor ([Ljava/lang/foreign/MemoryLayout;)Ljava/lang/foreign/FunctionDescriptor; flags 1041 + +class name jdk/internal/foreign/GlobalSession +header extends jdk/internal/foreign/MemorySessionImpl flags 30 +innerclass innerClass jdk/internal/foreign/MemorySessionImpl$ResourceList outerClass jdk/internal/foreign/MemorySessionImpl innerClassName ResourceList flags 409 +innerclass innerClass jdk/internal/foreign/MemorySessionImpl$ResourceList$ResourceCleanup outerClass jdk/internal/foreign/MemorySessionImpl$ResourceList innerClassName ResourceCleanup flags 409 +method name descriptor (Ljava/lang/Object;)V flags 1 +method name release0 descriptor ()V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name isCloseable descriptor ()Z flags 1 +method name acquire0 descriptor ()V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name justClose descriptor ()V flags 1 + +class name jdk/internal/foreign/HeapMemorySegmentImpl +header extends jdk/internal/foreign/AbstractMemorySegmentImpl nestMembers jdk/internal/foreign/HeapMemorySegmentImpl$OfDouble,jdk/internal/foreign/HeapMemorySegmentImpl$OfFloat,jdk/internal/foreign/HeapMemorySegmentImpl$OfLong,jdk/internal/foreign/HeapMemorySegmentImpl$OfInt,jdk/internal/foreign/HeapMemorySegmentImpl$OfShort,jdk/internal/foreign/HeapMemorySegmentImpl$OfChar,jdk/internal/foreign/HeapMemorySegmentImpl$OfByte sealed true permittedSubclasses jdk/internal/foreign/HeapMemorySegmentImpl$OfByte,jdk/internal/foreign/HeapMemorySegmentImpl$OfChar,jdk/internal/foreign/HeapMemorySegmentImpl$OfShort,jdk/internal/foreign/HeapMemorySegmentImpl$OfInt,jdk/internal/foreign/HeapMemorySegmentImpl$OfLong,jdk/internal/foreign/HeapMemorySegmentImpl$OfFloat,jdk/internal/foreign/HeapMemorySegmentImpl$OfDouble flags 421 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfDouble outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfDouble flags 19 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfFloat outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfFloat flags 19 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfLong outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfLong flags 19 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfInt outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfInt flags 19 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfShort outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfShort flags 19 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfChar outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfChar flags 19 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfByte outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfByte flags 19 +method name array descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional; +method name unsafeGetOffset descriptor ()J flags 1 + +class name jdk/internal/foreign/HeapMemorySegmentImpl$OfByte +header extends jdk/internal/foreign/HeapMemorySegmentImpl nestHost jdk/internal/foreign/HeapMemorySegmentImpl flags 31 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfByte outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfByte flags 19 +method name unsafeGetBase descriptor ()[B flags 1 +method name fromArray descriptor ([B)Ljava/lang/foreign/MemorySegment; flags 9 +method name maxAlignMask descriptor ()J flags 1 +method name address descriptor ()J flags 1 +method name unsafeGetBase descriptor ()Ljava/lang/Object; flags 1041 + +class name jdk/internal/foreign/HeapMemorySegmentImpl$OfChar +header extends jdk/internal/foreign/HeapMemorySegmentImpl nestHost jdk/internal/foreign/HeapMemorySegmentImpl flags 31 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfChar outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfChar flags 19 +method name unsafeGetBase descriptor ()[C flags 1 +method name fromArray descriptor ([C)Ljava/lang/foreign/MemorySegment; flags 9 +method name maxAlignMask descriptor ()J flags 1 +method name address descriptor ()J flags 1 +method name unsafeGetBase descriptor ()Ljava/lang/Object; flags 1041 + +class name jdk/internal/foreign/HeapMemorySegmentImpl$OfDouble +header extends jdk/internal/foreign/HeapMemorySegmentImpl nestHost jdk/internal/foreign/HeapMemorySegmentImpl flags 31 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfDouble outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfDouble flags 19 +method name unsafeGetBase descriptor ()[D flags 1 +method name fromArray descriptor ([D)Ljava/lang/foreign/MemorySegment; flags 9 +method name maxAlignMask descriptor ()J flags 1 +method name address descriptor ()J flags 1 +method name unsafeGetBase descriptor ()Ljava/lang/Object; flags 1041 + +class name jdk/internal/foreign/HeapMemorySegmentImpl$OfFloat +header extends jdk/internal/foreign/HeapMemorySegmentImpl nestHost jdk/internal/foreign/HeapMemorySegmentImpl flags 31 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfFloat outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfFloat flags 19 +method name unsafeGetBase descriptor ()[F flags 1 +method name fromArray descriptor ([F)Ljava/lang/foreign/MemorySegment; flags 9 +method name maxAlignMask descriptor ()J flags 1 +method name address descriptor ()J flags 1 +method name unsafeGetBase descriptor ()Ljava/lang/Object; flags 1041 + +class name jdk/internal/foreign/HeapMemorySegmentImpl$OfInt +header extends jdk/internal/foreign/HeapMemorySegmentImpl nestHost jdk/internal/foreign/HeapMemorySegmentImpl flags 31 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfInt outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfInt flags 19 +method name unsafeGetBase descriptor ()[I flags 1 +method name fromArray descriptor ([I)Ljava/lang/foreign/MemorySegment; flags 9 +method name maxAlignMask descriptor ()J flags 1 +method name address descriptor ()J flags 1 +method name unsafeGetBase descriptor ()Ljava/lang/Object; flags 1041 + +class name jdk/internal/foreign/HeapMemorySegmentImpl$OfLong +header extends jdk/internal/foreign/HeapMemorySegmentImpl nestHost jdk/internal/foreign/HeapMemorySegmentImpl flags 31 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfLong outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfLong flags 19 +method name unsafeGetBase descriptor ()[J flags 1 +method name fromArray descriptor ([J)Ljava/lang/foreign/MemorySegment; flags 9 +method name maxAlignMask descriptor ()J flags 1 +method name address descriptor ()J flags 1 +method name unsafeGetBase descriptor ()Ljava/lang/Object; flags 1041 + +class name jdk/internal/foreign/HeapMemorySegmentImpl$OfShort +header extends jdk/internal/foreign/HeapMemorySegmentImpl nestHost jdk/internal/foreign/HeapMemorySegmentImpl flags 31 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfShort outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfShort flags 19 +method name unsafeGetBase descriptor ()[S flags 1 +method name fromArray descriptor ([S)Ljava/lang/foreign/MemorySegment; flags 9 +method name maxAlignMask descriptor ()J flags 1 +method name address descriptor ()J flags 1 +method name unsafeGetBase descriptor ()Ljava/lang/Object; flags 1041 + +class name jdk/internal/foreign/ImplicitSession +header extends jdk/internal/foreign/SharedSession flags 30 +innerclass innerClass jdk/internal/foreign/MemorySessionImpl$ResourceList outerClass jdk/internal/foreign/MemorySessionImpl innerClassName ResourceList flags 409 +innerclass innerClass java/lang/ref/Cleaner$Cleanable outerClass java/lang/ref/Cleaner innerClassName Cleanable flags 609 +method name descriptor (Ljava/lang/ref/Cleaner;)V flags 1 +method name release0 descriptor ()V flags 1 +method name acquire0 descriptor ()V flags 1 +method name isCloseable descriptor ()Z flags 1 +method name justClose descriptor ()V flags 1 + +class name jdk/internal/foreign/MappedMemorySegmentImpl +header extends jdk/internal/foreign/NativeMemorySegmentImpl nestMembers jdk/internal/foreign/MappedMemorySegmentImpl$EmptyMappedMemorySegmentImpl sealed true permittedSubclasses jdk/internal/foreign/MappedMemorySegmentImpl$EmptyMappedMemorySegmentImpl flags 21 +innerclass innerClass jdk/internal/foreign/MappedMemorySegmentImpl$EmptyMappedMemorySegmentImpl outerClass jdk/internal/foreign/MappedMemorySegmentImpl innerClassName EmptyMappedMemorySegmentImpl flags 19 +method name descriptor (JLjdk/internal/access/foreign/UnmapperProxy;JZLjava/lang/foreign/SegmentScope;)V flags 1 +method name asSlice descriptor (JJ)Ljdk/internal/foreign/MappedMemorySegmentImpl; flags 1 +method name isMapped descriptor ()Z flags 1 +method name segment descriptor ()Ljava/lang/foreign/MemorySegment; flags 1 +method name load descriptor ()V flags 1 +method name unload descriptor ()V flags 1 +method name isLoaded descriptor ()Z flags 1 +method name force descriptor ()V flags 1 +method name asSlice descriptor (JJ)Ljdk/internal/foreign/AbstractMemorySegmentImpl; flags 1041 +method name asSlice descriptor (JJ)Ljava/lang/foreign/MemorySegment; flags 1041 + +class name jdk/internal/foreign/MappedMemorySegmentImpl$EmptyMappedMemorySegmentImpl +header extends jdk/internal/foreign/MappedMemorySegmentImpl nestHost jdk/internal/foreign/MappedMemorySegmentImpl flags 31 +innerclass innerClass jdk/internal/foreign/MappedMemorySegmentImpl$EmptyMappedMemorySegmentImpl outerClass jdk/internal/foreign/MappedMemorySegmentImpl innerClassName EmptyMappedMemorySegmentImpl flags 19 +method name descriptor (ZLjdk/internal/foreign/MemorySessionImpl;)V flags 1 +method name load descriptor ()V flags 1 +method name unload descriptor ()V flags 1 +method name isLoaded descriptor ()Z flags 1 +method name force descriptor ()V flags 1 +method name asSlice descriptor (JJ)Ljdk/internal/foreign/AbstractMemorySegmentImpl; flags 1041 +method name asSlice descriptor (JJ)Ljava/lang/foreign/MemorySegment; flags 1041 + +-class name jdk/internal/foreign/MemoryAddressImpl + +class name jdk/internal/foreign/MemorySessionImpl +header extends java/lang/Object implements java/lang/foreign/SegmentScope,java/lang/foreign/SegmentAllocator nestMembers jdk/internal/foreign/MemorySessionImpl$ResourceList,jdk/internal/foreign/MemorySessionImpl$ResourceList$ResourceCleanup sealed true permittedSubclasses jdk/internal/foreign/ConfinedSession,jdk/internal/foreign/GlobalSession,jdk/internal/foreign/SharedSession flags 421 +innerclass innerClass jdk/internal/foreign/MemorySessionImpl$ResourceList outerClass jdk/internal/foreign/MemorySessionImpl innerClassName ResourceList flags 409 +innerclass innerClass jdk/internal/foreign/MemorySessionImpl$ResourceList$ResourceCleanup outerClass jdk/internal/foreign/MemorySessionImpl$ResourceList innerClassName ResourceCleanup flags 409 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +-method name descriptor (Ljava/lang/Thread;Ljdk/internal/foreign/MemorySessionImpl$ResourceList;Ljava/lang/ref/Cleaner;)V +-method name createConfined descriptor (Ljava/lang/Thread;Ljava/lang/ref/Cleaner;)Ljava/lang/foreign/MemorySession; +-method name createShared descriptor (Ljava/lang/ref/Cleaner;)Ljava/lang/foreign/MemorySession; +-method name createImplicit descriptor ()Ljdk/internal/foreign/MemorySessionImpl; +-method name equals descriptor (Ljava/lang/Object;)Z +-method name hashCode descriptor ()I +-method name asNonCloseable descriptor ()Ljava/lang/foreign/MemorySession; +-method name toSessionImpl descriptor (Ljava/lang/foreign/MemorySession;)Ljdk/internal/foreign/MemorySessionImpl; +method name asArena descriptor ()Ljava/lang/foreign/Arena; flags 1 +method name descriptor (Ljava/lang/Thread;Ljdk/internal/foreign/MemorySessionImpl$ResourceList;)V flags 4 +method name createConfined descriptor (Ljava/lang/Thread;)Ljdk/internal/foreign/MemorySessionImpl; flags 9 +method name createShared descriptor ()Ljdk/internal/foreign/MemorySessionImpl; flags 9 +method name createImplicit descriptor (Ljava/lang/ref/Cleaner;)Ljdk/internal/foreign/MemorySessionImpl; flags 9 +method name sameOwnerThread descriptor (Ljava/lang/foreign/SegmentScope;Ljava/lang/foreign/SegmentScope;)Z flags 9 +method name isAccessibleBy descriptor (Ljava/lang/Thread;)Z flags 11 + +-class name jdk/internal/foreign/MemorySessionImpl$NonCloseableView + +class name jdk/internal/foreign/NativeMemorySegmentImpl +header extends jdk/internal/foreign/AbstractMemorySegmentImpl sealed true permittedSubclasses jdk/internal/foreign/MappedMemorySegmentImpl flags 21 +innerclass innerClass jdk/internal/foreign/MemorySessionImpl$ResourceList outerClass jdk/internal/foreign/MemorySessionImpl innerClassName ResourceList flags 409 +innerclass innerClass jdk/internal/foreign/MemorySessionImpl$ResourceList$ResourceCleanup outerClass jdk/internal/foreign/MemorySessionImpl$ResourceList innerClassName ResourceCleanup flags 409 +method name address descriptor ()J flags 1 +method name array descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional; +method name isNative descriptor ()Z flags 1 +method name unsafeGetOffset descriptor ()J flags 1 +method name unsafeGetBase descriptor ()Ljava/lang/Object; flags 1 +method name maxAlignMask descriptor ()J flags 1 +method name makeNativeSegment descriptor (JJLjava/lang/foreign/SegmentScope;)Ljava/lang/foreign/MemorySegment; flags 9 +method name makeNativeSegmentUnchecked descriptor (JJLjava/lang/foreign/SegmentScope;Ljava/lang/Runnable;)Ljava/lang/foreign/MemorySegment; flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name makeNativeSegmentUnchecked descriptor (JJLjava/lang/foreign/SegmentScope;)Ljava/lang/foreign/MemorySegment; flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name makeNativeSegmentUnchecked descriptor (JJ)Ljava/lang/foreign/MemorySegment; flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; + +-class name jdk/internal/foreign/Scoped + +class name jdk/internal/foreign/SharedSession +header extends jdk/internal/foreign/MemorySessionImpl sealed true permittedSubclasses jdk/internal/foreign/ImplicitSession flags 20 +innerclass innerClass jdk/internal/foreign/MemorySessionImpl$ResourceList outerClass jdk/internal/foreign/MemorySessionImpl innerClassName ResourceList flags 409 +method name acquire0 descriptor ()V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name release0 descriptor ()V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; + +class name jdk/internal/foreign/abi/AbstractLinker +header extends java/lang/Object implements java/lang/foreign/Linker sealed true permittedSubclasses jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64Linker,jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64Linker,jdk/internal/foreign/abi/x64/sysv/SysVx64Linker,jdk/internal/foreign/abi/x64/windows/Windowsx64Linker flags 421 +innerclass innerClass java/lang/foreign/Linker$Option outerClass java/lang/foreign/Linker innerClassName Option flags 609 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +-method name downcallHandle descriptor (Ljava/lang/foreign/FunctionDescriptor;)Ljava/lang/invoke/MethodHandle; +-method name arrangeDowncall descriptor (Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;)Ljava/lang/invoke/MethodHandle; +-method name upcallStub descriptor (Ljava/lang/invoke/MethodHandle;Ljava/lang/foreign/FunctionDescriptor;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/MemorySegment; +-method name arrangeUpcall descriptor (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/MemorySegment; +method name downcallHandle descriptor (Ljava/lang/foreign/FunctionDescriptor;[Ljava/lang/foreign/Linker$Option;)Ljava/lang/invoke/MethodHandle; flags 81 +method name arrangeDowncall descriptor (Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;Ljdk/internal/foreign/abi/LinkerOptions;)Ljava/lang/invoke/MethodHandle; flags 404 +method name upcallStub descriptor (Ljava/lang/invoke/MethodHandle;Ljava/lang/foreign/FunctionDescriptor;Ljava/lang/foreign/SegmentScope;)Ljava/lang/foreign/MemorySegment; flags 1 +method name arrangeUpcall descriptor (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;Ljava/lang/foreign/SegmentScope;)Ljava/lang/foreign/MemorySegment; flags 404 + +class name jdk/internal/foreign/abi/LinkerOptions +header extends java/lang/Object nestMembers jdk/internal/foreign/abi/LinkerOptions$CaptureCallStateImpl,jdk/internal/foreign/abi/LinkerOptions$FirstVariadicArg,jdk/internal/foreign/abi/LinkerOptions$LinkerOptionImpl flags 21 +innerclass innerClass java/lang/foreign/Linker$Option outerClass java/lang/foreign/Linker innerClassName Option flags 609 +innerclass innerClass jdk/internal/foreign/abi/LinkerOptions$LinkerOptionImpl outerClass jdk/internal/foreign/abi/LinkerOptions innerClassName LinkerOptionImpl flags 609 +innerclass innerClass jdk/internal/foreign/abi/LinkerOptions$FirstVariadicArg outerClass jdk/internal/foreign/abi/LinkerOptions innerClassName FirstVariadicArg flags 19 +innerclass innerClass jdk/internal/foreign/abi/LinkerOptions$CaptureCallStateImpl outerClass jdk/internal/foreign/abi/LinkerOptions innerClassName CaptureCallStateImpl flags 19 +method name forDowncall descriptor (Ljava/lang/foreign/FunctionDescriptor;[Ljava/lang/foreign/Linker$Option;)Ljdk/internal/foreign/abi/LinkerOptions; flags 89 +method name empty descriptor ()Ljdk/internal/foreign/abi/LinkerOptions; flags 9 +method name isVarargsIndex descriptor (I)Z flags 1 +method name hasCapturedCallState descriptor ()Z flags 1 +method name capturedCallState descriptor ()Ljava/util/stream/Stream; flags 1 signature ()Ljava/util/stream/Stream; +method name equals descriptor (Ljava/lang/Object;)Z flags 1 +method name hashCode descriptor ()I flags 1 + +class name jdk/internal/foreign/abi/LinkerOptions$CaptureCallStateImpl +header extends java/lang/Record implements jdk/internal/foreign/abi/LinkerOptions$LinkerOptionImpl,java/lang/foreign/Linker$Option$CaptureCallState nestHost jdk/internal/foreign/abi/LinkerOptions record true flags 31 +recordcomponent name saved descriptor Ljava/util/Set; signature Ljava/util/Set; +innerclass innerClass jdk/internal/foreign/abi/LinkerOptions$CaptureCallStateImpl outerClass jdk/internal/foreign/abi/LinkerOptions innerClassName CaptureCallStateImpl flags 19 +innerclass innerClass jdk/internal/foreign/abi/LinkerOptions$LinkerOptionImpl outerClass jdk/internal/foreign/abi/LinkerOptions innerClassName LinkerOptionImpl flags 609 +innerclass innerClass java/lang/foreign/Linker$Option outerClass java/lang/foreign/Linker innerClassName Option flags 609 +innerclass innerClass java/lang/foreign/Linker$Option$CaptureCallState outerClass java/lang/foreign/Linker$Option innerClassName CaptureCallState flags 609 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +method name descriptor (Ljava/util/Set;)V flags 1 signature (Ljava/util/Set;)V methodParameters 0:saved +method name validateForDowncall descriptor (Ljava/lang/foreign/FunctionDescriptor;)V flags 1 +method name layout descriptor ()Ljava/lang/foreign/StructLayout; flags 1 +method name toString descriptor ()Ljava/lang/String; flags 11 +method name hashCode descriptor ()I flags 11 +method name equals descriptor (Ljava/lang/Object;)Z flags 11 +method name saved descriptor ()Ljava/util/Set; flags 1 signature ()Ljava/util/Set; + +class name jdk/internal/foreign/abi/LinkerOptions$FirstVariadicArg +header extends java/lang/Record implements jdk/internal/foreign/abi/LinkerOptions$LinkerOptionImpl nestHost jdk/internal/foreign/abi/LinkerOptions record true flags 31 +recordcomponent name index descriptor I +innerclass innerClass jdk/internal/foreign/abi/LinkerOptions$FirstVariadicArg outerClass jdk/internal/foreign/abi/LinkerOptions innerClassName FirstVariadicArg flags 19 +innerclass innerClass jdk/internal/foreign/abi/LinkerOptions$LinkerOptionImpl outerClass jdk/internal/foreign/abi/LinkerOptions innerClassName LinkerOptionImpl flags 609 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +method name descriptor (I)V flags 1 methodParameters 0:index +method name validateForDowncall descriptor (Ljava/lang/foreign/FunctionDescriptor;)V flags 1 +method name toString descriptor ()Ljava/lang/String; flags 11 +method name hashCode descriptor ()I flags 11 +method name equals descriptor (Ljava/lang/Object;)Z flags 11 +method name index descriptor ()I flags 1 + +class name jdk/internal/foreign/abi/LinkerOptions$LinkerOptionImpl +header extends java/lang/Object implements java/lang/foreign/Linker$Option nestHost jdk/internal/foreign/abi/LinkerOptions sealed true permittedSubclasses jdk/internal/foreign/abi/LinkerOptions$FirstVariadicArg,jdk/internal/foreign/abi/LinkerOptions$CaptureCallStateImpl flags 601 +innerclass innerClass jdk/internal/foreign/abi/LinkerOptions$LinkerOptionImpl outerClass jdk/internal/foreign/abi/LinkerOptions innerClassName LinkerOptionImpl flags 609 +innerclass innerClass java/lang/foreign/Linker$Option outerClass java/lang/foreign/Linker innerClassName Option flags 609 +innerclass innerClass jdk/internal/foreign/abi/LinkerOptions$FirstVariadicArg outerClass jdk/internal/foreign/abi/LinkerOptions innerClassName FirstVariadicArg flags 19 +innerclass innerClass jdk/internal/foreign/abi/LinkerOptions$CaptureCallStateImpl outerClass jdk/internal/foreign/abi/LinkerOptions innerClassName CaptureCallStateImpl flags 19 +method name validateForDowncall descriptor (Ljava/lang/foreign/FunctionDescriptor;)V flags 1 + +class name jdk/internal/foreign/abi/SharedUtils +header extends java/lang/Object nestMembers jdk/internal/foreign/abi/SharedUtils$EmptyVaList flags 31 +innerclass innerClass java/lang/foreign/ValueLayout$OfByte outerClass java/lang/foreign/ValueLayout innerClassName OfByte flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfLong outerClass java/lang/foreign/ValueLayout innerClassName OfLong flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfFloat outerClass java/lang/foreign/ValueLayout innerClassName OfFloat flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfDouble outerClass java/lang/foreign/ValueLayout innerClassName OfDouble flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfInt outerClass java/lang/foreign/ValueLayout innerClassName OfInt flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfShort outerClass java/lang/foreign/ValueLayout innerClassName OfShort flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfChar outerClass java/lang/foreign/ValueLayout innerClassName OfChar flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfBoolean outerClass java/lang/foreign/ValueLayout innerClassName OfBoolean flags 609 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +innerclass innerClass jdk/internal/foreign/abi/SharedUtils$EmptyVaList outerClass jdk/internal/foreign/abi/SharedUtils innerClassName EmptyVaList flags 19 +innerclass innerClass java/lang/foreign/VaList$Builder outerClass java/lang/foreign/VaList innerClassName Builder flags 609 +-field name JAVA_SHORT_UNALIGNED descriptor Ljava/lang/foreign/ValueLayout$OfShort; +-field name JAVA_CHAR_UNALIGNED descriptor Ljava/lang/foreign/ValueLayout$OfChar; +-field name JAVA_INT_UNALIGNED descriptor Ljava/lang/foreign/ValueLayout$OfInt; +-field name JAVA_LONG_UNALIGNED descriptor Ljava/lang/foreign/ValueLayout$OfLong; +-field name JAVA_FLOAT_UNALIGNED descriptor Ljava/lang/foreign/ValueLayout$OfFloat; +-field name JAVA_DOUBLE_UNALIGNED descriptor Ljava/lang/foreign/ValueLayout$OfDouble; +-method name descriptor ()V +-method name align descriptor (Ljava/lang/foreign/MemoryLayout;ZJ)J +-method name alignment descriptor (Ljava/lang/foreign/MemoryLayout;Z)J +-method name adaptDowncallForIMR descriptor (Ljava/lang/invoke/MethodHandle;Ljava/lang/foreign/FunctionDescriptor;)Ljava/lang/invoke/MethodHandle; +-method name maybeInsertAllocator descriptor (Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle; +-method name checkSymbol descriptor (Ljava/lang/foreign/Addressable;)V +-method name checkAddress descriptor (Ljava/lang/foreign/MemoryAddress;)V +-method name newVaList descriptor (Ljava/util/function/Consumer;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/VaList; +-method name newVaListOfAddress descriptor (Ljava/lang/foreign/MemoryAddress;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/VaList; +-method name isVarargsIndex descriptor (Ljava/lang/foreign/FunctionDescriptor;I)Z +-method name inferMethodType descriptor (Ljava/lang/foreign/FunctionDescriptor;Z)Ljava/lang/invoke/MethodType; +method name adaptDowncallForIMR descriptor (Ljava/lang/invoke/MethodHandle;Ljava/lang/foreign/FunctionDescriptor;Ljdk/internal/foreign/abi/CallingSequence;)Ljava/lang/invoke/MethodHandle; flags 9 +method name unboxSegment descriptor (Ljava/lang/foreign/MemorySegment;)J flags 9 +method name maybeInsertAllocator descriptor (Ljava/lang/foreign/FunctionDescriptor;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle; flags 9 +method name checkSymbol descriptor (Ljava/lang/foreign/MemorySegment;)V flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name newVaList descriptor (Ljava/util/function/Consumer;Ljava/lang/foreign/SegmentScope;)Ljava/lang/foreign/VaList; flags 9 signature (Ljava/util/function/Consumer;Ljava/lang/foreign/SegmentScope;)Ljava/lang/foreign/VaList; +method name newVaListOfAddress descriptor (JLjava/lang/foreign/SegmentScope;)Ljava/lang/foreign/VaList; flags 9 + +class name jdk/internal/foreign/abi/SharedUtils$EmptyVaList +header extends java/lang/Object implements java/lang/foreign/VaList nestHost jdk/internal/foreign/abi/SharedUtils flags 31 +innerclass innerClass jdk/internal/foreign/abi/SharedUtils$EmptyVaList outerClass jdk/internal/foreign/abi/SharedUtils innerClassName EmptyVaList flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfInt outerClass java/lang/foreign/ValueLayout innerClassName OfInt flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfLong outerClass java/lang/foreign/ValueLayout innerClassName OfLong flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfDouble outerClass java/lang/foreign/ValueLayout innerClassName OfDouble flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfAddress outerClass java/lang/foreign/ValueLayout innerClassName OfAddress flags 609 +-method name descriptor (Ljava/lang/foreign/MemoryAddress;)V +-method name nextVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;)Ljava/lang/foreign/MemoryAddress; +-method name session descriptor ()Ljava/lang/foreign/MemorySession; +-method name address descriptor ()Ljava/lang/foreign/MemoryAddress; +method name descriptor (Ljava/lang/foreign/MemorySegment;)V flags 1 +method name nextVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;)Ljava/lang/foreign/MemorySegment; flags 1 +method name segment descriptor ()Ljava/lang/foreign/MemorySegment; flags 1 + +class name jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64Linker +-method name descriptor ()V +-method name arrangeDowncall descriptor (Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;)Ljava/lang/invoke/MethodHandle; +-method name arrangeUpcall descriptor (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/MemorySegment; +-method name newVaList descriptor (Ljava/util/function/Consumer;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/VaList; +-method name newVaListOfAddress descriptor (Ljava/lang/foreign/MemoryAddress;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/VaList; +method name arrangeDowncall descriptor (Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;Ljdk/internal/foreign/abi/LinkerOptions;)Ljava/lang/invoke/MethodHandle; flags 4 +method name arrangeUpcall descriptor (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;Ljava/lang/foreign/SegmentScope;)Ljava/lang/foreign/MemorySegment; flags 4 +method name newVaList descriptor (Ljava/util/function/Consumer;Ljava/lang/foreign/SegmentScope;)Ljava/lang/foreign/VaList; flags 9 signature (Ljava/util/function/Consumer;Ljava/lang/foreign/SegmentScope;)Ljava/lang/foreign/VaList; +method name newVaListOfAddress descriptor (JLjava/lang/foreign/SegmentScope;)Ljava/lang/foreign/VaList; flags 9 + +class name jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList +header extends java/lang/Object implements java/lang/foreign/VaList nestMembers jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder flags 21 +innerclass innerClass java/lang/foreign/MemoryLayout$PathElement outerClass java/lang/foreign/MemoryLayout innerClassName PathElement flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfAddress outerClass java/lang/foreign/ValueLayout innerClassName OfAddress flags 609 +innerclass innerClass jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder outerClass jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList innerClassName Builder flags 9 +innerclass innerClass java/lang/foreign/ValueLayout$OfInt outerClass java/lang/foreign/ValueLayout innerClassName OfInt flags 609 +innerclass innerClass jdk/internal/foreign/abi/SharedUtils$EmptyVaList outerClass jdk/internal/foreign/abi/SharedUtils innerClassName EmptyVaList flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfLong outerClass java/lang/foreign/ValueLayout innerClassName OfLong flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfDouble outerClass java/lang/foreign/ValueLayout innerClassName OfDouble flags 609 +-method name nextVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;)Ljava/lang/foreign/MemoryAddress; +-method name ofAddress descriptor (Ljava/lang/foreign/MemoryAddress;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/VaList; +-method name session descriptor ()Ljava/lang/foreign/MemorySession; +-method name address descriptor ()Ljava/lang/foreign/MemoryAddress; +method name nextVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;)Ljava/lang/foreign/MemorySegment; flags 1 +method name ofAddress descriptor (JLjava/lang/foreign/SegmentScope;)Ljava/lang/foreign/VaList; flags 9 +method name segment descriptor ()Ljava/lang/foreign/MemorySegment; flags 1 + +class name jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder +header extends java/lang/Object implements java/lang/foreign/VaList$Builder nestHost jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList flags 21 +innerclass innerClass jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder outerClass jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList innerClassName Builder flags 9 +innerclass innerClass java/lang/foreign/ValueLayout$OfAddress outerClass java/lang/foreign/ValueLayout innerClassName OfAddress flags 609 +innerclass innerClass java/lang/foreign/MemoryLayout$PathElement outerClass java/lang/foreign/MemoryLayout innerClassName PathElement flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfDouble outerClass java/lang/foreign/ValueLayout innerClassName OfDouble flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfLong outerClass java/lang/foreign/ValueLayout innerClassName OfLong flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfInt outerClass java/lang/foreign/ValueLayout innerClassName OfInt flags 609 +innerclass innerClass java/lang/foreign/VaList$Builder outerClass java/lang/foreign/VaList innerClassName Builder flags 609 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +-method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;Ljava/lang/foreign/Addressable;)Ljdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder; +-method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;Ljava/lang/foreign/Addressable;)Ljava/lang/foreign/VaList$Builder; +method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;Ljava/lang/foreign/MemorySegment;)Ljdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder; flags 1 +method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;Ljava/lang/foreign/MemorySegment;)Ljava/lang/foreign/VaList$Builder; flags 1041 + +class name jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64Linker +-method name descriptor ()V +-method name arrangeDowncall descriptor (Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;)Ljava/lang/invoke/MethodHandle; +-method name arrangeUpcall descriptor (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/MemorySegment; +-method name newVaList descriptor (Ljava/util/function/Consumer;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/VaList; +-method name newVaListOfAddress descriptor (Ljava/lang/foreign/MemoryAddress;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/VaList; +method name arrangeDowncall descriptor (Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;Ljdk/internal/foreign/abi/LinkerOptions;)Ljava/lang/invoke/MethodHandle; flags 4 +method name arrangeUpcall descriptor (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;Ljava/lang/foreign/SegmentScope;)Ljava/lang/foreign/MemorySegment; flags 4 +method name newVaList descriptor (Ljava/util/function/Consumer;Ljava/lang/foreign/SegmentScope;)Ljava/lang/foreign/VaList; flags 9 signature (Ljava/util/function/Consumer;Ljava/lang/foreign/SegmentScope;)Ljava/lang/foreign/VaList; +method name newVaListOfAddress descriptor (JLjava/lang/foreign/SegmentScope;)Ljava/lang/foreign/VaList; flags 9 + +class name jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList +header extends java/lang/Object implements java/lang/foreign/VaList nestMembers jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder flags 21 +innerclass innerClass java/lang/foreign/MemoryLayout$PathElement outerClass java/lang/foreign/MemoryLayout innerClassName PathElement flags 609 +innerclass innerClass jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder outerClass jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList innerClassName Builder flags 9 +innerclass innerClass java/lang/foreign/ValueLayout$OfAddress outerClass java/lang/foreign/ValueLayout innerClassName OfAddress flags 609 +innerclass innerClass jdk/internal/foreign/abi/SharedUtils$EmptyVaList outerClass jdk/internal/foreign/abi/SharedUtils innerClassName EmptyVaList flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfInt outerClass java/lang/foreign/ValueLayout innerClassName OfInt flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfLong outerClass java/lang/foreign/ValueLayout innerClassName OfLong flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfDouble outerClass java/lang/foreign/ValueLayout innerClassName OfDouble flags 609 +-method name empty descriptor ()Ljava/lang/foreign/VaList; +-method name nextVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;)Ljava/lang/foreign/MemoryAddress; +-method name session descriptor ()Ljava/lang/foreign/MemorySession; +-method name address descriptor ()Ljava/lang/foreign/MemoryAddress; +method name empty descriptor ()Ljava/lang/foreign/VaList; flags 9 +method name nextVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;)Ljava/lang/foreign/MemorySegment; flags 1 +method name segment descriptor ()Ljava/lang/foreign/MemorySegment; flags 1 + +class name jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder +header extends java/lang/Object implements java/lang/foreign/VaList$Builder nestHost jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList flags 21 +innerclass innerClass jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder outerClass jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList innerClassName Builder flags 9 +innerclass innerClass java/lang/foreign/ValueLayout$OfAddress outerClass java/lang/foreign/ValueLayout innerClassName OfAddress flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfDouble outerClass java/lang/foreign/ValueLayout innerClassName OfDouble flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfLong outerClass java/lang/foreign/ValueLayout innerClassName OfLong flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfInt outerClass java/lang/foreign/ValueLayout innerClassName OfInt flags 609 +innerclass innerClass java/lang/foreign/VaList$Builder outerClass java/lang/foreign/VaList innerClassName Builder flags 609 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +-method name descriptor (Ljava/lang/foreign/MemorySession;)V +-method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;Ljava/lang/foreign/Addressable;)Ljdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder; +-method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;Ljava/lang/foreign/Addressable;)Ljava/lang/foreign/VaList$Builder; +method name descriptor (Ljava/lang/foreign/SegmentScope;)V flags 1 +method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;Ljava/lang/foreign/MemorySegment;)Ljdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder; flags 1 +method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;Ljava/lang/foreign/MemorySegment;)Ljava/lang/foreign/VaList$Builder; flags 1041 + +class name jdk/internal/foreign/abi/x64/sysv/SysVVaList +header extends java/lang/Object implements java/lang/foreign/VaList nestMembers jdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder flags 21 +innerclass innerClass java/lang/foreign/MemoryLayout$PathElement outerClass java/lang/foreign/MemoryLayout innerClassName PathElement flags 609 +innerclass innerClass jdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder outerClass jdk/internal/foreign/abi/x64/sysv/SysVVaList innerClassName Builder flags 9 +innerclass innerClass java/lang/foreign/ValueLayout$OfInt outerClass java/lang/foreign/ValueLayout innerClassName OfInt flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfAddress outerClass java/lang/foreign/ValueLayout innerClassName OfAddress flags 609 +innerclass innerClass jdk/internal/foreign/abi/SharedUtils$EmptyVaList outerClass jdk/internal/foreign/abi/SharedUtils innerClassName EmptyVaList flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfLong outerClass java/lang/foreign/ValueLayout innerClassName OfLong flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfDouble outerClass java/lang/foreign/ValueLayout innerClassName OfDouble flags 609 +-method name nextVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;)Ljava/lang/foreign/MemoryAddress; +-method name ofAddress descriptor (Ljava/lang/foreign/MemoryAddress;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/VaList; +-method name session descriptor ()Ljava/lang/foreign/MemorySession; +-method name address descriptor ()Ljava/lang/foreign/MemoryAddress; +method name nextVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;)Ljava/lang/foreign/MemorySegment; flags 1 +method name ofAddress descriptor (JLjava/lang/foreign/SegmentScope;)Ljava/lang/foreign/VaList; flags 9 +method name segment descriptor ()Ljava/lang/foreign/MemorySegment; flags 1 + +class name jdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder +header extends java/lang/Object implements java/lang/foreign/VaList$Builder nestHost jdk/internal/foreign/abi/x64/sysv/SysVVaList flags 21 +innerclass innerClass jdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder outerClass jdk/internal/foreign/abi/x64/sysv/SysVVaList innerClassName Builder flags 9 +innerclass innerClass java/lang/foreign/MemoryLayout$PathElement outerClass java/lang/foreign/MemoryLayout innerClassName PathElement flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfAddress outerClass java/lang/foreign/ValueLayout innerClassName OfAddress flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfDouble outerClass java/lang/foreign/ValueLayout innerClassName OfDouble flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfLong outerClass java/lang/foreign/ValueLayout innerClassName OfLong flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfInt outerClass java/lang/foreign/ValueLayout innerClassName OfInt flags 609 +innerclass innerClass java/lang/foreign/VaList$Builder outerClass java/lang/foreign/VaList innerClassName Builder flags 609 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +-method name descriptor (Ljava/lang/foreign/MemorySession;)V +-method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;Ljava/lang/foreign/Addressable;)Ljdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder; +-method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;Ljava/lang/foreign/Addressable;)Ljava/lang/foreign/VaList$Builder; +method name descriptor (Ljava/lang/foreign/SegmentScope;)V flags 1 +method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;Ljava/lang/foreign/MemorySegment;)Ljdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder; flags 1 +method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;Ljava/lang/foreign/MemorySegment;)Ljava/lang/foreign/VaList$Builder; flags 1041 + +class name jdk/internal/foreign/abi/x64/sysv/SysVx64Linker +-method name descriptor ()V +-method name arrangeDowncall descriptor (Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;)Ljava/lang/invoke/MethodHandle; +-method name arrangeUpcall descriptor (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/MemorySegment; +-method name newVaList descriptor (Ljava/util/function/Consumer;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/VaList; +-method name newVaListOfAddress descriptor (Ljava/lang/foreign/MemoryAddress;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/VaList; +method name arrangeDowncall descriptor (Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;Ljdk/internal/foreign/abi/LinkerOptions;)Ljava/lang/invoke/MethodHandle; flags 4 +method name arrangeUpcall descriptor (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;Ljava/lang/foreign/SegmentScope;)Ljava/lang/foreign/MemorySegment; flags 4 +method name newVaList descriptor (Ljava/util/function/Consumer;Ljava/lang/foreign/SegmentScope;)Ljava/lang/foreign/VaList; flags 9 signature (Ljava/util/function/Consumer;Ljava/lang/foreign/SegmentScope;)Ljava/lang/foreign/VaList; +method name newVaListOfAddress descriptor (JLjava/lang/foreign/SegmentScope;)Ljava/lang/foreign/VaList; flags 9 + +class name jdk/internal/foreign/abi/x64/windows/WinVaList +header extends java/lang/Object implements java/lang/foreign/VaList nestMembers jdk/internal/foreign/abi/x64/windows/WinVaList$Builder flags 21 +innerclass innerClass java/lang/foreign/MemoryLayout$PathElement outerClass java/lang/foreign/MemoryLayout innerClassName PathElement flags 609 +innerclass innerClass jdk/internal/foreign/abi/x64/windows/WinVaList$Builder outerClass jdk/internal/foreign/abi/x64/windows/WinVaList innerClassName Builder flags 9 +innerclass innerClass java/lang/foreign/ValueLayout$OfAddress outerClass java/lang/foreign/ValueLayout innerClassName OfAddress flags 609 +innerclass innerClass jdk/internal/foreign/abi/SharedUtils$EmptyVaList outerClass jdk/internal/foreign/abi/SharedUtils innerClassName EmptyVaList flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfInt outerClass java/lang/foreign/ValueLayout innerClassName OfInt flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfLong outerClass java/lang/foreign/ValueLayout innerClassName OfLong flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfDouble outerClass java/lang/foreign/ValueLayout innerClassName OfDouble flags 609 +-method name nextVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;)Ljava/lang/foreign/MemoryAddress; +-method name session descriptor ()Ljava/lang/foreign/MemorySession; +-method name address descriptor ()Ljava/lang/foreign/MemoryAddress; +method name nextVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;)Ljava/lang/foreign/MemorySegment; flags 1 +method name segment descriptor ()Ljava/lang/foreign/MemorySegment; flags 1 + +class name jdk/internal/foreign/abi/x64/windows/WinVaList$Builder +header extends java/lang/Object implements java/lang/foreign/VaList$Builder nestHost jdk/internal/foreign/abi/x64/windows/WinVaList flags 21 +innerclass innerClass jdk/internal/foreign/abi/x64/windows/WinVaList$Builder outerClass jdk/internal/foreign/abi/x64/windows/WinVaList innerClassName Builder flags 9 +innerclass innerClass java/lang/foreign/ValueLayout$OfAddress outerClass java/lang/foreign/ValueLayout innerClassName OfAddress flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfDouble outerClass java/lang/foreign/ValueLayout innerClassName OfDouble flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfLong outerClass java/lang/foreign/ValueLayout innerClassName OfLong flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfInt outerClass java/lang/foreign/ValueLayout innerClassName OfInt flags 609 +innerclass innerClass java/lang/foreign/VaList$Builder outerClass java/lang/foreign/VaList innerClassName Builder flags 609 +-method name descriptor (Ljava/lang/foreign/MemorySession;)V +-method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;Ljava/lang/foreign/Addressable;)Ljdk/internal/foreign/abi/x64/windows/WinVaList$Builder; +-method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;Ljava/lang/foreign/Addressable;)Ljava/lang/foreign/VaList$Builder; +method name descriptor (Ljava/lang/foreign/SegmentScope;)V flags 1 +method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;Ljava/lang/foreign/MemorySegment;)Ljdk/internal/foreign/abi/x64/windows/WinVaList$Builder; flags 1 +method name addVarg descriptor (Ljava/lang/foreign/ValueLayout$OfAddress;Ljava/lang/foreign/MemorySegment;)Ljava/lang/foreign/VaList$Builder; flags 1041 + +class name jdk/internal/foreign/abi/x64/windows/Windowsx64Linker +-method name descriptor ()V +-method name arrangeDowncall descriptor (Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;)Ljava/lang/invoke/MethodHandle; +-method name arrangeUpcall descriptor (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/MemorySegment; +-method name newVaList descriptor (Ljava/util/function/Consumer;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/VaList; +-method name newVaListOfAddress descriptor (Ljava/lang/foreign/MemoryAddress;Ljava/lang/foreign/MemorySession;)Ljava/lang/foreign/VaList; +method name arrangeDowncall descriptor (Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;Ljdk/internal/foreign/abi/LinkerOptions;)Ljava/lang/invoke/MethodHandle; flags 4 +method name arrangeUpcall descriptor (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;Ljava/lang/foreign/SegmentScope;)Ljava/lang/foreign/MemorySegment; flags 4 +method name newVaList descriptor (Ljava/util/function/Consumer;Ljava/lang/foreign/SegmentScope;)Ljava/lang/foreign/VaList; flags 9 signature (Ljava/util/function/Consumer;Ljava/lang/foreign/SegmentScope;)Ljava/lang/foreign/VaList; +method name newVaListOfAddress descriptor (JLjava/lang/foreign/SegmentScope;)Ljava/lang/foreign/VaList; flags 9 + diff --git a/src/jdk.compiler/share/data/symbols/jdk.incubator.foreign-L.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.incubator.foreign-L.sym.txt new file mode 100644 index 0000000000000..f01223bf48330 --- /dev/null +++ b/src/jdk.compiler/share/data/symbols/jdk.incubator.foreign-L.sym.txt @@ -0,0 +1,237 @@ +# +# Copyright (c) 2023, 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 jdk/internal/foreign/AbstractMemorySegmentImpl +header extends java/lang/Object implements java/lang/foreign/MemorySegment,java/lang/foreign/SegmentAllocator,java/util/function/BiFunction sealed true permittedSubclasses jdk/internal/foreign/HeapMemorySegmentImpl,jdk/internal/foreign/NativeMemorySegmentImpl flags 421 signature Ljava/lang/Object;Ljava/lang/foreign/MemorySegment;Ljava/lang/foreign/SegmentAllocator;Ljava/util/function/BiFunction;Ljava/lang/RuntimeException;>; +innerclass innerClass java/lang/foreign/MemorySegment$Scope outerClass java/lang/foreign/MemorySegment innerClassName Scope flags 609 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfByte outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfByte flags 19 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfShort outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfShort flags 19 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfChar outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfChar flags 19 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfInt outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfInt flags 19 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfFloat outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfFloat flags 19 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfLong outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfLong flags 19 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfDouble outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfDouble flags 19 +innerclass innerClass java/lang/foreign/ValueLayout$OfByte outerClass java/lang/foreign/ValueLayout innerClassName OfByte flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfShort outerClass java/lang/foreign/ValueLayout innerClassName OfShort flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfChar outerClass java/lang/foreign/ValueLayout innerClassName OfChar flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfInt outerClass java/lang/foreign/ValueLayout innerClassName OfInt flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfFloat outerClass java/lang/foreign/ValueLayout innerClassName OfFloat flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfLong outerClass java/lang/foreign/ValueLayout innerClassName OfLong flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfDouble outerClass java/lang/foreign/ValueLayout innerClassName OfDouble flags 609 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +-method name scope descriptor ()Ljava/lang/foreign/SegmentScope; +method name asSlice descriptor (JJJ)Ljava/lang/foreign/MemorySegment; flags 1 +method name reinterpret descriptor (JLjava/lang/foreign/Arena;Ljava/util/function/Consumer;)Ljava/lang/foreign/MemorySegment; flags 11 signature (JLjava/lang/foreign/Arena;Ljava/util/function/Consumer;)Ljava/lang/foreign/MemorySegment; runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive; +method name reinterpret descriptor (J)Ljava/lang/foreign/MemorySegment; flags 11 runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive; +method name reinterpret descriptor (Ljava/lang/foreign/Arena;Ljava/util/function/Consumer;)Ljava/lang/foreign/MemorySegment; flags 11 signature (Ljava/lang/foreign/Arena;Ljava/util/function/Consumer;)Ljava/lang/foreign/MemorySegment; runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive; +method name reinterpretInternal descriptor (Ljava/lang/Class;JLjava/lang/foreign/MemorySegment$Scope;Ljava/util/function/Consumer;)Ljava/lang/foreign/MemorySegment; flags 1 signature (Ljava/lang/Class<*>;JLjava/lang/foreign/MemorySegment$Scope;Ljava/util/function/Consumer;)Ljava/lang/foreign/MemorySegment; +method name isAlignedForElement descriptor (JJ)Z flags 11 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name scope descriptor ()Ljava/lang/foreign/MemorySegment$Scope; flags 1 +method name isAccessibleBy descriptor (Ljava/lang/Thread;)Z flags 1 + +class name jdk/internal/foreign/HeapMemorySegmentImpl +header extends jdk/internal/foreign/AbstractMemorySegmentImpl nestMembers jdk/internal/foreign/HeapMemorySegmentImpl$OfDouble,jdk/internal/foreign/HeapMemorySegmentImpl$OfFloat,jdk/internal/foreign/HeapMemorySegmentImpl$OfLong,jdk/internal/foreign/HeapMemorySegmentImpl$OfInt,jdk/internal/foreign/HeapMemorySegmentImpl$OfShort,jdk/internal/foreign/HeapMemorySegmentImpl$OfChar,jdk/internal/foreign/HeapMemorySegmentImpl$OfByte sealed true permittedSubclasses jdk/internal/foreign/HeapMemorySegmentImpl$OfByte,jdk/internal/foreign/HeapMemorySegmentImpl$OfChar,jdk/internal/foreign/HeapMemorySegmentImpl$OfShort,jdk/internal/foreign/HeapMemorySegmentImpl$OfInt,jdk/internal/foreign/HeapMemorySegmentImpl$OfLong,jdk/internal/foreign/HeapMemorySegmentImpl$OfFloat,jdk/internal/foreign/HeapMemorySegmentImpl$OfDouble flags 421 +innerclass innerClass java/lang/foreign/ValueLayout$OfByte outerClass java/lang/foreign/ValueLayout innerClassName OfByte flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfShort outerClass java/lang/foreign/ValueLayout innerClassName OfShort flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfInt outerClass java/lang/foreign/ValueLayout innerClassName OfInt flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfLong outerClass java/lang/foreign/ValueLayout innerClassName OfLong flags 609 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfDouble outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfDouble flags 19 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfFloat outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfFloat flags 19 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfLong outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfLong flags 19 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfInt outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfInt flags 19 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfShort outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfShort flags 19 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfChar outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfChar flags 19 +innerclass innerClass jdk/internal/foreign/HeapMemorySegmentImpl$OfByte outerClass jdk/internal/foreign/HeapMemorySegmentImpl innerClassName OfByte flags 19 +-method name array descriptor ()Ljava/util/Optional; +method name heapBase descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional; + +class name jdk/internal/foreign/LayoutPath +header extends java/lang/Object nestMembers jdk/internal/foreign/LayoutPath$PathElementImpl flags 21 +innerclass innerClass java/lang/invoke/VarHandle$AccessMode outerClass java/lang/invoke/VarHandle innerClassName AccessMode flags 4019 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +innerclass innerClass jdk/internal/foreign/LayoutPath$PathElementImpl outerClass jdk/internal/foreign/LayoutPath innerClassName PathElementImpl flags 19 +method name groupElement descriptor (J)Ljdk/internal/foreign/LayoutPath; flags 1 +method name derefElement descriptor ()Ljdk/internal/foreign/LayoutPath; flags 1 +method name dereferenceHandle descriptor (Z)Ljava/lang/invoke/VarHandle; flags 1 + +class name jdk/internal/foreign/MappedMemorySegmentImpl +header extends jdk/internal/foreign/NativeMemorySegmentImpl flags 31 +-method name descriptor (JLjdk/internal/access/foreign/UnmapperProxy;JZLjava/lang/foreign/SegmentScope;)V +-method name segment descriptor ()Ljava/lang/foreign/MemorySegment; +method name descriptor (JLjdk/internal/access/foreign/UnmapperProxy;JZLjdk/internal/foreign/MemorySessionImpl;)V flags 1 + +-class name jdk/internal/foreign/MappedMemorySegmentImpl$EmptyMappedMemorySegmentImpl + +class name jdk/internal/foreign/MemorySessionImpl +header extends java/lang/Object implements java/lang/foreign/MemorySegment$Scope nestMembers jdk/internal/foreign/MemorySessionImpl$ResourceList,jdk/internal/foreign/MemorySessionImpl$ResourceList$ResourceCleanup sealed true permittedSubclasses jdk/internal/foreign/ConfinedSession,jdk/internal/foreign/GlobalSession,jdk/internal/foreign/SharedSession flags 421 +innerclass innerClass java/lang/foreign/MemorySegment$Scope outerClass java/lang/foreign/MemorySegment innerClassName Scope flags 609 +innerclass innerClass jdk/internal/foreign/MemorySessionImpl$ResourceList outerClass jdk/internal/foreign/MemorySessionImpl innerClassName ResourceList flags 409 +innerclass innerClass jdk/internal/foreign/MemorySessionImpl$ResourceList$ResourceCleanup outerClass jdk/internal/foreign/MemorySessionImpl$ResourceList innerClassName ResourceCleanup flags 409 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +-method name sameOwnerThread descriptor (Ljava/lang/foreign/SegmentScope;Ljava/lang/foreign/SegmentScope;)Z +method name toMemorySession descriptor (Ljava/lang/foreign/Arena;)Ljdk/internal/foreign/MemorySessionImpl; flags 19 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name isCloseableBy descriptor (Ljava/lang/Thread;)Z flags 11 +method name checkValidState descriptor (Ljava/lang/foreign/MemorySegment;)V flags 19 + +class name jdk/internal/foreign/NativeMemorySegmentImpl +-method name array descriptor ()Ljava/util/Optional; +-method name makeNativeSegment descriptor (JJLjava/lang/foreign/SegmentScope;)Ljava/lang/foreign/MemorySegment; +-method name makeNativeSegmentUnchecked descriptor (JJLjava/lang/foreign/SegmentScope;Ljava/lang/Runnable;)Ljava/lang/foreign/MemorySegment; +-method name makeNativeSegmentUnchecked descriptor (JJLjava/lang/foreign/SegmentScope;)Ljava/lang/foreign/MemorySegment; +method name descriptor ()V flags 1 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name heapBase descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional; +method name makeNativeSegment descriptor (JJLjdk/internal/foreign/MemorySessionImpl;)Ljava/lang/foreign/MemorySegment; flags 9 +method name makeNativeSegmentUnchecked descriptor (JJLjdk/internal/foreign/MemorySessionImpl;Ljava/lang/Runnable;)Ljava/lang/foreign/MemorySegment; flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; +method name makeNativeSegmentUnchecked descriptor (JJLjdk/internal/foreign/MemorySessionImpl;)Ljava/lang/foreign/MemorySegment; flags 9 runtimeAnnotations @Ljdk/internal/vm/annotation/ForceInline; + +class name jdk/internal/foreign/abi/AbstractLinker +header extends java/lang/Object implements java/lang/foreign/Linker sealed true permittedSubclasses jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64Linker,jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64Linker,jdk/internal/foreign/abi/x64/sysv/SysVx64Linker,jdk/internal/foreign/abi/aarch64/windows/WindowsAArch64Linker,jdk/internal/foreign/abi/x64/windows/Windowsx64Linker,jdk/internal/foreign/abi/ppc64/linux/LinuxPPC64leLinker,jdk/internal/foreign/abi/riscv64/linux/LinuxRISCV64Linker,jdk/internal/foreign/abi/fallback/FallbackLinker flags 421 +innerclass innerClass java/lang/foreign/Linker$Option outerClass java/lang/foreign/Linker innerClassName Option flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfBoolean outerClass java/lang/foreign/ValueLayout innerClassName OfBoolean flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfByte outerClass java/lang/foreign/ValueLayout innerClassName OfByte flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfChar outerClass java/lang/foreign/ValueLayout innerClassName OfChar flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfShort outerClass java/lang/foreign/ValueLayout innerClassName OfShort flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfFloat outerClass java/lang/foreign/ValueLayout innerClassName OfFloat flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfInt outerClass java/lang/foreign/ValueLayout innerClassName OfInt flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfLong outerClass java/lang/foreign/ValueLayout innerClassName OfLong flags 609 +innerclass innerClass java/lang/foreign/ValueLayout$OfDouble outerClass java/lang/foreign/ValueLayout innerClassName OfDouble flags 609 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +-method name downcallHandle descriptor (Ljava/lang/foreign/FunctionDescriptor;[Ljava/lang/foreign/Linker$Option;)Ljava/lang/invoke/MethodHandle; +-method name upcallStub descriptor (Ljava/lang/invoke/MethodHandle;Ljava/lang/foreign/FunctionDescriptor;Ljava/lang/foreign/SegmentScope;)Ljava/lang/foreign/MemorySegment; +-method name arrangeUpcall descriptor (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;Ljava/lang/foreign/SegmentScope;)Ljava/lang/foreign/MemorySegment; +method name downcallHandle descriptor (Ljava/lang/foreign/MemorySegment;Ljava/lang/foreign/FunctionDescriptor;[Ljava/lang/foreign/Linker$Option;)Ljava/lang/invoke/MethodHandle; flags 91 runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive; +method name downcallHandle descriptor (Ljava/lang/foreign/FunctionDescriptor;[Ljava/lang/foreign/Linker$Option;)Ljava/lang/invoke/MethodHandle; flags 91 runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive; +method name upcallStub descriptor (Ljava/lang/invoke/MethodHandle;Ljava/lang/foreign/FunctionDescriptor;Ljava/lang/foreign/Arena;[Ljava/lang/foreign/Linker$Option;)Ljava/lang/foreign/MemorySegment; flags 91 runtimeAnnotations @Ljdk/internal/reflect/CallerSensitive; +method name arrangeUpcall descriptor (Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;Ljdk/internal/foreign/abi/LinkerOptions;)Ljdk/internal/foreign/abi/AbstractLinker$UpcallStubFactory; flags 404 +method name linkerByteOrder descriptor ()Ljava/nio/ByteOrder; flags 404 + +class name jdk/internal/foreign/abi/LinkerOptions +header extends java/lang/Object nestMembers jdk/internal/foreign/abi/LinkerOptions$IsTrivial,jdk/internal/foreign/abi/LinkerOptions$CaptureCallState,jdk/internal/foreign/abi/LinkerOptions$FirstVariadicArg,jdk/internal/foreign/abi/LinkerOptions$LinkerOptionImpl flags 21 +innerclass innerClass java/lang/foreign/Linker$Option outerClass java/lang/foreign/Linker innerClassName Option flags 609 +innerclass innerClass jdk/internal/foreign/abi/LinkerOptions$LinkerOptionImpl outerClass jdk/internal/foreign/abi/LinkerOptions innerClassName LinkerOptionImpl flags 609 +innerclass innerClass jdk/internal/foreign/abi/LinkerOptions$FirstVariadicArg outerClass jdk/internal/foreign/abi/LinkerOptions innerClassName FirstVariadicArg flags 19 +innerclass innerClass jdk/internal/foreign/abi/LinkerOptions$CaptureCallState outerClass jdk/internal/foreign/abi/LinkerOptions innerClassName CaptureCallState flags 19 +innerclass innerClass jdk/internal/foreign/abi/LinkerOptions$IsTrivial outerClass jdk/internal/foreign/abi/LinkerOptions innerClassName IsTrivial flags 19 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +method name forUpcall descriptor (Ljava/lang/foreign/FunctionDescriptor;[Ljava/lang/foreign/Linker$Option;)Ljdk/internal/foreign/abi/LinkerOptions; flags 9 +method name isVariadicFunction descriptor ()Z flags 1 +method name firstVariadicArgIndex descriptor ()I flags 1 +method name isTrivial descriptor ()Z flags 1 + +class name jdk/internal/foreign/abi/LinkerOptions$CaptureCallState +header extends java/lang/Record implements jdk/internal/foreign/abi/LinkerOptions$LinkerOptionImpl nestHost jdk/internal/foreign/abi/LinkerOptions record true flags 31 +recordcomponent name saved descriptor Ljava/util/Set; signature Ljava/util/Set; +innerclass innerClass jdk/internal/foreign/abi/LinkerOptions$CaptureCallState outerClass jdk/internal/foreign/abi/LinkerOptions innerClassName CaptureCallState flags 19 +innerclass innerClass jdk/internal/foreign/abi/LinkerOptions$LinkerOptionImpl outerClass jdk/internal/foreign/abi/LinkerOptions innerClassName LinkerOptionImpl flags 609 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +method name descriptor (Ljava/util/Set;)V flags 1 signature (Ljava/util/Set;)V methodParameters 0:saved +method name validateForDowncall descriptor (Ljava/lang/foreign/FunctionDescriptor;)V flags 1 +method name toString descriptor ()Ljava/lang/String; flags 11 +method name hashCode descriptor ()I flags 11 +method name equals descriptor (Ljava/lang/Object;)Z flags 11 +method name saved descriptor ()Ljava/util/Set; flags 1 signature ()Ljava/util/Set; + +-class name jdk/internal/foreign/abi/LinkerOptions$CaptureCallStateImpl + +class name jdk/internal/foreign/abi/LinkerOptions$IsTrivial +header extends java/lang/Record implements jdk/internal/foreign/abi/LinkerOptions$LinkerOptionImpl nestHost jdk/internal/foreign/abi/LinkerOptions record true flags 31 +innerclass innerClass jdk/internal/foreign/abi/LinkerOptions$IsTrivial outerClass jdk/internal/foreign/abi/LinkerOptions innerClassName IsTrivial flags 19 +innerclass innerClass jdk/internal/foreign/abi/LinkerOptions$LinkerOptionImpl outerClass jdk/internal/foreign/abi/LinkerOptions innerClassName LinkerOptionImpl flags 609 +innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 +field name INSTANCE descriptor Ljdk/internal/foreign/abi/LinkerOptions$IsTrivial; flags 9 +method name descriptor ()V flags 1 +method name validateForDowncall descriptor (Ljava/lang/foreign/FunctionDescriptor;)V flags 1 +method name toString descriptor ()Ljava/lang/String; flags 11 +method name hashCode descriptor ()I flags 11 +method name equals descriptor (Ljava/lang/Object;)Z flags 11 + +class name jdk/internal/foreign/abi/LinkerOptions$LinkerOptionImpl +header extends java/lang/Object implements java/lang/foreign/Linker$Option nestHost jdk/internal/foreign/abi/LinkerOptions sealed true permittedSubclasses jdk/internal/foreign/abi/LinkerOptions$CaptureCallState,jdk/internal/foreign/abi/LinkerOptions$FirstVariadicArg,jdk/internal/foreign/abi/LinkerOptions$IsTrivial flags 601 +innerclass innerClass jdk/internal/foreign/abi/LinkerOptions$LinkerOptionImpl outerClass jdk/internal/foreign/abi/LinkerOptions innerClassName LinkerOptionImpl flags 609 +innerclass innerClass java/lang/foreign/Linker$Option outerClass java/lang/foreign/Linker innerClassName Option flags 609 +innerclass innerClass jdk/internal/foreign/abi/LinkerOptions$CaptureCallState outerClass jdk/internal/foreign/abi/LinkerOptions innerClassName CaptureCallState flags 19 +innerclass innerClass jdk/internal/foreign/abi/LinkerOptions$FirstVariadicArg outerClass jdk/internal/foreign/abi/LinkerOptions innerClassName FirstVariadicArg flags 19 +innerclass innerClass jdk/internal/foreign/abi/LinkerOptions$IsTrivial outerClass jdk/internal/foreign/abi/LinkerOptions innerClassName IsTrivial flags 19 +method name validateForUpcall descriptor (Ljava/lang/foreign/FunctionDescriptor;)V flags 1 + +-class name jdk/internal/foreign/abi/SharedUtils + +-class name jdk/internal/foreign/abi/SharedUtils$EmptyVaList + +class name jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64Linker +header extends jdk/internal/foreign/abi/AbstractLinker flags 31 +-method name emptyVaList descriptor ()Ljava/lang/foreign/VaList; +-method name arrangeUpcall descriptor (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;Ljava/lang/foreign/SegmentScope;)Ljava/lang/foreign/MemorySegment; +-method name newVaList descriptor (Ljava/util/function/Consumer;Ljava/lang/foreign/SegmentScope;)Ljava/lang/foreign/VaList; +-method name newVaListOfAddress descriptor (JLjava/lang/foreign/SegmentScope;)Ljava/lang/foreign/VaList; +method name arrangeUpcall descriptor (Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;Ljdk/internal/foreign/abi/LinkerOptions;)Ljdk/internal/foreign/abi/AbstractLinker$UpcallStubFactory; flags 4 +method name linkerByteOrder descriptor ()Ljava/nio/ByteOrder; flags 4 + +-class name jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList + +-class name jdk/internal/foreign/abi/aarch64/linux/LinuxAArch64VaList$Builder + +class name jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64Linker +header extends jdk/internal/foreign/abi/AbstractLinker flags 31 +-method name emptyVaList descriptor ()Ljava/lang/foreign/VaList; +-method name arrangeUpcall descriptor (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;Ljava/lang/foreign/SegmentScope;)Ljava/lang/foreign/MemorySegment; +-method name newVaList descriptor (Ljava/util/function/Consumer;Ljava/lang/foreign/SegmentScope;)Ljava/lang/foreign/VaList; +-method name newVaListOfAddress descriptor (JLjava/lang/foreign/SegmentScope;)Ljava/lang/foreign/VaList; +method name arrangeUpcall descriptor (Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;Ljdk/internal/foreign/abi/LinkerOptions;)Ljdk/internal/foreign/abi/AbstractLinker$UpcallStubFactory; flags 4 +method name linkerByteOrder descriptor ()Ljava/nio/ByteOrder; flags 4 + +-class name jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList + +-class name jdk/internal/foreign/abi/aarch64/macos/MacOsAArch64VaList$Builder + +-class name jdk/internal/foreign/abi/x64/sysv/SysVVaList + +-class name jdk/internal/foreign/abi/x64/sysv/SysVVaList$Builder + +class name jdk/internal/foreign/abi/x64/sysv/SysVx64Linker +header extends jdk/internal/foreign/abi/AbstractLinker flags 31 +-method name emptyVaList descriptor ()Ljava/lang/foreign/VaList; +-method name arrangeUpcall descriptor (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;Ljava/lang/foreign/SegmentScope;)Ljava/lang/foreign/MemorySegment; +-method name newVaList descriptor (Ljava/util/function/Consumer;Ljava/lang/foreign/SegmentScope;)Ljava/lang/foreign/VaList; +-method name newVaListOfAddress descriptor (JLjava/lang/foreign/SegmentScope;)Ljava/lang/foreign/VaList; +method name arrangeUpcall descriptor (Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;Ljdk/internal/foreign/abi/LinkerOptions;)Ljdk/internal/foreign/abi/AbstractLinker$UpcallStubFactory; flags 4 +method name linkerByteOrder descriptor ()Ljava/nio/ByteOrder; flags 4 + +-class name jdk/internal/foreign/abi/x64/windows/WinVaList + +-class name jdk/internal/foreign/abi/x64/windows/WinVaList$Builder + +class name jdk/internal/foreign/abi/x64/windows/Windowsx64Linker +header extends jdk/internal/foreign/abi/AbstractLinker flags 31 +-method name emptyVaList descriptor ()Ljava/lang/foreign/VaList; +-method name arrangeUpcall descriptor (Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;Ljava/lang/foreign/SegmentScope;)Ljava/lang/foreign/MemorySegment; +-method name newVaList descriptor (Ljava/util/function/Consumer;Ljava/lang/foreign/SegmentScope;)Ljava/lang/foreign/VaList; +-method name newVaListOfAddress descriptor (JLjava/lang/foreign/SegmentScope;)Ljava/lang/foreign/VaList; +method name arrangeUpcall descriptor (Ljava/lang/invoke/MethodType;Ljava/lang/foreign/FunctionDescriptor;Ljdk/internal/foreign/abi/LinkerOptions;)Ljdk/internal/foreign/abi/AbstractLinker$UpcallStubFactory; flags 4 +method name linkerByteOrder descriptor ()Ljava/nio/ByteOrder; flags 4 + diff --git a/src/jdk.compiler/share/data/symbols/jdk.jartool-H.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.jartool-H.sym.txt deleted file mode 100644 index 9133449be101c..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.jartool-H.sym.txt +++ /dev/null @@ -1,31 +0,0 @@ -# -# Copyright (c) 2021, 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 jdk/security/jarsigner/JarSignerException -header extends java/lang/RuntimeException flags 21 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.jartool-I.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.jartool-I.sym.txt deleted file mode 100644 index 9133449be101c..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.jartool-I.sym.txt +++ /dev/null @@ -1,31 +0,0 @@ -# -# Copyright (c) 2021, 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 jdk/security/jarsigner/JarSignerException -header extends java/lang/RuntimeException flags 21 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.jartool-J.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.jartool-J.sym.txt deleted file mode 100644 index 20e7574ba6ec4..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.jartool-J.sym.txt +++ /dev/null @@ -1,31 +0,0 @@ -# -# Copyright (c) 2022, 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 jdk/security/jarsigner/JarSignerException -header extends java/lang/RuntimeException flags 21 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.jartool-K.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.jartool-K.sym.txt index 4ae64921cf642..bf5c5e5c09777 100644 --- a/src/jdk.compiler/share/data/symbols/jdk.jartool-K.sym.txt +++ b/src/jdk.compiler/share/data/symbols/jdk.jartool-K.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2022, 2023, 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,6 +29,3 @@ module name jdk.jartool header exports com/sun/jarsigner,jdk/security/jarsigner requires name\u0020;java.base\u0020;flags\u0020;8000,name\u0020;jdk.internal.opt\u0020;flags\u0020;0 provides interface\u0020;java/util/spi/ToolProvider\u0020;impls\u0020;sun/tools/jar/JarToolProvider target linux-amd64 flags 8000 -class name jdk/security/jarsigner/JarSignerException -header extends java/lang/RuntimeException flags 21 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.jartool-L.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.jartool-L.sym.txt index 155329e026064..2c6d093e1667c 100644 --- a/src/jdk.compiler/share/data/symbols/jdk.jartool-L.sym.txt +++ b/src/jdk.compiler/share/data/symbols/jdk.jartool-L.sym.txt @@ -33,6 +33,3 @@ header exports jdk/security/jarsigner requires name\u0020;java.base\u0020;flags\ -class name com/sun/jarsigner/ContentSignerParameters -class name jdk/security/jarsigner/JarSignerException -header extends java/lang/RuntimeException flags 21 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.javadoc-H.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.javadoc-H.sym.txt index d7d4a4c3779c2..37cebb12cfe79 100644 --- a/src/jdk.compiler/share/data/symbols/jdk.javadoc-H.sym.txt +++ b/src/jdk.compiler/share/data/symbols/jdk.javadoc-H.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2021, 2023, 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 @@ -27,15 +27,11 @@ # ########################################################## # class name jdk/javadoc/doclet/Reporter -header extends java/lang/Object flags 601 -innerclass innerClass javax/tools/Diagnostic$Kind outerClass javax/tools/Diagnostic innerClassName Kind flags 4019 method name print descriptor (Ljavax/tools/Diagnostic$Kind;Ljavax/tools/FileObject;IIILjava/lang/String;)V flags 1 method name getStandardWriter descriptor ()Ljava/io/PrintWriter; flags 1 method name getDiagnosticWriter descriptor ()Ljava/io/PrintWriter; flags 1 class name jdk/javadoc/doclet/StandardDoclet -header extends java/lang/Object implements jdk/javadoc/doclet/Doclet flags 21 -innerclass innerClass jdk/javadoc/doclet/Doclet$Option outerClass jdk/javadoc/doclet/Doclet innerClassName Option flags 609 method name getLocale descriptor ()Ljava/util/Locale; flags 1 method name getReporter descriptor ()Ljdk/javadoc/doclet/Reporter; flags 1 diff --git a/src/jdk.compiler/share/data/symbols/jdk.javadoc-I.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.javadoc-I.sym.txt index 8c4ff94e5eb2f..c0a34db5935e1 100644 --- a/src/jdk.compiler/share/data/symbols/jdk.javadoc-I.sym.txt +++ b/src/jdk.compiler/share/data/symbols/jdk.javadoc-I.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2021, 2023, 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 @@ -27,11 +27,5 @@ # ########################################################## # class name jdk/javadoc/doclet/Reporter -header extends java/lang/Object flags 601 -innerclass innerClass javax/tools/Diagnostic$Kind outerClass javax/tools/Diagnostic innerClassName Kind flags 4019 method name print descriptor (Ljavax/tools/Diagnostic$Kind;Lcom/sun/source/util/DocTreePath;IIILjava/lang/String;)V flags 1 -class name jdk/javadoc/doclet/StandardDoclet -header extends java/lang/Object implements jdk/javadoc/doclet/Doclet flags 21 -innerclass innerClass jdk/javadoc/doclet/Doclet$Option outerClass jdk/javadoc/doclet/Doclet innerClassName Option flags 609 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.javadoc-J.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.javadoc-J.sym.txt deleted file mode 100644 index 8fdfd448540ee..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.javadoc-J.sym.txt +++ /dev/null @@ -1,36 +0,0 @@ -# -# Copyright (c) 2022, 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 jdk/javadoc/doclet/Reporter -header extends java/lang/Object flags 601 -innerclass innerClass javax/tools/Diagnostic$Kind outerClass javax/tools/Diagnostic innerClassName Kind flags 4019 - -class name jdk/javadoc/doclet/StandardDoclet -header extends java/lang/Object implements jdk/javadoc/doclet/Doclet flags 21 -innerclass innerClass jdk/javadoc/doclet/Doclet$Option outerClass jdk/javadoc/doclet/Doclet innerClassName Option flags 609 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.javadoc-K.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.javadoc-K.sym.txt deleted file mode 100644 index 8fdfd448540ee..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.javadoc-K.sym.txt +++ /dev/null @@ -1,36 +0,0 @@ -# -# Copyright (c) 2022, 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 jdk/javadoc/doclet/Reporter -header extends java/lang/Object flags 601 -innerclass innerClass javax/tools/Diagnostic$Kind outerClass javax/tools/Diagnostic innerClassName Kind flags 4019 - -class name jdk/javadoc/doclet/StandardDoclet -header extends java/lang/Object implements jdk/javadoc/doclet/Doclet flags 21 -innerclass innerClass jdk/javadoc/doclet/Doclet$Option outerClass jdk/javadoc/doclet/Doclet innerClassName Option flags 609 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.javadoc-L.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.javadoc-L.sym.txt index 89e757614c057..e1e139059bf4c 100644 --- a/src/jdk.compiler/share/data/symbols/jdk.javadoc-L.sym.txt +++ b/src/jdk.compiler/share/data/symbols/jdk.javadoc-L.sym.txt @@ -29,11 +29,3 @@ module name jdk.javadoc header exports jdk/javadoc/doclet requires name\u0020;java.base\u0020;flags\u0020;8000,name\u0020;java.xml\u0020;flags\u0020;0,name\u0020;java.compiler\u0020;flags\u0020;20,name\u0020;jdk.compiler\u0020;flags\u0020;20,name\u0020;jdk.internal.opt\u0020;flags\u0020;0 provides interface\u0020;java/util/spi/ToolProvider\u0020;impls\u0020;jdk/javadoc/internal/tool/JavadocToolProvider,interface\u0020;javax/tools/DocumentationTool\u0020;impls\u0020;jdk/javadoc/internal/api/JavadocTool,interface\u0020;javax/tools/Tool\u0020;impls\u0020;jdk/javadoc/internal/api/JavadocTool,interface\u0020;com/sun/tools/doclint/DocLint\u0020;impls\u0020;jdk/javadoc/internal/doclint/DocLint target linux-amd64 flags 8000 -class name jdk/javadoc/doclet/Reporter -header extends java/lang/Object flags 601 -innerclass innerClass javax/tools/Diagnostic$Kind outerClass javax/tools/Diagnostic innerClassName Kind flags 4019 - -class name jdk/javadoc/doclet/StandardDoclet -header extends java/lang/Object implements jdk/javadoc/doclet/Doclet flags 21 -innerclass innerClass jdk/javadoc/doclet/Doclet$Option outerClass jdk/javadoc/doclet/Doclet innerClassName Option flags 609 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.jconsole-H.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.jconsole-H.sym.txt deleted file mode 100644 index 79977a63ab930..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.jconsole-H.sym.txt +++ /dev/null @@ -1,31 +0,0 @@ -# -# Copyright (c) 2021, 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/tools/jconsole/JConsolePlugin -header extends java/lang/Object flags 421 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.jconsole-I.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.jconsole-I.sym.txt deleted file mode 100644 index 79977a63ab930..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.jconsole-I.sym.txt +++ /dev/null @@ -1,31 +0,0 @@ -# -# Copyright (c) 2021, 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/tools/jconsole/JConsolePlugin -header extends java/lang/Object flags 421 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.jconsole-J.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.jconsole-J.sym.txt deleted file mode 100644 index 3bb0dfa82c5cd..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.jconsole-J.sym.txt +++ /dev/null @@ -1,31 +0,0 @@ -# -# Copyright (c) 2022, 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/tools/jconsole/JConsolePlugin -header extends java/lang/Object flags 421 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.jconsole-K.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.jconsole-K.sym.txt deleted file mode 100644 index 3bb0dfa82c5cd..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.jconsole-K.sym.txt +++ /dev/null @@ -1,31 +0,0 @@ -# -# Copyright (c) 2022, 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/tools/jconsole/JConsolePlugin -header extends java/lang/Object flags 421 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.jconsole-L.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.jconsole-L.sym.txt deleted file mode 100644 index cffd5a87334c2..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.jconsole-L.sym.txt +++ /dev/null @@ -1,31 +0,0 @@ -# -# Copyright (c) 2023, 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/tools/jconsole/JConsolePlugin -header extends java/lang/Object flags 421 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.jdi-H.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.jdi-H.sym.txt deleted file mode 100644 index 55fc5be41abd4..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.jdi-H.sym.txt +++ /dev/null @@ -1,395 +0,0 @@ -# -# Copyright (c) 2021, 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/AbsentInformationException -header extends java/lang/Exception flags 21 - -class name com/sun/jdi/Accessible -header extends java/lang/Object flags 601 - -class name com/sun/jdi/ArrayReference -header extends java/lang/Object implements com/sun/jdi/ObjectReference flags 601 - -class name com/sun/jdi/ArrayType -header extends java/lang/Object implements com/sun/jdi/ReferenceType flags 601 - -class name com/sun/jdi/BooleanType -header extends java/lang/Object implements com/sun/jdi/PrimitiveType flags 601 - -class name com/sun/jdi/BooleanValue -header extends java/lang/Object implements com/sun/jdi/PrimitiveValue flags 601 - -class name com/sun/jdi/Bootstrap -header extends java/lang/Object flags 21 - -class name com/sun/jdi/ByteType -header extends java/lang/Object implements com/sun/jdi/PrimitiveType flags 601 - -class name com/sun/jdi/ByteValue -header extends java/lang/Object implements com/sun/jdi/PrimitiveValue,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/PrimitiveValue;Ljava/lang/Comparable; - -class name com/sun/jdi/CharType -header extends java/lang/Object implements com/sun/jdi/PrimitiveType flags 601 - -class name com/sun/jdi/CharValue -header extends java/lang/Object implements com/sun/jdi/PrimitiveValue,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/PrimitiveValue;Ljava/lang/Comparable; - -class name com/sun/jdi/ClassLoaderReference -header extends java/lang/Object implements com/sun/jdi/ObjectReference flags 601 - -class name com/sun/jdi/ClassNotLoadedException -header extends java/lang/Exception flags 21 - -class name com/sun/jdi/ClassNotPreparedException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/ClassObjectReference -header extends java/lang/Object implements com/sun/jdi/ObjectReference flags 601 - -class name com/sun/jdi/ClassType -header extends java/lang/Object implements com/sun/jdi/ReferenceType flags 601 - -class name com/sun/jdi/DoubleType -header extends java/lang/Object implements com/sun/jdi/PrimitiveType flags 601 - -class name com/sun/jdi/DoubleValue -header extends java/lang/Object implements com/sun/jdi/PrimitiveValue,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/PrimitiveValue;Ljava/lang/Comparable; - -class name com/sun/jdi/Field -header extends java/lang/Object implements com/sun/jdi/TypeComponent,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/TypeComponent;Ljava/lang/Comparable; - -class name com/sun/jdi/FloatType -header extends java/lang/Object implements com/sun/jdi/PrimitiveType flags 601 - -class name com/sun/jdi/FloatValue -header extends java/lang/Object implements com/sun/jdi/PrimitiveValue,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/PrimitiveValue;Ljava/lang/Comparable; - -class name com/sun/jdi/IncompatibleThreadStateException -header extends java/lang/Exception flags 21 - -class name com/sun/jdi/InconsistentDebugInfoException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/IntegerType -header extends java/lang/Object implements com/sun/jdi/PrimitiveType flags 601 - -class name com/sun/jdi/IntegerValue -header extends java/lang/Object implements com/sun/jdi/PrimitiveValue,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/PrimitiveValue;Ljava/lang/Comparable; - -class name com/sun/jdi/InterfaceType -header extends java/lang/Object implements com/sun/jdi/ReferenceType flags 601 - -class name com/sun/jdi/InternalException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/InvalidCodeIndexException -header extends java/lang/RuntimeException flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated; - -class name com/sun/jdi/InvalidLineNumberException -header extends java/lang/RuntimeException flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated; - -class name com/sun/jdi/InvalidModuleException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/InvalidStackFrameException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/InvalidTypeException -header extends java/lang/Exception flags 21 - -class name com/sun/jdi/InvocationException -header extends java/lang/Exception flags 21 - -class name com/sun/jdi/JDIPermission -header extends java/security/BasicPermission flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/jdi/LocalVariable -header extends java/lang/Object implements com/sun/jdi/Mirror,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/Mirror;Ljava/lang/Comparable; - -class name com/sun/jdi/Locatable -header extends java/lang/Object flags 601 - -class name com/sun/jdi/Location -header extends java/lang/Object implements com/sun/jdi/Mirror,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/Mirror;Ljava/lang/Comparable; - -class name com/sun/jdi/LongType -header extends java/lang/Object implements com/sun/jdi/PrimitiveType flags 601 - -class name com/sun/jdi/LongValue -header extends java/lang/Object implements com/sun/jdi/PrimitiveValue,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/PrimitiveValue;Ljava/lang/Comparable; - -class name com/sun/jdi/Method -header extends java/lang/Object implements com/sun/jdi/TypeComponent,com/sun/jdi/Locatable,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/TypeComponent;Lcom/sun/jdi/Locatable;Ljava/lang/Comparable; - -class name com/sun/jdi/Mirror -header extends java/lang/Object flags 601 - -class name com/sun/jdi/ModuleReference -header extends java/lang/Object implements com/sun/jdi/ObjectReference flags 601 - -class name com/sun/jdi/MonitorInfo -header extends java/lang/Object implements com/sun/jdi/Mirror flags 601 - -class name com/sun/jdi/NativeMethodException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/ObjectCollectedException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/ObjectReference -header extends java/lang/Object implements com/sun/jdi/Value flags 601 - -class name com/sun/jdi/PathSearchingVirtualMachine -header extends java/lang/Object implements com/sun/jdi/VirtualMachine flags 601 - -class name com/sun/jdi/PrimitiveType -header extends java/lang/Object implements com/sun/jdi/Type flags 601 - -class name com/sun/jdi/PrimitiveValue -header extends java/lang/Object implements com/sun/jdi/Value flags 601 - -class name com/sun/jdi/ReferenceType -header extends java/lang/Object implements com/sun/jdi/Type,java/lang/Comparable,com/sun/jdi/Accessible flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/Type;Ljava/lang/Comparable;Lcom/sun/jdi/Accessible; - -class name com/sun/jdi/ShortType -header extends java/lang/Object implements com/sun/jdi/PrimitiveType flags 601 - -class name com/sun/jdi/ShortValue -header extends java/lang/Object implements com/sun/jdi/PrimitiveValue,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/PrimitiveValue;Ljava/lang/Comparable; - -class name com/sun/jdi/StackFrame -header extends java/lang/Object implements com/sun/jdi/Mirror,com/sun/jdi/Locatable flags 601 - -class name com/sun/jdi/StringReference -header extends java/lang/Object implements com/sun/jdi/ObjectReference flags 601 - -class name com/sun/jdi/ThreadGroupReference -header extends java/lang/Object implements com/sun/jdi/ObjectReference flags 601 - -class name com/sun/jdi/ThreadReference -header extends java/lang/Object implements com/sun/jdi/ObjectReference flags 601 - -class name com/sun/jdi/Type -header extends java/lang/Object implements com/sun/jdi/Mirror flags 601 - -class name com/sun/jdi/TypeComponent -header extends java/lang/Object implements com/sun/jdi/Mirror,com/sun/jdi/Accessible flags 601 - -class name com/sun/jdi/VMCannotBeModifiedException -header extends java/lang/UnsupportedOperationException flags 21 - -class name com/sun/jdi/VMDisconnectedException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/VMMismatchException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/VMOutOfMemoryException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/Value -header extends java/lang/Object implements com/sun/jdi/Mirror flags 601 - -class name com/sun/jdi/VirtualMachine -header extends java/lang/Object implements com/sun/jdi/Mirror flags 601 - -class name com/sun/jdi/VirtualMachineManager -header extends java/lang/Object flags 601 - -class name com/sun/jdi/VoidType -header extends java/lang/Object implements com/sun/jdi/Type flags 601 - -class name com/sun/jdi/VoidValue -header extends java/lang/Object implements com/sun/jdi/Value flags 601 - -class name com/sun/jdi/connect/AttachingConnector -header extends java/lang/Object implements com/sun/jdi/connect/Connector flags 601 -innerclass innerClass com/sun/jdi/connect/Connector$Argument outerClass com/sun/jdi/connect/Connector innerClassName Argument flags 609 - -class name com/sun/jdi/connect/IllegalConnectorArgumentsException -header extends java/lang/Exception flags 21 - -class name com/sun/jdi/connect/LaunchingConnector -header extends java/lang/Object implements com/sun/jdi/connect/Connector flags 601 -innerclass innerClass com/sun/jdi/connect/Connector$Argument outerClass com/sun/jdi/connect/Connector innerClassName Argument flags 609 - -class name com/sun/jdi/connect/ListeningConnector -header extends java/lang/Object implements com/sun/jdi/connect/Connector flags 601 -innerclass innerClass com/sun/jdi/connect/Connector$Argument outerClass com/sun/jdi/connect/Connector innerClassName Argument flags 609 - -class name com/sun/jdi/connect/Transport -header extends java/lang/Object flags 601 - -class name com/sun/jdi/connect/TransportTimeoutException -header extends java/io/IOException flags 21 - -class name com/sun/jdi/connect/VMStartException -header extends java/lang/Exception flags 21 - -class name com/sun/jdi/connect/spi/ClosedConnectionException -header extends java/io/IOException flags 21 - -class name com/sun/jdi/connect/spi/Connection -header extends java/lang/Object flags 421 - -class name com/sun/jdi/event/AccessWatchpointEvent -header extends java/lang/Object implements com/sun/jdi/event/WatchpointEvent flags 601 - -class name com/sun/jdi/event/BreakpointEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/ClassPrepareEvent -header extends java/lang/Object implements com/sun/jdi/event/Event flags 601 - -class name com/sun/jdi/event/ClassUnloadEvent -header extends java/lang/Object implements com/sun/jdi/event/Event flags 601 - -class name com/sun/jdi/event/Event -header extends java/lang/Object implements com/sun/jdi/Mirror flags 601 - -class name com/sun/jdi/event/EventIterator -header extends java/lang/Object implements java/util/Iterator flags 601 signature Ljava/lang/Object;Ljava/util/Iterator; - -class name com/sun/jdi/event/EventQueue -header extends java/lang/Object implements com/sun/jdi/Mirror flags 601 - -class name com/sun/jdi/event/EventSet -header extends java/lang/Object implements com/sun/jdi/Mirror,java/util/Set flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/Mirror;Ljava/util/Set; - -class name com/sun/jdi/event/ExceptionEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/LocatableEvent -header extends java/lang/Object implements com/sun/jdi/event/Event,com/sun/jdi/Locatable flags 601 - -class name com/sun/jdi/event/MethodEntryEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/MethodExitEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/ModificationWatchpointEvent -header extends java/lang/Object implements com/sun/jdi/event/WatchpointEvent flags 601 - -class name com/sun/jdi/event/MonitorContendedEnterEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/MonitorContendedEnteredEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/MonitorWaitEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/MonitorWaitedEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/StepEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/ThreadDeathEvent -header extends java/lang/Object implements com/sun/jdi/event/Event flags 601 - -class name com/sun/jdi/event/ThreadStartEvent -header extends java/lang/Object implements com/sun/jdi/event/Event flags 601 - -class name com/sun/jdi/event/VMDeathEvent -header extends java/lang/Object implements com/sun/jdi/event/Event flags 601 - -class name com/sun/jdi/event/VMDisconnectEvent -header extends java/lang/Object implements com/sun/jdi/event/Event flags 601 - -class name com/sun/jdi/event/VMStartEvent -header extends java/lang/Object implements com/sun/jdi/event/Event flags 601 - -class name com/sun/jdi/event/WatchpointEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/request/AccessWatchpointRequest -header extends java/lang/Object implements com/sun/jdi/request/WatchpointRequest flags 601 - -class name com/sun/jdi/request/BreakpointRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest,com/sun/jdi/Locatable flags 601 - -class name com/sun/jdi/request/ClassPrepareRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/ClassUnloadRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/DuplicateRequestException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/request/EventRequest -header extends java/lang/Object implements com/sun/jdi/Mirror flags 601 - -class name com/sun/jdi/request/EventRequestManager -header extends java/lang/Object implements com/sun/jdi/Mirror flags 601 - -class name com/sun/jdi/request/ExceptionRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/InvalidRequestStateException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/request/MethodEntryRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/MethodExitRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/ModificationWatchpointRequest -header extends java/lang/Object implements com/sun/jdi/request/WatchpointRequest flags 601 - -class name com/sun/jdi/request/MonitorContendedEnterRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/MonitorContendedEnteredRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/MonitorWaitRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/MonitorWaitedRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/StepRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/ThreadDeathRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/ThreadStartRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/VMDeathRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/WatchpointRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.jdi-I.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.jdi-I.sym.txt deleted file mode 100644 index 55fc5be41abd4..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.jdi-I.sym.txt +++ /dev/null @@ -1,395 +0,0 @@ -# -# Copyright (c) 2021, 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/AbsentInformationException -header extends java/lang/Exception flags 21 - -class name com/sun/jdi/Accessible -header extends java/lang/Object flags 601 - -class name com/sun/jdi/ArrayReference -header extends java/lang/Object implements com/sun/jdi/ObjectReference flags 601 - -class name com/sun/jdi/ArrayType -header extends java/lang/Object implements com/sun/jdi/ReferenceType flags 601 - -class name com/sun/jdi/BooleanType -header extends java/lang/Object implements com/sun/jdi/PrimitiveType flags 601 - -class name com/sun/jdi/BooleanValue -header extends java/lang/Object implements com/sun/jdi/PrimitiveValue flags 601 - -class name com/sun/jdi/Bootstrap -header extends java/lang/Object flags 21 - -class name com/sun/jdi/ByteType -header extends java/lang/Object implements com/sun/jdi/PrimitiveType flags 601 - -class name com/sun/jdi/ByteValue -header extends java/lang/Object implements com/sun/jdi/PrimitiveValue,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/PrimitiveValue;Ljava/lang/Comparable; - -class name com/sun/jdi/CharType -header extends java/lang/Object implements com/sun/jdi/PrimitiveType flags 601 - -class name com/sun/jdi/CharValue -header extends java/lang/Object implements com/sun/jdi/PrimitiveValue,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/PrimitiveValue;Ljava/lang/Comparable; - -class name com/sun/jdi/ClassLoaderReference -header extends java/lang/Object implements com/sun/jdi/ObjectReference flags 601 - -class name com/sun/jdi/ClassNotLoadedException -header extends java/lang/Exception flags 21 - -class name com/sun/jdi/ClassNotPreparedException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/ClassObjectReference -header extends java/lang/Object implements com/sun/jdi/ObjectReference flags 601 - -class name com/sun/jdi/ClassType -header extends java/lang/Object implements com/sun/jdi/ReferenceType flags 601 - -class name com/sun/jdi/DoubleType -header extends java/lang/Object implements com/sun/jdi/PrimitiveType flags 601 - -class name com/sun/jdi/DoubleValue -header extends java/lang/Object implements com/sun/jdi/PrimitiveValue,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/PrimitiveValue;Ljava/lang/Comparable; - -class name com/sun/jdi/Field -header extends java/lang/Object implements com/sun/jdi/TypeComponent,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/TypeComponent;Ljava/lang/Comparable; - -class name com/sun/jdi/FloatType -header extends java/lang/Object implements com/sun/jdi/PrimitiveType flags 601 - -class name com/sun/jdi/FloatValue -header extends java/lang/Object implements com/sun/jdi/PrimitiveValue,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/PrimitiveValue;Ljava/lang/Comparable; - -class name com/sun/jdi/IncompatibleThreadStateException -header extends java/lang/Exception flags 21 - -class name com/sun/jdi/InconsistentDebugInfoException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/IntegerType -header extends java/lang/Object implements com/sun/jdi/PrimitiveType flags 601 - -class name com/sun/jdi/IntegerValue -header extends java/lang/Object implements com/sun/jdi/PrimitiveValue,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/PrimitiveValue;Ljava/lang/Comparable; - -class name com/sun/jdi/InterfaceType -header extends java/lang/Object implements com/sun/jdi/ReferenceType flags 601 - -class name com/sun/jdi/InternalException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/InvalidCodeIndexException -header extends java/lang/RuntimeException flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated; - -class name com/sun/jdi/InvalidLineNumberException -header extends java/lang/RuntimeException flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated; - -class name com/sun/jdi/InvalidModuleException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/InvalidStackFrameException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/InvalidTypeException -header extends java/lang/Exception flags 21 - -class name com/sun/jdi/InvocationException -header extends java/lang/Exception flags 21 - -class name com/sun/jdi/JDIPermission -header extends java/security/BasicPermission flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/jdi/LocalVariable -header extends java/lang/Object implements com/sun/jdi/Mirror,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/Mirror;Ljava/lang/Comparable; - -class name com/sun/jdi/Locatable -header extends java/lang/Object flags 601 - -class name com/sun/jdi/Location -header extends java/lang/Object implements com/sun/jdi/Mirror,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/Mirror;Ljava/lang/Comparable; - -class name com/sun/jdi/LongType -header extends java/lang/Object implements com/sun/jdi/PrimitiveType flags 601 - -class name com/sun/jdi/LongValue -header extends java/lang/Object implements com/sun/jdi/PrimitiveValue,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/PrimitiveValue;Ljava/lang/Comparable; - -class name com/sun/jdi/Method -header extends java/lang/Object implements com/sun/jdi/TypeComponent,com/sun/jdi/Locatable,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/TypeComponent;Lcom/sun/jdi/Locatable;Ljava/lang/Comparable; - -class name com/sun/jdi/Mirror -header extends java/lang/Object flags 601 - -class name com/sun/jdi/ModuleReference -header extends java/lang/Object implements com/sun/jdi/ObjectReference flags 601 - -class name com/sun/jdi/MonitorInfo -header extends java/lang/Object implements com/sun/jdi/Mirror flags 601 - -class name com/sun/jdi/NativeMethodException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/ObjectCollectedException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/ObjectReference -header extends java/lang/Object implements com/sun/jdi/Value flags 601 - -class name com/sun/jdi/PathSearchingVirtualMachine -header extends java/lang/Object implements com/sun/jdi/VirtualMachine flags 601 - -class name com/sun/jdi/PrimitiveType -header extends java/lang/Object implements com/sun/jdi/Type flags 601 - -class name com/sun/jdi/PrimitiveValue -header extends java/lang/Object implements com/sun/jdi/Value flags 601 - -class name com/sun/jdi/ReferenceType -header extends java/lang/Object implements com/sun/jdi/Type,java/lang/Comparable,com/sun/jdi/Accessible flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/Type;Ljava/lang/Comparable;Lcom/sun/jdi/Accessible; - -class name com/sun/jdi/ShortType -header extends java/lang/Object implements com/sun/jdi/PrimitiveType flags 601 - -class name com/sun/jdi/ShortValue -header extends java/lang/Object implements com/sun/jdi/PrimitiveValue,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/PrimitiveValue;Ljava/lang/Comparable; - -class name com/sun/jdi/StackFrame -header extends java/lang/Object implements com/sun/jdi/Mirror,com/sun/jdi/Locatable flags 601 - -class name com/sun/jdi/StringReference -header extends java/lang/Object implements com/sun/jdi/ObjectReference flags 601 - -class name com/sun/jdi/ThreadGroupReference -header extends java/lang/Object implements com/sun/jdi/ObjectReference flags 601 - -class name com/sun/jdi/ThreadReference -header extends java/lang/Object implements com/sun/jdi/ObjectReference flags 601 - -class name com/sun/jdi/Type -header extends java/lang/Object implements com/sun/jdi/Mirror flags 601 - -class name com/sun/jdi/TypeComponent -header extends java/lang/Object implements com/sun/jdi/Mirror,com/sun/jdi/Accessible flags 601 - -class name com/sun/jdi/VMCannotBeModifiedException -header extends java/lang/UnsupportedOperationException flags 21 - -class name com/sun/jdi/VMDisconnectedException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/VMMismatchException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/VMOutOfMemoryException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/Value -header extends java/lang/Object implements com/sun/jdi/Mirror flags 601 - -class name com/sun/jdi/VirtualMachine -header extends java/lang/Object implements com/sun/jdi/Mirror flags 601 - -class name com/sun/jdi/VirtualMachineManager -header extends java/lang/Object flags 601 - -class name com/sun/jdi/VoidType -header extends java/lang/Object implements com/sun/jdi/Type flags 601 - -class name com/sun/jdi/VoidValue -header extends java/lang/Object implements com/sun/jdi/Value flags 601 - -class name com/sun/jdi/connect/AttachingConnector -header extends java/lang/Object implements com/sun/jdi/connect/Connector flags 601 -innerclass innerClass com/sun/jdi/connect/Connector$Argument outerClass com/sun/jdi/connect/Connector innerClassName Argument flags 609 - -class name com/sun/jdi/connect/IllegalConnectorArgumentsException -header extends java/lang/Exception flags 21 - -class name com/sun/jdi/connect/LaunchingConnector -header extends java/lang/Object implements com/sun/jdi/connect/Connector flags 601 -innerclass innerClass com/sun/jdi/connect/Connector$Argument outerClass com/sun/jdi/connect/Connector innerClassName Argument flags 609 - -class name com/sun/jdi/connect/ListeningConnector -header extends java/lang/Object implements com/sun/jdi/connect/Connector flags 601 -innerclass innerClass com/sun/jdi/connect/Connector$Argument outerClass com/sun/jdi/connect/Connector innerClassName Argument flags 609 - -class name com/sun/jdi/connect/Transport -header extends java/lang/Object flags 601 - -class name com/sun/jdi/connect/TransportTimeoutException -header extends java/io/IOException flags 21 - -class name com/sun/jdi/connect/VMStartException -header extends java/lang/Exception flags 21 - -class name com/sun/jdi/connect/spi/ClosedConnectionException -header extends java/io/IOException flags 21 - -class name com/sun/jdi/connect/spi/Connection -header extends java/lang/Object flags 421 - -class name com/sun/jdi/event/AccessWatchpointEvent -header extends java/lang/Object implements com/sun/jdi/event/WatchpointEvent flags 601 - -class name com/sun/jdi/event/BreakpointEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/ClassPrepareEvent -header extends java/lang/Object implements com/sun/jdi/event/Event flags 601 - -class name com/sun/jdi/event/ClassUnloadEvent -header extends java/lang/Object implements com/sun/jdi/event/Event flags 601 - -class name com/sun/jdi/event/Event -header extends java/lang/Object implements com/sun/jdi/Mirror flags 601 - -class name com/sun/jdi/event/EventIterator -header extends java/lang/Object implements java/util/Iterator flags 601 signature Ljava/lang/Object;Ljava/util/Iterator; - -class name com/sun/jdi/event/EventQueue -header extends java/lang/Object implements com/sun/jdi/Mirror flags 601 - -class name com/sun/jdi/event/EventSet -header extends java/lang/Object implements com/sun/jdi/Mirror,java/util/Set flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/Mirror;Ljava/util/Set; - -class name com/sun/jdi/event/ExceptionEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/LocatableEvent -header extends java/lang/Object implements com/sun/jdi/event/Event,com/sun/jdi/Locatable flags 601 - -class name com/sun/jdi/event/MethodEntryEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/MethodExitEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/ModificationWatchpointEvent -header extends java/lang/Object implements com/sun/jdi/event/WatchpointEvent flags 601 - -class name com/sun/jdi/event/MonitorContendedEnterEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/MonitorContendedEnteredEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/MonitorWaitEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/MonitorWaitedEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/StepEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/ThreadDeathEvent -header extends java/lang/Object implements com/sun/jdi/event/Event flags 601 - -class name com/sun/jdi/event/ThreadStartEvent -header extends java/lang/Object implements com/sun/jdi/event/Event flags 601 - -class name com/sun/jdi/event/VMDeathEvent -header extends java/lang/Object implements com/sun/jdi/event/Event flags 601 - -class name com/sun/jdi/event/VMDisconnectEvent -header extends java/lang/Object implements com/sun/jdi/event/Event flags 601 - -class name com/sun/jdi/event/VMStartEvent -header extends java/lang/Object implements com/sun/jdi/event/Event flags 601 - -class name com/sun/jdi/event/WatchpointEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/request/AccessWatchpointRequest -header extends java/lang/Object implements com/sun/jdi/request/WatchpointRequest flags 601 - -class name com/sun/jdi/request/BreakpointRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest,com/sun/jdi/Locatable flags 601 - -class name com/sun/jdi/request/ClassPrepareRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/ClassUnloadRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/DuplicateRequestException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/request/EventRequest -header extends java/lang/Object implements com/sun/jdi/Mirror flags 601 - -class name com/sun/jdi/request/EventRequestManager -header extends java/lang/Object implements com/sun/jdi/Mirror flags 601 - -class name com/sun/jdi/request/ExceptionRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/InvalidRequestStateException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/request/MethodEntryRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/MethodExitRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/ModificationWatchpointRequest -header extends java/lang/Object implements com/sun/jdi/request/WatchpointRequest flags 601 - -class name com/sun/jdi/request/MonitorContendedEnterRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/MonitorContendedEnteredRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/MonitorWaitRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/MonitorWaitedRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/StepRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/ThreadDeathRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/ThreadStartRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/VMDeathRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/WatchpointRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.jdi-J.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.jdi-J.sym.txt index 90b445e21a351..2b0df6c1fcaa8 100644 --- a/src/jdk.compiler/share/data/symbols/jdk.jdi-J.sym.txt +++ b/src/jdk.compiler/share/data/symbols/jdk.jdi-J.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -26,378 +26,20 @@ # ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ### # ########################################################## # -class name com/sun/jdi/AbsentInformationException -header extends java/lang/Exception flags 21 - -class name com/sun/jdi/Accessible -header extends java/lang/Object flags 601 - -class name com/sun/jdi/ArrayReference -header extends java/lang/Object implements com/sun/jdi/ObjectReference flags 601 - -class name com/sun/jdi/ArrayType -header extends java/lang/Object implements com/sun/jdi/ReferenceType flags 601 - -class name com/sun/jdi/BooleanType -header extends java/lang/Object implements com/sun/jdi/PrimitiveType flags 601 - -class name com/sun/jdi/BooleanValue -header extends java/lang/Object implements com/sun/jdi/PrimitiveValue flags 601 - -class name com/sun/jdi/Bootstrap -header extends java/lang/Object flags 21 - -class name com/sun/jdi/ByteType -header extends java/lang/Object implements com/sun/jdi/PrimitiveType flags 601 - -class name com/sun/jdi/ByteValue -header extends java/lang/Object implements com/sun/jdi/PrimitiveValue,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/PrimitiveValue;Ljava/lang/Comparable; - -class name com/sun/jdi/CharType -header extends java/lang/Object implements com/sun/jdi/PrimitiveType flags 601 - -class name com/sun/jdi/CharValue -header extends java/lang/Object implements com/sun/jdi/PrimitiveValue,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/PrimitiveValue;Ljava/lang/Comparable; - -class name com/sun/jdi/ClassLoaderReference -header extends java/lang/Object implements com/sun/jdi/ObjectReference flags 601 - -class name com/sun/jdi/ClassNotLoadedException -header extends java/lang/Exception flags 21 - -class name com/sun/jdi/ClassNotPreparedException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/ClassObjectReference -header extends java/lang/Object implements com/sun/jdi/ObjectReference flags 601 - -class name com/sun/jdi/ClassType -header extends java/lang/Object implements com/sun/jdi/ReferenceType flags 601 - -class name com/sun/jdi/DoubleType -header extends java/lang/Object implements com/sun/jdi/PrimitiveType flags 601 - -class name com/sun/jdi/DoubleValue -header extends java/lang/Object implements com/sun/jdi/PrimitiveValue,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/PrimitiveValue;Ljava/lang/Comparable; - -class name com/sun/jdi/Field -header extends java/lang/Object implements com/sun/jdi/TypeComponent,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/TypeComponent;Ljava/lang/Comparable; - -class name com/sun/jdi/FloatType -header extends java/lang/Object implements com/sun/jdi/PrimitiveType flags 601 - -class name com/sun/jdi/FloatValue -header extends java/lang/Object implements com/sun/jdi/PrimitiveValue,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/PrimitiveValue;Ljava/lang/Comparable; - -class name com/sun/jdi/IncompatibleThreadStateException -header extends java/lang/Exception flags 21 - -class name com/sun/jdi/InconsistentDebugInfoException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/IntegerType -header extends java/lang/Object implements com/sun/jdi/PrimitiveType flags 601 - -class name com/sun/jdi/IntegerValue -header extends java/lang/Object implements com/sun/jdi/PrimitiveValue,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/PrimitiveValue;Ljava/lang/Comparable; - -class name com/sun/jdi/InterfaceType -header extends java/lang/Object implements com/sun/jdi/ReferenceType flags 601 - -class name com/sun/jdi/InternalException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/InvalidCodeIndexException -header extends java/lang/RuntimeException flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated; - -class name com/sun/jdi/InvalidLineNumberException -header extends java/lang/RuntimeException flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated; - -class name com/sun/jdi/InvalidModuleException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/InvalidStackFrameException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/InvalidTypeException -header extends java/lang/Exception flags 21 - -class name com/sun/jdi/InvocationException -header extends java/lang/Exception flags 21 - -class name com/sun/jdi/JDIPermission -header extends java/security/BasicPermission flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/jdi/LocalVariable -header extends java/lang/Object implements com/sun/jdi/Mirror,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/Mirror;Ljava/lang/Comparable; - -class name com/sun/jdi/Locatable -header extends java/lang/Object flags 601 - -class name com/sun/jdi/Location -header extends java/lang/Object implements com/sun/jdi/Mirror,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/Mirror;Ljava/lang/Comparable; - -class name com/sun/jdi/LongType -header extends java/lang/Object implements com/sun/jdi/PrimitiveType flags 601 - -class name com/sun/jdi/LongValue -header extends java/lang/Object implements com/sun/jdi/PrimitiveValue,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/PrimitiveValue;Ljava/lang/Comparable; - -class name com/sun/jdi/Method -header extends java/lang/Object implements com/sun/jdi/TypeComponent,com/sun/jdi/Locatable,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/TypeComponent;Lcom/sun/jdi/Locatable;Ljava/lang/Comparable; - -class name com/sun/jdi/Mirror -header extends java/lang/Object flags 601 - -class name com/sun/jdi/ModuleReference -header extends java/lang/Object implements com/sun/jdi/ObjectReference flags 601 - -class name com/sun/jdi/MonitorInfo -header extends java/lang/Object implements com/sun/jdi/Mirror flags 601 - class name com/sun/jdi/NativeMethodException header extends com/sun/jdi/OpaqueFrameException flags 21 -class name com/sun/jdi/ObjectCollectedException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/ObjectReference -header extends java/lang/Object implements com/sun/jdi/Value flags 601 - class name com/sun/jdi/OpaqueFrameException -header extends java/lang/RuntimeException sealed true flags 21 +header extends java/lang/RuntimeException sealed true permittedSubclasses com/sun/jdi/NativeMethodException flags 21 method name descriptor ()V flags 1 method name descriptor (Ljava/lang/String;)V flags 1 -class name com/sun/jdi/PathSearchingVirtualMachine -header extends java/lang/Object implements com/sun/jdi/VirtualMachine flags 601 - -class name com/sun/jdi/PrimitiveType -header extends java/lang/Object implements com/sun/jdi/Type flags 601 - -class name com/sun/jdi/PrimitiveValue -header extends java/lang/Object implements com/sun/jdi/Value flags 601 - -class name com/sun/jdi/ReferenceType -header extends java/lang/Object implements com/sun/jdi/Type,java/lang/Comparable,com/sun/jdi/Accessible flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/Type;Ljava/lang/Comparable;Lcom/sun/jdi/Accessible; - -class name com/sun/jdi/ShortType -header extends java/lang/Object implements com/sun/jdi/PrimitiveType flags 601 - -class name com/sun/jdi/ShortValue -header extends java/lang/Object implements com/sun/jdi/PrimitiveValue,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/PrimitiveValue;Ljava/lang/Comparable; - -class name com/sun/jdi/StackFrame -header extends java/lang/Object implements com/sun/jdi/Mirror,com/sun/jdi/Locatable flags 601 - -class name com/sun/jdi/StringReference -header extends java/lang/Object implements com/sun/jdi/ObjectReference flags 601 - -class name com/sun/jdi/ThreadGroupReference -header extends java/lang/Object implements com/sun/jdi/ObjectReference flags 601 - class name com/sun/jdi/ThreadReference -header extends java/lang/Object implements com/sun/jdi/ObjectReference flags 601 method name isVirtual descriptor ()Z flags 1 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;VIRTUAL_THREADS;,reflective=Ztrue) -class name com/sun/jdi/Type -header extends java/lang/Object implements com/sun/jdi/Mirror flags 601 - -class name com/sun/jdi/TypeComponent -header extends java/lang/Object implements com/sun/jdi/Mirror,com/sun/jdi/Accessible flags 601 - -class name com/sun/jdi/VMCannotBeModifiedException -header extends java/lang/UnsupportedOperationException flags 21 - -class name com/sun/jdi/VMDisconnectedException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/VMMismatchException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/VMOutOfMemoryException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/Value -header extends java/lang/Object implements com/sun/jdi/Mirror flags 601 - -class name com/sun/jdi/VirtualMachine -header extends java/lang/Object implements com/sun/jdi/Mirror flags 601 - -class name com/sun/jdi/VirtualMachineManager -header extends java/lang/Object flags 601 - -class name com/sun/jdi/VoidType -header extends java/lang/Object implements com/sun/jdi/Type flags 601 - -class name com/sun/jdi/VoidValue -header extends java/lang/Object implements com/sun/jdi/Value flags 601 - -class name com/sun/jdi/connect/AttachingConnector -header extends java/lang/Object implements com/sun/jdi/connect/Connector flags 601 -innerclass innerClass com/sun/jdi/connect/Connector$Argument outerClass com/sun/jdi/connect/Connector innerClassName Argument flags 609 - -class name com/sun/jdi/connect/IllegalConnectorArgumentsException -header extends java/lang/Exception flags 21 - -class name com/sun/jdi/connect/LaunchingConnector -header extends java/lang/Object implements com/sun/jdi/connect/Connector flags 601 -innerclass innerClass com/sun/jdi/connect/Connector$Argument outerClass com/sun/jdi/connect/Connector innerClassName Argument flags 609 - -class name com/sun/jdi/connect/ListeningConnector -header extends java/lang/Object implements com/sun/jdi/connect/Connector flags 601 -innerclass innerClass com/sun/jdi/connect/Connector$Argument outerClass com/sun/jdi/connect/Connector innerClassName Argument flags 609 - -class name com/sun/jdi/connect/Transport -header extends java/lang/Object flags 601 - -class name com/sun/jdi/connect/TransportTimeoutException -header extends java/io/IOException flags 21 - -class name com/sun/jdi/connect/VMStartException -header extends java/lang/Exception flags 21 - -class name com/sun/jdi/connect/spi/ClosedConnectionException -header extends java/io/IOException flags 21 - -class name com/sun/jdi/connect/spi/Connection -header extends java/lang/Object flags 421 - -class name com/sun/jdi/event/AccessWatchpointEvent -header extends java/lang/Object implements com/sun/jdi/event/WatchpointEvent flags 601 - -class name com/sun/jdi/event/BreakpointEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/ClassPrepareEvent -header extends java/lang/Object implements com/sun/jdi/event/Event flags 601 - -class name com/sun/jdi/event/ClassUnloadEvent -header extends java/lang/Object implements com/sun/jdi/event/Event flags 601 - -class name com/sun/jdi/event/Event -header extends java/lang/Object implements com/sun/jdi/Mirror flags 601 - -class name com/sun/jdi/event/EventIterator -header extends java/lang/Object implements java/util/Iterator flags 601 signature Ljava/lang/Object;Ljava/util/Iterator; - -class name com/sun/jdi/event/EventQueue -header extends java/lang/Object implements com/sun/jdi/Mirror flags 601 - -class name com/sun/jdi/event/EventSet -header extends java/lang/Object implements com/sun/jdi/Mirror,java/util/Set flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/Mirror;Ljava/util/Set; - -class name com/sun/jdi/event/ExceptionEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/LocatableEvent -header extends java/lang/Object implements com/sun/jdi/event/Event,com/sun/jdi/Locatable flags 601 - -class name com/sun/jdi/event/MethodEntryEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/MethodExitEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/ModificationWatchpointEvent -header extends java/lang/Object implements com/sun/jdi/event/WatchpointEvent flags 601 - -class name com/sun/jdi/event/MonitorContendedEnterEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/MonitorContendedEnteredEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/MonitorWaitEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/MonitorWaitedEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/StepEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/ThreadDeathEvent -header extends java/lang/Object implements com/sun/jdi/event/Event flags 601 - -class name com/sun/jdi/event/ThreadStartEvent -header extends java/lang/Object implements com/sun/jdi/event/Event flags 601 - -class name com/sun/jdi/event/VMDeathEvent -header extends java/lang/Object implements com/sun/jdi/event/Event flags 601 - -class name com/sun/jdi/event/VMDisconnectEvent -header extends java/lang/Object implements com/sun/jdi/event/Event flags 601 - -class name com/sun/jdi/event/VMStartEvent -header extends java/lang/Object implements com/sun/jdi/event/Event flags 601 - -class name com/sun/jdi/event/WatchpointEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/request/AccessWatchpointRequest -header extends java/lang/Object implements com/sun/jdi/request/WatchpointRequest flags 601 - -class name com/sun/jdi/request/BreakpointRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest,com/sun/jdi/Locatable flags 601 - -class name com/sun/jdi/request/ClassPrepareRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/ClassUnloadRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/DuplicateRequestException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/request/EventRequest -header extends java/lang/Object implements com/sun/jdi/Mirror flags 601 - -class name com/sun/jdi/request/EventRequestManager -header extends java/lang/Object implements com/sun/jdi/Mirror flags 601 - -class name com/sun/jdi/request/ExceptionRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/InvalidRequestStateException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/request/MethodEntryRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/MethodExitRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/ModificationWatchpointRequest -header extends java/lang/Object implements com/sun/jdi/request/WatchpointRequest flags 601 - -class name com/sun/jdi/request/MonitorContendedEnterRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/MonitorContendedEnteredRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/MonitorWaitRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/MonitorWaitedRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/StepRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - class name com/sun/jdi/request/ThreadDeathRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 method name addPlatformThreadsOnlyFilter descriptor ()V flags 1 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;VIRTUAL_THREADS;,reflective=Ztrue) class name com/sun/jdi/request/ThreadStartRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 method name addPlatformThreadsOnlyFilter descriptor ()V flags 1 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;VIRTUAL_THREADS;,reflective=Ztrue) -class name com/sun/jdi/request/VMDeathRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/WatchpointRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.jdi-K.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.jdi-K.sym.txt deleted file mode 100644 index 0f1be41e51db8..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.jdi-K.sym.txt +++ /dev/null @@ -1,395 +0,0 @@ -# -# Copyright (c) 2022, 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/AbsentInformationException -header extends java/lang/Exception flags 21 - -class name com/sun/jdi/Accessible -header extends java/lang/Object flags 601 - -class name com/sun/jdi/ArrayReference -header extends java/lang/Object implements com/sun/jdi/ObjectReference flags 601 - -class name com/sun/jdi/ArrayType -header extends java/lang/Object implements com/sun/jdi/ReferenceType flags 601 - -class name com/sun/jdi/BooleanType -header extends java/lang/Object implements com/sun/jdi/PrimitiveType flags 601 - -class name com/sun/jdi/BooleanValue -header extends java/lang/Object implements com/sun/jdi/PrimitiveValue flags 601 - -class name com/sun/jdi/Bootstrap -header extends java/lang/Object flags 21 - -class name com/sun/jdi/ByteType -header extends java/lang/Object implements com/sun/jdi/PrimitiveType flags 601 - -class name com/sun/jdi/ByteValue -header extends java/lang/Object implements com/sun/jdi/PrimitiveValue,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/PrimitiveValue;Ljava/lang/Comparable; - -class name com/sun/jdi/CharType -header extends java/lang/Object implements com/sun/jdi/PrimitiveType flags 601 - -class name com/sun/jdi/CharValue -header extends java/lang/Object implements com/sun/jdi/PrimitiveValue,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/PrimitiveValue;Ljava/lang/Comparable; - -class name com/sun/jdi/ClassLoaderReference -header extends java/lang/Object implements com/sun/jdi/ObjectReference flags 601 - -class name com/sun/jdi/ClassNotLoadedException -header extends java/lang/Exception flags 21 - -class name com/sun/jdi/ClassNotPreparedException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/ClassObjectReference -header extends java/lang/Object implements com/sun/jdi/ObjectReference flags 601 - -class name com/sun/jdi/ClassType -header extends java/lang/Object implements com/sun/jdi/ReferenceType flags 601 - -class name com/sun/jdi/DoubleType -header extends java/lang/Object implements com/sun/jdi/PrimitiveType flags 601 - -class name com/sun/jdi/DoubleValue -header extends java/lang/Object implements com/sun/jdi/PrimitiveValue,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/PrimitiveValue;Ljava/lang/Comparable; - -class name com/sun/jdi/Field -header extends java/lang/Object implements com/sun/jdi/TypeComponent,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/TypeComponent;Ljava/lang/Comparable; - -class name com/sun/jdi/FloatType -header extends java/lang/Object implements com/sun/jdi/PrimitiveType flags 601 - -class name com/sun/jdi/FloatValue -header extends java/lang/Object implements com/sun/jdi/PrimitiveValue,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/PrimitiveValue;Ljava/lang/Comparable; - -class name com/sun/jdi/IncompatibleThreadStateException -header extends java/lang/Exception flags 21 - -class name com/sun/jdi/InconsistentDebugInfoException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/IntegerType -header extends java/lang/Object implements com/sun/jdi/PrimitiveType flags 601 - -class name com/sun/jdi/IntegerValue -header extends java/lang/Object implements com/sun/jdi/PrimitiveValue,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/PrimitiveValue;Ljava/lang/Comparable; - -class name com/sun/jdi/InterfaceType -header extends java/lang/Object implements com/sun/jdi/ReferenceType flags 601 - -class name com/sun/jdi/InternalException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/InvalidCodeIndexException -header extends java/lang/RuntimeException flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated; - -class name com/sun/jdi/InvalidLineNumberException -header extends java/lang/RuntimeException flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated; - -class name com/sun/jdi/InvalidModuleException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/InvalidStackFrameException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/InvalidTypeException -header extends java/lang/Exception flags 21 - -class name com/sun/jdi/InvocationException -header extends java/lang/Exception flags 21 - -class name com/sun/jdi/JDIPermission -header extends java/security/BasicPermission flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/jdi/LocalVariable -header extends java/lang/Object implements com/sun/jdi/Mirror,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/Mirror;Ljava/lang/Comparable; - -class name com/sun/jdi/Locatable -header extends java/lang/Object flags 601 - -class name com/sun/jdi/Location -header extends java/lang/Object implements com/sun/jdi/Mirror,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/Mirror;Ljava/lang/Comparable; - -class name com/sun/jdi/LongType -header extends java/lang/Object implements com/sun/jdi/PrimitiveType flags 601 - -class name com/sun/jdi/LongValue -header extends java/lang/Object implements com/sun/jdi/PrimitiveValue,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/PrimitiveValue;Ljava/lang/Comparable; - -class name com/sun/jdi/Method -header extends java/lang/Object implements com/sun/jdi/TypeComponent,com/sun/jdi/Locatable,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/TypeComponent;Lcom/sun/jdi/Locatable;Ljava/lang/Comparable; - -class name com/sun/jdi/Mirror -header extends java/lang/Object flags 601 - -class name com/sun/jdi/ModuleReference -header extends java/lang/Object implements com/sun/jdi/ObjectReference flags 601 - -class name com/sun/jdi/MonitorInfo -header extends java/lang/Object implements com/sun/jdi/Mirror flags 601 - -class name com/sun/jdi/ObjectCollectedException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/ObjectReference -header extends java/lang/Object implements com/sun/jdi/Value flags 601 - -class name com/sun/jdi/OpaqueFrameException -header extends java/lang/RuntimeException sealed true flags 21 - -class name com/sun/jdi/PathSearchingVirtualMachine -header extends java/lang/Object implements com/sun/jdi/VirtualMachine flags 601 - -class name com/sun/jdi/PrimitiveType -header extends java/lang/Object implements com/sun/jdi/Type flags 601 - -class name com/sun/jdi/PrimitiveValue -header extends java/lang/Object implements com/sun/jdi/Value flags 601 - -class name com/sun/jdi/ReferenceType -header extends java/lang/Object implements com/sun/jdi/Type,java/lang/Comparable,com/sun/jdi/Accessible flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/Type;Ljava/lang/Comparable;Lcom/sun/jdi/Accessible; - -class name com/sun/jdi/ShortType -header extends java/lang/Object implements com/sun/jdi/PrimitiveType flags 601 - -class name com/sun/jdi/ShortValue -header extends java/lang/Object implements com/sun/jdi/PrimitiveValue,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/PrimitiveValue;Ljava/lang/Comparable; - -class name com/sun/jdi/StackFrame -header extends java/lang/Object implements com/sun/jdi/Mirror,com/sun/jdi/Locatable flags 601 - -class name com/sun/jdi/StringReference -header extends java/lang/Object implements com/sun/jdi/ObjectReference flags 601 - -class name com/sun/jdi/ThreadGroupReference -header extends java/lang/Object implements com/sun/jdi/ObjectReference flags 601 - -class name com/sun/jdi/ThreadReference -header extends java/lang/Object implements com/sun/jdi/ObjectReference flags 601 - -class name com/sun/jdi/Type -header extends java/lang/Object implements com/sun/jdi/Mirror flags 601 - -class name com/sun/jdi/TypeComponent -header extends java/lang/Object implements com/sun/jdi/Mirror,com/sun/jdi/Accessible flags 601 - -class name com/sun/jdi/VMCannotBeModifiedException -header extends java/lang/UnsupportedOperationException flags 21 - -class name com/sun/jdi/VMDisconnectedException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/VMMismatchException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/VMOutOfMemoryException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/Value -header extends java/lang/Object implements com/sun/jdi/Mirror flags 601 - -class name com/sun/jdi/VirtualMachine -header extends java/lang/Object implements com/sun/jdi/Mirror flags 601 - -class name com/sun/jdi/VirtualMachineManager -header extends java/lang/Object flags 601 - -class name com/sun/jdi/VoidType -header extends java/lang/Object implements com/sun/jdi/Type flags 601 - -class name com/sun/jdi/VoidValue -header extends java/lang/Object implements com/sun/jdi/Value flags 601 - -class name com/sun/jdi/connect/AttachingConnector -header extends java/lang/Object implements com/sun/jdi/connect/Connector flags 601 -innerclass innerClass com/sun/jdi/connect/Connector$Argument outerClass com/sun/jdi/connect/Connector innerClassName Argument flags 609 - -class name com/sun/jdi/connect/IllegalConnectorArgumentsException -header extends java/lang/Exception flags 21 - -class name com/sun/jdi/connect/LaunchingConnector -header extends java/lang/Object implements com/sun/jdi/connect/Connector flags 601 -innerclass innerClass com/sun/jdi/connect/Connector$Argument outerClass com/sun/jdi/connect/Connector innerClassName Argument flags 609 - -class name com/sun/jdi/connect/ListeningConnector -header extends java/lang/Object implements com/sun/jdi/connect/Connector flags 601 -innerclass innerClass com/sun/jdi/connect/Connector$Argument outerClass com/sun/jdi/connect/Connector innerClassName Argument flags 609 - -class name com/sun/jdi/connect/Transport -header extends java/lang/Object flags 601 - -class name com/sun/jdi/connect/TransportTimeoutException -header extends java/io/IOException flags 21 - -class name com/sun/jdi/connect/VMStartException -header extends java/lang/Exception flags 21 - -class name com/sun/jdi/connect/spi/ClosedConnectionException -header extends java/io/IOException flags 21 - -class name com/sun/jdi/connect/spi/Connection -header extends java/lang/Object flags 421 - -class name com/sun/jdi/event/AccessWatchpointEvent -header extends java/lang/Object implements com/sun/jdi/event/WatchpointEvent flags 601 - -class name com/sun/jdi/event/BreakpointEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/ClassPrepareEvent -header extends java/lang/Object implements com/sun/jdi/event/Event flags 601 - -class name com/sun/jdi/event/ClassUnloadEvent -header extends java/lang/Object implements com/sun/jdi/event/Event flags 601 - -class name com/sun/jdi/event/Event -header extends java/lang/Object implements com/sun/jdi/Mirror flags 601 - -class name com/sun/jdi/event/EventIterator -header extends java/lang/Object implements java/util/Iterator flags 601 signature Ljava/lang/Object;Ljava/util/Iterator; - -class name com/sun/jdi/event/EventQueue -header extends java/lang/Object implements com/sun/jdi/Mirror flags 601 - -class name com/sun/jdi/event/EventSet -header extends java/lang/Object implements com/sun/jdi/Mirror,java/util/Set flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/Mirror;Ljava/util/Set; - -class name com/sun/jdi/event/ExceptionEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/LocatableEvent -header extends java/lang/Object implements com/sun/jdi/event/Event,com/sun/jdi/Locatable flags 601 - -class name com/sun/jdi/event/MethodEntryEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/MethodExitEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/ModificationWatchpointEvent -header extends java/lang/Object implements com/sun/jdi/event/WatchpointEvent flags 601 - -class name com/sun/jdi/event/MonitorContendedEnterEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/MonitorContendedEnteredEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/MonitorWaitEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/MonitorWaitedEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/StepEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/ThreadDeathEvent -header extends java/lang/Object implements com/sun/jdi/event/Event flags 601 - -class name com/sun/jdi/event/ThreadStartEvent -header extends java/lang/Object implements com/sun/jdi/event/Event flags 601 - -class name com/sun/jdi/event/VMDeathEvent -header extends java/lang/Object implements com/sun/jdi/event/Event flags 601 - -class name com/sun/jdi/event/VMDisconnectEvent -header extends java/lang/Object implements com/sun/jdi/event/Event flags 601 - -class name com/sun/jdi/event/VMStartEvent -header extends java/lang/Object implements com/sun/jdi/event/Event flags 601 - -class name com/sun/jdi/event/WatchpointEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/request/AccessWatchpointRequest -header extends java/lang/Object implements com/sun/jdi/request/WatchpointRequest flags 601 - -class name com/sun/jdi/request/BreakpointRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest,com/sun/jdi/Locatable flags 601 - -class name com/sun/jdi/request/ClassPrepareRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/ClassUnloadRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/DuplicateRequestException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/request/EventRequest -header extends java/lang/Object implements com/sun/jdi/Mirror flags 601 - -class name com/sun/jdi/request/EventRequestManager -header extends java/lang/Object implements com/sun/jdi/Mirror flags 601 - -class name com/sun/jdi/request/ExceptionRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/InvalidRequestStateException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/request/MethodEntryRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/MethodExitRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/ModificationWatchpointRequest -header extends java/lang/Object implements com/sun/jdi/request/WatchpointRequest flags 601 - -class name com/sun/jdi/request/MonitorContendedEnterRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/MonitorContendedEnteredRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/MonitorWaitRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/MonitorWaitedRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/StepRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/ThreadDeathRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/ThreadStartRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/VMDeathRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/WatchpointRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.jdi-L.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.jdi-L.sym.txt index 3119be374c605..c725a521e0e1b 100644 --- a/src/jdk.compiler/share/data/symbols/jdk.jdi-L.sym.txt +++ b/src/jdk.compiler/share/data/symbols/jdk.jdi-L.sym.txt @@ -26,376 +26,15 @@ # ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ### # ########################################################## # -class name com/sun/jdi/AbsentInformationException -header extends java/lang/Exception flags 21 - -class name com/sun/jdi/Accessible -header extends java/lang/Object flags 601 - -class name com/sun/jdi/ArrayReference -header extends java/lang/Object implements com/sun/jdi/ObjectReference flags 601 - -class name com/sun/jdi/ArrayType -header extends java/lang/Object implements com/sun/jdi/ReferenceType flags 601 - -class name com/sun/jdi/BooleanType -header extends java/lang/Object implements com/sun/jdi/PrimitiveType flags 601 - -class name com/sun/jdi/BooleanValue -header extends java/lang/Object implements com/sun/jdi/PrimitiveValue flags 601 - -class name com/sun/jdi/Bootstrap -header extends java/lang/Object flags 21 - -class name com/sun/jdi/ByteType -header extends java/lang/Object implements com/sun/jdi/PrimitiveType flags 601 - -class name com/sun/jdi/ByteValue -header extends java/lang/Object implements com/sun/jdi/PrimitiveValue,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/PrimitiveValue;Ljava/lang/Comparable; - -class name com/sun/jdi/CharType -header extends java/lang/Object implements com/sun/jdi/PrimitiveType flags 601 - -class name com/sun/jdi/CharValue -header extends java/lang/Object implements com/sun/jdi/PrimitiveValue,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/PrimitiveValue;Ljava/lang/Comparable; - -class name com/sun/jdi/ClassLoaderReference -header extends java/lang/Object implements com/sun/jdi/ObjectReference flags 601 - -class name com/sun/jdi/ClassNotLoadedException -header extends java/lang/Exception flags 21 - -class name com/sun/jdi/ClassNotPreparedException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/ClassObjectReference -header extends java/lang/Object implements com/sun/jdi/ObjectReference flags 601 - -class name com/sun/jdi/ClassType -header extends java/lang/Object implements com/sun/jdi/ReferenceType flags 601 - -class name com/sun/jdi/DoubleType -header extends java/lang/Object implements com/sun/jdi/PrimitiveType flags 601 - -class name com/sun/jdi/DoubleValue -header extends java/lang/Object implements com/sun/jdi/PrimitiveValue,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/PrimitiveValue;Ljava/lang/Comparable; - -class name com/sun/jdi/Field -header extends java/lang/Object implements com/sun/jdi/TypeComponent,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/TypeComponent;Ljava/lang/Comparable; - -class name com/sun/jdi/FloatType -header extends java/lang/Object implements com/sun/jdi/PrimitiveType flags 601 - -class name com/sun/jdi/FloatValue -header extends java/lang/Object implements com/sun/jdi/PrimitiveValue,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/PrimitiveValue;Ljava/lang/Comparable; - -class name com/sun/jdi/IncompatibleThreadStateException -header extends java/lang/Exception flags 21 - -class name com/sun/jdi/InconsistentDebugInfoException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/IntegerType -header extends java/lang/Object implements com/sun/jdi/PrimitiveType flags 601 - -class name com/sun/jdi/IntegerValue -header extends java/lang/Object implements com/sun/jdi/PrimitiveValue,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/PrimitiveValue;Ljava/lang/Comparable; - -class name com/sun/jdi/InterfaceType -header extends java/lang/Object implements com/sun/jdi/ReferenceType flags 601 - -class name com/sun/jdi/InternalException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/InvalidCodeIndexException -header extends java/lang/RuntimeException flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated; - -class name com/sun/jdi/InvalidLineNumberException -header extends java/lang/RuntimeException flags 21 deprecated true runtimeAnnotations @Ljava/lang/Deprecated; - -class name com/sun/jdi/InvalidModuleException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/InvalidStackFrameException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/InvalidTypeException -header extends java/lang/Exception flags 21 - -class name com/sun/jdi/InvocationException -header extends java/lang/Exception flags 21 - -class name com/sun/jdi/JDIPermission -header extends java/security/BasicPermission flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/jdi/LocalVariable -header extends java/lang/Object implements com/sun/jdi/Mirror,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/Mirror;Ljava/lang/Comparable; - -class name com/sun/jdi/Locatable -header extends java/lang/Object flags 601 - -class name com/sun/jdi/Location -header extends java/lang/Object implements com/sun/jdi/Mirror,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/Mirror;Ljava/lang/Comparable; - -class name com/sun/jdi/LongType -header extends java/lang/Object implements com/sun/jdi/PrimitiveType flags 601 - -class name com/sun/jdi/LongValue -header extends java/lang/Object implements com/sun/jdi/PrimitiveValue,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/PrimitiveValue;Ljava/lang/Comparable; - -class name com/sun/jdi/Method -header extends java/lang/Object implements com/sun/jdi/TypeComponent,com/sun/jdi/Locatable,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/TypeComponent;Lcom/sun/jdi/Locatable;Ljava/lang/Comparable; - -class name com/sun/jdi/Mirror -header extends java/lang/Object flags 601 - -class name com/sun/jdi/ModuleReference -header extends java/lang/Object implements com/sun/jdi/ObjectReference flags 601 - -class name com/sun/jdi/MonitorInfo -header extends java/lang/Object implements com/sun/jdi/Mirror flags 601 - -class name com/sun/jdi/ObjectCollectedException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/ObjectReference -header extends java/lang/Object implements com/sun/jdi/Value flags 601 - -class name com/sun/jdi/OpaqueFrameException -header extends java/lang/RuntimeException sealed true flags 21 - -class name com/sun/jdi/PathSearchingVirtualMachine -header extends java/lang/Object implements com/sun/jdi/VirtualMachine flags 601 - -class name com/sun/jdi/PrimitiveType -header extends java/lang/Object implements com/sun/jdi/Type flags 601 - -class name com/sun/jdi/PrimitiveValue -header extends java/lang/Object implements com/sun/jdi/Value flags 601 - -class name com/sun/jdi/ReferenceType -header extends java/lang/Object implements com/sun/jdi/Type,java/lang/Comparable,com/sun/jdi/Accessible flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/Type;Ljava/lang/Comparable;Lcom/sun/jdi/Accessible; - -class name com/sun/jdi/ShortType -header extends java/lang/Object implements com/sun/jdi/PrimitiveType flags 601 - -class name com/sun/jdi/ShortValue -header extends java/lang/Object implements com/sun/jdi/PrimitiveValue,java/lang/Comparable flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/PrimitiveValue;Ljava/lang/Comparable; - -class name com/sun/jdi/StackFrame -header extends java/lang/Object implements com/sun/jdi/Mirror,com/sun/jdi/Locatable flags 601 - -class name com/sun/jdi/StringReference -header extends java/lang/Object implements com/sun/jdi/ObjectReference flags 601 - -class name com/sun/jdi/ThreadGroupReference -header extends java/lang/Object implements com/sun/jdi/ObjectReference flags 601 - class name com/sun/jdi/ThreadReference -header extends java/lang/Object implements com/sun/jdi/ObjectReference flags 601 -method name isVirtual descriptor ()Z method name isVirtual descriptor ()Z flags 1 -class name com/sun/jdi/Type -header extends java/lang/Object implements com/sun/jdi/Mirror flags 601 - -class name com/sun/jdi/TypeComponent -header extends java/lang/Object implements com/sun/jdi/Mirror,com/sun/jdi/Accessible flags 601 - -class name com/sun/jdi/VMCannotBeModifiedException -header extends java/lang/UnsupportedOperationException flags 21 - -class name com/sun/jdi/VMDisconnectedException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/VMMismatchException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/VMOutOfMemoryException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/Value -header extends java/lang/Object implements com/sun/jdi/Mirror flags 601 - -class name com/sun/jdi/VirtualMachine -header extends java/lang/Object implements com/sun/jdi/Mirror flags 601 - -class name com/sun/jdi/VirtualMachineManager -header extends java/lang/Object flags 601 - -class name com/sun/jdi/VoidType -header extends java/lang/Object implements com/sun/jdi/Type flags 601 - -class name com/sun/jdi/VoidValue -header extends java/lang/Object implements com/sun/jdi/Value flags 601 - -class name com/sun/jdi/connect/AttachingConnector -header extends java/lang/Object implements com/sun/jdi/connect/Connector flags 601 -innerclass innerClass com/sun/jdi/connect/Connector$Argument outerClass com/sun/jdi/connect/Connector innerClassName Argument flags 609 - -class name com/sun/jdi/connect/IllegalConnectorArgumentsException -header extends java/lang/Exception flags 21 - -class name com/sun/jdi/connect/LaunchingConnector -header extends java/lang/Object implements com/sun/jdi/connect/Connector flags 601 -innerclass innerClass com/sun/jdi/connect/Connector$Argument outerClass com/sun/jdi/connect/Connector innerClassName Argument flags 609 - -class name com/sun/jdi/connect/ListeningConnector -header extends java/lang/Object implements com/sun/jdi/connect/Connector flags 601 -innerclass innerClass com/sun/jdi/connect/Connector$Argument outerClass com/sun/jdi/connect/Connector innerClassName Argument flags 609 - -class name com/sun/jdi/connect/Transport -header extends java/lang/Object flags 601 - -class name com/sun/jdi/connect/TransportTimeoutException -header extends java/io/IOException flags 21 - -class name com/sun/jdi/connect/VMStartException -header extends java/lang/Exception flags 21 - -class name com/sun/jdi/connect/spi/ClosedConnectionException -header extends java/io/IOException flags 21 - -class name com/sun/jdi/connect/spi/Connection -header extends java/lang/Object flags 421 - -class name com/sun/jdi/event/AccessWatchpointEvent -header extends java/lang/Object implements com/sun/jdi/event/WatchpointEvent flags 601 - -class name com/sun/jdi/event/BreakpointEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/ClassPrepareEvent -header extends java/lang/Object implements com/sun/jdi/event/Event flags 601 - -class name com/sun/jdi/event/ClassUnloadEvent -header extends java/lang/Object implements com/sun/jdi/event/Event flags 601 - -class name com/sun/jdi/event/Event -header extends java/lang/Object implements com/sun/jdi/Mirror flags 601 - -class name com/sun/jdi/event/EventIterator -header extends java/lang/Object implements java/util/Iterator flags 601 signature Ljava/lang/Object;Ljava/util/Iterator; - -class name com/sun/jdi/event/EventQueue -header extends java/lang/Object implements com/sun/jdi/Mirror flags 601 - -class name com/sun/jdi/event/EventSet -header extends java/lang/Object implements com/sun/jdi/Mirror,java/util/Set flags 601 signature Ljava/lang/Object;Lcom/sun/jdi/Mirror;Ljava/util/Set; - -class name com/sun/jdi/event/ExceptionEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/LocatableEvent -header extends java/lang/Object implements com/sun/jdi/event/Event,com/sun/jdi/Locatable flags 601 - -class name com/sun/jdi/event/MethodEntryEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/MethodExitEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/ModificationWatchpointEvent -header extends java/lang/Object implements com/sun/jdi/event/WatchpointEvent flags 601 - -class name com/sun/jdi/event/MonitorContendedEnterEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/MonitorContendedEnteredEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/MonitorWaitEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/MonitorWaitedEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/StepEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/event/ThreadDeathEvent -header extends java/lang/Object implements com/sun/jdi/event/Event flags 601 - -class name com/sun/jdi/event/ThreadStartEvent -header extends java/lang/Object implements com/sun/jdi/event/Event flags 601 - -class name com/sun/jdi/event/VMDeathEvent -header extends java/lang/Object implements com/sun/jdi/event/Event flags 601 - -class name com/sun/jdi/event/VMDisconnectEvent -header extends java/lang/Object implements com/sun/jdi/event/Event flags 601 - -class name com/sun/jdi/event/VMStartEvent -header extends java/lang/Object implements com/sun/jdi/event/Event flags 601 - -class name com/sun/jdi/event/WatchpointEvent -header extends java/lang/Object implements com/sun/jdi/event/LocatableEvent flags 601 - -class name com/sun/jdi/request/AccessWatchpointRequest -header extends java/lang/Object implements com/sun/jdi/request/WatchpointRequest flags 601 - -class name com/sun/jdi/request/BreakpointRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest,com/sun/jdi/Locatable flags 601 - -class name com/sun/jdi/request/ClassPrepareRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/ClassUnloadRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/DuplicateRequestException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/request/EventRequest -header extends java/lang/Object implements com/sun/jdi/Mirror flags 601 - -class name com/sun/jdi/request/EventRequestManager -header extends java/lang/Object implements com/sun/jdi/Mirror flags 601 - -class name com/sun/jdi/request/ExceptionRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/InvalidRequestStateException -header extends java/lang/RuntimeException flags 21 - -class name com/sun/jdi/request/MethodEntryRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/MethodExitRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/ModificationWatchpointRequest -header extends java/lang/Object implements com/sun/jdi/request/WatchpointRequest flags 601 - -class name com/sun/jdi/request/MonitorContendedEnterRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/MonitorContendedEnteredRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/MonitorWaitRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/MonitorWaitedRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/StepRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - class name com/sun/jdi/request/ThreadDeathRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 -method name addPlatformThreadsOnlyFilter descriptor ()V method name addPlatformThreadsOnlyFilter descriptor ()V flags 1 class name com/sun/jdi/request/ThreadStartRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 -method name addPlatformThreadsOnlyFilter descriptor ()V method name addPlatformThreadsOnlyFilter descriptor ()V flags 1 -class name com/sun/jdi/request/VMDeathRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - -class name com/sun/jdi/request/WatchpointRequest -header extends java/lang/Object implements com/sun/jdi/request/EventRequest flags 601 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.jfr-J.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.jfr-J.sym.txt index da33c0fb4a0e7..9dded5e1feb8c 100644 --- a/src/jdk.compiler/share/data/symbols/jdk.jfr-J.sym.txt +++ b/src/jdk.compiler/share/data/symbols/jdk.jfr-J.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2022, 2023, 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 @@ -27,7 +27,7 @@ # ########################################################## # class name jdk/jfr/consumer/RecordedObject -header extends java/lang/Object sealed true flags 21 +header extends java/lang/Object sealed true permittedSubclasses jdk/jfr/consumer/RecordedEvent,jdk/jfr/consumer/RecordedClassLoader,jdk/jfr/consumer/RecordedClass,jdk/jfr/consumer/RecordedMethod,jdk/jfr/consumer/RecordedStackTrace,jdk/jfr/consumer/RecordedFrame,jdk/jfr/consumer/RecordedThread,jdk/jfr/consumer/RecordedThreadGroup flags 21 class name jdk/jfr/consumer/RecordedThread method name isVirtual descriptor ()Z flags 1 classAnnotations @Ljdk/internal/javac/PreviewFeature;(feature=eLjdk/internal/javac/PreviewFeature$Feature;VIRTUAL_THREADS;,reflective=Ztrue) diff --git a/src/jdk.compiler/share/data/symbols/jdk.jfr-K.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.jfr-K.sym.txt index b40804b4f21cc..740adfcd7763c 100644 --- a/src/jdk.compiler/share/data/symbols/jdk.jfr-K.sym.txt +++ b/src/jdk.compiler/share/data/symbols/jdk.jfr-K.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -26,9 +26,6 @@ # ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ### # ########################################################## # -class name jdk/jfr/consumer/RecordedObject -header extends java/lang/Object sealed true flags 21 - class name jdk/jfr/consumer/RecordingStream method name stop descriptor ()Z flags 1 diff --git a/src/jdk.compiler/share/data/symbols/jdk.jfr-L.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.jfr-L.sym.txt index cba53075819d4..d432353f2a96c 100644 --- a/src/jdk.compiler/share/data/symbols/jdk.jfr-L.sym.txt +++ b/src/jdk.compiler/share/data/symbols/jdk.jfr-L.sym.txt @@ -26,9 +26,6 @@ # ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ### # ########################################################## # -class name jdk/jfr/consumer/RecordedObject -header extends java/lang/Object sealed true flags 21 - class name jdk/jfr/consumer/RecordedThread -method name isVirtual descriptor ()Z method name isVirtual descriptor ()Z flags 1 diff --git a/src/jdk.compiler/share/data/symbols/jdk.jshell-H.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.jshell-H.sym.txt index caa744f84ba79..fc7f19d74eacb 100644 --- a/src/jdk.compiler/share/data/symbols/jdk.jshell-H.sym.txt +++ b/src/jdk.compiler/share/data/symbols/jdk.jshell-H.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -26,88 +26,10 @@ # ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ### # ########################################################## # -class name jdk/jshell/DeclarationSnippet -header extends jdk/jshell/PersistentSnippet flags 421 -innerclass innerClass jdk/jshell/Snippet$SubKind outerClass jdk/jshell/Snippet innerClassName SubKind flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/jshell/Diag -header extends java/lang/Object flags 421 - -class name jdk/jshell/EvalException -header extends jdk/jshell/JShellException flags 21 - -class name jdk/jshell/ExpressionSnippet -header extends jdk/jshell/Snippet flags 21 -innerclass innerClass jdk/jshell/Snippet$SubKind outerClass jdk/jshell/Snippet innerClassName SubKind flags 4019 - -class name jdk/jshell/ImportSnippet -header extends jdk/jshell/PersistentSnippet flags 21 -innerclass innerClass jdk/jshell/Snippet$SubKind outerClass jdk/jshell/Snippet innerClassName SubKind flags 4019 - -class name jdk/jshell/JShellException -header extends java/lang/Exception flags 21 - -class name jdk/jshell/MethodSnippet -header extends jdk/jshell/DeclarationSnippet flags 21 -innerclass innerClass jdk/jshell/Snippet$SubKind outerClass jdk/jshell/Snippet innerClassName SubKind flags 4019 - -class name jdk/jshell/PersistentSnippet -header extends jdk/jshell/Snippet flags 421 -innerclass innerClass jdk/jshell/Snippet$SubKind outerClass jdk/jshell/Snippet innerClassName SubKind flags 4019 - class name jdk/jshell/Snippet$SubKind -field name RECORD_SUBKIND descriptor Ljdk/jshell/Snippet$SubKind; field name RECORD_SUBKIND descriptor Ljdk/jshell/Snippet$SubKind; flags 4019 -class name jdk/jshell/SnippetEvent -header extends java/lang/Object flags 21 -innerclass innerClass jdk/jshell/Snippet$Status outerClass jdk/jshell/Snippet innerClassName Status flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/jshell/StatementSnippet -header extends jdk/jshell/Snippet flags 21 -innerclass innerClass jdk/jshell/Snippet$SubKind outerClass jdk/jshell/Snippet innerClassName SubKind flags 4019 - -class name jdk/jshell/TypeDeclSnippet -header extends jdk/jshell/DeclarationSnippet flags 21 -innerclass innerClass jdk/jshell/Snippet$SubKind outerClass jdk/jshell/Snippet innerClassName SubKind flags 4019 - -class name jdk/jshell/execution/FailOverExecutionControlProvider -header extends java/lang/Object implements jdk/jshell/spi/ExecutionControlProvider flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/jshell/execution/JdiDefaultExecutionControl -header extends jdk/jshell/execution/JdiExecutionControl flags 21 -innerclass innerClass jdk/jshell/spi/ExecutionControl$InternalException outerClass jdk/jshell/spi/ExecutionControl innerClassName InternalException flags 9 -innerclass innerClass jdk/jshell/spi/ExecutionControl$EngineTerminationException outerClass jdk/jshell/spi/ExecutionControl innerClassName EngineTerminationException flags 9 -innerclass innerClass jdk/jshell/spi/ExecutionControl$RunException outerClass jdk/jshell/spi/ExecutionControl innerClassName RunException flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/jshell/execution/JdiExecutionControlProvider -header extends java/lang/Object implements jdk/jshell/spi/ExecutionControlProvider flags 21 - -class name jdk/jshell/execution/LoaderDelegate -header extends java/lang/Object flags 601 -innerclass innerClass jdk/jshell/spi/ExecutionControl$ClassBytecodes outerClass jdk/jshell/spi/ExecutionControl innerClassName ClassBytecodes flags 19 -innerclass innerClass jdk/jshell/spi/ExecutionControl$ClassInstallException outerClass jdk/jshell/spi/ExecutionControl innerClassName ClassInstallException flags 9 -innerclass innerClass jdk/jshell/spi/ExecutionControl$NotImplementedException outerClass jdk/jshell/spi/ExecutionControl innerClassName NotImplementedException flags 9 -innerclass innerClass jdk/jshell/spi/ExecutionControl$EngineTerminationException outerClass jdk/jshell/spi/ExecutionControl innerClassName EngineTerminationException flags 9 -innerclass innerClass jdk/jshell/spi/ExecutionControl$InternalException outerClass jdk/jshell/spi/ExecutionControl innerClassName InternalException flags 9 - -class name jdk/jshell/execution/LocalExecutionControlProvider -header extends java/lang/Object implements jdk/jshell/spi/ExecutionControlProvider flags 21 - -class name jdk/jshell/spi/ExecutionControlProvider -header extends java/lang/Object flags 601 - -class name jdk/jshell/spi/ExecutionEnv -header extends java/lang/Object flags 601 - -class name jdk/jshell/spi/SPIResolutionException -header extends java/lang/RuntimeException flags 21 - class name jdk/jshell/tool/JavaShellToolBuilder -header extends java/lang/Object flags 601 method name interactiveTerminal descriptor (Z)Ljdk/jshell/tool/JavaShellToolBuilder; flags 1 diff --git a/src/jdk.compiler/share/data/symbols/jdk.jshell-I.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.jshell-I.sym.txt deleted file mode 100644 index 349690280cb72..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.jshell-I.sym.txt +++ /dev/null @@ -1,108 +0,0 @@ -# -# Copyright (c) 2021, 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 jdk/jshell/DeclarationSnippet -header extends jdk/jshell/PersistentSnippet flags 421 -innerclass innerClass jdk/jshell/Snippet$SubKind outerClass jdk/jshell/Snippet innerClassName SubKind flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/jshell/Diag -header extends java/lang/Object flags 421 - -class name jdk/jshell/EvalException -header extends jdk/jshell/JShellException flags 21 - -class name jdk/jshell/ExpressionSnippet -header extends jdk/jshell/Snippet flags 21 -innerclass innerClass jdk/jshell/Snippet$SubKind outerClass jdk/jshell/Snippet innerClassName SubKind flags 4019 - -class name jdk/jshell/ImportSnippet -header extends jdk/jshell/PersistentSnippet flags 21 -innerclass innerClass jdk/jshell/Snippet$SubKind outerClass jdk/jshell/Snippet innerClassName SubKind flags 4019 - -class name jdk/jshell/JShellException -header extends java/lang/Exception flags 21 - -class name jdk/jshell/MethodSnippet -header extends jdk/jshell/DeclarationSnippet flags 21 -innerclass innerClass jdk/jshell/Snippet$SubKind outerClass jdk/jshell/Snippet innerClassName SubKind flags 4019 - -class name jdk/jshell/PersistentSnippet -header extends jdk/jshell/Snippet flags 421 -innerclass innerClass jdk/jshell/Snippet$SubKind outerClass jdk/jshell/Snippet innerClassName SubKind flags 4019 - -class name jdk/jshell/SnippetEvent -header extends java/lang/Object flags 21 -innerclass innerClass jdk/jshell/Snippet$Status outerClass jdk/jshell/Snippet innerClassName Status flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/jshell/StatementSnippet -header extends jdk/jshell/Snippet flags 21 -innerclass innerClass jdk/jshell/Snippet$SubKind outerClass jdk/jshell/Snippet innerClassName SubKind flags 4019 - -class name jdk/jshell/TypeDeclSnippet -header extends jdk/jshell/DeclarationSnippet flags 21 -innerclass innerClass jdk/jshell/Snippet$SubKind outerClass jdk/jshell/Snippet innerClassName SubKind flags 4019 - -class name jdk/jshell/execution/FailOverExecutionControlProvider -header extends java/lang/Object implements jdk/jshell/spi/ExecutionControlProvider flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/jshell/execution/JdiDefaultExecutionControl -header extends jdk/jshell/execution/JdiExecutionControl flags 21 -innerclass innerClass jdk/jshell/spi/ExecutionControl$InternalException outerClass jdk/jshell/spi/ExecutionControl innerClassName InternalException flags 9 -innerclass innerClass jdk/jshell/spi/ExecutionControl$EngineTerminationException outerClass jdk/jshell/spi/ExecutionControl innerClassName EngineTerminationException flags 9 -innerclass innerClass jdk/jshell/spi/ExecutionControl$RunException outerClass jdk/jshell/spi/ExecutionControl innerClassName RunException flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/jshell/execution/JdiExecutionControlProvider -header extends java/lang/Object implements jdk/jshell/spi/ExecutionControlProvider flags 21 - -class name jdk/jshell/execution/LoaderDelegate -header extends java/lang/Object flags 601 -innerclass innerClass jdk/jshell/spi/ExecutionControl$ClassBytecodes outerClass jdk/jshell/spi/ExecutionControl innerClassName ClassBytecodes flags 19 -innerclass innerClass jdk/jshell/spi/ExecutionControl$ClassInstallException outerClass jdk/jshell/spi/ExecutionControl innerClassName ClassInstallException flags 9 -innerclass innerClass jdk/jshell/spi/ExecutionControl$NotImplementedException outerClass jdk/jshell/spi/ExecutionControl innerClassName NotImplementedException flags 9 -innerclass innerClass jdk/jshell/spi/ExecutionControl$EngineTerminationException outerClass jdk/jshell/spi/ExecutionControl innerClassName EngineTerminationException flags 9 -innerclass innerClass jdk/jshell/spi/ExecutionControl$InternalException outerClass jdk/jshell/spi/ExecutionControl innerClassName InternalException flags 9 - -class name jdk/jshell/execution/LocalExecutionControlProvider -header extends java/lang/Object implements jdk/jshell/spi/ExecutionControlProvider flags 21 - -class name jdk/jshell/spi/ExecutionControlProvider -header extends java/lang/Object flags 601 - -class name jdk/jshell/spi/ExecutionEnv -header extends java/lang/Object flags 601 - -class name jdk/jshell/spi/SPIResolutionException -header extends java/lang/RuntimeException flags 21 - -class name jdk/jshell/tool/JavaShellToolBuilder -header extends java/lang/Object flags 601 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.jshell-J.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.jshell-J.sym.txt index 38fcec2d0147f..3fa4519a58868 100644 --- a/src/jdk.compiler/share/data/symbols/jdk.jshell-J.sym.txt +++ b/src/jdk.compiler/share/data/symbols/jdk.jshell-J.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -26,41 +26,6 @@ # ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ### # ########################################################## # -class name jdk/jshell/DeclarationSnippet -header extends jdk/jshell/PersistentSnippet flags 421 -innerclass innerClass jdk/jshell/Snippet$SubKind outerClass jdk/jshell/Snippet innerClassName SubKind flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/jshell/Diag -header extends java/lang/Object flags 421 - -class name jdk/jshell/EvalException -header extends jdk/jshell/JShellException flags 21 - -class name jdk/jshell/ExpressionSnippet -header extends jdk/jshell/Snippet flags 21 -innerclass innerClass jdk/jshell/Snippet$SubKind outerClass jdk/jshell/Snippet innerClassName SubKind flags 4019 - -class name jdk/jshell/ImportSnippet -header extends jdk/jshell/PersistentSnippet flags 21 -innerclass innerClass jdk/jshell/Snippet$SubKind outerClass jdk/jshell/Snippet innerClassName SubKind flags 4019 - -class name jdk/jshell/JShellException -header extends java/lang/Exception flags 21 - -class name jdk/jshell/MethodSnippet -header extends jdk/jshell/DeclarationSnippet flags 21 -innerclass innerClass jdk/jshell/Snippet$SubKind outerClass jdk/jshell/Snippet innerClassName SubKind flags 4019 - -class name jdk/jshell/PersistentSnippet -header extends jdk/jshell/Snippet flags 421 -innerclass innerClass jdk/jshell/Snippet$SubKind outerClass jdk/jshell/Snippet innerClassName SubKind flags 4019 - -class name jdk/jshell/SnippetEvent -header extends java/lang/Object flags 21 -innerclass innerClass jdk/jshell/Snippet$Status outerClass jdk/jshell/Snippet innerClassName Status flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - class name jdk/jshell/SourceCodeAnalysis header extends java/lang/Object nestMembers jdk/jshell/SourceCodeAnalysis$Attribute,jdk/jshell/SourceCodeAnalysis$Highlight,jdk/jshell/SourceCodeAnalysis$SnippetWrapper,jdk/jshell/SourceCodeAnalysis$QualifiedNames,jdk/jshell/SourceCodeAnalysis$Documentation,jdk/jshell/SourceCodeAnalysis$Suggestion,jdk/jshell/SourceCodeAnalysis$Completeness,jdk/jshell/SourceCodeAnalysis$CompletionInfo flags 421 innerclass innerClass jdk/jshell/SourceCodeAnalysis$Attribute outerClass jdk/jshell/SourceCodeAnalysis innerClassName Attribute flags 4019 @@ -98,48 +63,3 @@ method name start descriptor ()I flags 1 method name end descriptor ()I flags 1 method name attributes descriptor ()Ljava/util/Set; flags 1 signature ()Ljava/util/Set; -class name jdk/jshell/StatementSnippet -header extends jdk/jshell/Snippet flags 21 -innerclass innerClass jdk/jshell/Snippet$SubKind outerClass jdk/jshell/Snippet innerClassName SubKind flags 4019 - -class name jdk/jshell/TypeDeclSnippet -header extends jdk/jshell/DeclarationSnippet flags 21 -innerclass innerClass jdk/jshell/Snippet$SubKind outerClass jdk/jshell/Snippet innerClassName SubKind flags 4019 - -class name jdk/jshell/execution/FailOverExecutionControlProvider -header extends java/lang/Object implements jdk/jshell/spi/ExecutionControlProvider flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/jshell/execution/JdiDefaultExecutionControl -header extends jdk/jshell/execution/JdiExecutionControl flags 21 -innerclass innerClass jdk/jshell/spi/ExecutionControl$InternalException outerClass jdk/jshell/spi/ExecutionControl innerClassName InternalException flags 9 -innerclass innerClass jdk/jshell/spi/ExecutionControl$EngineTerminationException outerClass jdk/jshell/spi/ExecutionControl innerClassName EngineTerminationException flags 9 -innerclass innerClass jdk/jshell/spi/ExecutionControl$RunException outerClass jdk/jshell/spi/ExecutionControl innerClassName RunException flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/jshell/execution/JdiExecutionControlProvider -header extends java/lang/Object implements jdk/jshell/spi/ExecutionControlProvider flags 21 - -class name jdk/jshell/execution/LoaderDelegate -header extends java/lang/Object flags 601 -innerclass innerClass jdk/jshell/spi/ExecutionControl$ClassBytecodes outerClass jdk/jshell/spi/ExecutionControl innerClassName ClassBytecodes flags 19 -innerclass innerClass jdk/jshell/spi/ExecutionControl$ClassInstallException outerClass jdk/jshell/spi/ExecutionControl innerClassName ClassInstallException flags 9 -innerclass innerClass jdk/jshell/spi/ExecutionControl$NotImplementedException outerClass jdk/jshell/spi/ExecutionControl innerClassName NotImplementedException flags 9 -innerclass innerClass jdk/jshell/spi/ExecutionControl$EngineTerminationException outerClass jdk/jshell/spi/ExecutionControl innerClassName EngineTerminationException flags 9 -innerclass innerClass jdk/jshell/spi/ExecutionControl$InternalException outerClass jdk/jshell/spi/ExecutionControl innerClassName InternalException flags 9 - -class name jdk/jshell/execution/LocalExecutionControlProvider -header extends java/lang/Object implements jdk/jshell/spi/ExecutionControlProvider flags 21 - -class name jdk/jshell/spi/ExecutionControlProvider -header extends java/lang/Object flags 601 - -class name jdk/jshell/spi/ExecutionEnv -header extends java/lang/Object flags 601 - -class name jdk/jshell/spi/SPIResolutionException -header extends java/lang/RuntimeException flags 21 - -class name jdk/jshell/tool/JavaShellToolBuilder -header extends java/lang/Object flags 601 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.jshell-K.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.jshell-K.sym.txt index 71fc8bbf6eb9f..f263d7d15ea71 100644 --- a/src/jdk.compiler/share/data/symbols/jdk.jshell-K.sym.txt +++ b/src/jdk.compiler/share/data/symbols/jdk.jshell-K.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -26,49 +26,6 @@ # ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ### # ########################################################## # -class name jdk/jshell/DeclarationSnippet -header extends jdk/jshell/PersistentSnippet flags 421 -innerclass innerClass jdk/jshell/Snippet$SubKind outerClass jdk/jshell/Snippet innerClassName SubKind flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/jshell/Diag -header extends java/lang/Object flags 421 - -class name jdk/jshell/EvalException -header extends jdk/jshell/JShellException flags 21 - -class name jdk/jshell/ExpressionSnippet -header extends jdk/jshell/Snippet flags 21 -innerclass innerClass jdk/jshell/Snippet$SubKind outerClass jdk/jshell/Snippet innerClassName SubKind flags 4019 - -class name jdk/jshell/ImportSnippet -header extends jdk/jshell/PersistentSnippet flags 21 -innerclass innerClass jdk/jshell/Snippet$SubKind outerClass jdk/jshell/Snippet innerClassName SubKind flags 4019 - -class name jdk/jshell/JShellException -header extends java/lang/Exception flags 21 - -class name jdk/jshell/MethodSnippet -header extends jdk/jshell/DeclarationSnippet flags 21 -innerclass innerClass jdk/jshell/Snippet$SubKind outerClass jdk/jshell/Snippet innerClassName SubKind flags 4019 - -class name jdk/jshell/PersistentSnippet -header extends jdk/jshell/Snippet flags 421 -innerclass innerClass jdk/jshell/Snippet$SubKind outerClass jdk/jshell/Snippet innerClassName SubKind flags 4019 - -class name jdk/jshell/SnippetEvent -header extends java/lang/Object flags 21 -innerclass innerClass jdk/jshell/Snippet$Status outerClass jdk/jshell/Snippet innerClassName Status flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/jshell/StatementSnippet -header extends jdk/jshell/Snippet flags 21 -innerclass innerClass jdk/jshell/Snippet$SubKind outerClass jdk/jshell/Snippet innerClassName SubKind flags 4019 - -class name jdk/jshell/TypeDeclSnippet -header extends jdk/jshell/DeclarationSnippet flags 21 -innerclass innerClass jdk/jshell/Snippet$SubKind outerClass jdk/jshell/Snippet innerClassName SubKind flags 4019 - class name jdk/jshell/execution/DirectExecutionControl header extends java/lang/Object implements jdk/jshell/spi/ExecutionControl flags 21 innerclass innerClass jdk/jshell/spi/ExecutionControl$ClassBytecodes outerClass jdk/jshell/spi/ExecutionControl innerClassName ClassBytecodes flags 19 @@ -84,28 +41,6 @@ innerclass innerClass jdk/jshell/spi/ExecutionControl$ClassInstallException oute innerclass innerClass jdk/jshell/spi/ExecutionControl$ExecutionControlException outerClass jdk/jshell/spi/ExecutionControl innerClassName ExecutionControlException flags 409 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -class name jdk/jshell/execution/FailOverExecutionControlProvider -header extends java/lang/Object implements jdk/jshell/spi/ExecutionControlProvider flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/jshell/execution/JdiDefaultExecutionControl -header extends jdk/jshell/execution/JdiExecutionControl flags 21 -innerclass innerClass jdk/jshell/spi/ExecutionControl$InternalException outerClass jdk/jshell/spi/ExecutionControl innerClassName InternalException flags 9 -innerclass innerClass jdk/jshell/spi/ExecutionControl$EngineTerminationException outerClass jdk/jshell/spi/ExecutionControl innerClassName EngineTerminationException flags 9 -innerclass innerClass jdk/jshell/spi/ExecutionControl$RunException outerClass jdk/jshell/spi/ExecutionControl innerClassName RunException flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/jshell/execution/JdiExecutionControlProvider -header extends java/lang/Object implements jdk/jshell/spi/ExecutionControlProvider flags 21 - -class name jdk/jshell/execution/LoaderDelegate -header extends java/lang/Object flags 601 -innerclass innerClass jdk/jshell/spi/ExecutionControl$ClassBytecodes outerClass jdk/jshell/spi/ExecutionControl innerClassName ClassBytecodes flags 19 -innerclass innerClass jdk/jshell/spi/ExecutionControl$ClassInstallException outerClass jdk/jshell/spi/ExecutionControl innerClassName ClassInstallException flags 9 -innerclass innerClass jdk/jshell/spi/ExecutionControl$NotImplementedException outerClass jdk/jshell/spi/ExecutionControl innerClassName NotImplementedException flags 9 -innerclass innerClass jdk/jshell/spi/ExecutionControl$EngineTerminationException outerClass jdk/jshell/spi/ExecutionControl innerClassName EngineTerminationException flags 9 -innerclass innerClass jdk/jshell/spi/ExecutionControl$InternalException outerClass jdk/jshell/spi/ExecutionControl innerClassName InternalException flags 9 - class name jdk/jshell/execution/LocalExecutionControl header extends jdk/jshell/execution/DirectExecutionControl flags 21 innerclass innerClass jdk/jshell/spi/ExecutionControl$ClassBytecodes outerClass jdk/jshell/spi/ExecutionControl innerClassName ClassBytecodes flags 19 @@ -118,18 +53,3 @@ innerclass innerClass jdk/jshell/spi/ExecutionControl$EngineTerminationException innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 method name load descriptor ([Ljdk/jshell/spi/ExecutionControl$ClassBytecodes;)V thrownTypes jdk/jshell/spi/ExecutionControl$ClassInstallException,jdk/jshell/spi/ExecutionControl$NotImplementedException,jdk/jshell/spi/ExecutionControl$EngineTerminationException flags 1 -class name jdk/jshell/execution/LocalExecutionControlProvider -header extends java/lang/Object implements jdk/jshell/spi/ExecutionControlProvider flags 21 - -class name jdk/jshell/spi/ExecutionControlProvider -header extends java/lang/Object flags 601 - -class name jdk/jshell/spi/ExecutionEnv -header extends java/lang/Object flags 601 - -class name jdk/jshell/spi/SPIResolutionException -header extends java/lang/RuntimeException flags 21 - -class name jdk/jshell/tool/JavaShellToolBuilder -header extends java/lang/Object flags 601 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.jshell-L.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.jshell-L.sym.txt index 0c21138e1368a..07fdeab4b6ec1 100644 --- a/src/jdk.compiler/share/data/symbols/jdk.jshell-L.sym.txt +++ b/src/jdk.compiler/share/data/symbols/jdk.jshell-L.sym.txt @@ -29,25 +29,6 @@ module name jdk.jshell header exports jdk/jshell,jdk/jshell/execution,jdk/jshell/spi,jdk/jshell/tool requires name\u0020;java.base\u0020;flags\u0020;8000,name\u0020;java.logging\u0020;flags\u0020;0,name\u0020;jdk.compiler\u0020;flags\u0020;0,name\u0020;jdk.internal.ed\u0020;flags\u0020;0,name\u0020;jdk.internal.le\u0020;flags\u0020;0,name\u0020;jdk.internal.opt\u0020;flags\u0020;0,name\u0020;java.compiler\u0020;flags\u0020;20,name\u0020;java.prefs\u0020;flags\u0020;20,name\u0020;jdk.jdi\u0020;flags\u0020;20 uses jdk/jshell/spi/ExecutionControlProvider,jdk/internal/editor/spi/BuildInEditorProvider provides interface\u0020;javax/tools/Tool\u0020;impls\u0020;jdk/internal/jshell/tool/JShellToolProvider,interface\u0020;jdk/jshell/spi/ExecutionControlProvider\u0020;impls\u0020;jdk/jshell/execution/JdiExecutionControlProvider\u005C;u002C;jdk/jshell/execution/LocalExecutionControlProvider\u005C;u002C;jdk/jshell/execution/FailOverExecutionControlProvider,interface\u0020;jdk/internal/io/JdkConsoleProvider\u0020;impls\u0020;jdk/jshell/execution/impl/ConsoleImpl$ConsoleProviderImpl target linux-amd64 flags 8000 -class name jdk/jshell/DeclarationSnippet -header extends jdk/jshell/PersistentSnippet flags 421 -innerclass innerClass jdk/jshell/Snippet$SubKind outerClass jdk/jshell/Snippet innerClassName SubKind flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/jshell/Diag -header extends java/lang/Object flags 421 - -class name jdk/jshell/EvalException -header extends jdk/jshell/JShellException flags 21 - -class name jdk/jshell/ExpressionSnippet -header extends jdk/jshell/Snippet flags 21 -innerclass innerClass jdk/jshell/Snippet$SubKind outerClass jdk/jshell/Snippet innerClassName SubKind flags 4019 - -class name jdk/jshell/ImportSnippet -header extends jdk/jshell/PersistentSnippet flags 21 -innerclass innerClass jdk/jshell/Snippet$SubKind outerClass jdk/jshell/Snippet innerClassName SubKind flags 4019 - class name jdk/jshell/JShell$Builder method name console descriptor (Ljdk/jshell/JShellConsole;)Ljdk/jshell/JShell$Builder; flags 1 @@ -60,65 +41,6 @@ method name readPassword descriptor (Ljava/lang/String;)[C thrownTypes java/io/I method name flush descriptor ()V flags 401 method name charset descriptor ()Ljava/nio/charset/Charset; flags 401 -class name jdk/jshell/JShellException -header extends java/lang/Exception flags 21 - -class name jdk/jshell/MethodSnippet -header extends jdk/jshell/DeclarationSnippet flags 21 -innerclass innerClass jdk/jshell/Snippet$SubKind outerClass jdk/jshell/Snippet innerClassName SubKind flags 4019 - -class name jdk/jshell/PersistentSnippet -header extends jdk/jshell/Snippet flags 421 -innerclass innerClass jdk/jshell/Snippet$SubKind outerClass jdk/jshell/Snippet innerClassName SubKind flags 4019 - -class name jdk/jshell/SnippetEvent -header extends java/lang/Object flags 21 -innerclass innerClass jdk/jshell/Snippet$Status outerClass jdk/jshell/Snippet innerClassName Status flags 4019 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/jshell/StatementSnippet -header extends jdk/jshell/Snippet flags 21 -innerclass innerClass jdk/jshell/Snippet$SubKind outerClass jdk/jshell/Snippet innerClassName SubKind flags 4019 - -class name jdk/jshell/TypeDeclSnippet -header extends jdk/jshell/DeclarationSnippet flags 21 -innerclass innerClass jdk/jshell/Snippet$SubKind outerClass jdk/jshell/Snippet innerClassName SubKind flags 4019 - -class name jdk/jshell/execution/FailOverExecutionControlProvider -header extends java/lang/Object implements jdk/jshell/spi/ExecutionControlProvider flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/jshell/execution/JdiDefaultExecutionControl -header extends jdk/jshell/execution/JdiExecutionControl flags 21 -innerclass innerClass jdk/jshell/spi/ExecutionControl$InternalException outerClass jdk/jshell/spi/ExecutionControl innerClassName InternalException flags 9 -innerclass innerClass jdk/jshell/spi/ExecutionControl$EngineTerminationException outerClass jdk/jshell/spi/ExecutionControl innerClassName EngineTerminationException flags 9 -innerclass innerClass jdk/jshell/spi/ExecutionControl$RunException outerClass jdk/jshell/spi/ExecutionControl innerClassName RunException flags 409 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name jdk/jshell/execution/JdiExecutionControlProvider -header extends java/lang/Object implements jdk/jshell/spi/ExecutionControlProvider flags 21 - -class name jdk/jshell/execution/LoaderDelegate -header extends java/lang/Object flags 601 -innerclass innerClass jdk/jshell/spi/ExecutionControl$ClassBytecodes outerClass jdk/jshell/spi/ExecutionControl innerClassName ClassBytecodes flags 19 -innerclass innerClass jdk/jshell/spi/ExecutionControl$ClassInstallException outerClass jdk/jshell/spi/ExecutionControl innerClassName ClassInstallException flags 9 -innerclass innerClass jdk/jshell/spi/ExecutionControl$NotImplementedException outerClass jdk/jshell/spi/ExecutionControl innerClassName NotImplementedException flags 9 -innerclass innerClass jdk/jshell/spi/ExecutionControl$EngineTerminationException outerClass jdk/jshell/spi/ExecutionControl innerClassName EngineTerminationException flags 9 -innerclass innerClass jdk/jshell/spi/ExecutionControl$InternalException outerClass jdk/jshell/spi/ExecutionControl innerClassName InternalException flags 9 - -class name jdk/jshell/execution/LocalExecutionControlProvider -header extends java/lang/Object implements jdk/jshell/spi/ExecutionControlProvider flags 21 - -class name jdk/jshell/spi/ExecutionControlProvider -header extends java/lang/Object flags 601 - class name jdk/jshell/spi/ExecutionEnv -header extends java/lang/Object flags 601 method name console descriptor ()Ljava/util/Optional; flags 1 signature ()Ljava/util/Optional; -class name jdk/jshell/spi/SPIResolutionException -header extends java/lang/RuntimeException flags 21 - -class name jdk/jshell/tool/JavaShellToolBuilder -header extends java/lang/Object flags 601 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.jsobject-H.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.jsobject-H.sym.txt deleted file mode 100644 index a955e4bfe9412..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.jsobject-H.sym.txt +++ /dev/null @@ -1,31 +0,0 @@ -# -# Copyright (c) 2021, 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 netscape/javascript/JSException -header extends java/lang/RuntimeException flags 21 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.jsobject-I.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.jsobject-I.sym.txt deleted file mode 100644 index a955e4bfe9412..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.jsobject-I.sym.txt +++ /dev/null @@ -1,31 +0,0 @@ -# -# Copyright (c) 2021, 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 netscape/javascript/JSException -header extends java/lang/RuntimeException flags 21 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.jsobject-J.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.jsobject-J.sym.txt deleted file mode 100644 index 314bea0bf72d3..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.jsobject-J.sym.txt +++ /dev/null @@ -1,31 +0,0 @@ -# -# Copyright (c) 2022, 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 netscape/javascript/JSException -header extends java/lang/RuntimeException flags 21 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.jsobject-K.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.jsobject-K.sym.txt deleted file mode 100644 index 314bea0bf72d3..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.jsobject-K.sym.txt +++ /dev/null @@ -1,31 +0,0 @@ -# -# Copyright (c) 2022, 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 netscape/javascript/JSException -header extends java/lang/RuntimeException flags 21 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.jsobject-L.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.jsobject-L.sym.txt deleted file mode 100644 index 1f0b535680871..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.jsobject-L.sym.txt +++ /dev/null @@ -1,31 +0,0 @@ -# -# Copyright (c) 2023, 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 netscape/javascript/JSException -header extends java/lang/RuntimeException flags 21 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.management-H.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.management-H.sym.txt deleted file mode 100644 index a6b7d08c1b4d2..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.management-H.sym.txt +++ /dev/null @@ -1,49 +0,0 @@ -# -# Copyright (c) 2021, 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/management/GarbageCollectionNotificationInfo -header extends java/lang/Object implements javax/management/openmbean/CompositeDataView flags 21 - -class name com/sun/management/GarbageCollectorMXBean -header extends java/lang/Object implements java/lang/management/GarbageCollectorMXBean flags 601 - -class name com/sun/management/GcInfo -header extends java/lang/Object implements javax/management/openmbean/CompositeData,javax/management/openmbean/CompositeDataView flags 21 - -class name com/sun/management/HotSpotDiagnosticMXBean -header extends java/lang/Object implements java/lang/management/PlatformManagedObject flags 601 - -class name com/sun/management/OperatingSystemMXBean -header extends java/lang/Object implements java/lang/management/OperatingSystemMXBean flags 601 - -class name com/sun/management/ThreadMXBean -header extends java/lang/Object implements java/lang/management/ThreadMXBean flags 601 - -class name com/sun/management/UnixOperatingSystemMXBean -header extends java/lang/Object implements com/sun/management/OperatingSystemMXBean flags 601 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.management-I.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.management-I.sym.txt deleted file mode 100644 index a6b7d08c1b4d2..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.management-I.sym.txt +++ /dev/null @@ -1,49 +0,0 @@ -# -# Copyright (c) 2021, 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/management/GarbageCollectionNotificationInfo -header extends java/lang/Object implements javax/management/openmbean/CompositeDataView flags 21 - -class name com/sun/management/GarbageCollectorMXBean -header extends java/lang/Object implements java/lang/management/GarbageCollectorMXBean flags 601 - -class name com/sun/management/GcInfo -header extends java/lang/Object implements javax/management/openmbean/CompositeData,javax/management/openmbean/CompositeDataView flags 21 - -class name com/sun/management/HotSpotDiagnosticMXBean -header extends java/lang/Object implements java/lang/management/PlatformManagedObject flags 601 - -class name com/sun/management/OperatingSystemMXBean -header extends java/lang/Object implements java/lang/management/OperatingSystemMXBean flags 601 - -class name com/sun/management/ThreadMXBean -header extends java/lang/Object implements java/lang/management/ThreadMXBean flags 601 - -class name com/sun/management/UnixOperatingSystemMXBean -header extends java/lang/Object implements com/sun/management/OperatingSystemMXBean flags 601 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.management-J.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.management-J.sym.txt index 3ade9f0e2bc31..dd3c67bb117c6 100644 --- a/src/jdk.compiler/share/data/symbols/jdk.management-J.sym.txt +++ b/src/jdk.compiler/share/data/symbols/jdk.management-J.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -26,15 +26,6 @@ # ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ### # ########################################################## # -class name com/sun/management/GarbageCollectionNotificationInfo -header extends java/lang/Object implements javax/management/openmbean/CompositeDataView flags 21 - -class name com/sun/management/GarbageCollectorMXBean -header extends java/lang/Object implements java/lang/management/GarbageCollectorMXBean flags 601 - -class name com/sun/management/GcInfo -header extends java/lang/Object implements javax/management/openmbean/CompositeData,javax/management/openmbean/CompositeDataView flags 21 - class name com/sun/management/HotSpotDiagnosticMXBean header extends java/lang/Object implements java/lang/management/PlatformManagedObject nestMembers com/sun/management/HotSpotDiagnosticMXBean$ThreadDumpFormat flags 601 innerclass innerClass com/sun/management/HotSpotDiagnosticMXBean$ThreadDumpFormat outerClass com/sun/management/HotSpotDiagnosticMXBean innerClassName ThreadDumpFormat flags 4019 @@ -48,12 +39,3 @@ field name JSON descriptor Lcom/sun/management/HotSpotDiagnosticMXBean$ThreadDum method name values descriptor ()[Lcom/sun/management/HotSpotDiagnosticMXBean$ThreadDumpFormat; flags 9 method name valueOf descriptor (Ljava/lang/String;)Lcom/sun/management/HotSpotDiagnosticMXBean$ThreadDumpFormat; flags 9 -class name com/sun/management/OperatingSystemMXBean -header extends java/lang/Object implements java/lang/management/OperatingSystemMXBean flags 601 - -class name com/sun/management/ThreadMXBean -header extends java/lang/Object implements java/lang/management/ThreadMXBean flags 601 - -class name com/sun/management/UnixOperatingSystemMXBean -header extends java/lang/Object implements com/sun/management/OperatingSystemMXBean flags 601 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.management-K.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.management-K.sym.txt deleted file mode 100644 index 582c8b3e2b8ce..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.management-K.sym.txt +++ /dev/null @@ -1,46 +0,0 @@ -# -# Copyright (c) 2022, 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/management/GarbageCollectionNotificationInfo -header extends java/lang/Object implements javax/management/openmbean/CompositeDataView flags 21 - -class name com/sun/management/GarbageCollectorMXBean -header extends java/lang/Object implements java/lang/management/GarbageCollectorMXBean flags 601 - -class name com/sun/management/GcInfo -header extends java/lang/Object implements javax/management/openmbean/CompositeData,javax/management/openmbean/CompositeDataView flags 21 - -class name com/sun/management/OperatingSystemMXBean -header extends java/lang/Object implements java/lang/management/OperatingSystemMXBean flags 601 - -class name com/sun/management/ThreadMXBean -header extends java/lang/Object implements java/lang/management/ThreadMXBean flags 601 - -class name com/sun/management/UnixOperatingSystemMXBean -header extends java/lang/Object implements com/sun/management/OperatingSystemMXBean flags 601 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.management-L.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.management-L.sym.txt index 6826c01a63efa..4dbcae2b1a096 100644 --- a/src/jdk.compiler/share/data/symbols/jdk.management-L.sym.txt +++ b/src/jdk.compiler/share/data/symbols/jdk.management-L.sym.txt @@ -26,15 +26,6 @@ # ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ### # ########################################################## # -class name com/sun/management/GarbageCollectionNotificationInfo -header extends java/lang/Object implements javax/management/openmbean/CompositeDataView flags 21 - -class name com/sun/management/GarbageCollectorMXBean -header extends java/lang/Object implements java/lang/management/GarbageCollectorMXBean flags 601 - -class name com/sun/management/GcInfo -header extends java/lang/Object implements javax/management/openmbean/CompositeData,javax/management/openmbean/CompositeDataView flags 21 - class name com/sun/management/HotSpotDiagnosticMXBean -method name dumpThreads descriptor (Ljava/lang/String;Lcom/sun/management/HotSpotDiagnosticMXBean$ThreadDumpFormat;)V method name dumpThreads descriptor (Ljava/lang/String;Lcom/sun/management/HotSpotDiagnosticMXBean$ThreadDumpFormat;)V thrownTypes java/io/IOException flags 1 @@ -43,13 +34,6 @@ class name com/sun/management/HotSpotDiagnosticMXBean$ThreadDumpFormat header extends java/lang/Enum nestHost com/sun/management/HotSpotDiagnosticMXBean flags 4031 signature Ljava/lang/Enum; innerclass innerClass com/sun/management/HotSpotDiagnosticMXBean$ThreadDumpFormat outerClass com/sun/management/HotSpotDiagnosticMXBean innerClassName ThreadDumpFormat flags 4019 -class name com/sun/management/OperatingSystemMXBean -header extends java/lang/Object implements java/lang/management/OperatingSystemMXBean flags 601 - class name com/sun/management/ThreadMXBean -header extends java/lang/Object implements java/lang/management/ThreadMXBean flags 601 method name getTotalThreadAllocatedBytes descriptor ()J flags 1 -class name com/sun/management/UnixOperatingSystemMXBean -header extends java/lang/Object implements com/sun/management/OperatingSystemMXBean flags 601 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.net-H.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.net-H.sym.txt deleted file mode 100644 index 51aada714d6b3..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.net-H.sym.txt +++ /dev/null @@ -1,31 +0,0 @@ -# -# Copyright (c) 2021, 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 jdk/net/NetworkPermission -header extends java/security/BasicPermission flags 31 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.net-I.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.net-I.sym.txt deleted file mode 100644 index 51aada714d6b3..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.net-I.sym.txt +++ /dev/null @@ -1,31 +0,0 @@ -# -# Copyright (c) 2021, 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 jdk/net/NetworkPermission -header extends java/security/BasicPermission flags 31 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.net-J.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.net-J.sym.txt index 4527d7854ca8a..aadb0e7deb10a 100644 --- a/src/jdk.compiler/share/data/symbols/jdk.net-J.sym.txt +++ b/src/jdk.compiler/share/data/symbols/jdk.net-J.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2022, 2023, 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,6 +29,3 @@ class name jdk/net/ExtendedSocketOptions field name IP_DONTFRAGMENT descriptor Ljava/net/SocketOption; flags 19 signature Ljava/net/SocketOption; -class name jdk/net/NetworkPermission -header extends java/security/BasicPermission flags 31 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.net-K.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.net-K.sym.txt deleted file mode 100644 index ce0ac598b1bae..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.net-K.sym.txt +++ /dev/null @@ -1,31 +0,0 @@ -# -# Copyright (c) 2022, 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 jdk/net/NetworkPermission -header extends java/security/BasicPermission flags 31 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.net-L.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.net-L.sym.txt deleted file mode 100644 index aff3db7bd8da1..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.net-L.sym.txt +++ /dev/null @@ -1,31 +0,0 @@ -# -# Copyright (c) 2023, 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 jdk/net/NetworkPermission -header extends java/security/BasicPermission flags 31 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.sctp-H.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.sctp-H.sym.txt deleted file mode 100644 index 1694db9490daa..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.sctp-H.sym.txt +++ /dev/null @@ -1,73 +0,0 @@ -# -# Copyright (c) 2021, 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/nio/sctp/AbstractNotificationHandler -header extends java/lang/Object implements com/sun/nio/sctp/NotificationHandler flags 21 signature Ljava/lang/Object;Lcom/sun/nio/sctp/NotificationHandler; - -class name com/sun/nio/sctp/Association -header extends java/lang/Object flags 21 - -class name com/sun/nio/sctp/HandlerResult -header extends java/lang/Enum flags 4031 signature Ljava/lang/Enum; - -class name com/sun/nio/sctp/IllegalReceiveException -header extends java/lang/IllegalStateException flags 21 - -class name com/sun/nio/sctp/IllegalUnbindException -header extends java/lang/IllegalStateException flags 21 - -class name com/sun/nio/sctp/InvalidStreamException -header extends java/lang/IllegalArgumentException flags 21 - -class name com/sun/nio/sctp/MessageInfo -header extends java/lang/Object flags 421 - -class name com/sun/nio/sctp/Notification -header extends java/lang/Object flags 601 - -class name com/sun/nio/sctp/NotificationHandler -header extends java/lang/Object flags 601 signature Ljava/lang/Object; - -class name com/sun/nio/sctp/SctpChannel -header extends java/nio/channels/spi/AbstractSelectableChannel flags 421 - -class name com/sun/nio/sctp/SctpMultiChannel -header extends java/nio/channels/spi/AbstractSelectableChannel flags 421 - -class name com/sun/nio/sctp/SctpServerChannel -header extends java/nio/channels/spi/AbstractSelectableChannel flags 421 - -class name com/sun/nio/sctp/SctpSocketOption -header extends java/lang/Object implements java/net/SocketOption flags 601 signature Ljava/lang/Object;Ljava/net/SocketOption; - -class name com/sun/nio/sctp/SendFailedNotification -header extends java/lang/Object implements com/sun/nio/sctp/Notification flags 421 - -class name com/sun/nio/sctp/ShutdownNotification -header extends java/lang/Object implements com/sun/nio/sctp/Notification flags 421 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.sctp-I.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.sctp-I.sym.txt deleted file mode 100644 index 1694db9490daa..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.sctp-I.sym.txt +++ /dev/null @@ -1,73 +0,0 @@ -# -# Copyright (c) 2021, 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/nio/sctp/AbstractNotificationHandler -header extends java/lang/Object implements com/sun/nio/sctp/NotificationHandler flags 21 signature Ljava/lang/Object;Lcom/sun/nio/sctp/NotificationHandler; - -class name com/sun/nio/sctp/Association -header extends java/lang/Object flags 21 - -class name com/sun/nio/sctp/HandlerResult -header extends java/lang/Enum flags 4031 signature Ljava/lang/Enum; - -class name com/sun/nio/sctp/IllegalReceiveException -header extends java/lang/IllegalStateException flags 21 - -class name com/sun/nio/sctp/IllegalUnbindException -header extends java/lang/IllegalStateException flags 21 - -class name com/sun/nio/sctp/InvalidStreamException -header extends java/lang/IllegalArgumentException flags 21 - -class name com/sun/nio/sctp/MessageInfo -header extends java/lang/Object flags 421 - -class name com/sun/nio/sctp/Notification -header extends java/lang/Object flags 601 - -class name com/sun/nio/sctp/NotificationHandler -header extends java/lang/Object flags 601 signature Ljava/lang/Object; - -class name com/sun/nio/sctp/SctpChannel -header extends java/nio/channels/spi/AbstractSelectableChannel flags 421 - -class name com/sun/nio/sctp/SctpMultiChannel -header extends java/nio/channels/spi/AbstractSelectableChannel flags 421 - -class name com/sun/nio/sctp/SctpServerChannel -header extends java/nio/channels/spi/AbstractSelectableChannel flags 421 - -class name com/sun/nio/sctp/SctpSocketOption -header extends java/lang/Object implements java/net/SocketOption flags 601 signature Ljava/lang/Object;Ljava/net/SocketOption; - -class name com/sun/nio/sctp/SendFailedNotification -header extends java/lang/Object implements com/sun/nio/sctp/Notification flags 421 - -class name com/sun/nio/sctp/ShutdownNotification -header extends java/lang/Object implements com/sun/nio/sctp/Notification flags 421 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.sctp-J.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.sctp-J.sym.txt deleted file mode 100644 index 62cac0259cd20..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.sctp-J.sym.txt +++ /dev/null @@ -1,73 +0,0 @@ -# -# Copyright (c) 2022, 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/nio/sctp/AbstractNotificationHandler -header extends java/lang/Object implements com/sun/nio/sctp/NotificationHandler flags 21 signature Ljava/lang/Object;Lcom/sun/nio/sctp/NotificationHandler; - -class name com/sun/nio/sctp/Association -header extends java/lang/Object flags 21 - -class name com/sun/nio/sctp/HandlerResult -header extends java/lang/Enum flags 4031 signature Ljava/lang/Enum; - -class name com/sun/nio/sctp/IllegalReceiveException -header extends java/lang/IllegalStateException flags 21 - -class name com/sun/nio/sctp/IllegalUnbindException -header extends java/lang/IllegalStateException flags 21 - -class name com/sun/nio/sctp/InvalidStreamException -header extends java/lang/IllegalArgumentException flags 21 - -class name com/sun/nio/sctp/MessageInfo -header extends java/lang/Object flags 421 - -class name com/sun/nio/sctp/Notification -header extends java/lang/Object flags 601 - -class name com/sun/nio/sctp/NotificationHandler -header extends java/lang/Object flags 601 signature Ljava/lang/Object; - -class name com/sun/nio/sctp/SctpChannel -header extends java/nio/channels/spi/AbstractSelectableChannel flags 421 - -class name com/sun/nio/sctp/SctpMultiChannel -header extends java/nio/channels/spi/AbstractSelectableChannel flags 421 - -class name com/sun/nio/sctp/SctpServerChannel -header extends java/nio/channels/spi/AbstractSelectableChannel flags 421 - -class name com/sun/nio/sctp/SctpSocketOption -header extends java/lang/Object implements java/net/SocketOption flags 601 signature Ljava/lang/Object;Ljava/net/SocketOption; - -class name com/sun/nio/sctp/SendFailedNotification -header extends java/lang/Object implements com/sun/nio/sctp/Notification flags 421 - -class name com/sun/nio/sctp/ShutdownNotification -header extends java/lang/Object implements com/sun/nio/sctp/Notification flags 421 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.sctp-K.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.sctp-K.sym.txt deleted file mode 100644 index 62cac0259cd20..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.sctp-K.sym.txt +++ /dev/null @@ -1,73 +0,0 @@ -# -# Copyright (c) 2022, 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/nio/sctp/AbstractNotificationHandler -header extends java/lang/Object implements com/sun/nio/sctp/NotificationHandler flags 21 signature Ljava/lang/Object;Lcom/sun/nio/sctp/NotificationHandler; - -class name com/sun/nio/sctp/Association -header extends java/lang/Object flags 21 - -class name com/sun/nio/sctp/HandlerResult -header extends java/lang/Enum flags 4031 signature Ljava/lang/Enum; - -class name com/sun/nio/sctp/IllegalReceiveException -header extends java/lang/IllegalStateException flags 21 - -class name com/sun/nio/sctp/IllegalUnbindException -header extends java/lang/IllegalStateException flags 21 - -class name com/sun/nio/sctp/InvalidStreamException -header extends java/lang/IllegalArgumentException flags 21 - -class name com/sun/nio/sctp/MessageInfo -header extends java/lang/Object flags 421 - -class name com/sun/nio/sctp/Notification -header extends java/lang/Object flags 601 - -class name com/sun/nio/sctp/NotificationHandler -header extends java/lang/Object flags 601 signature Ljava/lang/Object; - -class name com/sun/nio/sctp/SctpChannel -header extends java/nio/channels/spi/AbstractSelectableChannel flags 421 - -class name com/sun/nio/sctp/SctpMultiChannel -header extends java/nio/channels/spi/AbstractSelectableChannel flags 421 - -class name com/sun/nio/sctp/SctpServerChannel -header extends java/nio/channels/spi/AbstractSelectableChannel flags 421 - -class name com/sun/nio/sctp/SctpSocketOption -header extends java/lang/Object implements java/net/SocketOption flags 601 signature Ljava/lang/Object;Ljava/net/SocketOption; - -class name com/sun/nio/sctp/SendFailedNotification -header extends java/lang/Object implements com/sun/nio/sctp/Notification flags 421 - -class name com/sun/nio/sctp/ShutdownNotification -header extends java/lang/Object implements com/sun/nio/sctp/Notification flags 421 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.sctp-L.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.sctp-L.sym.txt index 6c5ca633b9bb5..5fbb36093f74d 100644 --- a/src/jdk.compiler/share/data/symbols/jdk.sctp-L.sym.txt +++ b/src/jdk.compiler/share/data/symbols/jdk.sctp-L.sym.txt @@ -26,45 +26,6 @@ # ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ### # ########################################################## # -class name com/sun/nio/sctp/AbstractNotificationHandler -header extends java/lang/Object implements com/sun/nio/sctp/NotificationHandler flags 21 signature Ljava/lang/Object;Lcom/sun/nio/sctp/NotificationHandler; - -class name com/sun/nio/sctp/Association -header extends java/lang/Object flags 21 - -class name com/sun/nio/sctp/HandlerResult -header extends java/lang/Enum flags 4031 signature Ljava/lang/Enum; - -class name com/sun/nio/sctp/IllegalReceiveException -header extends java/lang/IllegalStateException flags 21 - -class name com/sun/nio/sctp/IllegalUnbindException -header extends java/lang/IllegalStateException flags 21 - -class name com/sun/nio/sctp/InvalidStreamException -header extends java/lang/IllegalArgumentException flags 21 - -class name com/sun/nio/sctp/MessageInfo -header extends java/lang/Object flags 421 - -class name com/sun/nio/sctp/Notification -header extends java/lang/Object flags 601 - -class name com/sun/nio/sctp/NotificationHandler -header extends java/lang/Object flags 601 signature Ljava/lang/Object; - -class name com/sun/nio/sctp/SctpChannel -header extends java/nio/channels/spi/AbstractSelectableChannel flags 421 - -class name com/sun/nio/sctp/SctpMultiChannel -header extends java/nio/channels/spi/AbstractSelectableChannel flags 421 - -class name com/sun/nio/sctp/SctpServerChannel -header extends java/nio/channels/spi/AbstractSelectableChannel flags 421 - -class name com/sun/nio/sctp/SctpSocketOption -header extends java/lang/Object implements java/net/SocketOption flags 601 signature Ljava/lang/Object;Ljava/net/SocketOption; - class name com/sun/nio/sctp/SctpStandardSocketOptions header extends java/lang/Object nestMembers com/sun/nio/sctp/SctpStandardSocketOptions$InitMaxStreams flags 31 innerclass innerClass com/sun/nio/sctp/SctpStandardSocketOptions$InitMaxStreams outerClass com/sun/nio/sctp/SctpStandardSocketOptions innerClassName InitMaxStreams flags 9 @@ -74,9 +35,3 @@ header extends java/lang/Object nestHost com/sun/nio/sctp/SctpStandardSocketOpti innerclass innerClass com/sun/nio/sctp/SctpStandardSocketOptions$InitMaxStreams outerClass com/sun/nio/sctp/SctpStandardSocketOptions innerClassName InitMaxStreams flags 9 innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 -class name com/sun/nio/sctp/SendFailedNotification -header extends java/lang/Object implements com/sun/nio/sctp/Notification flags 421 - -class name com/sun/nio/sctp/ShutdownNotification -header extends java/lang/Object implements com/sun/nio/sctp/Notification flags 421 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.security.auth-H.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.security.auth-H.sym.txt deleted file mode 100644 index a144d3775a4e5..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.security.auth-H.sym.txt +++ /dev/null @@ -1,106 +0,0 @@ -# -# Copyright (c) 2021, 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/security/auth/LdapPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 31 - -class name com/sun/security/auth/NTDomainPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 21 - -class name com/sun/security/auth/NTNumericCredential -header extends java/lang/Object flags 21 - -class name com/sun/security/auth/NTSid -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 21 - -class name com/sun/security/auth/NTSidDomainPrincipal -header extends com/sun/security/auth/NTSid flags 21 - -class name com/sun/security/auth/NTSidGroupPrincipal -header extends com/sun/security/auth/NTSid flags 21 - -class name com/sun/security/auth/NTSidPrimaryGroupPrincipal -header extends com/sun/security/auth/NTSid flags 21 - -class name com/sun/security/auth/NTSidUserPrincipal -header extends com/sun/security/auth/NTSid flags 21 - -class name com/sun/security/auth/NTUserPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 21 - -class name com/sun/security/auth/PrincipalComparator -header extends java/lang/Object flags 601 - -class name com/sun/security/auth/UnixNumericGroupPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 21 - -class name com/sun/security/auth/UnixNumericUserPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 21 - -class name com/sun/security/auth/UnixPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 21 - -class name com/sun/security/auth/UserPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 31 - -class name com/sun/security/auth/callback/TextCallbackHandler -header extends java/lang/Object implements javax/security/auth/callback/CallbackHandler flags 21 - -class name com/sun/security/auth/login/ConfigFile -header extends javax/security/auth/login/Configuration flags 21 - -class name com/sun/security/auth/module/JndiLoginModule -header extends java/lang/Object implements javax/security/auth/spi/LoginModule flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/security/auth/module/KeyStoreLoginModule -header extends java/lang/Object implements javax/security/auth/spi/LoginModule flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/security/auth/module/Krb5LoginModule -header extends java/lang/Object implements javax/security/auth/spi/LoginModule flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/security/auth/module/LdapLoginModule -header extends java/lang/Object implements javax/security/auth/spi/LoginModule flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/security/auth/module/NTLoginModule -header extends java/lang/Object implements javax/security/auth/spi/LoginModule flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/security/auth/module/NTSystem -header extends java/lang/Object flags 21 - -class name com/sun/security/auth/module/UnixLoginModule -header extends java/lang/Object implements javax/security/auth/spi/LoginModule flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/security/auth/module/UnixSystem -header extends java/lang/Object flags 21 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.security.auth-I.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.security.auth-I.sym.txt deleted file mode 100644 index a144d3775a4e5..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.security.auth-I.sym.txt +++ /dev/null @@ -1,106 +0,0 @@ -# -# Copyright (c) 2021, 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/security/auth/LdapPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 31 - -class name com/sun/security/auth/NTDomainPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 21 - -class name com/sun/security/auth/NTNumericCredential -header extends java/lang/Object flags 21 - -class name com/sun/security/auth/NTSid -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 21 - -class name com/sun/security/auth/NTSidDomainPrincipal -header extends com/sun/security/auth/NTSid flags 21 - -class name com/sun/security/auth/NTSidGroupPrincipal -header extends com/sun/security/auth/NTSid flags 21 - -class name com/sun/security/auth/NTSidPrimaryGroupPrincipal -header extends com/sun/security/auth/NTSid flags 21 - -class name com/sun/security/auth/NTSidUserPrincipal -header extends com/sun/security/auth/NTSid flags 21 - -class name com/sun/security/auth/NTUserPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 21 - -class name com/sun/security/auth/PrincipalComparator -header extends java/lang/Object flags 601 - -class name com/sun/security/auth/UnixNumericGroupPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 21 - -class name com/sun/security/auth/UnixNumericUserPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 21 - -class name com/sun/security/auth/UnixPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 21 - -class name com/sun/security/auth/UserPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 31 - -class name com/sun/security/auth/callback/TextCallbackHandler -header extends java/lang/Object implements javax/security/auth/callback/CallbackHandler flags 21 - -class name com/sun/security/auth/login/ConfigFile -header extends javax/security/auth/login/Configuration flags 21 - -class name com/sun/security/auth/module/JndiLoginModule -header extends java/lang/Object implements javax/security/auth/spi/LoginModule flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/security/auth/module/KeyStoreLoginModule -header extends java/lang/Object implements javax/security/auth/spi/LoginModule flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/security/auth/module/Krb5LoginModule -header extends java/lang/Object implements javax/security/auth/spi/LoginModule flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/security/auth/module/LdapLoginModule -header extends java/lang/Object implements javax/security/auth/spi/LoginModule flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/security/auth/module/NTLoginModule -header extends java/lang/Object implements javax/security/auth/spi/LoginModule flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/security/auth/module/NTSystem -header extends java/lang/Object flags 21 - -class name com/sun/security/auth/module/UnixLoginModule -header extends java/lang/Object implements javax/security/auth/spi/LoginModule flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/security/auth/module/UnixSystem -header extends java/lang/Object flags 21 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.security.auth-J.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.security.auth-J.sym.txt deleted file mode 100644 index 7fca7055334e9..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.security.auth-J.sym.txt +++ /dev/null @@ -1,106 +0,0 @@ -# -# Copyright (c) 2022, 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/security/auth/LdapPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 31 - -class name com/sun/security/auth/NTDomainPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 21 - -class name com/sun/security/auth/NTNumericCredential -header extends java/lang/Object flags 21 - -class name com/sun/security/auth/NTSid -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 21 - -class name com/sun/security/auth/NTSidDomainPrincipal -header extends com/sun/security/auth/NTSid flags 21 - -class name com/sun/security/auth/NTSidGroupPrincipal -header extends com/sun/security/auth/NTSid flags 21 - -class name com/sun/security/auth/NTSidPrimaryGroupPrincipal -header extends com/sun/security/auth/NTSid flags 21 - -class name com/sun/security/auth/NTSidUserPrincipal -header extends com/sun/security/auth/NTSid flags 21 - -class name com/sun/security/auth/NTUserPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 21 - -class name com/sun/security/auth/PrincipalComparator -header extends java/lang/Object flags 601 - -class name com/sun/security/auth/UnixNumericGroupPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 21 - -class name com/sun/security/auth/UnixNumericUserPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 21 - -class name com/sun/security/auth/UnixPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 21 - -class name com/sun/security/auth/UserPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 31 - -class name com/sun/security/auth/callback/TextCallbackHandler -header extends java/lang/Object implements javax/security/auth/callback/CallbackHandler flags 21 - -class name com/sun/security/auth/login/ConfigFile -header extends javax/security/auth/login/Configuration flags 21 - -class name com/sun/security/auth/module/JndiLoginModule -header extends java/lang/Object implements javax/security/auth/spi/LoginModule flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/security/auth/module/KeyStoreLoginModule -header extends java/lang/Object implements javax/security/auth/spi/LoginModule flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/security/auth/module/Krb5LoginModule -header extends java/lang/Object implements javax/security/auth/spi/LoginModule flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/security/auth/module/LdapLoginModule -header extends java/lang/Object implements javax/security/auth/spi/LoginModule flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/security/auth/module/NTLoginModule -header extends java/lang/Object implements javax/security/auth/spi/LoginModule flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/security/auth/module/NTSystem -header extends java/lang/Object flags 21 - -class name com/sun/security/auth/module/UnixLoginModule -header extends java/lang/Object implements javax/security/auth/spi/LoginModule flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/security/auth/module/UnixSystem -header extends java/lang/Object flags 21 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.security.auth-K.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.security.auth-K.sym.txt deleted file mode 100644 index 7fca7055334e9..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.security.auth-K.sym.txt +++ /dev/null @@ -1,106 +0,0 @@ -# -# Copyright (c) 2022, 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/security/auth/LdapPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 31 - -class name com/sun/security/auth/NTDomainPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 21 - -class name com/sun/security/auth/NTNumericCredential -header extends java/lang/Object flags 21 - -class name com/sun/security/auth/NTSid -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 21 - -class name com/sun/security/auth/NTSidDomainPrincipal -header extends com/sun/security/auth/NTSid flags 21 - -class name com/sun/security/auth/NTSidGroupPrincipal -header extends com/sun/security/auth/NTSid flags 21 - -class name com/sun/security/auth/NTSidPrimaryGroupPrincipal -header extends com/sun/security/auth/NTSid flags 21 - -class name com/sun/security/auth/NTSidUserPrincipal -header extends com/sun/security/auth/NTSid flags 21 - -class name com/sun/security/auth/NTUserPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 21 - -class name com/sun/security/auth/PrincipalComparator -header extends java/lang/Object flags 601 - -class name com/sun/security/auth/UnixNumericGroupPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 21 - -class name com/sun/security/auth/UnixNumericUserPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 21 - -class name com/sun/security/auth/UnixPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 21 - -class name com/sun/security/auth/UserPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 31 - -class name com/sun/security/auth/callback/TextCallbackHandler -header extends java/lang/Object implements javax/security/auth/callback/CallbackHandler flags 21 - -class name com/sun/security/auth/login/ConfigFile -header extends javax/security/auth/login/Configuration flags 21 - -class name com/sun/security/auth/module/JndiLoginModule -header extends java/lang/Object implements javax/security/auth/spi/LoginModule flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/security/auth/module/KeyStoreLoginModule -header extends java/lang/Object implements javax/security/auth/spi/LoginModule flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/security/auth/module/Krb5LoginModule -header extends java/lang/Object implements javax/security/auth/spi/LoginModule flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/security/auth/module/LdapLoginModule -header extends java/lang/Object implements javax/security/auth/spi/LoginModule flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/security/auth/module/NTLoginModule -header extends java/lang/Object implements javax/security/auth/spi/LoginModule flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/security/auth/module/NTSystem -header extends java/lang/Object flags 21 - -class name com/sun/security/auth/module/UnixLoginModule -header extends java/lang/Object implements javax/security/auth/spi/LoginModule flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/security/auth/module/UnixSystem -header extends java/lang/Object flags 21 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.security.auth-L.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.security.auth-L.sym.txt deleted file mode 100644 index 7489f7382525d..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.security.auth-L.sym.txt +++ /dev/null @@ -1,106 +0,0 @@ -# -# Copyright (c) 2023, 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/security/auth/LdapPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 31 - -class name com/sun/security/auth/NTDomainPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 21 - -class name com/sun/security/auth/NTNumericCredential -header extends java/lang/Object flags 21 - -class name com/sun/security/auth/NTSid -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 21 - -class name com/sun/security/auth/NTSidDomainPrincipal -header extends com/sun/security/auth/NTSid flags 21 - -class name com/sun/security/auth/NTSidGroupPrincipal -header extends com/sun/security/auth/NTSid flags 21 - -class name com/sun/security/auth/NTSidPrimaryGroupPrincipal -header extends com/sun/security/auth/NTSid flags 21 - -class name com/sun/security/auth/NTSidUserPrincipal -header extends com/sun/security/auth/NTSid flags 21 - -class name com/sun/security/auth/NTUserPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 21 - -class name com/sun/security/auth/PrincipalComparator -header extends java/lang/Object flags 601 - -class name com/sun/security/auth/UnixNumericGroupPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 21 - -class name com/sun/security/auth/UnixNumericUserPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 21 - -class name com/sun/security/auth/UnixPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 21 - -class name com/sun/security/auth/UserPrincipal -header extends java/lang/Object implements java/security/Principal,java/io/Serializable flags 31 - -class name com/sun/security/auth/callback/TextCallbackHandler -header extends java/lang/Object implements javax/security/auth/callback/CallbackHandler flags 21 - -class name com/sun/security/auth/login/ConfigFile -header extends javax/security/auth/login/Configuration flags 21 - -class name com/sun/security/auth/module/JndiLoginModule -header extends java/lang/Object implements javax/security/auth/spi/LoginModule flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/security/auth/module/KeyStoreLoginModule -header extends java/lang/Object implements javax/security/auth/spi/LoginModule flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/security/auth/module/Krb5LoginModule -header extends java/lang/Object implements javax/security/auth/spi/LoginModule flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/security/auth/module/LdapLoginModule -header extends java/lang/Object implements javax/security/auth/spi/LoginModule flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/security/auth/module/NTLoginModule -header extends java/lang/Object implements javax/security/auth/spi/LoginModule flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/security/auth/module/NTSystem -header extends java/lang/Object flags 21 - -class name com/sun/security/auth/module/UnixLoginModule -header extends java/lang/Object implements javax/security/auth/spi/LoginModule flags 21 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/security/auth/module/UnixSystem -header extends java/lang/Object flags 21 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.security.jgss-H.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.security.jgss-H.sym.txt index 80dca993bdabe..aee1861225469 100644 --- a/src/jdk.compiler/share/data/symbols/jdk.security.jgss-H.sym.txt +++ b/src/jdk.compiler/share/data/symbols/jdk.security.jgss-H.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -26,23 +26,6 @@ # ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ### # ########################################################## # -class name com/sun/security/jgss/AuthorizationDataEntry -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/security/jgss/ExtendedGSSContext -header extends java/lang/Object implements org/ietf/jgss/GSSContext flags 601 - -class name com/sun/security/jgss/ExtendedGSSCredential -header extends java/lang/Object implements org/ietf/jgss/GSSCredential flags 601 - class name com/sun/security/jgss/GSSUtil -header extends java/lang/Object flags 21 -method name descriptor ()V -class name com/sun/security/jgss/InquireSecContextPermission -header extends java/security/BasicPermission flags 31 - -class name com/sun/security/jgss/InquireType -header extends java/lang/Enum flags 4031 signature Ljava/lang/Enum; - diff --git a/src/jdk.compiler/share/data/symbols/jdk.security.jgss-I.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.security.jgss-I.sym.txt deleted file mode 100644 index a3fd927f93f80..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.security.jgss-I.sym.txt +++ /dev/null @@ -1,47 +0,0 @@ -# -# Copyright (c) 2021, 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/security/jgss/AuthorizationDataEntry -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/security/jgss/ExtendedGSSContext -header extends java/lang/Object implements org/ietf/jgss/GSSContext flags 601 - -class name com/sun/security/jgss/ExtendedGSSCredential -header extends java/lang/Object implements org/ietf/jgss/GSSCredential flags 601 - -class name com/sun/security/jgss/GSSUtil -header extends java/lang/Object flags 21 - -class name com/sun/security/jgss/InquireSecContextPermission -header extends java/security/BasicPermission flags 31 - -class name com/sun/security/jgss/InquireType -header extends java/lang/Enum flags 4031 signature Ljava/lang/Enum; - diff --git a/src/jdk.compiler/share/data/symbols/jdk.security.jgss-J.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.security.jgss-J.sym.txt deleted file mode 100644 index eef803edf5398..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.security.jgss-J.sym.txt +++ /dev/null @@ -1,47 +0,0 @@ -# -# Copyright (c) 2022, 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/security/jgss/AuthorizationDataEntry -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/security/jgss/ExtendedGSSContext -header extends java/lang/Object implements org/ietf/jgss/GSSContext flags 601 - -class name com/sun/security/jgss/ExtendedGSSCredential -header extends java/lang/Object implements org/ietf/jgss/GSSCredential flags 601 - -class name com/sun/security/jgss/GSSUtil -header extends java/lang/Object flags 21 - -class name com/sun/security/jgss/InquireSecContextPermission -header extends java/security/BasicPermission flags 31 - -class name com/sun/security/jgss/InquireType -header extends java/lang/Enum flags 4031 signature Ljava/lang/Enum; - diff --git a/src/jdk.compiler/share/data/symbols/jdk.security.jgss-K.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.security.jgss-K.sym.txt deleted file mode 100644 index eef803edf5398..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.security.jgss-K.sym.txt +++ /dev/null @@ -1,47 +0,0 @@ -# -# Copyright (c) 2022, 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/security/jgss/AuthorizationDataEntry -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/security/jgss/ExtendedGSSContext -header extends java/lang/Object implements org/ietf/jgss/GSSContext flags 601 - -class name com/sun/security/jgss/ExtendedGSSCredential -header extends java/lang/Object implements org/ietf/jgss/GSSCredential flags 601 - -class name com/sun/security/jgss/GSSUtil -header extends java/lang/Object flags 21 - -class name com/sun/security/jgss/InquireSecContextPermission -header extends java/security/BasicPermission flags 31 - -class name com/sun/security/jgss/InquireType -header extends java/lang/Enum flags 4031 signature Ljava/lang/Enum; - diff --git a/src/jdk.compiler/share/data/symbols/jdk.security.jgss-L.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.security.jgss-L.sym.txt deleted file mode 100644 index 3f449eec3097e..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.security.jgss-L.sym.txt +++ /dev/null @@ -1,47 +0,0 @@ -# -# Copyright (c) 2023, 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/security/jgss/AuthorizationDataEntry -header extends java/lang/Object flags 31 -innerclass innerClass java/lang/invoke/MethodHandles$Lookup outerClass java/lang/invoke/MethodHandles innerClassName Lookup flags 19 - -class name com/sun/security/jgss/ExtendedGSSContext -header extends java/lang/Object implements org/ietf/jgss/GSSContext flags 601 - -class name com/sun/security/jgss/ExtendedGSSCredential -header extends java/lang/Object implements org/ietf/jgss/GSSCredential flags 601 - -class name com/sun/security/jgss/GSSUtil -header extends java/lang/Object flags 21 - -class name com/sun/security/jgss/InquireSecContextPermission -header extends java/security/BasicPermission flags 31 - -class name com/sun/security/jgss/InquireType -header extends java/lang/Enum flags 4031 signature Ljava/lang/Enum; - diff --git a/src/jdk.compiler/share/data/symbols/jdk.unsupported-H.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.unsupported-H.sym.txt index c38eb27ec3691..6e4e061dc96ac 100644 --- a/src/jdk.compiler/share/data/symbols/jdk.unsupported-H.sym.txt +++ b/src/jdk.compiler/share/data/symbols/jdk.unsupported-H.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -26,26 +26,6 @@ # ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ### # ########################################################## # -class name com/sun/nio/file/ExtendedCopyOption -header extends java/lang/Enum implements java/nio/file/CopyOption flags 4031 signature Ljava/lang/Enum;Ljava/nio/file/CopyOption; classAnnotations @Lsun/Proprietary+Annotation; - -class name com/sun/nio/file/ExtendedOpenOption -header extends java/lang/Enum implements java/nio/file/OpenOption flags 4031 signature Ljava/lang/Enum;Ljava/nio/file/OpenOption; classAnnotations @Lsun/Proprietary+Annotation; - -class name com/sun/nio/file/ExtendedWatchEventModifier -header extends java/lang/Enum implements java/nio/file/WatchEvent$Modifier flags 4031 signature Ljava/lang/Enum;Ljava/nio/file/WatchEvent$Modifier; classAnnotations @Lsun/Proprietary+Annotation; -innerclass innerClass java/nio/file/WatchEvent$Modifier outerClass java/nio/file/WatchEvent innerClassName Modifier flags 609 - -class name com/sun/nio/file/SensitivityWatchEventModifier -header extends java/lang/Enum implements java/nio/file/WatchEvent$Modifier flags 4031 signature Ljava/lang/Enum;Ljava/nio/file/WatchEvent$Modifier; classAnnotations @Lsun/Proprietary+Annotation; -innerclass innerClass java/nio/file/WatchEvent$Modifier outerClass java/nio/file/WatchEvent innerClassName Modifier flags 609 - -class name sun/misc/SignalHandler -header extends java/lang/Object flags 601 classAnnotations @Lsun/Proprietary+Annotation; - class name sun/misc/Unsafe -method name defineAnonymousClass descriptor (Ljava/lang/Class;[B[Ljava/lang/Object;)Ljava/lang/Class; -class name sun/reflect/ReflectionFactory -header extends java/lang/Object flags 21 classAnnotations @Lsun/Proprietary+Annotation; - diff --git a/src/jdk.compiler/share/data/symbols/jdk.unsupported-I.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.unsupported-I.sym.txt index db2342c25e259..9e6df3550e581 100644 --- a/src/jdk.compiler/share/data/symbols/jdk.unsupported-I.sym.txt +++ b/src/jdk.compiler/share/data/symbols/jdk.unsupported-I.sym.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -26,23 +26,6 @@ # ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ### # ########################################################## # -class name com/sun/nio/file/ExtendedCopyOption -header extends java/lang/Enum implements java/nio/file/CopyOption flags 4031 signature Ljava/lang/Enum;Ljava/nio/file/CopyOption; classAnnotations @Lsun/Proprietary+Annotation; - -class name com/sun/nio/file/ExtendedOpenOption -header extends java/lang/Enum implements java/nio/file/OpenOption flags 4031 signature Ljava/lang/Enum;Ljava/nio/file/OpenOption; classAnnotations @Lsun/Proprietary+Annotation; - -class name com/sun/nio/file/ExtendedWatchEventModifier -header extends java/lang/Enum implements java/nio/file/WatchEvent$Modifier flags 4031 signature Ljava/lang/Enum;Ljava/nio/file/WatchEvent$Modifier; classAnnotations @Lsun/Proprietary+Annotation; -innerclass innerClass java/nio/file/WatchEvent$Modifier outerClass java/nio/file/WatchEvent innerClassName Modifier flags 609 - -class name com/sun/nio/file/SensitivityWatchEventModifier -header extends java/lang/Enum implements java/nio/file/WatchEvent$Modifier flags 4031 signature Ljava/lang/Enum;Ljava/nio/file/WatchEvent$Modifier; classAnnotations @Lsun/Proprietary+Annotation; -innerclass innerClass java/nio/file/WatchEvent$Modifier outerClass java/nio/file/WatchEvent innerClassName Modifier flags 609 - -class name sun/misc/SignalHandler -header extends java/lang/Object flags 601 classAnnotations @Lsun/Proprietary+Annotation; - class name sun/misc/Unsafe -method name objectFieldOffset descriptor (Ljava/lang/reflect/Field;)J -method name staticFieldOffset descriptor (Ljava/lang/reflect/Field;)J @@ -51,6 +34,3 @@ method name objectFieldOffset descriptor (Ljava/lang/reflect/Field;)J flags 1 de method name staticFieldOffset descriptor (Ljava/lang/reflect/Field;)J flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="18")@Ljdk/internal/vm/annotation/ForceInline; method name staticFieldBase descriptor (Ljava/lang/reflect/Field;)Ljava/lang/Object; flags 1 deprecated true runtimeAnnotations @Ljava/lang/Deprecated;(since="18")@Ljdk/internal/vm/annotation/ForceInline; -class name sun/reflect/ReflectionFactory -header extends java/lang/Object flags 21 classAnnotations @Lsun/Proprietary+Annotation; - diff --git a/src/jdk.compiler/share/data/symbols/jdk.unsupported-J.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.unsupported-J.sym.txt deleted file mode 100644 index fc08e61ed1209..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.unsupported-J.sym.txt +++ /dev/null @@ -1,48 +0,0 @@ -# -# Copyright (c) 2022, 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/nio/file/ExtendedCopyOption -header extends java/lang/Enum implements java/nio/file/CopyOption flags 4031 signature Ljava/lang/Enum;Ljava/nio/file/CopyOption; classAnnotations @Lsun/Proprietary+Annotation; - -class name com/sun/nio/file/ExtendedOpenOption -header extends java/lang/Enum implements java/nio/file/OpenOption flags 4031 signature Ljava/lang/Enum;Ljava/nio/file/OpenOption; classAnnotations @Lsun/Proprietary+Annotation; - -class name com/sun/nio/file/ExtendedWatchEventModifier -header extends java/lang/Enum implements java/nio/file/WatchEvent$Modifier flags 4031 signature Ljava/lang/Enum;Ljava/nio/file/WatchEvent$Modifier; classAnnotations @Lsun/Proprietary+Annotation; -innerclass innerClass java/nio/file/WatchEvent$Modifier outerClass java/nio/file/WatchEvent innerClassName Modifier flags 609 - -class name com/sun/nio/file/SensitivityWatchEventModifier -header extends java/lang/Enum implements java/nio/file/WatchEvent$Modifier flags 4031 signature Ljava/lang/Enum;Ljava/nio/file/WatchEvent$Modifier; classAnnotations @Lsun/Proprietary+Annotation; -innerclass innerClass java/nio/file/WatchEvent$Modifier outerClass java/nio/file/WatchEvent innerClassName Modifier flags 609 - -class name sun/misc/SignalHandler -header extends java/lang/Object flags 601 classAnnotations @Lsun/Proprietary+Annotation; - -class name sun/reflect/ReflectionFactory -header extends java/lang/Object flags 21 classAnnotations @Lsun/Proprietary+Annotation; - diff --git a/src/jdk.compiler/share/data/symbols/jdk.unsupported-K.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.unsupported-K.sym.txt deleted file mode 100644 index fc08e61ed1209..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.unsupported-K.sym.txt +++ /dev/null @@ -1,48 +0,0 @@ -# -# Copyright (c) 2022, 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/nio/file/ExtendedCopyOption -header extends java/lang/Enum implements java/nio/file/CopyOption flags 4031 signature Ljava/lang/Enum;Ljava/nio/file/CopyOption; classAnnotations @Lsun/Proprietary+Annotation; - -class name com/sun/nio/file/ExtendedOpenOption -header extends java/lang/Enum implements java/nio/file/OpenOption flags 4031 signature Ljava/lang/Enum;Ljava/nio/file/OpenOption; classAnnotations @Lsun/Proprietary+Annotation; - -class name com/sun/nio/file/ExtendedWatchEventModifier -header extends java/lang/Enum implements java/nio/file/WatchEvent$Modifier flags 4031 signature Ljava/lang/Enum;Ljava/nio/file/WatchEvent$Modifier; classAnnotations @Lsun/Proprietary+Annotation; -innerclass innerClass java/nio/file/WatchEvent$Modifier outerClass java/nio/file/WatchEvent innerClassName Modifier flags 609 - -class name com/sun/nio/file/SensitivityWatchEventModifier -header extends java/lang/Enum implements java/nio/file/WatchEvent$Modifier flags 4031 signature Ljava/lang/Enum;Ljava/nio/file/WatchEvent$Modifier; classAnnotations @Lsun/Proprietary+Annotation; -innerclass innerClass java/nio/file/WatchEvent$Modifier outerClass java/nio/file/WatchEvent innerClassName Modifier flags 609 - -class name sun/misc/SignalHandler -header extends java/lang/Object flags 601 classAnnotations @Lsun/Proprietary+Annotation; - -class name sun/reflect/ReflectionFactory -header extends java/lang/Object flags 21 classAnnotations @Lsun/Proprietary+Annotation; - diff --git a/src/jdk.compiler/share/data/symbols/jdk.unsupported-L.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.unsupported-L.sym.txt index 6f71e2e9431d6..cb152004b4ba8 100644 --- a/src/jdk.compiler/share/data/symbols/jdk.unsupported-L.sym.txt +++ b/src/jdk.compiler/share/data/symbols/jdk.unsupported-L.sym.txt @@ -26,23 +26,7 @@ # ### THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. ### # ########################################################## # -class name com/sun/nio/file/ExtendedCopyOption -header extends java/lang/Enum implements java/nio/file/CopyOption flags 4031 signature Ljava/lang/Enum;Ljava/nio/file/CopyOption; classAnnotations @Lsun/Proprietary+Annotation; - -class name com/sun/nio/file/ExtendedOpenOption -header extends java/lang/Enum implements java/nio/file/OpenOption flags 4031 signature Ljava/lang/Enum;Ljava/nio/file/OpenOption; classAnnotations @Lsun/Proprietary+Annotation; - -class name com/sun/nio/file/ExtendedWatchEventModifier -header extends java/lang/Enum implements java/nio/file/WatchEvent$Modifier flags 4031 signature Ljava/lang/Enum;Ljava/nio/file/WatchEvent$Modifier; classAnnotations @Lsun/Proprietary+Annotation; -innerclass innerClass java/nio/file/WatchEvent$Modifier outerClass java/nio/file/WatchEvent innerClassName Modifier flags 609 - class name com/sun/nio/file/SensitivityWatchEventModifier header extends java/lang/Enum implements java/nio/file/WatchEvent$Modifier flags 4031 deprecated true signature Ljava/lang/Enum;Ljava/nio/file/WatchEvent$Modifier; classAnnotations @Lsun/Proprietary+Annotation; runtimeAnnotations @Ljava/lang/Deprecated;(forRemoval=Ztrue,since="21") innerclass innerClass java/nio/file/WatchEvent$Modifier outerClass java/nio/file/WatchEvent innerClassName Modifier flags 609 -class name sun/misc/SignalHandler -header extends java/lang/Object flags 601 classAnnotations @Lsun/Proprietary+Annotation; - -class name sun/reflect/ReflectionFactory -header extends java/lang/Object flags 21 classAnnotations @Lsun/Proprietary+Annotation; - diff --git a/src/jdk.compiler/share/data/symbols/jdk.xml.dom-H.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.xml.dom-H.sym.txt deleted file mode 100644 index 24fc874981772..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.xml.dom-H.sym.txt +++ /dev/null @@ -1,295 +0,0 @@ -# -# Copyright (c) 2021, 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 org/w3c/dom/css/CSS2Properties -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/CSSCharsetRule -header extends java/lang/Object implements org/w3c/dom/css/CSSRule flags 601 - -class name org/w3c/dom/css/CSSFontFaceRule -header extends java/lang/Object implements org/w3c/dom/css/CSSRule flags 601 - -class name org/w3c/dom/css/CSSImportRule -header extends java/lang/Object implements org/w3c/dom/css/CSSRule flags 601 - -class name org/w3c/dom/css/CSSMediaRule -header extends java/lang/Object implements org/w3c/dom/css/CSSRule flags 601 - -class name org/w3c/dom/css/CSSPageRule -header extends java/lang/Object implements org/w3c/dom/css/CSSRule flags 601 - -class name org/w3c/dom/css/CSSPrimitiveValue -header extends java/lang/Object implements org/w3c/dom/css/CSSValue flags 601 - -class name org/w3c/dom/css/CSSRule -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/CSSRuleList -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/CSSStyleDeclaration -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/CSSStyleRule -header extends java/lang/Object implements org/w3c/dom/css/CSSRule flags 601 - -class name org/w3c/dom/css/CSSStyleSheet -header extends java/lang/Object implements org/w3c/dom/stylesheets/StyleSheet flags 601 - -class name org/w3c/dom/css/CSSUnknownRule -header extends java/lang/Object implements org/w3c/dom/css/CSSRule flags 601 - -class name org/w3c/dom/css/CSSValue -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/CSSValueList -header extends java/lang/Object implements org/w3c/dom/css/CSSValue flags 601 - -class name org/w3c/dom/css/Counter -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/DOMImplementationCSS -header extends java/lang/Object implements org/w3c/dom/DOMImplementation flags 601 - -class name org/w3c/dom/css/DocumentCSS -header extends java/lang/Object implements org/w3c/dom/stylesheets/DocumentStyle flags 601 - -class name org/w3c/dom/css/ElementCSSInlineStyle -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/RGBColor -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/Rect -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/ViewCSS -header extends java/lang/Object implements org/w3c/dom/views/AbstractView flags 601 - -class name org/w3c/dom/html/HTMLAnchorElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLAppletElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLAreaElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLBRElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLBaseElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLBaseFontElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLBodyElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLButtonElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLCollection -header extends java/lang/Object flags 601 - -class name org/w3c/dom/html/HTMLDListElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLDOMImplementation -header extends java/lang/Object implements org/w3c/dom/DOMImplementation flags 601 - -class name org/w3c/dom/html/HTMLDirectoryElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLDivElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLDocument -header extends java/lang/Object implements org/w3c/dom/Document flags 601 - -class name org/w3c/dom/html/HTMLElement -header extends java/lang/Object implements org/w3c/dom/Element flags 601 - -class name org/w3c/dom/html/HTMLFieldSetElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLFontElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLFormElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLFrameElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLFrameSetElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLHRElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLHeadElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLHeadingElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLHtmlElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLIFrameElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLImageElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLInputElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLIsIndexElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLLIElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLLabelElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLLegendElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLLinkElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLMapElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLMenuElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLMetaElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLModElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLOListElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLObjectElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLOptGroupElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLOptionElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLParagraphElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLParamElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLPreElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLQuoteElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLScriptElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLSelectElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLStyleElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLTableCaptionElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLTableCellElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLTableColElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLTableElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLTableRowElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLTableSectionElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLTextAreaElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLTitleElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLUListElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/stylesheets/DocumentStyle -header extends java/lang/Object flags 601 - -class name org/w3c/dom/stylesheets/LinkStyle -header extends java/lang/Object flags 601 - -class name org/w3c/dom/stylesheets/MediaList -header extends java/lang/Object flags 601 - -class name org/w3c/dom/stylesheets/StyleSheet -header extends java/lang/Object flags 601 - -class name org/w3c/dom/stylesheets/StyleSheetList -header extends java/lang/Object flags 601 - -class name org/w3c/dom/xpath/XPathEvaluator -header extends java/lang/Object flags 601 - -class name org/w3c/dom/xpath/XPathException -header extends java/lang/RuntimeException flags 21 - -class name org/w3c/dom/xpath/XPathExpression -header extends java/lang/Object flags 601 - -class name org/w3c/dom/xpath/XPathNSResolver -header extends java/lang/Object flags 601 - -class name org/w3c/dom/xpath/XPathNamespace -header extends java/lang/Object implements org/w3c/dom/Node flags 601 - -class name org/w3c/dom/xpath/XPathResult -header extends java/lang/Object flags 601 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.xml.dom-I.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.xml.dom-I.sym.txt deleted file mode 100644 index 24fc874981772..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.xml.dom-I.sym.txt +++ /dev/null @@ -1,295 +0,0 @@ -# -# Copyright (c) 2021, 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 org/w3c/dom/css/CSS2Properties -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/CSSCharsetRule -header extends java/lang/Object implements org/w3c/dom/css/CSSRule flags 601 - -class name org/w3c/dom/css/CSSFontFaceRule -header extends java/lang/Object implements org/w3c/dom/css/CSSRule flags 601 - -class name org/w3c/dom/css/CSSImportRule -header extends java/lang/Object implements org/w3c/dom/css/CSSRule flags 601 - -class name org/w3c/dom/css/CSSMediaRule -header extends java/lang/Object implements org/w3c/dom/css/CSSRule flags 601 - -class name org/w3c/dom/css/CSSPageRule -header extends java/lang/Object implements org/w3c/dom/css/CSSRule flags 601 - -class name org/w3c/dom/css/CSSPrimitiveValue -header extends java/lang/Object implements org/w3c/dom/css/CSSValue flags 601 - -class name org/w3c/dom/css/CSSRule -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/CSSRuleList -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/CSSStyleDeclaration -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/CSSStyleRule -header extends java/lang/Object implements org/w3c/dom/css/CSSRule flags 601 - -class name org/w3c/dom/css/CSSStyleSheet -header extends java/lang/Object implements org/w3c/dom/stylesheets/StyleSheet flags 601 - -class name org/w3c/dom/css/CSSUnknownRule -header extends java/lang/Object implements org/w3c/dom/css/CSSRule flags 601 - -class name org/w3c/dom/css/CSSValue -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/CSSValueList -header extends java/lang/Object implements org/w3c/dom/css/CSSValue flags 601 - -class name org/w3c/dom/css/Counter -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/DOMImplementationCSS -header extends java/lang/Object implements org/w3c/dom/DOMImplementation flags 601 - -class name org/w3c/dom/css/DocumentCSS -header extends java/lang/Object implements org/w3c/dom/stylesheets/DocumentStyle flags 601 - -class name org/w3c/dom/css/ElementCSSInlineStyle -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/RGBColor -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/Rect -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/ViewCSS -header extends java/lang/Object implements org/w3c/dom/views/AbstractView flags 601 - -class name org/w3c/dom/html/HTMLAnchorElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLAppletElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLAreaElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLBRElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLBaseElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLBaseFontElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLBodyElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLButtonElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLCollection -header extends java/lang/Object flags 601 - -class name org/w3c/dom/html/HTMLDListElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLDOMImplementation -header extends java/lang/Object implements org/w3c/dom/DOMImplementation flags 601 - -class name org/w3c/dom/html/HTMLDirectoryElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLDivElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLDocument -header extends java/lang/Object implements org/w3c/dom/Document flags 601 - -class name org/w3c/dom/html/HTMLElement -header extends java/lang/Object implements org/w3c/dom/Element flags 601 - -class name org/w3c/dom/html/HTMLFieldSetElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLFontElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLFormElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLFrameElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLFrameSetElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLHRElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLHeadElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLHeadingElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLHtmlElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLIFrameElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLImageElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLInputElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLIsIndexElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLLIElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLLabelElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLLegendElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLLinkElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLMapElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLMenuElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLMetaElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLModElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLOListElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLObjectElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLOptGroupElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLOptionElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLParagraphElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLParamElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLPreElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLQuoteElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLScriptElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLSelectElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLStyleElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLTableCaptionElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLTableCellElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLTableColElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLTableElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLTableRowElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLTableSectionElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLTextAreaElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLTitleElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLUListElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/stylesheets/DocumentStyle -header extends java/lang/Object flags 601 - -class name org/w3c/dom/stylesheets/LinkStyle -header extends java/lang/Object flags 601 - -class name org/w3c/dom/stylesheets/MediaList -header extends java/lang/Object flags 601 - -class name org/w3c/dom/stylesheets/StyleSheet -header extends java/lang/Object flags 601 - -class name org/w3c/dom/stylesheets/StyleSheetList -header extends java/lang/Object flags 601 - -class name org/w3c/dom/xpath/XPathEvaluator -header extends java/lang/Object flags 601 - -class name org/w3c/dom/xpath/XPathException -header extends java/lang/RuntimeException flags 21 - -class name org/w3c/dom/xpath/XPathExpression -header extends java/lang/Object flags 601 - -class name org/w3c/dom/xpath/XPathNSResolver -header extends java/lang/Object flags 601 - -class name org/w3c/dom/xpath/XPathNamespace -header extends java/lang/Object implements org/w3c/dom/Node flags 601 - -class name org/w3c/dom/xpath/XPathResult -header extends java/lang/Object flags 601 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.xml.dom-J.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.xml.dom-J.sym.txt deleted file mode 100644 index 66599facd5e3c..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.xml.dom-J.sym.txt +++ /dev/null @@ -1,295 +0,0 @@ -# -# Copyright (c) 2022, 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 org/w3c/dom/css/CSS2Properties -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/CSSCharsetRule -header extends java/lang/Object implements org/w3c/dom/css/CSSRule flags 601 - -class name org/w3c/dom/css/CSSFontFaceRule -header extends java/lang/Object implements org/w3c/dom/css/CSSRule flags 601 - -class name org/w3c/dom/css/CSSImportRule -header extends java/lang/Object implements org/w3c/dom/css/CSSRule flags 601 - -class name org/w3c/dom/css/CSSMediaRule -header extends java/lang/Object implements org/w3c/dom/css/CSSRule flags 601 - -class name org/w3c/dom/css/CSSPageRule -header extends java/lang/Object implements org/w3c/dom/css/CSSRule flags 601 - -class name org/w3c/dom/css/CSSPrimitiveValue -header extends java/lang/Object implements org/w3c/dom/css/CSSValue flags 601 - -class name org/w3c/dom/css/CSSRule -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/CSSRuleList -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/CSSStyleDeclaration -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/CSSStyleRule -header extends java/lang/Object implements org/w3c/dom/css/CSSRule flags 601 - -class name org/w3c/dom/css/CSSStyleSheet -header extends java/lang/Object implements org/w3c/dom/stylesheets/StyleSheet flags 601 - -class name org/w3c/dom/css/CSSUnknownRule -header extends java/lang/Object implements org/w3c/dom/css/CSSRule flags 601 - -class name org/w3c/dom/css/CSSValue -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/CSSValueList -header extends java/lang/Object implements org/w3c/dom/css/CSSValue flags 601 - -class name org/w3c/dom/css/Counter -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/DOMImplementationCSS -header extends java/lang/Object implements org/w3c/dom/DOMImplementation flags 601 - -class name org/w3c/dom/css/DocumentCSS -header extends java/lang/Object implements org/w3c/dom/stylesheets/DocumentStyle flags 601 - -class name org/w3c/dom/css/ElementCSSInlineStyle -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/RGBColor -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/Rect -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/ViewCSS -header extends java/lang/Object implements org/w3c/dom/views/AbstractView flags 601 - -class name org/w3c/dom/html/HTMLAnchorElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLAppletElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLAreaElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLBRElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLBaseElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLBaseFontElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLBodyElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLButtonElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLCollection -header extends java/lang/Object flags 601 - -class name org/w3c/dom/html/HTMLDListElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLDOMImplementation -header extends java/lang/Object implements org/w3c/dom/DOMImplementation flags 601 - -class name org/w3c/dom/html/HTMLDirectoryElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLDivElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLDocument -header extends java/lang/Object implements org/w3c/dom/Document flags 601 - -class name org/w3c/dom/html/HTMLElement -header extends java/lang/Object implements org/w3c/dom/Element flags 601 - -class name org/w3c/dom/html/HTMLFieldSetElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLFontElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLFormElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLFrameElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLFrameSetElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLHRElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLHeadElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLHeadingElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLHtmlElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLIFrameElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLImageElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLInputElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLIsIndexElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLLIElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLLabelElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLLegendElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLLinkElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLMapElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLMenuElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLMetaElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLModElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLOListElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLObjectElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLOptGroupElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLOptionElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLParagraphElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLParamElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLPreElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLQuoteElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLScriptElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLSelectElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLStyleElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLTableCaptionElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLTableCellElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLTableColElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLTableElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLTableRowElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLTableSectionElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLTextAreaElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLTitleElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLUListElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/stylesheets/DocumentStyle -header extends java/lang/Object flags 601 - -class name org/w3c/dom/stylesheets/LinkStyle -header extends java/lang/Object flags 601 - -class name org/w3c/dom/stylesheets/MediaList -header extends java/lang/Object flags 601 - -class name org/w3c/dom/stylesheets/StyleSheet -header extends java/lang/Object flags 601 - -class name org/w3c/dom/stylesheets/StyleSheetList -header extends java/lang/Object flags 601 - -class name org/w3c/dom/xpath/XPathEvaluator -header extends java/lang/Object flags 601 - -class name org/w3c/dom/xpath/XPathException -header extends java/lang/RuntimeException flags 21 - -class name org/w3c/dom/xpath/XPathExpression -header extends java/lang/Object flags 601 - -class name org/w3c/dom/xpath/XPathNSResolver -header extends java/lang/Object flags 601 - -class name org/w3c/dom/xpath/XPathNamespace -header extends java/lang/Object implements org/w3c/dom/Node flags 601 - -class name org/w3c/dom/xpath/XPathResult -header extends java/lang/Object flags 601 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.xml.dom-K.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.xml.dom-K.sym.txt deleted file mode 100644 index 66599facd5e3c..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.xml.dom-K.sym.txt +++ /dev/null @@ -1,295 +0,0 @@ -# -# Copyright (c) 2022, 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 org/w3c/dom/css/CSS2Properties -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/CSSCharsetRule -header extends java/lang/Object implements org/w3c/dom/css/CSSRule flags 601 - -class name org/w3c/dom/css/CSSFontFaceRule -header extends java/lang/Object implements org/w3c/dom/css/CSSRule flags 601 - -class name org/w3c/dom/css/CSSImportRule -header extends java/lang/Object implements org/w3c/dom/css/CSSRule flags 601 - -class name org/w3c/dom/css/CSSMediaRule -header extends java/lang/Object implements org/w3c/dom/css/CSSRule flags 601 - -class name org/w3c/dom/css/CSSPageRule -header extends java/lang/Object implements org/w3c/dom/css/CSSRule flags 601 - -class name org/w3c/dom/css/CSSPrimitiveValue -header extends java/lang/Object implements org/w3c/dom/css/CSSValue flags 601 - -class name org/w3c/dom/css/CSSRule -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/CSSRuleList -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/CSSStyleDeclaration -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/CSSStyleRule -header extends java/lang/Object implements org/w3c/dom/css/CSSRule flags 601 - -class name org/w3c/dom/css/CSSStyleSheet -header extends java/lang/Object implements org/w3c/dom/stylesheets/StyleSheet flags 601 - -class name org/w3c/dom/css/CSSUnknownRule -header extends java/lang/Object implements org/w3c/dom/css/CSSRule flags 601 - -class name org/w3c/dom/css/CSSValue -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/CSSValueList -header extends java/lang/Object implements org/w3c/dom/css/CSSValue flags 601 - -class name org/w3c/dom/css/Counter -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/DOMImplementationCSS -header extends java/lang/Object implements org/w3c/dom/DOMImplementation flags 601 - -class name org/w3c/dom/css/DocumentCSS -header extends java/lang/Object implements org/w3c/dom/stylesheets/DocumentStyle flags 601 - -class name org/w3c/dom/css/ElementCSSInlineStyle -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/RGBColor -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/Rect -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/ViewCSS -header extends java/lang/Object implements org/w3c/dom/views/AbstractView flags 601 - -class name org/w3c/dom/html/HTMLAnchorElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLAppletElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLAreaElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLBRElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLBaseElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLBaseFontElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLBodyElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLButtonElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLCollection -header extends java/lang/Object flags 601 - -class name org/w3c/dom/html/HTMLDListElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLDOMImplementation -header extends java/lang/Object implements org/w3c/dom/DOMImplementation flags 601 - -class name org/w3c/dom/html/HTMLDirectoryElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLDivElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLDocument -header extends java/lang/Object implements org/w3c/dom/Document flags 601 - -class name org/w3c/dom/html/HTMLElement -header extends java/lang/Object implements org/w3c/dom/Element flags 601 - -class name org/w3c/dom/html/HTMLFieldSetElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLFontElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLFormElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLFrameElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLFrameSetElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLHRElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLHeadElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLHeadingElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLHtmlElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLIFrameElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLImageElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLInputElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLIsIndexElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLLIElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLLabelElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLLegendElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLLinkElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLMapElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLMenuElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLMetaElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLModElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLOListElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLObjectElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLOptGroupElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLOptionElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLParagraphElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLParamElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLPreElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLQuoteElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLScriptElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLSelectElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLStyleElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLTableCaptionElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLTableCellElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLTableColElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLTableElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLTableRowElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLTableSectionElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLTextAreaElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLTitleElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLUListElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/stylesheets/DocumentStyle -header extends java/lang/Object flags 601 - -class name org/w3c/dom/stylesheets/LinkStyle -header extends java/lang/Object flags 601 - -class name org/w3c/dom/stylesheets/MediaList -header extends java/lang/Object flags 601 - -class name org/w3c/dom/stylesheets/StyleSheet -header extends java/lang/Object flags 601 - -class name org/w3c/dom/stylesheets/StyleSheetList -header extends java/lang/Object flags 601 - -class name org/w3c/dom/xpath/XPathEvaluator -header extends java/lang/Object flags 601 - -class name org/w3c/dom/xpath/XPathException -header extends java/lang/RuntimeException flags 21 - -class name org/w3c/dom/xpath/XPathExpression -header extends java/lang/Object flags 601 - -class name org/w3c/dom/xpath/XPathNSResolver -header extends java/lang/Object flags 601 - -class name org/w3c/dom/xpath/XPathNamespace -header extends java/lang/Object implements org/w3c/dom/Node flags 601 - -class name org/w3c/dom/xpath/XPathResult -header extends java/lang/Object flags 601 - diff --git a/src/jdk.compiler/share/data/symbols/jdk.xml.dom-L.sym.txt b/src/jdk.compiler/share/data/symbols/jdk.xml.dom-L.sym.txt deleted file mode 100644 index f99f344cc5867..0000000000000 --- a/src/jdk.compiler/share/data/symbols/jdk.xml.dom-L.sym.txt +++ /dev/null @@ -1,295 +0,0 @@ -# -# Copyright (c) 2023, 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 org/w3c/dom/css/CSS2Properties -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/CSSCharsetRule -header extends java/lang/Object implements org/w3c/dom/css/CSSRule flags 601 - -class name org/w3c/dom/css/CSSFontFaceRule -header extends java/lang/Object implements org/w3c/dom/css/CSSRule flags 601 - -class name org/w3c/dom/css/CSSImportRule -header extends java/lang/Object implements org/w3c/dom/css/CSSRule flags 601 - -class name org/w3c/dom/css/CSSMediaRule -header extends java/lang/Object implements org/w3c/dom/css/CSSRule flags 601 - -class name org/w3c/dom/css/CSSPageRule -header extends java/lang/Object implements org/w3c/dom/css/CSSRule flags 601 - -class name org/w3c/dom/css/CSSPrimitiveValue -header extends java/lang/Object implements org/w3c/dom/css/CSSValue flags 601 - -class name org/w3c/dom/css/CSSRule -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/CSSRuleList -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/CSSStyleDeclaration -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/CSSStyleRule -header extends java/lang/Object implements org/w3c/dom/css/CSSRule flags 601 - -class name org/w3c/dom/css/CSSStyleSheet -header extends java/lang/Object implements org/w3c/dom/stylesheets/StyleSheet flags 601 - -class name org/w3c/dom/css/CSSUnknownRule -header extends java/lang/Object implements org/w3c/dom/css/CSSRule flags 601 - -class name org/w3c/dom/css/CSSValue -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/CSSValueList -header extends java/lang/Object implements org/w3c/dom/css/CSSValue flags 601 - -class name org/w3c/dom/css/Counter -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/DOMImplementationCSS -header extends java/lang/Object implements org/w3c/dom/DOMImplementation flags 601 - -class name org/w3c/dom/css/DocumentCSS -header extends java/lang/Object implements org/w3c/dom/stylesheets/DocumentStyle flags 601 - -class name org/w3c/dom/css/ElementCSSInlineStyle -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/RGBColor -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/Rect -header extends java/lang/Object flags 601 - -class name org/w3c/dom/css/ViewCSS -header extends java/lang/Object implements org/w3c/dom/views/AbstractView flags 601 - -class name org/w3c/dom/html/HTMLAnchorElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLAppletElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLAreaElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLBRElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLBaseElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLBaseFontElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLBodyElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLButtonElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLCollection -header extends java/lang/Object flags 601 - -class name org/w3c/dom/html/HTMLDListElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLDOMImplementation -header extends java/lang/Object implements org/w3c/dom/DOMImplementation flags 601 - -class name org/w3c/dom/html/HTMLDirectoryElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLDivElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLDocument -header extends java/lang/Object implements org/w3c/dom/Document flags 601 - -class name org/w3c/dom/html/HTMLElement -header extends java/lang/Object implements org/w3c/dom/Element flags 601 - -class name org/w3c/dom/html/HTMLFieldSetElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLFontElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLFormElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLFrameElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLFrameSetElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLHRElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLHeadElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLHeadingElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLHtmlElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLIFrameElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLImageElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLInputElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLIsIndexElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLLIElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLLabelElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLLegendElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLLinkElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLMapElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLMenuElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLMetaElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLModElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLOListElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLObjectElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLOptGroupElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLOptionElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLParagraphElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLParamElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLPreElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLQuoteElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLScriptElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLSelectElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLStyleElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLTableCaptionElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLTableCellElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLTableColElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLTableElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLTableRowElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLTableSectionElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLTextAreaElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLTitleElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/html/HTMLUListElement -header extends java/lang/Object implements org/w3c/dom/html/HTMLElement flags 601 - -class name org/w3c/dom/stylesheets/DocumentStyle -header extends java/lang/Object flags 601 - -class name org/w3c/dom/stylesheets/LinkStyle -header extends java/lang/Object flags 601 - -class name org/w3c/dom/stylesheets/MediaList -header extends java/lang/Object flags 601 - -class name org/w3c/dom/stylesheets/StyleSheet -header extends java/lang/Object flags 601 - -class name org/w3c/dom/stylesheets/StyleSheetList -header extends java/lang/Object flags 601 - -class name org/w3c/dom/xpath/XPathEvaluator -header extends java/lang/Object flags 601 - -class name org/w3c/dom/xpath/XPathException -header extends java/lang/RuntimeException flags 21 - -class name org/w3c/dom/xpath/XPathExpression -header extends java/lang/Object flags 601 - -class name org/w3c/dom/xpath/XPathNSResolver -header extends java/lang/Object flags 601 - -class name org/w3c/dom/xpath/XPathNamespace -header extends java/lang/Object implements org/w3c/dom/Node flags 601 - -class name org/w3c/dom/xpath/XPathResult -header extends java/lang/Object flags 601 - diff --git a/src/jdk.compiler/share/data/symbols/symbols b/src/jdk.compiler/share/data/symbols/symbols index a1821a947733b..d1a65b3bd8aab 100644 --- a/src/jdk.compiler/share/data/symbols/symbols +++ b/src/jdk.compiler/share/data/symbols/symbols @@ -39,8 +39,8 @@ platform version D base C files java.base-D.sym.txt:java.compiler-D.sym.txt:java 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 G base F files java.base-G.sym.txt:java.compiler-G.sym.txt:java.datatransfer-G.sym.txt:java.desktop-G.sym.txt:java.instrument-G.sym.txt:java.logging-G.sym.txt:java.management-G.sym.txt:java.management.rmi-G.sym.txt:java.naming-G.sym.txt:java.net.http-G.sym.txt:java.rmi-G.sym.txt:java.scripting-G.sym.txt:java.security.jgss-G.sym.txt:java.security.sasl-G.sym.txt:java.smartcardio-G.sym.txt:java.sql-G.sym.txt:java.sql.rowset-G.sym.txt:java.xml-G.sym.txt:java.xml.crypto-G.sym.txt:jdk.accessibility-G.sym.txt:jdk.attach-G.sym.txt:jdk.compiler-G.sym.txt:jdk.dynalink-G.sym.txt:jdk.httpserver-G.sym.txt:jdk.incubator.foreign-G.sym.txt:jdk.incubator.jpackage-G.sym.txt:jdk.incubator.vector-G.sym.txt:jdk.jartool-G.sym.txt:jdk.javadoc-G.sym.txt:jdk.jconsole-G.sym.txt:jdk.jdi-G.sym.txt:jdk.jfr-G.sym.txt:jdk.jpackage-G.sym.txt:jdk.jshell-G.sym.txt:jdk.jsobject-G.sym.txt:jdk.management-G.sym.txt:jdk.management.jfr-G.sym.txt:jdk.net-G.sym.txt:jdk.sctp-G.sym.txt:jdk.security.auth-G.sym.txt:jdk.security.jgss-G.sym.txt:jdk.unsupported-G.sym.txt:jdk.xml.dom-G.sym.txt -platform version H base G files java.base-H.sym.txt:java.compiler-H.sym.txt:java.datatransfer-H.sym.txt:java.desktop-H.sym.txt:java.instrument-H.sym.txt:java.logging-H.sym.txt:java.management-H.sym.txt:java.management.rmi-H.sym.txt:java.naming-H.sym.txt:java.rmi-H.sym.txt:java.scripting-H.sym.txt:java.security.jgss-H.sym.txt:java.security.sasl-H.sym.txt:java.smartcardio-H.sym.txt:java.sql-H.sym.txt:java.sql.rowset-H.sym.txt:java.xml-H.sym.txt:java.xml.crypto-H.sym.txt:jdk.accessibility-H.sym.txt:jdk.attach-H.sym.txt:jdk.compiler-H.sym.txt:jdk.dynalink-H.sym.txt:jdk.httpserver-H.sym.txt:jdk.incubator.foreign-H.sym.txt:jdk.incubator.vector-H.sym.txt:jdk.jartool-H.sym.txt:jdk.javadoc-H.sym.txt:jdk.jconsole-H.sym.txt:jdk.jdi-H.sym.txt:jdk.jfr-H.sym.txt:jdk.jshell-H.sym.txt:jdk.jsobject-H.sym.txt:jdk.management-H.sym.txt:jdk.management.jfr-H.sym.txt:jdk.net-H.sym.txt:jdk.sctp-H.sym.txt:jdk.security.auth-H.sym.txt:jdk.security.jgss-H.sym.txt:jdk.unsupported-H.sym.txt:jdk.xml.dom-H.sym.txt -platform version I base H files java.base-I.sym.txt:java.compiler-I.sym.txt:java.datatransfer-I.sym.txt:java.desktop-I.sym.txt:java.instrument-I.sym.txt:java.logging-I.sym.txt:java.management-I.sym.txt:java.management.rmi-I.sym.txt:java.naming-I.sym.txt:java.net.http-I.sym.txt:java.rmi-I.sym.txt:java.scripting-I.sym.txt:java.security.jgss-I.sym.txt:java.security.sasl-I.sym.txt:java.smartcardio-I.sym.txt:java.sql-I.sym.txt:java.sql.rowset-I.sym.txt:java.xml-I.sym.txt:java.xml.crypto-I.sym.txt:jdk.accessibility-I.sym.txt:jdk.attach-I.sym.txt:jdk.compiler-I.sym.txt:jdk.dynalink-I.sym.txt:jdk.httpserver-I.sym.txt:jdk.incubator.foreign-I.sym.txt:jdk.incubator.vector-I.sym.txt:jdk.jartool-I.sym.txt:jdk.javadoc-I.sym.txt:jdk.jconsole-I.sym.txt:jdk.jdi-I.sym.txt:jdk.jlink-I.sym.txt:jdk.jshell-I.sym.txt:jdk.jsobject-I.sym.txt:jdk.management-I.sym.txt:jdk.management.jfr-I.sym.txt:jdk.net-I.sym.txt:jdk.sctp-I.sym.txt:jdk.security.auth-I.sym.txt:jdk.security.jgss-I.sym.txt:jdk.unsupported-I.sym.txt:jdk.xml.dom-I.sym.txt -platform version J base I files java.base-J.sym.txt:java.compiler-J.sym.txt:java.datatransfer-J.sym.txt:java.desktop-J.sym.txt:java.instrument-J.sym.txt:java.logging-J.sym.txt:java.management-J.sym.txt:java.management.rmi-J.sym.txt:java.naming-J.sym.txt:java.net.http-J.sym.txt:java.rmi-J.sym.txt:java.scripting-J.sym.txt:java.security.jgss-J.sym.txt:java.security.sasl-J.sym.txt:java.smartcardio-J.sym.txt:java.sql-J.sym.txt:java.sql.rowset-J.sym.txt:java.xml-J.sym.txt:java.xml.crypto-J.sym.txt:jdk.accessibility-J.sym.txt:jdk.attach-J.sym.txt:jdk.compiler-J.sym.txt:jdk.dynalink-J.sym.txt:jdk.httpserver-J.sym.txt:jdk.incubator.concurrent-J.sym.txt:jdk.incubator.foreign-J.sym.txt:jdk.incubator.vector-J.sym.txt:jdk.jartool-J.sym.txt:jdk.javadoc-J.sym.txt:jdk.jconsole-J.sym.txt:jdk.jdi-J.sym.txt:jdk.jfr-J.sym.txt:jdk.jshell-J.sym.txt:jdk.jsobject-J.sym.txt:jdk.management-J.sym.txt:jdk.management.agent-J.sym.txt:jdk.net-J.sym.txt:jdk.sctp-J.sym.txt:jdk.security.auth-J.sym.txt:jdk.security.jgss-J.sym.txt:jdk.unsupported-J.sym.txt:jdk.xml.dom-J.sym.txt -platform version K base J files java.base-K.sym.txt:java.compiler-K.sym.txt:java.datatransfer-K.sym.txt:java.desktop-K.sym.txt:java.instrument-K.sym.txt:java.logging-K.sym.txt:java.management-K.sym.txt:java.management.rmi-K.sym.txt:java.naming-K.sym.txt:java.rmi-K.sym.txt:java.scripting-K.sym.txt:java.security.jgss-K.sym.txt:java.security.sasl-K.sym.txt:java.smartcardio-K.sym.txt:java.sql-K.sym.txt:java.sql.rowset-K.sym.txt:java.xml-K.sym.txt:java.xml.crypto-K.sym.txt:jdk.accessibility-K.sym.txt:jdk.attach-K.sym.txt:jdk.compiler-K.sym.txt:jdk.dynalink-K.sym.txt:jdk.httpserver-K.sym.txt:jdk.incubator.concurrent-K.sym.txt:jdk.incubator.vector-K.sym.txt:jdk.jartool-K.sym.txt:jdk.javadoc-K.sym.txt:jdk.jconsole-K.sym.txt:jdk.jdi-K.sym.txt:jdk.jfr-K.sym.txt:jdk.jlink-K.sym.txt:jdk.jpackage-K.sym.txt:jdk.jshell-K.sym.txt:jdk.jsobject-K.sym.txt:jdk.management-K.sym.txt:jdk.management.jfr-K.sym.txt:jdk.net-K.sym.txt:jdk.sctp-K.sym.txt:jdk.security.auth-K.sym.txt:jdk.security.jgss-K.sym.txt:jdk.unsupported-K.sym.txt:jdk.xml.dom-K.sym.txt -platform version L base K files java.base-L.sym.txt:java.compiler-L.sym.txt:java.datatransfer-L.sym.txt:java.desktop-L.sym.txt:java.instrument-L.sym.txt:java.logging-L.sym.txt:java.management-L.sym.txt:java.management.rmi-L.sym.txt:java.naming-L.sym.txt:java.net.http-L.sym.txt:java.rmi-L.sym.txt:java.scripting-L.sym.txt:java.security.jgss-L.sym.txt:java.security.sasl-L.sym.txt:java.smartcardio-L.sym.txt:java.sql-L.sym.txt:java.sql.rowset-L.sym.txt:java.xml-L.sym.txt:java.xml.crypto-L.sym.txt:jdk.accessibility-L.sym.txt:jdk.attach-L.sym.txt:jdk.compiler-L.sym.txt:jdk.dynalink-L.sym.txt:jdk.httpserver-L.sym.txt:jdk.incubator.concurrent-L.sym.txt:jdk.incubator.vector-L.sym.txt:jdk.jartool-L.sym.txt:jdk.javadoc-L.sym.txt:jdk.jconsole-L.sym.txt:jdk.jdi-L.sym.txt:jdk.jfr-L.sym.txt:jdk.jshell-L.sym.txt:jdk.jsobject-L.sym.txt:jdk.management-L.sym.txt:jdk.net-L.sym.txt:jdk.sctp-L.sym.txt:jdk.security.auth-L.sym.txt:jdk.security.jgss-L.sym.txt:jdk.unsupported-L.sym.txt:jdk.xml.dom-L.sym.txt +platform version H base G files java.base-H.sym.txt:java.compiler-H.sym.txt:java.datatransfer-H.sym.txt:java.desktop-H.sym.txt:java.logging-H.sym.txt:java.management-H.sym.txt:java.naming-H.sym.txt:java.rmi-H.sym.txt:java.xml.crypto-H.sym.txt:jdk.compiler-H.sym.txt:jdk.httpserver-H.sym.txt:jdk.incubator.foreign-H.sym.txt:jdk.incubator.vector-H.sym.txt:jdk.javadoc-H.sym.txt:jdk.jfr-H.sym.txt:jdk.jshell-H.sym.txt:jdk.management.jfr-H.sym.txt:jdk.security.jgss-H.sym.txt:jdk.unsupported-H.sym.txt +platform version I base H files java.base-I.sym.txt:java.compiler-I.sym.txt:java.desktop-I.sym.txt:java.management-I.sym.txt:java.net.http-I.sym.txt:java.xml-I.sym.txt:jdk.accessibility-I.sym.txt:jdk.compiler-I.sym.txt:jdk.httpserver-I.sym.txt:jdk.incubator.foreign-I.sym.txt:jdk.incubator.vector-I.sym.txt:jdk.javadoc-I.sym.txt:jdk.jlink-I.sym.txt:jdk.management.jfr-I.sym.txt:jdk.unsupported-I.sym.txt +platform version J base I files java.base-J.sym.txt:java.compiler-J.sym.txt:java.desktop-J.sym.txt:java.management-J.sym.txt:java.net.http-J.sym.txt:jdk.compiler-J.sym.txt:jdk.incubator.concurrent-J.sym.txt:jdk.incubator.foreign-J.sym.txt:jdk.incubator.vector-J.sym.txt:jdk.jdi-J.sym.txt:jdk.jfr-J.sym.txt:jdk.jshell-J.sym.txt:jdk.management-J.sym.txt:jdk.management.agent-J.sym.txt:jdk.net-J.sym.txt +platform version K base J files java.base-K.sym.txt:java.compiler-K.sym.txt:java.desktop-K.sym.txt:java.management-K.sym.txt:java.naming-K.sym.txt:java.sql.rowset-K.sym.txt:jdk.compiler-K.sym.txt:jdk.incubator.concurrent-K.sym.txt:jdk.incubator.foreign-K.sym.txt:jdk.incubator.vector-K.sym.txt:jdk.jartool-K.sym.txt:jdk.jfr-K.sym.txt:jdk.jlink-K.sym.txt:jdk.jpackage-K.sym.txt:jdk.jshell-K.sym.txt:jdk.management.jfr-K.sym.txt +platform version L base K files java.base-L.sym.txt:java.compiler-L.sym.txt:java.desktop-L.sym.txt:java.logging-L.sym.txt:java.management-L.sym.txt:java.management.rmi-L.sym.txt:java.net.http-L.sym.txt:java.xml.crypto-L.sym.txt:jdk.compiler-L.sym.txt:jdk.incubator.concurrent-L.sym.txt:jdk.incubator.foreign-L.sym.txt:jdk.incubator.vector-L.sym.txt:jdk.jartool-L.sym.txt:jdk.javadoc-L.sym.txt:jdk.jdi-L.sym.txt:jdk.jfr-L.sym.txt:jdk.jshell-L.sym.txt:jdk.management-L.sym.txt:jdk.sctp-L.sym.txt:jdk.unsupported-L.sym.txt diff --git a/test/langtools/tools/javac/platform/CanHandleClassFilesTest.java b/test/langtools/tools/javac/platform/CanHandleClassFilesTest.java index 0a87f67bbe52f..a8d4747babb2d 100644 --- a/test/langtools/tools/javac/platform/CanHandleClassFilesTest.java +++ b/test/langtools/tools/javac/platform/CanHandleClassFilesTest.java @@ -110,9 +110,11 @@ protected Class findClass(String name) throws ClassNotFoundException { var main = createSymbolsClass.getMethod("main", String[].class); var symbols = targetDir.resolve("symbols"); var modules = targetDir.resolve("modules"); + var modulesList = targetDir.resolve("modules-list"); try (Writer w = Files.newBufferedWriter(symbols)) {} Files.createDirectories(modules); + try (Writer w = Files.newBufferedWriter(modulesList)) {} main.invoke(null, (Object) new String[] {"build-description-incremental", @@ -127,7 +129,8 @@ protected Class findClass(String name) throws ClassNotFoundException { Long.toString(System.currentTimeMillis() / 1000), "" + SourceVersion.latest().ordinal(), "", - modules.toAbsolutePath().toString()}); + modules.toAbsolutePath().toString(), + modulesList.toAbsolutePath().toString()}); } } diff --git a/test/langtools/tools/javac/platform/createsymbols/CreateSymbolsTestImpl.java b/test/langtools/tools/javac/platform/createsymbols/CreateSymbolsTestImpl.java index 17e9e1703abe7..5037561df109f 100644 --- a/test/langtools/tools/javac/platform/createsymbols/CreateSymbolsTestImpl.java +++ b/test/langtools/tools/javac/platform/createsymbols/CreateSymbolsTestImpl.java @@ -752,13 +752,15 @@ void doTestComplex(String printClass, new CreateSymbols().createBaseLine(versions, acceptAll, ctSym, new String[0]); Path symbolsDesc = ctSym.resolve("symbols"); Path modules = ctSym.resolve("modules"); + Path modulesList = ctSym.resolve("modules-list"); Files.createDirectories(modules); + try (Writer w = Files.newBufferedWriter(modulesList)) {} Path classesZip = output.resolve("classes.zip"); Path classesDir = output.resolve("classes"); - new CreateSymbols().createSymbols(null, symbolsDesc.toAbsolutePath().toString(), classesZip.toAbsolutePath().toString(), 0, "9", "", modules.toString()); + new CreateSymbols().createSymbols(null, symbolsDesc.toAbsolutePath().toString(), classesZip.toAbsolutePath().toString(), 0, "9", "", modules.toString(), modulesList.toString()); try (JarFile jf = new JarFile(classesZip.toFile())) { Enumeration en = jf.entries(); @@ -835,7 +837,7 @@ void doTestComplex(String printClass, void testExtendsInternalData1() throws Exception { doTestData(""" module name m - header exports api,nonapi[java.base] requires name\\u0020;java.base\\u0020;flags\\u0020;8000\\u0020;version\\u0020;0 flags 8000 + header exports api extraModulePackages nonapi requires name\\u0020;java.base\\u0020;flags\\u0020;8000\\u0020;version\\u0020;0 flags 8000 class name api/Ann header extends java/lang/Object implements java/lang/annotation/Annotation flags 2601 @@ -1038,15 +1040,12 @@ protected boolean includeEffectiveAccess(ClassList classes, ClassDescription cla }.createBaseLine(versions, acceptAll, descDest, new String[0]); Path symbolsDesc = descDest.resolve("symbols"); Path modules = descDest.resolve("modules"); + Path modulesList = descDest.resolve("modules-list"); Files.createDirectories(modules); + try (Writer w = Files.newBufferedWriter(modulesList)) {} - try { - new CreateSymbols().createSymbols(null, symbolsDesc.toAbsolutePath().toString(), classDest, 0, "8", "", modules.toString()); - } catch (Throwable t) { - t.printStackTrace(); - throw t; - } + new CreateSymbols().createSymbols(null, symbolsDesc.toAbsolutePath().toString(), classDest, 0, "8", "", modules.toString(), modulesList.toString()); } void compileAndPack(Path output, Path outputFile, String... code) throws Exception { diff --git a/test/langtools/tools/javac/sym/PrintCTSymContent.java b/test/langtools/tools/javac/sym/PrintCTSymContent.java new file mode 100644 index 0000000000000..164edcff3f0fb --- /dev/null +++ b/test/langtools/tools/javac/sym/PrintCTSymContent.java @@ -0,0 +1,117 @@ +/* + * Copyright (c) 2015, 2022, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/** + * @test + * @bug 8072480 8203814 + * @summary Check the platform classpath contains the correct elements. + * @library /tools/lib + * @modules jdk.compiler/com.sun.tools.javac.code + * jdk.compiler/com.sun.tools.javac.api + * jdk.compiler/com.sun.tools.javac.main + * jdk.compiler/com.sun.tools.javac.platform + * jdk.compiler/com.sun.tools.javac.processing + * jdk.compiler/com.sun.tools.javac.util + * @build toolbox.ToolBox PrintCTSymContent + * @run main PrintCTSymContent + */ + +import java.io.Writer; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.Arrays; +import java.util.List; +import javax.lang.model.element.Element; +import javax.lang.model.element.ModuleElement; +import javax.tools.JavaCompiler; +import javax.tools.ToolProvider; + +import com.sun.tools.javac.api.JavacTaskImpl; +import com.sun.tools.javac.processing.PrintingProcessor.PrintingElementVisitor; +import java.util.Comparator; +import javax.lang.model.element.ModuleElement.ExportsDirective; +import javax.lang.model.element.QualifiedNameable; +import javax.lang.model.util.ElementFilter; + +import toolbox.ToolBox; + + +/** + * Dump content of ct.sym for specified releases to a specified directory. + * + * Usage: adjust the `@run main PrintCTSymContent` tag to include the starting and + * ending versions, and a target directory where the API snapshot should be written: + * + * @run main PrintCTSymContent + * + * and run the test. + */ +public class PrintCTSymContent { + + public static void main(String... args) throws Exception { + if (args.length == 0) { + return ; //pass vacuously + } + new PrintCTSymContent().generateCtSymOutput(args); + } + + void generateCtSymOutput(String... args) throws Exception { + int startRelease = Integer.parseInt(args[0]); + int endRelease = Integer.parseInt(args[1]); + String directory = args[2]; + + for (int i = startRelease; i <= endRelease; i++) { + try (Writer content = Files.newBufferedWriter(Paths.get(directory, "ct-sym-content-" + i + ".txt"))) { + run(content, String.valueOf(i)); + } + } + } + + void run(Writer output, String version) throws Exception { + List options = Arrays.asList("--release", version, "-classpath", "", "--add-modules", "ALL-SYSTEM"); + List files = List.of(new ToolBox.JavaSource("Test", "")); + JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); + JavacTaskImpl task = (JavacTaskImpl) compiler.getTask(null, null, null, options, null, files); + + task.analyze(); + + PrintingElementVisitor target = new PrintingElementVisitor(output, task.getElements()); + Comparator sortByQualifiedName = (me1, me2) -> me1.getQualifiedName().toString().compareTo(me2.getQualifiedName().toString()); + List allModules = task.getElements().getAllModuleElements().stream().sorted(sortByQualifiedName).toList(); + + for (ModuleElement module : allModules) { + if (module.isUnnamed()) { + continue; + } + target.visit(module); + for (ExportsDirective ed : ElementFilter.exportsIn(module.getDirectives())) { + if (ed.getTargetModules() == null) { + for (Element c : ElementFilter.typesIn(ed.getPackage().getEnclosedElements()).stream().sorted(sortByQualifiedName).toList()) { + target.visit(c); + } + } + } + } + } + +} From b1cb37432a4b4a10ba68f468e4d988f2a935f198 Mon Sep 17 00:00:00 2001 From: Alexey Ivanov Date: Tue, 5 Dec 2023 17:40:55 +0000 Subject: [PATCH 213/250] 8320349: Simplify FileChooserSymLinkTest.java by using single-window testUI Reviewed-by: serb --- .../javax/swing/JFileChooser/FileChooserSymLinkTest.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/test/jdk/javax/swing/JFileChooser/FileChooserSymLinkTest.java b/test/jdk/javax/swing/JFileChooser/FileChooserSymLinkTest.java index 15ac95bc198d1..4736e73e61df9 100644 --- a/test/jdk/javax/swing/JFileChooser/FileChooserSymLinkTest.java +++ b/test/jdk/javax/swing/JFileChooser/FileChooserSymLinkTest.java @@ -22,14 +22,12 @@ */ import java.awt.BorderLayout; -import java.awt.Window; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.File; import java.util.Arrays; -import java.util.List; import javax.swing.JCheckBox; import javax.swing.JFileChooser; @@ -118,7 +116,7 @@ public static void main(String[] args) throws Exception { .awaitAndCheck(); } - private static List createTestUI() { + private static JFrame createTestUI() { frame = new JFrame("JFileChooser Symbolic Link test"); panel = new JPanel(new BorderLayout()); multiSelection = new JCheckBox("Enable Multi-Selection"); @@ -159,6 +157,6 @@ public void propertyChange(PropertyChangeEvent evt) { frame.add(panel, BorderLayout.NORTH); frame.add(jfc, BorderLayout.CENTER); frame.pack(); - return List.of(frame); + return frame; } } From db5613af89a2d4ab5a8998ad1d43384778974866 Mon Sep 17 00:00:00 2001 From: Alisen Chung Date: Tue, 5 Dec 2023 17:50:05 +0000 Subject: [PATCH 214/250] 8317288: [macos] java/awt/Window/Grab/GrabTest.java: Press on the outside area didn't cause ungrab Reviewed-by: honkar, azvegint --- test/jdk/java/awt/Window/Grab/GrabTest.java | 126 ++++++++++++-------- 1 file changed, 74 insertions(+), 52 deletions(-) diff --git a/test/jdk/java/awt/Window/Grab/GrabTest.java b/test/jdk/java/awt/Window/Grab/GrabTest.java index 5db28cb15b54b..b173477c164c5 100644 --- a/test/jdk/java/awt/Window/Grab/GrabTest.java +++ b/test/jdk/java/awt/Window/Grab/GrabTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2020, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,19 +22,34 @@ */ /* - @test - @key headful - @bug 7124430 - @summary Tests that SunToolkit.grab API works - @author anton.tarasov@oracle.com: area=awt.toolkit - @library ../../regtesthelpers - @modules java.desktop/sun.awt - @build Util - @run main GrabTest -*/ - -import java.awt.*; -import java.awt.event.*; + * @test + * @key headful + * @bug 7124430 + * @summary Tests that SunToolkit.grab API works + * @library ../../regtesthelpers + * @modules java.desktop/sun.awt + * @build Util + * @run main GrabTest + */ + + +import java.awt.AWTEvent; +import java.awt.Button; +import java.awt.Color; +import java.awt.FlowLayout; +import java.awt.Point; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.InputEvent; +import java.awt.event.MouseEvent; +import java.awt.Frame; +import java.awt.Robot; +import java.awt.Toolkit; +import java.awt.Window; +import java.awt.event.AWTEventListener; +import java.awt.event.MouseAdapter; + +import javax.swing.SwingUtilities; import test.java.awt.regtesthelpers.Util; public class GrabTest { @@ -56,9 +71,13 @@ public class GrabTest { static volatile boolean passed = true; - public static void main(String[] args) { + public static void main(String[] args) throws Exception { + + robot = new Robot(); + robot.setAutoDelay(100); - Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() { + SwingUtilities.invokeAndWait(() -> { + Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() { public void eventDispatched(AWTEvent e) { System.out.println(e); if (e instanceof sun.awt.UngrabEvent) { @@ -67,61 +86,56 @@ public void eventDispatched(AWTEvent e) { } }, sun.awt.SunToolkit.GRAB_EVENT_MASK); - f = new Frame("Frame"); - f.setBounds(0, 0, 300, 300); - f.addMouseListener(new MouseAdapter() { + f = new Frame("Frame"); + f.setBounds(0, 0, 300, 300); + f.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { System.out.println(e); framePressed = true; } }); - f1 = new Frame("OtherFrame"); - f1.setBounds(700, 100, 300, 300); + f1 = new Frame("OtherFrame"); + f1.setBounds(700, 100, 300, 300); - w = new Window(f); - w.setLayout(new FlowLayout()); - b = new Button("Press"); - b.addActionListener(new ActionListener() { + w = new Window(f); + w.setLayout(new FlowLayout()); + b = new Button("Press"); + b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println(e); buttonPressed = true; } }); - w.add(b); - w.setBounds(400, 100, 300, 300); - w.setBackground(Color.blue); - w.addMouseListener(new MouseAdapter() { + w.add(b); + w.setBounds(400, 100, 300, 300); + w.setBackground(Color.blue); + w.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { System.out.println(e); windowPressed = true; } }); - f.setVisible(true); - w.setVisible(true); + f.setVisible(true); + w.setVisible(true); - frame = new Frame(); - window1 = new Window(frame); - window1.setSize(200, 200); - window1.setLocationRelativeTo(null); - window1.setBackground(Color.blue); + frame = new Frame(); + window1 = new Window(frame); + window1.setSize(200, 200); + window1.setLocationRelativeTo(null); + window1.setBackground(Color.blue); - window2 = new Window(window1); - window2.setSize(100, 100); - window2.setLocationRelativeTo(null); - window2.setBackground(Color.green); + window2 = new Window(window1); + window2.setSize(100, 100); + window2.setLocationRelativeTo(null); + window2.setBackground(Color.green); - tk = (sun.awt.SunToolkit)Toolkit.getDefaultToolkit(); - - try { - robot = new Robot(); - } catch (AWTException ex) { - throw new RuntimeException(ex); - } + tk = (sun.awt.SunToolkit)Toolkit.getDefaultToolkit(); + }); Util.waitForIdle(robot); - + robot.delay(500); test(); } @@ -131,6 +145,7 @@ public static void test() { // 1. Check that button press doesn't cause ungrab Util.clickOnComp(b, robot); Util.waitForIdle(robot); + checkAndThrow(buttonPressed, "Error: Button can not be pressed"); if (ungrabbed) { passed = false; @@ -151,6 +166,7 @@ public static void test() { // 3. Check that press on the frame causes ungrab, event must be dispatched Util.clickOnComp(f, robot); Util.waitForIdle(robot); + checkAndThrow(framePressed, "Error: Frame can't be pressed"); if (!ungrabbed) { passed = false; @@ -173,28 +189,33 @@ public static void test() { // 5. Check that press on the other frame's title causes ungrab f1.setVisible(true); Util.waitForIdle(robot); + robot.delay(500); + Util.clickOnTitle(f1, robot); + Util.waitForIdle(robot); + if (!ungrabbed) { passed = false; System.err.println("Failure: [5] Press inside of other Frame's title didn't cause ungrab"); } f.requestFocus(); // restore focus Util.waitForIdle(robot); + if (!f.hasFocus()) { System.err.println("Error: Frame can't be focused"); } ungrabbed = false; tk.grab(w); - // 6. Check that press on the outside area causes ungrab Point loc = f.getLocationOnScreen(); robot.mouseMove(loc.x + 100, loc.y + f.getSize().height + 10); Util.waitForIdle(robot); - robot.mousePress(InputEvent.BUTTON1_MASK); - robot.delay(50); - robot.mouseRelease(InputEvent.BUTTON1_MASK); + + robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); + robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); Util.waitForIdle(robot); + if (!ungrabbed) { passed = false; System.err.println("Failure: [6] Press on the outside area didn't cause ungrab"); @@ -218,6 +239,7 @@ public static void test() { window1.setVisible(true); window2.setVisible(true); Util.waitForIdle(robot); + robot.delay(500); tk.grab(window1); From 640d7f31b22adde0926521bea4d616b570c21f2e Mon Sep 17 00:00:00 2001 From: Archie Cobbs Date: Tue, 5 Dec 2023 17:57:43 +0000 Subject: [PATCH 215/250] 8314327: Issues with JShell when using "local" execution engine Reviewed-by: jlahoda --- .../execution/DefaultLoaderDelegate.java | 24 ++++ .../execution/LocalExecutionControl.java | 12 +- .../LocalExecutionControlProvider.java | 33 +++++- .../jshell/LocalExecutionClassPathTest.java | 59 ++++++++++ ...LocalExecutionContextLoaderParentTest.java | 104 ++++++++++++++++++ .../jdk/jshell/LocalExecutionTestSupport.java | 86 +++++++++++++++ 6 files changed, 316 insertions(+), 2 deletions(-) create mode 100644 test/langtools/jdk/jshell/LocalExecutionClassPathTest.java create mode 100644 test/langtools/jdk/jshell/LocalExecutionContextLoaderParentTest.java create mode 100644 test/langtools/jdk/jshell/LocalExecutionTestSupport.java diff --git a/src/jdk.jshell/share/classes/jdk/jshell/execution/DefaultLoaderDelegate.java b/src/jdk.jshell/share/classes/jdk/jshell/execution/DefaultLoaderDelegate.java index 27bf0b95ebec4..e9e2fa0cff553 100644 --- a/src/jdk.jshell/share/classes/jdk/jshell/execution/DefaultLoaderDelegate.java +++ b/src/jdk.jshell/share/classes/jdk/jshell/execution/DefaultLoaderDelegate.java @@ -73,6 +73,10 @@ private static class RemoteClassLoader extends URLClassLoader { super(new URL[0]); } + RemoteClassLoader(ClassLoader parent) { + super(new URL[0], parent); + } + private class ResourceURLStreamHandler extends URLStreamHandler { private final String name; @@ -216,11 +220,31 @@ private static class ClassFile { } } + /** + * Default constructor. + * + *

    + * The internal class loader will use the + * {@linkplain ClassLoader#getSystemClassLoader system class loader} as its parent loader. + */ public DefaultLoaderDelegate() { this.loader = new RemoteClassLoader(); Thread.currentThread().setContextClassLoader(loader); } + /** + * Creates an instance with the given parent class loader. + * + *

    + * The internal class loader will use the given parent class loader. + * + * @param parent parent class loader + */ + public DefaultLoaderDelegate(ClassLoader parent) { + this.loader = new RemoteClassLoader(parent); + Thread.currentThread().setContextClassLoader(loader); + } + @Override public void load(ClassBytecodes[] cbcs) throws ClassInstallException, EngineTerminationException { diff --git a/src/jdk.jshell/share/classes/jdk/jshell/execution/LocalExecutionControl.java b/src/jdk.jshell/share/classes/jdk/jshell/execution/LocalExecutionControl.java index 2ad0e9056f2e4..a89c91d3667e8 100644 --- a/src/jdk.jshell/share/classes/jdk/jshell/execution/LocalExecutionControl.java +++ b/src/jdk.jshell/share/classes/jdk/jshell/execution/LocalExecutionControl.java @@ -60,11 +60,21 @@ public LocalExecutionControl(LoaderDelegate loaderDelegate) { } /** - * Create an instance using the default class loading. + * Create an instance using the default class loading, which delegates to the system class loader. */ public LocalExecutionControl() { } + /** + * Create an instance using the default class loading, but delegating to the specified parent class loader. + * + * @param parent parent class loader + * @since 22 + */ + public LocalExecutionControl(ClassLoader parent) { + super(new DefaultLoaderDelegate(parent)); + } + @Override public void load(ClassBytecodes[] cbcs) throws ClassInstallException, NotImplementedException, EngineTerminationException { diff --git a/src/jdk.jshell/share/classes/jdk/jshell/execution/LocalExecutionControlProvider.java b/src/jdk.jshell/share/classes/jdk/jshell/execution/LocalExecutionControlProvider.java index cc3879c5c6dd8..53acec32ab0cb 100644 --- a/src/jdk.jshell/share/classes/jdk/jshell/execution/LocalExecutionControlProvider.java +++ b/src/jdk.jshell/share/classes/jdk/jshell/execution/LocalExecutionControlProvider.java @@ -25,6 +25,7 @@ package jdk.jshell.execution; +import java.util.List; import java.util.Map; import jdk.jshell.spi.ExecutionControl; import jdk.jshell.spi.ExecutionControlProvider; @@ -78,7 +79,37 @@ public Map defaultParameters() { */ @Override public ExecutionControl generate(ExecutionEnv env, Map parameters) { - return new LocalExecutionControl(); + + // Create ExecutionControl + ExecutionControl executionControl = createExecutionControl(env, parameters); + + // Apply any configured class path + List remoteOptions = env.extraRemoteVMOptions(); + int classPathIndex = remoteOptions.indexOf("--class-path") + 1; + if (classPathIndex > 0 && classPathIndex < remoteOptions.size()) { + try { + executionControl.addToClasspath(remoteOptions.get(classPathIndex)); + } catch (ExecutionControl.ExecutionControlException e) { + throw new RuntimeException("error configuring class path", e); + } + } + + // Done + return executionControl; } + /** + * Create a new {@link ExecutionControl} instance. + * + *

    + * This method is invoked by {@link #generate generate()}. + * + * @param env the {@code ExecutionEnv} for which the {@link ExecutionControl} should be created + * @param parameters the parameters that were passed to {@link #generate generate()} + * @return the newly created {@code ExecutionControl} + * @since 22 + */ + public ExecutionControl createExecutionControl(ExecutionEnv env, Map parameters) { + return new LocalExecutionControl(new DefaultLoaderDelegate()); + } } diff --git a/test/langtools/jdk/jshell/LocalExecutionClassPathTest.java b/test/langtools/jdk/jshell/LocalExecutionClassPathTest.java new file mode 100644 index 0000000000000..6511c9a17fb0a --- /dev/null +++ b/test/langtools/jdk/jshell/LocalExecutionClassPathTest.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8314327 + * @summary Verify the "--class-path" flag works properly in local execution mode + * @library /tools/lib + * @modules + * jdk.compiler/com.sun.tools.javac.api + * jdk.compiler/com.sun.tools.javac.main + * @build toolbox.ToolBox toolbox.JavacTask LocalExecutionTestSupport + * @run testng/othervm LocalExecutionClassPathTest + */ + +import java.util.Locale; +import org.testng.annotations.Test; + +public class LocalExecutionClassPathTest extends LocalExecutionTestSupport { + + @Override + public void test(Locale locale, boolean defaultStartUp, String[] args, String startMsg, ReplTest... tests) { + + // Set local execution with context class loader + args = this.prependArgs(args, + "--execution", "local", + "--class-path", this.classesDir.toString()); + + // Verify MyClass can be found by both the compiler and the execution engine + super.test(locale, defaultStartUp, args, startMsg, tests); + } + + @Test + public void verifyMyClassFoundOnClassPath() { + test(new String[] { "--no-startup" }, + a -> assertCommand(a, "test.MyClass.class", "$1 ==> class test.MyClass") + ); + } +} diff --git a/test/langtools/jdk/jshell/LocalExecutionContextLoaderParentTest.java b/test/langtools/jdk/jshell/LocalExecutionContextLoaderParentTest.java new file mode 100644 index 0000000000000..e01ee879a8c82 --- /dev/null +++ b/test/langtools/jdk/jshell/LocalExecutionContextLoaderParentTest.java @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8314327 + * @summary Verify function of LocalExecutionControlProvider createExecutionControl() method override + * @library /tools/lib + * @modules + * jdk.compiler/com.sun.tools.javac.api + * jdk.compiler/com.sun.tools.javac.main + * @build toolbox.ToolBox toolbox.JavacTask LocalExecutionTestSupport + * @run testng/othervm LocalExecutionContextLoaderParentTest + */ + +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLClassLoader; +import java.nio.file.Path; +import java.util.Arrays; +import java.util.Locale; +import java.util.Map; +import java.nio.file.Files; + +import jdk.jshell.execution.LocalExecutionControl; +import jdk.jshell.execution.LocalExecutionControlProvider; +import jdk.jshell.spi.ExecutionControl; +import jdk.jshell.spi.ExecutionControlProvider; +import jdk.jshell.spi.ExecutionEnv; + +import org.testng.annotations.Test; +import org.testng.annotations.BeforeTest; + +public class LocalExecutionContextLoaderParentTest extends LocalExecutionTestSupport { + + @BeforeTest + public void installParentTestProvider() throws IOException { + Path dir = createSubdir(classesDir, "META-INF/services"); + Files.write(dir.resolve(ExecutionControlProvider.class.getName()), + Arrays.asList(ParentTestExecutionControlProvider.class.getName())); + } + + @Override + public void test(Locale locale, boolean defaultStartUp, String[] args, String startMsg, ReplTest... tests) { + + // Make test.MyClass visible to the context class loader + final URL classesDirURL; + try { + classesDirURL = this.classesDir.toUri().toURL(); + } catch (MalformedURLException e) { + throw new RuntimeException(e); + } + Thread.currentThread().setContextClassLoader(new URLClassLoader(new URL[] { classesDirURL })); + + // Set local execution with context class loader as parent loader + args = this.prependArgs(args, "--execution", "parentTest"); + + // Verify the execution engine can find MyClass (we don't care whether the compiler can find it in this test) + super.test(locale, defaultStartUp, args, startMsg, tests); + } + + @Test + public void verifyMyClassFoundByExecutionEngine() { + test(new String[] { "--no-startup" }, + a -> assertCommand(a, "Class.forName(\"test.MyClass\").getField(\"FOO\").get(null)", "$1 ==> \"bar\"") + ); + } + +// ParentTestExecutionControlProvider + + public static class ParentTestExecutionControlProvider extends LocalExecutionControlProvider { + + @Override + public String name() { + return "parentTest"; + } + + @Override + public ExecutionControl createExecutionControl(ExecutionEnv env, Map parameters) { + return new LocalExecutionControl(Thread.currentThread().getContextClassLoader()); + } + } +} diff --git a/test/langtools/jdk/jshell/LocalExecutionTestSupport.java b/test/langtools/jdk/jshell/LocalExecutionTestSupport.java new file mode 100644 index 0000000000000..6c6e122dfa916 --- /dev/null +++ b/test/langtools/jdk/jshell/LocalExecutionTestSupport.java @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2023, 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. + */ + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import org.testng.annotations.BeforeTest; + +import toolbox.JavacTask; +import toolbox.TestRunner; +import toolbox.ToolBox; + +/* + * This class installs a class in a temporary diretory so we can test + * finding classes that are not visible to the system class loader. + */ +public class LocalExecutionTestSupport extends ReplToolTesting { + + public static final String MY_CLASS_SOURCE = """ + package test; + public class MyClass { + public static final String FOO = "bar"; + }"""; + + protected final ToolBox tb = new ToolBox(); + + protected Path baseDir; // base working directory + protected Path sourcesDir; // sources directory + protected Path classesDir; // classes directory + + // Install file "test/MyClass.class" in some temporary directory somewhere + @BeforeTest + public void installMyClass() throws IOException { + + // Create directories + baseDir = Files.createTempDirectory(getClass().getSimpleName()).toAbsolutePath(); + sourcesDir = createWorkSubdir("sources"); + classesDir = createWorkSubdir("classes"); + + // Create source file + tb.writeJavaFiles(sourcesDir, MY_CLASS_SOURCE); + + // Compile source file + new JavacTask(tb) + .outdir(classesDir) + .files(sourcesDir.resolve("test/MyClass.java")) + .run(); + } + + protected Path createWorkSubdir(String name) throws IOException { + return createSubdir(baseDir, name); + } + + protected Path createSubdir(Path base, String name) throws IOException { + Path dir = base.resolve(name); + Files.createDirectories(dir); + return dir; + } + + protected String[] prependArgs(String[] args, String... prepends) { + String[] newArgs = new String[prepends.length + args.length]; + System.arraycopy(prepends, 0, newArgs, 0, prepends.length); + System.arraycopy(args, 0, newArgs, prepends.length, args.length); + return newArgs; + } +} From fddc02e046e926af75661ce167d4531393438c7a Mon Sep 17 00:00:00 2001 From: Tom Rodriguez Date: Tue, 5 Dec 2023 18:12:54 +0000 Subject: [PATCH 216/250] 8321225: [JVMCI] HotSpotResolvedObjectTypeImpl.isLeafClass shouldn't create strong references Reviewed-by: thartmann, eosterlund, kvn --- .../jdk/vm/ci/hotspot/HotSpotResolvedObjectTypeImpl.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/HotSpotResolvedObjectTypeImpl.java b/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/HotSpotResolvedObjectTypeImpl.java index c1fedf77450e7..46e7280bbb7ca 100644 --- a/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/HotSpotResolvedObjectTypeImpl.java +++ b/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/HotSpotResolvedObjectTypeImpl.java @@ -265,7 +265,12 @@ private AssumptionResult concreteSubtype(HotSpotResolvedObject * @return true if the type is a leaf class */ private boolean isLeafClass() { - return compilerToVM().getResolvedJavaType(this, config().subklassOffset, false) == null; + // In general, compilerToVM().getResolvedJavaType should always be used to read a Klass* + // from HotSpot data structures but that has the side effect of creating a strong reference + // to the Class which we do not want since it can cause class unloading problems. Since + // this code is only checking for null vs non-null so it should be safe to perform this + // check directly. + return UNSAFE.getLong(this.getKlassPointer() + config().subklassOffset) == 0; } /** From d3df3eb5d7f5537ade917db7a36caba028f94111 Mon Sep 17 00:00:00 2001 From: Alexey Semenyuk Date: Tue, 5 Dec 2023 18:41:38 +0000 Subject: [PATCH 217/250] 8294699: Launcher causes lingering busy cursor Reviewed-by: almatvee --- .../native/applauncher/WinLauncher.cpp | 80 ++++++++++++++++++- 1 file changed, 78 insertions(+), 2 deletions(-) diff --git a/src/jdk.jpackage/windows/native/applauncher/WinLauncher.cpp b/src/jdk.jpackage/windows/native/applauncher/WinLauncher.cpp index 407cf00693b81..d9757bd081999 100644 --- a/src/jdk.jpackage/windows/native/applauncher/WinLauncher.cpp +++ b/src/jdk.jpackage/windows/native/applauncher/WinLauncher.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2023, 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,6 +150,82 @@ void addCfgFileLookupDirForEnvVariable( } +class RunExecutorWithMsgLoop { +public: + static DWORD apply(const Executor& exec) { + RunExecutorWithMsgLoop instance(exec); + + UniqueHandle threadHandle = UniqueHandle(CreateThread(NULL, 0, worker, + static_cast(&instance), 0, NULL)); + if (threadHandle.get() == NULL) { + JP_THROW(SysError("CreateThread() failed", CreateThread)); + } + + MSG msg; + BOOL bRet; + while((bRet = GetMessage(&msg, instance.hwnd, 0, 0 )) != 0) { + if (bRet == -1) { + JP_THROW(SysError("GetMessage() failed", GetMessage)); + } else { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + } + + // Wait for worker thread to terminate to guarantee it will not linger + // around after the thread running a message loop terminates. + const DWORD res = ::WaitForSingleObject(threadHandle.get(), INFINITE); + if (WAIT_FAILED == res) { + JP_THROW(SysError("WaitForSingleObject() failed", + WaitForSingleObject)); + } + + LOG_TRACE(tstrings::any() + << "Executor worker thread terminated. Exit code=" + << instance.exitCode); + return instance.exitCode; + } + +private: + RunExecutorWithMsgLoop(const Executor& v): exec(v) { + exitCode = 1; + + // Message-only window. + hwnd = CreateWindowEx(0, _T("STATIC"), _T(""), 0, 0, 0, 0, 0, + HWND_MESSAGE, NULL, GetModuleHandle(NULL), NULL); + if (!hwnd) { + JP_THROW(SysError("CreateWindowEx() failed", CreateWindowEx)); + } + } + + static DWORD WINAPI worker(LPVOID param) { + static_cast(param)->run(); + return 0; + } + + void run() { + JP_TRY; + exitCode = static_cast(exec.execAndWaitForExit()); + JP_CATCH_ALL; + + JP_TRY; + if (!PostMessage(hwnd, WM_QUIT, 0, 0)) { + JP_THROW(SysError("PostMessage(WM_QUIT) failed", PostMessage)); + } + return; + JP_CATCH_ALL; + + // All went wrong, PostMessage() failed. Just terminate with error code. + exit(1); + } + +private: + const Executor& exec; + DWORD exitCode; + HWND hwnd; +}; + + void launchApp() { // [RT-31061] otherwise UI can be left in back of other windows. ::AllowSetForegroundWindow(ASFW_ANY); @@ -203,7 +279,7 @@ void launchApp() { exec.arg(arg); }); - DWORD exitCode = static_cast(exec.execAndWaitForExit()); + DWORD exitCode = RunExecutorWithMsgLoop::apply(exec); exit(exitCode); return; From acaf2c8dcfd5235f758af2fe3e308b72263113e4 Mon Sep 17 00:00:00 2001 From: Damon Nguyen Date: Tue, 5 Dec 2023 19:25:42 +0000 Subject: [PATCH 218/250] 8318590: JButton ignores margin when painting HTML text Reviewed-by: prr, azvegint, honkar --- .../classes/com/apple/laf/AquaButtonUI.java | 15 +- .../javax/swing/plaf/basic/BasicButtonUI.java | 17 +- .../swing/plaf/synth/SynthGraphicsUtils.java | 24 +-- .../HtmlButtonImageTest.java | 145 ------------------ 4 files changed, 16 insertions(+), 185 deletions(-) delete mode 100644 test/jdk/javax/swing/JButton/HtmlButtonImageTest/HtmlButtonImageTest.java diff --git a/src/java.desktop/macosx/classes/com/apple/laf/AquaButtonUI.java b/src/java.desktop/macosx/classes/com/apple/laf/AquaButtonUI.java index 8a86b86f80ee5..dab893252cfdb 100644 --- a/src/java.desktop/macosx/classes/com/apple/laf/AquaButtonUI.java +++ b/src/java.desktop/macosx/classes/com/apple/laf/AquaButtonUI.java @@ -338,20 +338,10 @@ public void paint(final Graphics g, final JComponent c) { } // performs icon and text rect calculations - final String text; - final Icon icon = b.getIcon(); - final View v = (View)c.getClientProperty(BasicHTML.propertyKey); - if (v != null && icon == null) { - // use zero insets for HTML without an icon - // since layout only handles text calculations - text = layoutAndGetText(g, b, aquaBorder, new Insets(0,0,0,0), - viewRect, iconRect, textRect); - } else { - text = layoutAndGetText(g, b, aquaBorder, i, viewRect, iconRect, textRect); - } + final String text = layoutAndGetText(g, b, aquaBorder, i, viewRect, iconRect, textRect); // Paint the Icon - if (icon != null) { + if (b.getIcon() != null) { paintIcon(g, b, iconRect); } @@ -360,6 +350,7 @@ public void paint(final Graphics g, final JComponent c) { } if (text != null && !text.isEmpty()) { + final View v = (View)c.getClientProperty(BasicHTML.propertyKey); if (v != null) { v.paint(g, textRect); } else { diff --git a/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicButtonUI.java b/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicButtonUI.java index a334fe4f39022..c7c036e859fa6 100644 --- a/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicButtonUI.java +++ b/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicButtonUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2023, 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,8 +25,6 @@ package javax.swing.plaf.basic; -import sun.awt.AppContext; -import sun.swing.SwingUtilities2; import java.awt.AWTKeyStroke; import java.awt.Component; import java.awt.Dimension; @@ -61,6 +59,9 @@ import javax.swing.plaf.UIResource; import javax.swing.text.View; +import sun.awt.AppContext; +import sun.swing.SwingUtilities2; + /** * BasicButton implementation * @@ -598,15 +599,7 @@ public Component.BaselineResizeBehavior getBaselineResizeBehavior( private String layout(AbstractButton b, FontMetrics fm, int width, int height) { - Insets i; - - final View v = (View)b.getClientProperty(BasicHTML.propertyKey); - if (v != null) { - i = new Insets(0, 0, 0, 0); - } else { - i = b.getInsets(); - } - + Insets i = b.getInsets(); viewRect.x = i.left; viewRect.y = i.top; viewRect.width = width - (i.right + viewRect.x); diff --git a/src/java.desktop/share/classes/javax/swing/plaf/synth/SynthGraphicsUtils.java b/src/java.desktop/share/classes/javax/swing/plaf/synth/SynthGraphicsUtils.java index bea838684ccdb..95a9aed981a3d 100644 --- a/src/java.desktop/share/classes/javax/swing/plaf/synth/SynthGraphicsUtils.java +++ b/src/java.desktop/share/classes/javax/swing/plaf/synth/SynthGraphicsUtils.java @@ -24,8 +24,6 @@ */ package javax.swing.plaf.synth; -import sun.swing.MenuItemLayoutHelper; -import sun.swing.SwingUtilities2; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; @@ -37,13 +35,15 @@ import javax.swing.ButtonModel; import javax.swing.Icon; -import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JMenuItem; import javax.swing.SwingUtilities; import javax.swing.plaf.basic.BasicHTML; import javax.swing.text.View; +import sun.swing.MenuItemLayoutHelper; +import sun.swing.SwingUtilities2; + /** * Wrapper for primitive graphics calls. * @@ -392,19 +392,10 @@ public void paintText(SynthContext ss, Graphics g, String text, FontMetrics fm = SwingUtilities2.getFontMetrics(c, g); Insets insets = SynthLookAndFeel.getPaintingInsets(ss, paintInsets); - final View v = (View)c.getClientProperty(BasicHTML.propertyKey); - - if (c instanceof JButton && v != null) { - paintViewR.x = 0; - paintViewR.y = 0; - paintViewR.width = c.getWidth(); - paintViewR.height = c.getHeight(); - } else { - paintViewR.x = insets.left; - paintViewR.y = insets.top; - paintViewR.width = c.getWidth() - (insets.left + insets.right); - paintViewR.height = c.getHeight() - (insets.top + insets.bottom); - } + paintViewR.x = insets.left; + paintViewR.y = insets.top; + paintViewR.width = c.getWidth() - (insets.left + insets.right); + paintViewR.height = c.getHeight() - (insets.top + insets.bottom); paintIconR.x = paintIconR.y = paintIconR.width = paintIconR.height = 0; paintTextR.x = paintTextR.y = paintTextR.width = paintTextR.height = 0; @@ -430,6 +421,7 @@ public void paintText(SynthContext ss, Graphics g, String text, } if (text != null) { + View v = (View) c.getClientProperty(BasicHTML.propertyKey); if (v != null) { v.paint(g, paintTextR); } else { diff --git a/test/jdk/javax/swing/JButton/HtmlButtonImageTest/HtmlButtonImageTest.java b/test/jdk/javax/swing/JButton/HtmlButtonImageTest/HtmlButtonImageTest.java deleted file mode 100644 index 105f2376ae994..0000000000000 --- a/test/jdk/javax/swing/JButton/HtmlButtonImageTest/HtmlButtonImageTest.java +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. -*/ - -/* - * @test - * @bug 8015854 - * @summary Tests HTML image as JButton text for unwanted padding - * @run main HtmlButtonImageTest - */ - -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Graphics2D; -import java.awt.image.BufferedImage; -import java.io.File; -import java.io.IOException; -import java.nio.file.Path; - -import javax.imageio.ImageIO; -import javax.swing.JButton; -import javax.swing.SwingUtilities; -import javax.swing.UIManager; -import javax.swing.UnsupportedLookAndFeelException; - -import static java.awt.image.BufferedImage.TYPE_INT_ARGB; - -public final class HtmlButtonImageTest { - private static JButton button; - private static Path testDir; - private static BufferedImage image; - - private static final int BUTTON_HEIGHT = 37; - private static final int BUTTON_WIDTH = 37; - private static final int SQUARE_HEIGHT = 19; - private static final int SQUARE_WIDTH = 19; - private static final int centerX = BUTTON_WIDTH / 2; - private static final int centerY = BUTTON_HEIGHT / 2; - private static final int minX = centerX - (SQUARE_WIDTH / 2); - private static final int minY = centerY - (SQUARE_HEIGHT / 2); - private static final int maxX = centerX + (SQUARE_WIDTH / 2); - private static final int maxY = centerY + (SQUARE_HEIGHT / 2); - - private static boolean supportedLaf; - private static int failCount = 0; - private static String currentLaf = new String(); - private static StringBuffer failedLafs = new StringBuffer(); - - - public static void main(String[] args) throws Exception { - testDir = Path.of(System.getProperty("test.classes", ".")); - generateRedSquare(); - - for (UIManager.LookAndFeelInfo laf : UIManager.getInstalledLookAndFeels()) { - SwingUtilities.invokeAndWait(() -> setLookAndFeel(laf)); - if(supportedLaf) { - currentLaf = laf.getName(); - SwingUtilities.invokeAndWait(HtmlButtonImageTest::createButton); - SwingUtilities.invokeAndWait(HtmlButtonImageTest::paintButton); - - testImageCentering(image.getRGB(centerX, centerY), - image.getRGB(minX, minY), - image.getRGB(minX, maxY), - image.getRGB(maxX, minY), - image.getRGB(maxX, maxY)); - } - } - - if(!failedLafs.isEmpty()) { - if(failCount > 1) { - failedLafs.setLength(failedLafs.length() - 2); - } - throw new RuntimeException("HTML image not centered in button " + - "for these L&F's: " + failedLafs); - } - } - - private static void generateRedSquare() throws IOException { - BufferedImage bImg = new BufferedImage(SQUARE_WIDTH, SQUARE_HEIGHT, - TYPE_INT_ARGB); - Graphics2D cg = bImg.createGraphics(); - cg.setColor(Color.RED); - cg.fillRect(0, 0, SQUARE_WIDTH, SQUARE_HEIGHT); - ImageIO.write(bImg, "png", new File(testDir + "/red_square.png")); - } - - private static void createButton() { - button = new JButton(); - button.setSize(new Dimension(BUTTON_WIDTH, BUTTON_HEIGHT)); - button.setText(""); - } - - private static void paintButton() { - image = new BufferedImage(BUTTON_HEIGHT, BUTTON_WIDTH, TYPE_INT_ARGB); - Graphics2D graphics2D = image.createGraphics(); - button.paint(graphics2D); - graphics2D.dispose(); - } - - private static boolean checkRedColor(int rgb) { - return (rgb == Color.RED.getRGB()); - } - - private static void testImageCentering(int... colors) throws IOException { - for (int c : colors) { - if (!checkRedColor(c)) { - failCount++; - ImageIO.write(image, "png", new File(testDir + "/fail_image_" + - currentLaf.replaceAll("[^\\w\\s]","") + ".png")); - failedLafs.append(currentLaf + ", "); - break; - } - } - } - - private static void setLookAndFeel(UIManager.LookAndFeelInfo laf) { - try { - UIManager.setLookAndFeel(laf.getClassName()); - supportedLaf = true; - } catch (UnsupportedLookAndFeelException | ClassNotFoundException | - InstantiationException | IllegalAccessException e) { - supportedLaf = false; - } - } -} From b0d145097cdc61e4bab19393a125e63aa3bc29b9 Mon Sep 17 00:00:00 2001 From: Brian Burkhalter Date: Tue, 5 Dec 2023 19:41:12 +0000 Subject: [PATCH 219/250] 8321053: Use ByteArrayInputStream.buf directly when parameter of transferTo() is trusted Reviewed-by: alanb --- .../classes/java/io/ByteArrayInputStream.java | 17 +++- .../TransferToTrusted.java | 92 +++++++++++++++++++ 2 files changed, 108 insertions(+), 1 deletion(-) create mode 100644 test/jdk/java/io/ByteArrayInputStream/TransferToTrusted.java diff --git a/src/java.base/share/classes/java/io/ByteArrayInputStream.java b/src/java.base/share/classes/java/io/ByteArrayInputStream.java index e3e755361b6b6..3ef30ebb3ab16 100644 --- a/src/java.base/share/classes/java/io/ByteArrayInputStream.java +++ b/src/java.base/share/classes/java/io/ByteArrayInputStream.java @@ -207,10 +207,25 @@ public int readNBytes(byte[] b, int off, int len) { public synchronized long transferTo(OutputStream out) throws IOException { int len = count - pos; if (len > 0) { + // 'tmpbuf' is null if and only if 'out' is trusted + byte[] tmpbuf; + Class outClass = out.getClass(); + if (outClass == ByteArrayOutputStream.class || + outClass == FileOutputStream.class || + outClass == PipedOutputStream.class) + tmpbuf = null; + else + tmpbuf = new byte[Integer.min(len, MAX_TRANSFER_SIZE)]; + int nwritten = 0; while (nwritten < len) { int nbyte = Integer.min(len - nwritten, MAX_TRANSFER_SIZE); - out.write(buf, pos, nbyte); + // if 'out' is not trusted, transfer via a temporary buffer + if (tmpbuf != null) { + System.arraycopy(buf, pos, tmpbuf, 0, nbyte); + out.write(tmpbuf, 0, nbyte); + } else + out.write(buf, pos, nbyte); pos += nbyte; nwritten += nbyte; } diff --git a/test/jdk/java/io/ByteArrayInputStream/TransferToTrusted.java b/test/jdk/java/io/ByteArrayInputStream/TransferToTrusted.java new file mode 100644 index 0000000000000..24b2209e814f0 --- /dev/null +++ b/test/jdk/java/io/ByteArrayInputStream/TransferToTrusted.java @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8321053 + * @summary Verify ByteArrayInputStream.buf is used directly by + * ByteArrayInputStream.transferTo only when its OutputStream + * parameter is trusted + * @key randomness + */ + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.util.Arrays; +import java.util.Objects; +import java.util.Random; + +public class TransferToTrusted { + private static final Random RND = new Random(System.nanoTime()); + + private static class UntrustedOutputStream extends OutputStream { + UntrustedOutputStream() { + super(); + } + + @Override + public void write(byte[] b, int off, int len) throws IOException { + Objects.checkFromIndexSize(off, len, b.length); + byte[] tmp = new byte[len]; + RND.nextBytes(tmp); + System.arraycopy(tmp, 0, b, off, len); + } + + @Override + public void write(int b) throws IOException { + write(new byte[] {(byte)b}); + } + } + + public static void main(String[] args) throws IOException { + byte[] buf = new byte[RND.nextInt(1025)]; + System.out.println("buf.length: " + buf.length); + RND.nextBytes(buf); + byte[] dup = Arrays.copyOf(buf, buf.length); + + ByteArrayInputStream bais = new ByteArrayInputStream(dup); + bais.mark(dup.length); + + OutputStream[] outputStreams = new OutputStream[] { + new ByteArrayOutputStream(), + new UntrustedOutputStream() + }; + + for (OutputStream out : outputStreams) { + System.err.println("out: " + out.getClass().getName()); + + bais.transferTo(out); + bais.reset(); + try { + if (!Arrays.equals(buf, bais.readAllBytes())) + throw new RuntimeException("Internal buffer was modified"); + } finally { + out.close(); + } + bais.reset(); + } + } +} From 9e570105c30a6e462d08931e2010cef9cd5a6031 Mon Sep 17 00:00:00 2001 From: Jonathan Joo Date: Tue, 5 Dec 2023 19:43:25 +0000 Subject: [PATCH 220/250] 8315149: Add hsperf counters for CPU time of internal GC threads Co-authored-by: Man Cao Co-authored-by: Stefan Johansson Reviewed-by: simonis, manc, sjohanss --- src/hotspot/share/gc/g1/g1CollectedHeap.cpp | 28 ++++ src/hotspot/share/gc/g1/g1CollectedHeap.hpp | 1 + src/hotspot/share/gc/g1/g1ConcurrentMark.cpp | 2 + .../share/gc/g1/g1ConcurrentMarkThread.cpp | 15 ++ .../share/gc/g1/g1ConcurrentMarkThread.hpp | 3 + .../share/gc/g1/g1ConcurrentRefineThread.cpp | 17 ++- .../share/gc/g1/g1ConcurrentRefineThread.hpp | 10 ++ src/hotspot/share/gc/g1/g1ServiceThread.cpp | 10 ++ src/hotspot/share/gc/g1/g1ServiceThread.hpp | 3 + .../gc/parallel/parallelScavengeHeap.cpp | 25 ++++ .../gc/parallel/parallelScavengeHeap.hpp | 2 + .../stringdedup/stringDedupProcessor.cpp | 6 + src/hotspot/share/memory/universe.cpp | 4 + src/hotspot/share/runtime/cpuTimeCounters.cpp | 131 ++++++++++++++++++ src/hotspot/share/runtime/cpuTimeCounters.hpp | 114 +++++++++++++++ src/hotspot/share/runtime/perfData.cpp | 3 + src/hotspot/share/runtime/perfData.hpp | 3 + src/hotspot/share/runtime/vmThread.cpp | 8 ++ test/jdk/sun/tools/jcmd/TestGcCounters.java | 65 +++++++++ 19 files changed, 445 insertions(+), 5 deletions(-) create mode 100644 src/hotspot/share/runtime/cpuTimeCounters.cpp create mode 100644 src/hotspot/share/runtime/cpuTimeCounters.hpp create mode 100644 test/jdk/sun/tools/jcmd/TestGcCounters.java diff --git a/src/hotspot/share/gc/g1/g1CollectedHeap.cpp b/src/hotspot/share/gc/g1/g1CollectedHeap.cpp index d3b6de9364689..a6233fa3c2672 100644 --- a/src/hotspot/share/gc/g1/g1CollectedHeap.cpp +++ b/src/hotspot/share/gc/g1/g1CollectedHeap.cpp @@ -103,6 +103,7 @@ #include "oops/compressedOops.inline.hpp" #include "oops/oop.inline.hpp" #include "runtime/atomic.hpp" +#include "runtime/cpuTimeCounters.hpp" #include "runtime/handles.inline.hpp" #include "runtime/init.hpp" #include "runtime/java.hpp" @@ -1433,6 +1434,11 @@ jint G1CollectedHeap::initialize() { evac_failure_injector()->reset(); + CPUTimeCounters::create_counter(CPUTimeGroups::CPUTimeType::gc_parallel_workers); + CPUTimeCounters::create_counter(CPUTimeGroups::CPUTimeType::gc_conc_mark); + CPUTimeCounters::create_counter(CPUTimeGroups::CPUTimeType::gc_conc_refine); + CPUTimeCounters::create_counter(CPUTimeGroups::CPUTimeType::gc_service); + G1InitLogger::print(); return JNI_OK; @@ -2224,6 +2230,8 @@ void G1CollectedHeap::gc_epilogue(bool full) { _free_arena_memory_task->notify_new_stats(&_young_gen_card_set_stats, &_collection_set_candidates_card_set_stats); + + update_parallel_gc_threads_cpu_time(); } uint G1CollectedHeap::uncommit_regions(uint region_limit) { @@ -2308,6 +2316,26 @@ void G1CollectedHeap::verify_region_attr_remset_is_tracked() { } #endif +void G1CollectedHeap::update_parallel_gc_threads_cpu_time() { + assert(Thread::current()->is_VM_thread(), + "Must be called from VM thread to avoid races"); + if (!UsePerfData || !os::is_thread_cpu_time_supported()) { + return; + } + + // Ensure ThreadTotalCPUTimeClosure destructor is called before publishing gc + // time. + { + ThreadTotalCPUTimeClosure tttc(CPUTimeGroups::CPUTimeType::gc_parallel_workers); + // Currently parallel worker threads never terminate (JDK-8081682), so it is + // safe for VMThread to read their CPU times. However, if JDK-8087340 is + // resolved so they terminate, we should rethink if it is still safe. + workers()->threads_do(&tttc); + } + + CPUTimeCounters::publish_gc_total_cpu_time(); +} + void G1CollectedHeap::start_new_collection_set() { collection_set()->start_incremental_building(); diff --git a/src/hotspot/share/gc/g1/g1CollectedHeap.hpp b/src/hotspot/share/gc/g1/g1CollectedHeap.hpp index ffe9321be6dba..9ae55501066c7 100644 --- a/src/hotspot/share/gc/g1/g1CollectedHeap.hpp +++ b/src/hotspot/share/gc/g1/g1CollectedHeap.hpp @@ -264,6 +264,7 @@ class G1CollectedHeap : public CollectedHeap { void set_collection_set_candidates_stats(G1MonotonicArenaMemoryStats& stats); void set_young_gen_card_set_stats(const G1MonotonicArenaMemoryStats& stats); + void update_parallel_gc_threads_cpu_time(); private: G1HRPrinter _hr_printer; diff --git a/src/hotspot/share/gc/g1/g1ConcurrentMark.cpp b/src/hotspot/share/gc/g1/g1ConcurrentMark.cpp index d925f59a212d8..78e1bec34381a 100644 --- a/src/hotspot/share/gc/g1/g1ConcurrentMark.cpp +++ b/src/hotspot/share/gc/g1/g1ConcurrentMark.cpp @@ -1336,6 +1336,8 @@ void G1ConcurrentMark::remark() { _remark_weak_ref_times.add((now - mark_work_end) * 1000.0); _remark_times.add((now - start) * 1000.0); + _g1h->update_parallel_gc_threads_cpu_time(); + policy->record_concurrent_mark_remark_end(); } diff --git a/src/hotspot/share/gc/g1/g1ConcurrentMarkThread.cpp b/src/hotspot/share/gc/g1/g1ConcurrentMarkThread.cpp index a04cea5e87b57..37e76a73fe79c 100644 --- a/src/hotspot/share/gc/g1/g1ConcurrentMarkThread.cpp +++ b/src/hotspot/share/gc/g1/g1ConcurrentMarkThread.cpp @@ -39,6 +39,7 @@ #include "gc/shared/suspendibleThreadSet.hpp" #include "logging/log.hpp" #include "memory/resourceArea.hpp" +#include "runtime/cpuTimeCounters.hpp" #include "runtime/handles.inline.hpp" #include "runtime/vmThread.hpp" #include "utilities/debug.hpp" @@ -134,6 +135,8 @@ void G1ConcurrentMarkThread::run_service() { concurrent_cycle_end(_state == FullMark && !_cm->has_aborted()); _vtime_accum = (os::elapsedVTime() - _vtime_start); + + update_threads_cpu_time(); } _cm->root_regions()->cancel_scan(); } @@ -169,6 +172,7 @@ bool G1ConcurrentMarkThread::phase_clear_cld_claimed_marks() { bool G1ConcurrentMarkThread::phase_scan_root_regions() { G1ConcPhaseTimer p(_cm, "Concurrent Scan Root Regions"); _cm->scan_root_regions(); + update_threads_cpu_time(); return _cm->has_aborted(); } @@ -228,6 +232,7 @@ bool G1ConcurrentMarkThread::subphase_delay_to_keep_mmu_before_remark() { bool G1ConcurrentMarkThread::subphase_remark() { ConcurrentGCBreakpoints::at("BEFORE MARKING COMPLETED"); + update_threads_cpu_time(); VM_G1PauseRemark op; VMThread::execute(&op); return _cm->has_aborted(); @@ -237,6 +242,7 @@ bool G1ConcurrentMarkThread::phase_rebuild_and_scrub() { ConcurrentGCBreakpoints::at("AFTER REBUILD STARTED"); G1ConcPhaseTimer p(_cm, "Concurrent Rebuild Remembered Sets and Scrub Regions"); _cm->rebuild_and_scrub(); + update_threads_cpu_time(); return _cm->has_aborted(); } @@ -336,3 +342,12 @@ void G1ConcurrentMarkThread::concurrent_cycle_end(bool mark_cycle_completed) { _cm->concurrent_cycle_end(mark_cycle_completed); ConcurrentGCBreakpoints::notify_active_to_idle(); } + +void G1ConcurrentMarkThread::update_threads_cpu_time() { + if (!UsePerfData || !os::is_thread_cpu_time_supported()) { + return; + } + ThreadTotalCPUTimeClosure tttc(CPUTimeGroups::CPUTimeType::gc_conc_mark); + tttc.do_thread(this); + _cm->threads_do(&tttc); +} diff --git a/src/hotspot/share/gc/g1/g1ConcurrentMarkThread.hpp b/src/hotspot/share/gc/g1/g1ConcurrentMarkThread.hpp index 37b4573afc0be..55655ac2c14ca 100644 --- a/src/hotspot/share/gc/g1/g1ConcurrentMarkThread.hpp +++ b/src/hotspot/share/gc/g1/g1ConcurrentMarkThread.hpp @@ -108,6 +108,9 @@ class G1ConcurrentMarkThread: public ConcurrentGCThread { bool in_progress() const; bool in_undo_mark() const; + + // Update the perf data counter for concurrent mark. + void update_threads_cpu_time(); }; #endif // SHARE_GC_G1_G1CONCURRENTMARKTHREAD_HPP diff --git a/src/hotspot/share/gc/g1/g1ConcurrentRefineThread.cpp b/src/hotspot/share/gc/g1/g1ConcurrentRefineThread.cpp index 5278fc2861a00..ed69ac08d1bf0 100644 --- a/src/hotspot/share/gc/g1/g1ConcurrentRefineThread.cpp +++ b/src/hotspot/share/gc/g1/g1ConcurrentRefineThread.cpp @@ -30,6 +30,7 @@ #include "gc/g1/g1DirtyCardQueue.hpp" #include "gc/shared/suspendibleThreadSet.hpp" #include "logging/log.hpp" +#include "runtime/cpuTimeCounters.hpp" #include "runtime/mutexLocker.hpp" #include "runtime/os.hpp" #include "runtime/thread.hpp" @@ -74,11 +75,7 @@ void G1ConcurrentRefineThread::run_service() { } } report_inactive("Deactivated", _refinement_stats - active_stats_start); - if (os::supports_vtime()) { - _vtime_accum = (os::elapsedVTime() - _vtime_start); - } else { - _vtime_accum = 0.0; - } + track_usage(); } log_debug(gc, refine)("Stopping %d", _worker_id); @@ -137,6 +134,7 @@ class G1PrimaryConcurrentRefineThread final : public G1ConcurrentRefineThread { bool wait_for_completed_buffers() override; bool maybe_deactivate() override; void do_refinement_step() override; + void track_usage() override; public: G1PrimaryConcurrentRefineThread(G1ConcurrentRefine* cr) : @@ -182,6 +180,15 @@ void G1PrimaryConcurrentRefineThread::do_refinement_step() { } } +void G1PrimaryConcurrentRefineThread::track_usage() { + G1ConcurrentRefineThread::track_usage(); + // The primary thread is responsible for updating the CPU time for all workers. + if (UsePerfData && os::is_thread_cpu_time_supported()) { + ThreadTotalCPUTimeClosure tttc(CPUTimeGroups::CPUTimeType::gc_conc_refine); + cr()->threads_do(&tttc); + } +} + class G1SecondaryConcurrentRefineThread final : public G1ConcurrentRefineThread { bool wait_for_completed_buffers() override; void do_refinement_step() override; diff --git a/src/hotspot/share/gc/g1/g1ConcurrentRefineThread.hpp b/src/hotspot/share/gc/g1/g1ConcurrentRefineThread.hpp index 623bf05acc998..0711b61b194fb 100644 --- a/src/hotspot/share/gc/g1/g1ConcurrentRefineThread.hpp +++ b/src/hotspot/share/gc/g1/g1ConcurrentRefineThread.hpp @@ -71,6 +71,16 @@ class G1ConcurrentRefineThread: public ConcurrentGCThread { // precondition: this is the current thread. virtual void do_refinement_step() = 0; + // Update concurrent refine threads stats. + // If we are in Primary thread, we additionally update CPU time tracking. + virtual void track_usage() { + if (os::supports_vtime()) { + _vtime_accum = (os::elapsedVTime() - _vtime_start); + } else { + _vtime_accum = 0.0; + } + }; + // Helper for do_refinement_step implementations. Try to perform some // refinement work, limited by stop_at. Returns true if any refinement work // was performed, false if no work available per stop_at. diff --git a/src/hotspot/share/gc/g1/g1ServiceThread.cpp b/src/hotspot/share/gc/g1/g1ServiceThread.cpp index 8cda065f047c0..655220c349bbd 100644 --- a/src/hotspot/share/gc/g1/g1ServiceThread.cpp +++ b/src/hotspot/share/gc/g1/g1ServiceThread.cpp @@ -25,6 +25,7 @@ #include "precompiled.hpp" #include "gc/g1/g1ServiceThread.hpp" #include "logging/log.hpp" +#include "runtime/cpuTimeCounters.hpp" #include "runtime/mutexLocker.hpp" #include "runtime/timer.hpp" #include "runtime/os.hpp" @@ -130,6 +131,8 @@ void G1ServiceThread::run_task(G1ServiceTask* task) { task->execute(); + update_thread_cpu_time(); + log_debug(gc, task)("G1 Service Thread (%s) (run: %1.3fms) (cpu: %1.3fms)", task->name(), TimeHelper::counter_to_millis(os::elapsed_counter() - start), @@ -151,6 +154,13 @@ void G1ServiceThread::stop_service() { ml.notify(); } +void G1ServiceThread::update_thread_cpu_time() { + if (UsePerfData && os::is_thread_cpu_time_supported()) { + ThreadTotalCPUTimeClosure tttc(CPUTimeGroups::CPUTimeType::gc_service); + tttc.do_thread(this); + } +} + G1ServiceTask::G1ServiceTask(const char* name) : _time(), _name(name), diff --git a/src/hotspot/share/gc/g1/g1ServiceThread.hpp b/src/hotspot/share/gc/g1/g1ServiceThread.hpp index b51bf0baa9e40..cfa7abb6552c9 100644 --- a/src/hotspot/share/gc/g1/g1ServiceThread.hpp +++ b/src/hotspot/share/gc/g1/g1ServiceThread.hpp @@ -120,6 +120,9 @@ class G1ServiceThread: public ConcurrentGCThread { // to schedule a registered task to run after the given delay. void schedule(G1ServiceTask* task, jlong delay, bool notify); + // Update the perf data counter for service thread. + void update_thread_cpu_time(); + public: G1ServiceThread(); diff --git a/src/hotspot/share/gc/parallel/parallelScavengeHeap.cpp b/src/hotspot/share/gc/parallel/parallelScavengeHeap.cpp index 190e01d96740d..748a5658843b0 100644 --- a/src/hotspot/share/gc/parallel/parallelScavengeHeap.cpp +++ b/src/hotspot/share/gc/parallel/parallelScavengeHeap.cpp @@ -49,6 +49,7 @@ #include "memory/universe.hpp" #include "nmt/memTracker.hpp" #include "oops/oop.inline.hpp" +#include "runtime/cpuTimeCounters.hpp" #include "runtime/handles.inline.hpp" #include "runtime/java.hpp" #include "runtime/vmThread.hpp" @@ -127,6 +128,9 @@ jint ParallelScavengeHeap::initialize() { return JNI_ENOMEM; } + // Create CPU time counter + CPUTimeCounters::create_counter(CPUTimeGroups::CPUTimeType::gc_parallel_workers); + ParallelInitLogger::print(); return JNI_OK; @@ -192,6 +196,7 @@ void ParallelScavengeHeap::update_counters() { young_gen()->update_counters(); old_gen()->update_counters(); MetaspaceCounters::update_performance_counters(); + update_parallel_worker_threads_cpu_time(); } size_t ParallelScavengeHeap::capacity() const { @@ -884,3 +889,23 @@ void ParallelScavengeHeap::pin_object(JavaThread* thread, oop obj) { void ParallelScavengeHeap::unpin_object(JavaThread* thread, oop obj) { GCLocker::unlock_critical(thread); } + +void ParallelScavengeHeap::update_parallel_worker_threads_cpu_time() { + assert(Thread::current()->is_VM_thread(), + "Must be called from VM thread to avoid races"); + if (!UsePerfData || !os::is_thread_cpu_time_supported()) { + return; + } + + // Ensure ThreadTotalCPUTimeClosure destructor is called before publishing gc + // time. + { + ThreadTotalCPUTimeClosure tttc(CPUTimeGroups::CPUTimeType::gc_parallel_workers); + // Currently parallel worker threads in GCTaskManager never terminate, so it + // is safe for VMThread to read their CPU times. If upstream changes this + // behavior, we should rethink if it is still safe. + gc_threads_do(&tttc); + } + + CPUTimeCounters::publish_gc_total_cpu_time(); +} diff --git a/src/hotspot/share/gc/parallel/parallelScavengeHeap.hpp b/src/hotspot/share/gc/parallel/parallelScavengeHeap.hpp index abf87b0e01900..d30effd5e5bd4 100644 --- a/src/hotspot/share/gc/parallel/parallelScavengeHeap.hpp +++ b/src/hotspot/share/gc/parallel/parallelScavengeHeap.hpp @@ -101,6 +101,8 @@ class ParallelScavengeHeap : public CollectedHeap { // Allocate in oldgen and record the allocation with the size_policy. HeapWord* allocate_old_gen_and_record(size_t word_size); + void update_parallel_worker_threads_cpu_time(); + protected: HeapWord* allocate_new_tlab(size_t min_size, size_t requested_size, size_t* actual_size) override; diff --git a/src/hotspot/share/gc/shared/stringdedup/stringDedupProcessor.cpp b/src/hotspot/share/gc/shared/stringdedup/stringDedupProcessor.cpp index 163800e9abf97..23311a2868d02 100644 --- a/src/hotspot/share/gc/shared/stringdedup/stringDedupProcessor.cpp +++ b/src/hotspot/share/gc/shared/stringdedup/stringDedupProcessor.cpp @@ -38,6 +38,7 @@ #include "memory/iterator.hpp" #include "oops/access.inline.hpp" #include "runtime/atomic.hpp" +#include "runtime/cpuTimeCounters.hpp" #include "runtime/interfaceSupport.inline.hpp" #include "runtime/mutexLocker.hpp" #include "utilities/debug.hpp" @@ -64,6 +65,7 @@ StringDedup::Processor::Processor() : _thread(nullptr) {} void StringDedup::Processor::initialize() { _processor = new Processor(); + CPUTimeCounters::create_counter(CPUTimeGroups::CPUTimeType::conc_dedup); } void StringDedup::Processor::wait_for_requests() const { @@ -187,6 +189,10 @@ void StringDedup::Processor::run(JavaThread* thread) { cleanup_table(false /* grow_only */, StringDeduplicationResizeALot /* force */); _cur_stat.report_active_end(); log_statistics(); + if (UsePerfData && os::is_thread_cpu_time_supported()) { + ThreadTotalCPUTimeClosure tttc(CPUTimeGroups::CPUTimeType::conc_dedup); + tttc.do_thread(thread); + } } } diff --git a/src/hotspot/share/memory/universe.cpp b/src/hotspot/share/memory/universe.cpp index 21601a9303795..25ec68cf8fec5 100644 --- a/src/hotspot/share/memory/universe.cpp +++ b/src/hotspot/share/memory/universe.cpp @@ -68,6 +68,7 @@ #include "prims/resolvedMethodTable.hpp" #include "runtime/arguments.hpp" #include "runtime/atomic.hpp" +#include "runtime/cpuTimeCounters.hpp" #include "runtime/flags/jvmFlagLimit.hpp" #include "runtime/handles.inline.hpp" #include "runtime/init.hpp" @@ -781,6 +782,9 @@ jint universe_init() { GCLogPrecious::initialize(); + // Initialize CPUTimeCounters object, which must be done before creation of the heap. + CPUTimeCounters::initialize(); + #ifdef _LP64 MetaspaceShared::adjust_heap_sizes_for_dumping(); #endif // _LP64 diff --git a/src/hotspot/share/runtime/cpuTimeCounters.cpp b/src/hotspot/share/runtime/cpuTimeCounters.cpp new file mode 100644 index 0000000000000..8e96d04489193 --- /dev/null +++ b/src/hotspot/share/runtime/cpuTimeCounters.cpp @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023 Google LLC. 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. + * + */ + +#include "precompiled.hpp" +#include "runtime/cpuTimeCounters.hpp" +#include "runtime/atomic.hpp" + +const char* CPUTimeGroups::to_string(CPUTimeType val) { + switch (val) { + case CPUTimeType::gc_total: + return "total_gc_cpu_time"; + case CPUTimeType::gc_parallel_workers: + return "gc_parallel_workers"; + case CPUTimeType::gc_conc_mark: + return "gc_conc_mark"; + case CPUTimeType::gc_conc_refine: + return "gc_conc_refine"; + case CPUTimeType::gc_service: + return "gc_service"; + case CPUTimeType::vm: + return "vm"; + case CPUTimeType::conc_dedup: + return "conc_dedup"; + default: + ShouldNotReachHere(); + return ""; + }; +} + +bool CPUTimeGroups::is_gc_counter(CPUTimeType val) { + switch (val) { + case CPUTimeType::gc_parallel_workers: + case CPUTimeType::gc_conc_mark: + case CPUTimeType::gc_conc_refine: + case CPUTimeType::gc_service: + return true; + default: + return false; + } + ShouldNotReachHere(); +} + +CPUTimeCounters* CPUTimeCounters::_instance = nullptr; + +CPUTimeCounters::CPUTimeCounters() : + _cpu_time_counters(), + _gc_total_cpu_time_diff(0) { +} + +void CPUTimeCounters::inc_gc_total_cpu_time(jlong diff) { + CPUTimeCounters* instance = CPUTimeCounters::get_instance(); + Atomic::add(&(instance->_gc_total_cpu_time_diff), diff); +} + +void CPUTimeCounters::publish_gc_total_cpu_time() { + CPUTimeCounters* instance = CPUTimeCounters::get_instance(); + // Ensure that we are only incrementing atomically by using Atomic::cmpxchg + // to set the value to zero after we obtain the new CPU time difference. + jlong old_value; + jlong fetched_value = Atomic::load(&(instance->_gc_total_cpu_time_diff)); + jlong new_value = 0; + do { + old_value = fetched_value; + fetched_value = Atomic::cmpxchg(&(instance->_gc_total_cpu_time_diff), old_value, new_value); + } while (old_value != fetched_value); + get_counter(CPUTimeGroups::CPUTimeType::gc_total)->inc(fetched_value); +} + +void CPUTimeCounters::create_counter(CounterNS ns, CPUTimeGroups::CPUTimeType name) { + if (UsePerfData && os::is_thread_cpu_time_supported()) { + EXCEPTION_MARK; + CPUTimeCounters* instance = CPUTimeCounters::get_instance(); + instance->_cpu_time_counters[static_cast(name)] = + PerfDataManager::create_counter(ns, CPUTimeGroups::to_string(name), + PerfData::U_Ticks, CHECK); + } +} + +void CPUTimeCounters::create_counter(CPUTimeGroups::CPUTimeType group) { + CPUTimeCounters::create_counter(SUN_THREADS_CPUTIME, group); +} + +PerfCounter* CPUTimeCounters::get_counter(CPUTimeGroups::CPUTimeType name) { + return CPUTimeCounters::get_instance()->_cpu_time_counters[static_cast(name)]; +} + +void CPUTimeCounters::update_counter(CPUTimeGroups::CPUTimeType name, jlong total) { + CPUTimeCounters* instance = CPUTimeCounters::get_instance(); + PerfCounter* counter = instance->get_counter(name); + jlong prev_value = counter->get_value(); + jlong net_cpu_time = total - prev_value; + counter->inc(net_cpu_time); + if (CPUTimeGroups::is_gc_counter(name)) { + instance->inc_gc_total_cpu_time(net_cpu_time); + } +} + +ThreadTotalCPUTimeClosure::~ThreadTotalCPUTimeClosure() { + CPUTimeCounters::update_counter(_name, _total); +} + +void ThreadTotalCPUTimeClosure::do_thread(Thread* thread) { + // The default code path (fast_thread_cpu_time()) asserts that + // pthread_getcpuclockid() and clock_gettime() must return 0. Thus caller + // must ensure the thread exists and has not terminated. + _total += os::thread_cpu_time(thread); +} + + diff --git a/src/hotspot/share/runtime/cpuTimeCounters.hpp b/src/hotspot/share/runtime/cpuTimeCounters.hpp new file mode 100644 index 0000000000000..3137caf43592e --- /dev/null +++ b/src/hotspot/share/runtime/cpuTimeCounters.hpp @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023 Google LLC. 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. + * + */ + + +#ifndef SHARE_RUNTIME_CPUTIMECOUNTERS_HPP +#define SHARE_RUNTIME_CPUTIMECOUNTERS_HPP + + +#include "memory/iterator.hpp" +#include "runtime/os.hpp" +#include "runtime/perfData.hpp" +#include "runtime/perfDataTypes.hpp" + +class CPUTimeGroups : public AllStatic { +public: + enum class CPUTimeType { + gc_total, + gc_parallel_workers, + gc_conc_mark, + gc_conc_refine, + gc_service, + vm, + conc_dedup, + COUNT, + }; + + static const char* to_string(CPUTimeType val); + static bool is_gc_counter(CPUTimeType val); +}; + +class CPUTimeCounters: public CHeapObj { +private: + // CPUTimeCounters is a singleton instance. + CPUTimeCounters(); + NONCOPYABLE(CPUTimeCounters); + + static CPUTimeCounters* _instance; + + // An array of PerfCounters which correspond to the various counters we want + // to track. Indexed by the enum value `CPUTimeType`. + PerfCounter* _cpu_time_counters[static_cast(CPUTimeGroups::CPUTimeType::COUNT)]; + + // A long which atomically tracks how much CPU time has been spent doing GC + // since the last time we called `publish_total_cpu_time()`. + // It is incremented using Atomic::add() to prevent race conditions, and + // is added to the `gc_total` CPUTimeType at the end of GC. + volatile jlong _gc_total_cpu_time_diff; + + static void create_counter(CounterNS ns, CPUTimeGroups::CPUTimeType name); + + static CPUTimeCounters* get_instance() { + assert(_instance != nullptr, "no instance found"); + return _instance; + } + + static void inc_gc_total_cpu_time(jlong diff); + +public: + static void initialize() { + assert(_instance == nullptr, "we can only allocate one CPUTimeCounters object"); + if (UsePerfData && os::is_thread_cpu_time_supported()) { + _instance = new CPUTimeCounters(); + create_counter(SUN_THREADS, CPUTimeGroups::CPUTimeType::gc_total); + } + } + + static void create_counter(CPUTimeGroups::CPUTimeType name); + static PerfCounter* get_counter(CPUTimeGroups::CPUTimeType name); + static void update_counter(CPUTimeGroups::CPUTimeType name, jlong total); + + static void publish_gc_total_cpu_time(); +}; + +// Class to compute the total CPU time for a set of threads, then update an +// hsperfdata counter. +class ThreadTotalCPUTimeClosure: public ThreadClosure { + private: + jlong _total; + CPUTimeGroups::CPUTimeType _name; + + public: + ThreadTotalCPUTimeClosure(CPUTimeGroups::CPUTimeType name) + : _total(0), _name(name) { + assert(os::is_thread_cpu_time_supported(), "os must support cpu time"); + } + + ~ThreadTotalCPUTimeClosure(); + + virtual void do_thread(Thread* thread); +}; + +#endif // SHARE_RUNTIME_CPUTIMECOUNTERS_HPP diff --git a/src/hotspot/share/runtime/perfData.cpp b/src/hotspot/share/runtime/perfData.cpp index e2549a11f10ea..b195274dc016c 100644 --- a/src/hotspot/share/runtime/perfData.cpp +++ b/src/hotspot/share/runtime/perfData.cpp @@ -73,6 +73,9 @@ const char* PerfDataManager::_name_spaces[] = { "java.threads", // Threads System name spaces "com.sun.threads", "sun.threads", + "java.threads.cpu_time", //Thread CPU time name spaces + "com.sun.threads.cpu_time", + "sun.threads.cpu_time", "java.property", // Java Property name spaces "com.sun.property", "sun.property", diff --git a/src/hotspot/share/runtime/perfData.hpp b/src/hotspot/share/runtime/perfData.hpp index 968e0813bdbc3..103e2698d9b9e 100644 --- a/src/hotspot/share/runtime/perfData.hpp +++ b/src/hotspot/share/runtime/perfData.hpp @@ -61,6 +61,9 @@ enum CounterNS { JAVA_THREADS, // Threads System name spaces COM_THREADS, SUN_THREADS, + JAVA_THREADS_CPUTIME, // Thread CPU time name spaces + COM_THREADS_CPUTIME, + SUN_THREADS_CPUTIME, JAVA_PROPERTY, // Java Property name spaces COM_PROPERTY, SUN_PROPERTY, diff --git a/src/hotspot/share/runtime/vmThread.cpp b/src/hotspot/share/runtime/vmThread.cpp index 29d8610e6ee96..846bbffe1061f 100644 --- a/src/hotspot/share/runtime/vmThread.cpp +++ b/src/hotspot/share/runtime/vmThread.cpp @@ -35,6 +35,7 @@ #include "oops/oop.inline.hpp" #include "oops/verifyOopClosure.hpp" #include "runtime/atomic.hpp" +#include "runtime/cpuTimeCounters.hpp" #include "runtime/handles.inline.hpp" #include "runtime/interfaceSupport.inline.hpp" #include "runtime/javaThread.inline.hpp" @@ -136,6 +137,7 @@ void VMThread::create() { _perf_accumulated_vm_operation_time = PerfDataManager::create_counter(SUN_THREADS, "vmOperationTime", PerfData::U_Ticks, CHECK); + CPUTimeCounters::create_counter(CPUTimeGroups::CPUTimeType::vm); } } @@ -288,6 +290,12 @@ void VMThread::evaluate_operation(VM_Operation* op) { op->evaluate_at_safepoint() ? 0 : 1); } + if (UsePerfData && os::is_thread_cpu_time_supported()) { + assert(Thread::current() == this, "Must be called from VM thread"); + // Update vm_thread_cpu_time after each VM operation. + ThreadTotalCPUTimeClosure tttc(CPUTimeGroups::CPUTimeType::vm); + tttc.do_thread(this); + } } class HandshakeALotClosure : public HandshakeClosure { diff --git a/test/jdk/sun/tools/jcmd/TestGcCounters.java b/test/jdk/sun/tools/jcmd/TestGcCounters.java new file mode 100644 index 0000000000000..3beb476c60820 --- /dev/null +++ b/test/jdk/sun/tools/jcmd/TestGcCounters.java @@ -0,0 +1,65 @@ +/* + * Copyright 2023 Alphabet LLC. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8315149 + * @summary Unit test to ensure CPU hsperf counters are published. + * @requires vm.gc.G1 + * + * @library /test/lib + * + * @run main/othervm -XX:+UsePerfData -XX:+UseStringDeduplication TestGcCounters + */ + +import static jdk.test.lib.Asserts.*; + +import jdk.test.lib.process.OutputAnalyzer; + +public class TestGcCounters { + + private static final String SUN_THREADS = "sun.threads"; + private static final String SUN_THREADS_CPUTIME = "sun.threads.cpu_time"; + + public static void main(String[] args) throws Exception { + testGcCpuCountersExist(); + } + + + /** + * jcmd -J-XX:+UsePerfData pid PerfCounter.print + */ + private static void testGcCpuCountersExist() throws Exception { + OutputAnalyzer output = JcmdBase.jcmd(new String[] {"PerfCounter.print"}); + + output.shouldHaveExitValue(0); + output.shouldContain(SUN_THREADS + ".total_gc_cpu_time"); + output.shouldContain(SUN_THREADS_CPUTIME + ".gc_conc_mark"); + output.shouldContain(SUN_THREADS_CPUTIME + ".gc_conc_refine"); + output.shouldContain(SUN_THREADS_CPUTIME + ".gc_service"); + output.shouldContain(SUN_THREADS_CPUTIME + ".gc_parallel_workers"); + output.shouldContain(SUN_THREADS_CPUTIME + ".vm"); + output.shouldContain(SUN_THREADS_CPUTIME + ".conc_dedup"); + } +} + From c8fa7581006183d0dabe902c40ab8d7304dfd002 Mon Sep 17 00:00:00 2001 From: David Holmes Date: Tue, 5 Dec 2023 21:48:31 +0000 Subject: [PATCH 221/250] 8320860: add-opens/add-exports require '=' in JAVA_TOOL_OPTIONS Reviewed-by: sspitsyn, alanb --- src/hotspot/share/prims/jvmti.xml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/hotspot/share/prims/jvmti.xml b/src/hotspot/share/prims/jvmti.xml index a34a6b34573c3..9954a6a27095a 100644 --- a/src/hotspot/share/prims/jvmti.xml +++ b/src/hotspot/share/prims/jvmti.xml @@ -742,7 +742,11 @@ Agent_OnUnload_L(JavaVM *vm)

  • The pair of quote marks is not included in the option.
  • JNI_CreateJavaVM (in the JNI Invocation API) will prepend these options to the options supplied - in its JavaVMInitArgs argument. Platforms may disable this feature in cases where security is + in its JavaVMInitArgs argument. Note that module related options must be expressed in their + "option=value" format (note the required '=' between "option" and "value") for JNI_CreateJavaVM + to process them correctly. +

    + Platforms may disable this feature in cases where security is a concern; for example, the Reference Implementation disables this feature on Unix systems when the effective user or group ID differs from the real ID. This feature is intended to support the initialization of tools -- specifically including the @@ -11035,7 +11039,7 @@ myInit() { vs ). An implementation is not required to support this function - when the current thread is a virtual thread, in which case + when the current thread is a virtual thread, in which case will be returned. On many platforms this call will be equivalent to: From 430564cf8882e9acf86a193eb76030c6254f798c Mon Sep 17 00:00:00 2001 From: Pavel Rappo Date: Tue, 5 Dec 2023 22:09:05 +0000 Subject: [PATCH 222/250] 8308715: Create a mechanism for Implicitly Declared Class javadoc Reviewed-by: jjg --- .../internal/doclets/toolkit/WorkArounds.java | 6 + .../jdk/javadoc/internal/doclint/Checker.java | 14 +- .../javadoc/internal/tool/ElementsTable.java | 11 +- src/jdk.javadoc/share/man/javadoc.1 | 15 +- .../TestImplicitlyDeclaredClasses.java | 199 ++++++++++++++++++ 5 files changed, 238 insertions(+), 7 deletions(-) create mode 100644 test/langtools/jdk/javadoc/doclet/testImplicitlyDeclaredClasses/TestImplicitlyDeclaredClasses.java diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/WorkArounds.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/WorkArounds.java index 64fcec60b4958..3f4bd418b05e5 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/WorkArounds.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/WorkArounds.java @@ -423,4 +423,10 @@ public boolean accessInternalAPI() { return Map.of(); } + /* + * If a similar query is ever added to javax.lang.model, use that instead. + */ + public static boolean isImplicitlyDeclaredClass(Element e) { + return e instanceof ClassSymbol c && c.isImplicit(); + } } diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclint/Checker.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclint/Checker.java index 871acd26ec3ab..7bc6336990330 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclint/Checker.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclint/Checker.java @@ -192,7 +192,8 @@ public Void scan(DocCommentTree tree, TreePath p) { if (isNormalClass(p.getParentPath())) { reportMissing("dc.default.constructor"); } - } else if (!isOverridingMethod && !isSynthetic() && !isAnonymous() && !isRecordComponentOrField()) { + } else if (!isOverridingMethod && !isSynthetic() && !isAnonymous() && !isRecordComponentOrField() + && !isImplicitlyDeclaredClass(env.currPath.getLeaf())) { reportMissing("dc.missing.comment"); } return null; @@ -1275,11 +1276,20 @@ private boolean isRecordComponentOrField() { private boolean isNormalClass(TreePath p) { return switch (p.getLeaf().getKind()) { case ENUM, RECORD -> false; - case CLASS -> true; + case CLASS -> !isImplicitlyDeclaredClass(p.getLeaf()); default -> throw new IllegalArgumentException(p.getLeaf().getKind().name()); }; } + /* + * If a similar query is ever added to com.sun.source.tree, use that instead. + */ + private boolean isImplicitlyDeclaredClass(Tree t) { + return t.getKind() == Tree.Kind.CLASS + && t instanceof com.sun.tools.javac.tree.JCTree.JCClassDecl classDecl + && (classDecl.mods.flags & com.sun.tools.javac.code.Flags.IMPLICIT_CLASS) != 0; + } + void markEnclosingTag(Flag flag) { TagStackItem top = tagStack.peek(); if (top != null) diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/ElementsTable.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/ElementsTable.java index b0a6b4dfdf44f..59e5b9ccc0499 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/ElementsTable.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/ElementsTable.java @@ -73,6 +73,7 @@ import com.sun.tools.javac.util.Names; import jdk.javadoc.doclet.DocletEnvironment; import jdk.javadoc.doclet.DocletEnvironment.ModuleMode; +import jdk.javadoc.internal.doclets.toolkit.WorkArounds; import static com.sun.tools.javac.code.Scope.LookupKind.NON_RECURSIVE; @@ -993,7 +994,7 @@ public boolean isSelected(Element e) { visibleElementVisitor = new SimpleElementVisitor14<>() { @Override public Boolean visitType(TypeElement e, Void p) { - if (!accessFilter.checkModifier(e)) { + if (!accessFilter.checkModifier(e) && !WorkArounds.isImplicitlyDeclaredClass(e)) { return false; // it is not allowed } Element encl = e.getEnclosingElement(); @@ -1012,7 +1013,13 @@ public Boolean visitType(TypeElement e, Void p) { @Override protected Boolean defaultAction(Element e, Void p) { - return accessFilter.checkModifier(e); + if (accessFilter.checkModifier(e)) { + return true; + } else { + return WorkArounds.isImplicitlyDeclaredClass(e.getEnclosingElement()) + && e.getKind() != ElementKind.CONSTRUCTOR /* nothing interesting in that ctor */ + && AccessLevel.of(e.getModifiers()).compareTo(AccessLevel.PACKAGE) >= 0; + } } @Override diff --git a/src/jdk.javadoc/share/man/javadoc.1 b/src/jdk.javadoc/share/man/javadoc.1 index 406c09b9efdaa..ad119c1dca3ee 100644 --- a/src/jdk.javadoc/share/man/javadoc.1 +++ b/src/jdk.javadoc/share/man/javadoc.1 @@ -84,9 +84,9 @@ options, package names, and source file names in any order. The \f[V]javadoc\f[R] tool parses the declarations and documentation comments in a set of Java source files and produces corresponding HTML pages that describe (by default) the public and protected classes, -nested and unnamed classes (but not anonymous inner classes), -interfaces, constructors, methods, and fields. -You can use the\f[V]javadoc\f[R] tool to generate the API documentation +nested and implicitly declared classes (but not anonymous inner +classes), interfaces, constructors, methods, and fields. +You can use the \f[V]javadoc\f[R] tool to generate the API documentation or the implementation documentation for a set of source files. .PP You can run the \f[V]javadoc\f[R] tool on entire packages, individual @@ -421,6 +421,15 @@ Prints version information. .TP \f[V]-Werror\f[R] Reports an error if any warnings occur. +.PP +Note that if a Java source file contains an implicitly declared class, +then that class and its public, protected, and package members will be +documented regardless of the options such as \f[V]--show-types\f[R], +\f[V]--show-members\f[R], \f[V]-private\f[R], \f[V]-protected\f[R], +\f[V]-package\f[R], and \f[V]-public\f[R]. +If \f[V]--show-members\f[R] is specified with value \f[V]private\f[R] or +if \f[V]-private\f[R] is used then all private members of an implicitly +declared class will be documented too. .SS Extra \f[V]javadoc\f[R] Options .PP \f[I]Note:\f[R] The additional options for \f[V]javadoc\f[R] are subject diff --git a/test/langtools/jdk/javadoc/doclet/testImplicitlyDeclaredClasses/TestImplicitlyDeclaredClasses.java b/test/langtools/jdk/javadoc/doclet/testImplicitlyDeclaredClasses/TestImplicitlyDeclaredClasses.java new file mode 100644 index 0000000000000..20cd55e07bcca --- /dev/null +++ b/test/langtools/jdk/javadoc/doclet/testImplicitlyDeclaredClasses/TestImplicitlyDeclaredClasses.java @@ -0,0 +1,199 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8308715 + * @library /tools/lib ../../lib + * @modules jdk.compiler/com.sun.tools.javac.api + * jdk.compiler/com.sun.tools.javac.main + * jdk.javadoc/jdk.javadoc.internal.tool + * @build javadoc.tester.* toolbox.ToolBox toolbox.ModuleBuilder builder.ClassBuilder + * @run main/othervm TestImplicitlyDeclaredClasses + */ + +import java.io.IOException; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.EnumSet; +import java.util.List; +import java.util.regex.Pattern; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import javadoc.tester.JavadocTester; +import toolbox.ToolBox; + +public class TestImplicitlyDeclaredClasses extends JavadocTester { + + private final ToolBox tb = new ToolBox(); + + public static void main(String... args) throws Exception { + new TestImplicitlyDeclaredClasses().runTests(); + } + + @Test + public void test(Path base) throws IOException { + int i = 0; + for (Method main : mainMethods()) + for (Method otherMethod : otherMethods()) { + var methods = List.of(main, otherMethod); + var index = String.valueOf(i++); + var src = base.resolve(Path.of("src-" + index, "MyClass.java")); + tb.writeFile(src, methods.stream() + .map(Object::toString) + .collect(Collectors.joining("\n"))); + // TODO: remove preview-related options once "Implicitly Declared + // Classes and Instance Main Methods" has been standardized + javadoc("--enable-preview", "--source=22", + "-d", base.resolve("out-" + index).toString(), + src.toString()); + + checkExit(Exit.OK); + // there must be no warning on undocumented (default) constructor + checkOutput(Output.OUT, false, """ + warning: use of default constructor, which does not provide a comment"""); + // the (default) constructor must neither be linked nor mentioned + checkOutput("MyClass.html", false, "%3Cinit%3E"); + checkOutput("MyClass.html", false, "Constructor"); + // a method that is public, protected or declared with package + // access must either be documented or, if it doesn't have a + // comment, must be warned about + int nWarnedMethods = 0; + for (var m : methods) { + if (m.accessModifier.compareTo(Access.PACKAGE) >= 0) { + if (m.comment.isEmpty()) { + checkOutput(Output.OUT, true, "warning: no comment\n" + m); + nWarnedMethods++; + } else { + checkOutput("MyClass.html", true, + """ + %s""" + .formatted(m.returnValue), + """ + %s""" + .formatted(m.name)); + } + } + } + // there must be no warning on uncommented implicitly declared class + // + // Here's a non-obvious part. A warning message for an uncommented + // class is the same as that of a method. Moreover, since the class + // is implicit, its AST position is that of the first method. + // + // Put differently, if the class is uncommented, the warning about + // it is indistinguishable from that of the first method, if that + // method is uncommented. + // + // Here's how this check works: if an undocumented class warning + // is present, then the total count of undocumented element warnings + // is one greater than that of undocumented methods. + // + // Of course, it's possible, although seemingly unlikely, that + // this check passes, when it should fail: the warning for class + // is generated, but the warning for the first method is not. + // Numbers are equal, test passes. + checking("uncommented class warning"); + long all = Pattern.compile("warning: no comment") + .matcher(getOutput(Output.OUT)) + .results() + .count(); + if (all != nWarnedMethods) { + failed("%d/%d".formatted(all, nWarnedMethods)); + } else { + passed(""); + } + } + } + + private Iterable mainMethods() { + return generate( + List.of("/** main comment */", ""), + // adding PRIVATE will increase test output size and run time + EnumSet.of(Access.PUBLIC, Access.PROTECTED, Access.PACKAGE), + // adding final will increase test output size and run time + List.of("static", ""), + List.of("void"), + "main", + List.of("String[] args", "") + ); + } + + private Iterable otherMethods() { + return generate( + List.of("/** other comment */", ""), + // adding PROTECTED or PUBLIC will increase test output size and run time + EnumSet.of(Access.PACKAGE, Access.PRIVATE), + // adding final or static will increase test output size and run time + List.of(""), + List.of("void"), + "other", + List.of("")); + } + + private Iterable generate(Iterable comments, + Iterable accessModifiers, + Iterable otherModifiers, + Iterable returnValues, + String name, + Iterable args) { + var methods = new ArrayList(); + for (var comment : comments) + for (var accessModifier : accessModifiers) + for (var otherModifier : otherModifiers) + for (var returnValue : returnValues) + for (var arg : args) + methods.add(new Method(comment, accessModifier, + otherModifier, returnValue, name, arg)); + return methods; + } + + enum Access {PRIVATE, PACKAGE, PROTECTED, PUBLIC} + + record Method(String comment, + Access accessModifier, + String otherModifier, + String returnValue, + String name, + String arg) { + + @Override + public String toString() { + return Stream.of(comment, access(accessModifier), otherModifier, + returnValue, name + "(" + arg + ") { }") + .map(Object::toString) + .filter(s -> !s.isEmpty()) + .collect(Collectors.joining(" ")); + } + } + + private static String access(Access accessModifier) { + return switch (accessModifier) { + case PRIVATE -> "private"; + case PACKAGE -> ""; + case PROTECTED -> "protected"; + case PUBLIC -> "public"; + }; + } +} \ No newline at end of file From 905137d4065eb40bef6946bdc6bb688d6018a89d Mon Sep 17 00:00:00 2001 From: Serguei Spitsyn Date: Tue, 5 Dec 2023 23:41:49 +0000 Subject: [PATCH 223/250] 8321219: runtime/jni/FastGetField: assert(is_interpreted_frame()) failed: interpreted frame expected Reviewed-by: dcubed --- src/hotspot/share/prims/jvmtiThreadState.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/hotspot/share/prims/jvmtiThreadState.cpp b/src/hotspot/share/prims/jvmtiThreadState.cpp index 6882c02f95a05..c5ba2c030d060 100644 --- a/src/hotspot/share/prims/jvmtiThreadState.cpp +++ b/src/hotspot/share/prims/jvmtiThreadState.cpp @@ -557,7 +557,11 @@ JvmtiVTMSTransitionDisabler::VTMS_vthread_start(jobject vthread) { // If interp_only_mode has been enabled then we must eagerly create JvmtiThreadState // objects for globally enabled virtual thread filtered events. Otherwise, // it is an important optimization to create JvmtiThreadState objects lazily. - if (JvmtiThreadState::seen_interp_only_mode()) { + // This optimization is disabled when watchpoint capabilities are present. It is to + // work around a bug with virtual thread frames which can be not deoptimized in time. + if (JvmtiThreadState::seen_interp_only_mode() || + JvmtiExport::should_post_field_access() || + JvmtiExport::should_post_field_modification()){ JvmtiEventController::thread_started(thread); } if (JvmtiExport::should_post_vthread_start()) { From 3cd65ce2a492726cf1c30bf0c4bfaf0980323fab Mon Sep 17 00:00:00 2001 From: Sergey Bylokhov Date: Wed, 6 Dec 2023 00:19:28 +0000 Subject: [PATCH 224/250] 8321325: Remove unused Java_java_awt_MenuComponent_initIDs function Reviewed-by: prr, aivanov --- .../macosx/native/libawt_lwawt/awt/InitIDs.m | 5 --- .../share/classes/java/awt/MenuComponent.java | 16 +-------- .../libawt_xawt/awt/awt_MenuComponent.h | 36 ------------------- .../unix/native/libawt_xawt/xawt/XToolkit.c | 10 ------ .../native/libawt/windows/awt_MenuItem.cpp | 14 -------- .../native/libawt/windows/awt_MenuItem.h | 1 - 6 files changed, 1 insertion(+), 81 deletions(-) delete mode 100644 src/java.desktop/unix/native/libawt_xawt/awt/awt_MenuComponent.h diff --git a/src/java.desktop/macosx/native/libawt_lwawt/awt/InitIDs.m b/src/java.desktop/macosx/native/libawt_lwawt/awt/InitIDs.m index 38d453ff83535..289e63ba98c84 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/InitIDs.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/InitIDs.m @@ -112,11 +112,6 @@ { } -JNIEXPORT void JNICALL Java_java_awt_MenuComponent_initIDs -(JNIEnv *env, jclass cls) -{ -} - JNIEXPORT void JNICALL Java_java_awt_MenuItem_initIDs (JNIEnv *env, jclass cls) { diff --git a/src/java.desktop/share/classes/java/awt/MenuComponent.java b/src/java.desktop/share/classes/java/awt/MenuComponent.java index a9b9be85564ec..b2bc22c2e934e 100644 --- a/src/java.desktop/share/classes/java/awt/MenuComponent.java +++ b/src/java.desktop/share/classes/java/awt/MenuComponent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2023, 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 @@ -59,14 +59,6 @@ */ public abstract class MenuComponent implements java.io.Serializable { - static { - /* ensure that the necessary native libraries are loaded */ - Toolkit.loadLibraries(); - if (!GraphicsEnvironment.isHeadless()) { - initIDs(); - } - } - transient volatile MenuComponentPeer peer; transient volatile MenuContainer parent; @@ -464,12 +456,6 @@ private void readObject(ObjectInputStream s) appContext = AppContext.getAppContext(); } - /** - * Initialize JNI field and method IDs. - */ - private static native void initIDs(); - - /* * --- Accessibility Support --- */ diff --git a/src/java.desktop/unix/native/libawt_xawt/awt/awt_MenuComponent.h b/src/java.desktop/unix/native/libawt_xawt/awt/awt_MenuComponent.h deleted file mode 100644 index 19dd1f590cb38..0000000000000 --- a/src/java.desktop/unix/native/libawt_xawt/awt/awt_MenuComponent.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (c) 1998, 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. - */ - -#ifdef HEADLESS - #error This file should not be included in headless library -#endif - -#include "jni_util.h" - -struct MenuComponentIDs { - jfieldID font; - jfieldID appContext; - jmethodID getParent; -}; diff --git a/src/java.desktop/unix/native/libawt_xawt/xawt/XToolkit.c b/src/java.desktop/unix/native/libawt_xawt/xawt/XToolkit.c index 4e69c2a1c6636..abe3a1c54ce10 100644 --- a/src/java.desktop/unix/native/libawt_xawt/xawt/XToolkit.c +++ b/src/java.desktop/unix/native/libawt_xawt/xawt/XToolkit.c @@ -39,7 +39,6 @@ #include "awt_p.h" #include "awt_Component.h" -#include "awt_MenuComponent.h" #include "awt_util.h" #include "sun_awt_X11_XToolkit.h" @@ -72,8 +71,6 @@ static int tracing = 0; struct ComponentIDs componentIDs; -struct MenuComponentIDs menuComponentIDs; - extern Display* awt_init_Display(JNIEnv *env, jobject this); extern void freeNativeStringArray(char **array, jsize length); extern char** stringArrayToNative(JNIEnv *env, jobjectArray array, jsize * ret_length); @@ -236,13 +233,6 @@ Java_java_awt_Frame_initIDs } -JNIEXPORT void JNICALL -Java_java_awt_MenuComponent_initIDs(JNIEnv *env, jclass cls) -{ - menuComponentIDs.appContext = - (*env)->GetFieldID(env, cls, "appContext", "Lsun/awt/AppContext;"); -} - JNIEXPORT void JNICALL Java_java_awt_Cursor_initIDs(JNIEnv *env, jclass cls) { diff --git a/src/java.desktop/windows/native/libawt/windows/awt_MenuItem.cpp b/src/java.desktop/windows/native/libawt/windows/awt_MenuItem.cpp index 72f5a70a8e09a..ace140593f6ac 100644 --- a/src/java.desktop/windows/native/libawt/windows/awt_MenuItem.cpp +++ b/src/java.desktop/windows/native/libawt/windows/awt_MenuItem.cpp @@ -892,20 +892,6 @@ BOOL AwtMenuItem::IsSeparator() { return isSeparator; } -/************************************************************************ - * MenuComponent native methods - */ - -extern "C" { - -JNIEXPORT void JNICALL -Java_java_awt_MenuComponent_initIDs(JNIEnv *env, jclass cls) -{ -} - -} /* extern "C" */ - - /************************************************************************ * MenuItem native methods */ diff --git a/src/java.desktop/windows/native/libawt/windows/awt_MenuItem.h b/src/java.desktop/windows/native/libawt/windows/awt_MenuItem.h index 15c71357f7ff6..448c397c9b85b 100644 --- a/src/java.desktop/windows/native/libawt/windows/awt_MenuItem.h +++ b/src/java.desktop/windows/native/libawt/windows/awt_MenuItem.h @@ -33,7 +33,6 @@ #include #include #include -#include #include class AwtMenu; From 86b27b784e20f7cdadd241f7feedd024482baa8f Mon Sep 17 00:00:00 2001 From: Yi-Fan Tsai Date: Wed, 6 Dec 2023 02:34:26 +0000 Subject: [PATCH 225/250] 8317831: compiler/codecache/CheckLargePages.java fails on OL 8.8 with unexpected memory string Reviewed-by: eastigeevich, dholmes --- test/hotspot/jtreg/ProblemList.txt | 2 +- test/hotspot/jtreg/compiler/codecache/CheckLargePages.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/hotspot/jtreg/ProblemList.txt b/test/hotspot/jtreg/ProblemList.txt index 726c78528a3f7..01634e28062ba 100644 --- a/test/hotspot/jtreg/ProblemList.txt +++ b/test/hotspot/jtreg/ProblemList.txt @@ -72,7 +72,7 @@ compiler/vectorapi/VectorLogicalOpIdentityTest.java 8302459 linux-x64,windows-x6 compiler/jvmci/TestUncaughtErrorInCompileMethod.java 8309073 generic-all -compiler/codecache/CheckLargePages.java 8317831 linux-x64 +compiler/codecache/CheckLargePages.java 8319795 linux-x64 compiler/floatingpoint/TestSubnormalFloat.java 8317810 generic-i586 compiler/floatingpoint/TestSubnormalDouble.java 8317810 generic-i586 diff --git a/test/hotspot/jtreg/compiler/codecache/CheckLargePages.java b/test/hotspot/jtreg/compiler/codecache/CheckLargePages.java index 5e05a0fae57a1..5b6274681f799 100644 --- a/test/hotspot/jtreg/compiler/codecache/CheckLargePages.java +++ b/test/hotspot/jtreg/compiler/codecache/CheckLargePages.java @@ -62,7 +62,7 @@ public static void main(String[] args) throws Exception { out.shouldMatch("Code cache size too small for \\S* pages\\. Reverting to smaller page size \\((\\S*)\\)\\."); out.shouldHaveExitValue(0); // Parse page sizes to find next biggest page - String sizes = out.firstMatch("Usable page sizes:(.*)", 1); + String sizes = out.firstMatch("Usable page sizes:([^.]+)", 1); List sizeList = Arrays.stream(sizes.trim().split("\\s*,\\s*")).map(CheckLargePages::parseMemoryString).sorted().toList(); final int smallerPageSizeIndex = sizeList.indexOf(largePageSize) - 1; Asserts.assertGreaterThanOrEqual(smallerPageSizeIndex, 0); From aaaae3ee3cc966d05f6cf6fa81cecc122a8f9294 Mon Sep 17 00:00:00 2001 From: Vicente Romero Date: Wed, 6 Dec 2023 02:36:02 +0000 Subject: [PATCH 226/250] 8321207: javac is not accepting correct code Reviewed-by: jlahoda --- .../com/sun/tools/javac/comp/Flow.java | 7 +++- .../tools/javac/lambda/LambdaCapture08.java | 39 +++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 test/langtools/tools/javac/lambda/LambdaCapture08.java diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Flow.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Flow.java index d07b3a41ccb7c..dc02b434af02e 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Flow.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Flow.java @@ -490,7 +490,12 @@ protected void forEachInitializer(JCClassDecl classDef, boolean isStatic, Consum try { for (List defs = classDef.defs; defs.nonEmpty(); defs = defs.tail) { JCTree def = defs.head; - if (!def.hasTag(METHODDEF) && ((TreeInfo.flags(def) & STATIC) != 0) == isStatic) + /* we need to check for flags in the symbol too as there could be cases for which implicit flags are + * represented in the symbol but not in the tree modifiers as they were not originally in the source + * code + */ + boolean isDefStatic = ((TreeInfo.flags(def) | (TreeInfo.symbolFor(def) == null ? 0 : TreeInfo.symbolFor(def).flags_field)) & STATIC) != 0; + if (!def.hasTag(METHODDEF) && (isDefStatic == isStatic)) handler.accept(def); } } finally { diff --git a/test/langtools/tools/javac/lambda/LambdaCapture08.java b/test/langtools/tools/javac/lambda/LambdaCapture08.java new file mode 100644 index 0000000000000..8f5e03ec329c1 --- /dev/null +++ b/test/langtools/tools/javac/lambda/LambdaCapture08.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 8321207 + * @summary javac is not accepting correct code + * @compile LambdaCapture08.java + */ + +import java.util.function.*; + +interface LambdaCapture08 { + Object O = new Object() { + IntSupplier x(int m) { + return () -> m; + } + }; +} From 78d09584c9ade967e55865c9d3a8146ae01d208d Mon Sep 17 00:00:00 2001 From: Joe Wang Date: Wed, 6 Dec 2023 04:24:48 +0000 Subject: [PATCH 227/250] 8321406: Null IDs should be resolved as before catalogs are added Reviewed-by: naoto, iris, lancea --- .../xerces/internal/impl/XMLEntityManager.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java b/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java index 22de24ea8f058..6e5663bfa2c68 100644 --- a/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java +++ b/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java @@ -1038,7 +1038,8 @@ public StaxXMLInputSource resolveEntityAsPerStax(XMLResourceIdentifier resourceI } // Step 2: custom catalog if specified - if (staxInputSource == null && (fUseCatalog && fCatalogFile != null)) { + if ((publicId != null || literalSystemId != null) && + staxInputSource == null && (fUseCatalog && fCatalogFile != null)) { if (fCatalogResolver == null) { fCatalogFeatures = JdkXmlUtils.getCatalogFeatures(fDefer, fCatalogFile, fPrefer, fResolve); fCatalogResolver = CatalogManager.catalogResolver(fCatalogFeatures); @@ -1048,7 +1049,8 @@ public StaxXMLInputSource resolveEntityAsPerStax(XMLResourceIdentifier resourceI } // Step 3: use the default JDK Catalog Resolver if Step 2's resolve is continue - if (staxInputSource == null && JdkXmlUtils.isResolveContinue(fCatalogFeatures)) { + if ((publicId != null || literalSystemId != null) && + staxInputSource == null && JdkXmlUtils.isResolveContinue(fCatalogFeatures)) { initJdkCatalogResolver(); staxInputSource = resolveWithCatalogStAX(fDefCR, JdkCatalog.JDKCATALOG, publicId, literalSystemId); @@ -1056,10 +1058,12 @@ public StaxXMLInputSource resolveEntityAsPerStax(XMLResourceIdentifier resourceI // Step 4: default resolution if not resolved by a resolver and the RESOLVE // feature is set to 'continue' + // Note if both publicId and systemId are null, the resolution process continues as usual if (staxInputSource != null) { fISCreatedByResolver = true; - } else if (JdkXmlUtils.isResolveContinue(fCatalogFeatures) && - fSecurityManager.is(Limit.JDKCATALOG_RESOLVE, JdkConstants.CONTINUE)) { + } else if ((publicId == null && literalSystemId == null) || + (JdkXmlUtils.isResolveContinue(fCatalogFeatures) && + fSecurityManager.is(Limit.JDKCATALOG_RESOLVE, JdkConstants.CONTINUE))) { staxInputSource = new StaxXMLInputSource( new XMLInputSource(publicId, literalSystemId, baseSystemId, true), false); } @@ -1222,8 +1226,10 @@ public XMLInputSource resolveEntity(XMLResourceIdentifier resourceIdentifier) th // Step 4: default resolution if not resolved by a resolver and the RESOLVE // feature is set to 'continue' - if ((xmlInputSource == null) && JdkXmlUtils.isResolveContinue(fCatalogFeatures) && - fSecurityManager.is(Limit.JDKCATALOG_RESOLVE, JdkConstants.CONTINUE)) { + // Note if both publicId and systemId are null, the resolution process continues as usual + if ((publicId == null && literalSystemId == null) || + ((xmlInputSource == null) && JdkXmlUtils.isResolveContinue(fCatalogFeatures) && + fSecurityManager.is(Limit.JDKCATALOG_RESOLVE, JdkConstants.CONTINUE))) { xmlInputSource = new XMLInputSource(publicId, literalSystemId, baseSystemId, false); } From 4c96aac9c0aa450b0b6859ded8dfff856222ad58 Mon Sep 17 00:00:00 2001 From: Ioi Lam Date: Wed, 6 Dec 2023 05:25:19 +0000 Subject: [PATCH 228/250] 8320935: Move CDS config initialization code to cdsConfig.cpp Reviewed-by: ccheung, matsaave, stuefe --- src/hotspot/share/cds/cdsConfig.cpp | 317 ++++++++++++++++++ src/hotspot/share/cds/cdsConfig.hpp | 28 ++ src/hotspot/share/cds/filemap.cpp | 12 +- src/hotspot/share/cds/metaspaceShared.cpp | 13 +- src/hotspot/share/prims/whitebox.cpp | 2 +- src/hotspot/share/runtime/arguments.cpp | 316 +---------------- src/hotspot/share/runtime/arguments.hpp | 21 +- .../share/native/libsaproc/ps_core_common.c | 10 +- 8 files changed, 369 insertions(+), 350 deletions(-) diff --git a/src/hotspot/share/cds/cdsConfig.cpp b/src/hotspot/share/cds/cdsConfig.cpp index 6261321fc1fe0..818b92efe70d9 100644 --- a/src/hotspot/share/cds/cdsConfig.cpp +++ b/src/hotspot/share/cds/cdsConfig.cpp @@ -27,7 +27,12 @@ #include "cds/cdsConfig.hpp" #include "cds/heapShared.hpp" #include "classfile/classLoaderDataShared.hpp" +#include "classfile/moduleEntry.hpp" +#include "include/jvm_io.h" #include "logging/log.hpp" +#include "runtime/arguments.hpp" +#include "runtime/java.hpp" +#include "utilities/defaultStream.hpp" bool CDSConfig::_is_dumping_static_archive = false; bool CDSConfig::_is_dumping_dynamic_archive = false; @@ -38,6 +43,318 @@ bool CDSConfig::_is_dumping_dynamic_archive = false; bool CDSConfig::_dumping_full_module_graph_disabled = false; bool CDSConfig::_loading_full_module_graph_disabled = false; +char* CDSConfig::_default_archive_path = nullptr; +char* CDSConfig::_static_archive_path = nullptr; +char* CDSConfig::_dynamic_archive_path = nullptr; + +void CDSConfig::initialize() { + if (is_dumping_static_archive()) { + if (RequireSharedSpaces) { + warning("Cannot dump shared archive while using shared archive"); + } + UseSharedSpaces = false; + } + + // Initialize shared archive paths which could include both base and dynamic archive paths + // This must be after set_ergonomics_flags() called so flag UseCompressedOops is set properly. + // + // UseSharedSpaces may be disabled if -XX:SharedArchiveFile is invalid. + if (is_dumping_static_archive() || UseSharedSpaces) { + init_shared_archive_paths(); + } +} + +char* CDSConfig::default_archive_path() { + if (_default_archive_path == nullptr) { + char jvm_path[JVM_MAXPATHLEN]; + os::jvm_path(jvm_path, sizeof(jvm_path)); + char *end = strrchr(jvm_path, *os::file_separator()); + if (end != nullptr) *end = '\0'; + size_t jvm_path_len = strlen(jvm_path); + size_t file_sep_len = strlen(os::file_separator()); + const size_t len = jvm_path_len + file_sep_len + 20; + _default_archive_path = NEW_C_HEAP_ARRAY(char, len, mtArguments); + jio_snprintf(_default_archive_path, len, + LP64_ONLY(!UseCompressedOops ? "%s%sclasses_nocoops.jsa":) "%s%sclasses.jsa", + jvm_path, os::file_separator()); + } + return _default_archive_path; +} + +int CDSConfig::num_archives(const char* archive_path) { + if (archive_path == nullptr) { + return 0; + } + int npaths = 1; + char* p = (char*)archive_path; + while (*p != '\0') { + if (*p == os::path_separator()[0]) { + npaths++; + } + p++; + } + return npaths; +} + +void CDSConfig::extract_shared_archive_paths(const char* archive_path, + char** base_archive_path, + char** top_archive_path) { + char* begin_ptr = (char*)archive_path; + char* end_ptr = strchr((char*)archive_path, os::path_separator()[0]); + if (end_ptr == nullptr || end_ptr == begin_ptr) { + vm_exit_during_initialization("Base archive was not specified", archive_path); + } + size_t len = end_ptr - begin_ptr; + char* cur_path = NEW_C_HEAP_ARRAY(char, len + 1, mtInternal); + strncpy(cur_path, begin_ptr, len); + cur_path[len] = '\0'; + *base_archive_path = cur_path; + + begin_ptr = ++end_ptr; + if (*begin_ptr == '\0') { + vm_exit_during_initialization("Top archive was not specified", archive_path); + } + end_ptr = strchr(begin_ptr, '\0'); + assert(end_ptr != nullptr, "sanity"); + len = end_ptr - begin_ptr; + cur_path = NEW_C_HEAP_ARRAY(char, len + 1, mtInternal); + strncpy(cur_path, begin_ptr, len + 1); + *top_archive_path = cur_path; +} + +void CDSConfig::init_shared_archive_paths() { + if (ArchiveClassesAtExit != nullptr) { + assert(!RecordDynamicDumpInfo, "already checked"); + if (is_dumping_static_archive()) { + vm_exit_during_initialization("-XX:ArchiveClassesAtExit cannot be used with -Xshare:dump"); + } + check_unsupported_dumping_properties(); + + if (os::same_files(default_archive_path(), ArchiveClassesAtExit)) { + vm_exit_during_initialization( + "Cannot specify the default CDS archive for -XX:ArchiveClassesAtExit", default_archive_path()); + } + } + + if (SharedArchiveFile == nullptr) { + _static_archive_path = default_archive_path(); + } else { + int archives = num_archives(SharedArchiveFile); + assert(archives > 0, "must be"); + + if (is_dumping_archive() && archives > 1) { + vm_exit_during_initialization( + "Cannot have more than 1 archive file specified in -XX:SharedArchiveFile during CDS dumping"); + } + + if (is_dumping_static_archive()) { + assert(archives == 1, "must be"); + // Static dump is simple: only one archive is allowed in SharedArchiveFile. This file + // will be overwritten no matter regardless of its contents + _static_archive_path = os::strdup_check_oom(SharedArchiveFile, mtArguments); + } else { + // SharedArchiveFile may specify one or two files. In case (c), the path for base.jsa + // is read from top.jsa + // (a) 1 file: -XX:SharedArchiveFile=base.jsa + // (b) 2 files: -XX:SharedArchiveFile=base.jsa:top.jsa + // (c) 2 files: -XX:SharedArchiveFile=top.jsa + // + // However, if either RecordDynamicDumpInfo or ArchiveClassesAtExit is used, we do not + // allow cases (b) and (c). Case (b) is already checked above. + + if (archives > 2) { + vm_exit_during_initialization( + "Cannot have more than 2 archive files specified in the -XX:SharedArchiveFile option"); + } + if (archives == 1) { + char* base_archive_path = nullptr; + bool success = + FileMapInfo::get_base_archive_name_from_header(SharedArchiveFile, &base_archive_path); + if (!success) { + // If +AutoCreateSharedArchive and the specified shared archive does not exist, + // regenerate the dynamic archive base on default archive. + if (AutoCreateSharedArchive && !os::file_exists(SharedArchiveFile)) { + enable_dumping_dynamic_archive(); + ArchiveClassesAtExit = const_cast(SharedArchiveFile); + _static_archive_path = default_archive_path(); + SharedArchiveFile = nullptr; + } else { + if (AutoCreateSharedArchive) { + warning("-XX:+AutoCreateSharedArchive is unsupported when base CDS archive is not loaded. Run with -Xlog:cds for more info."); + AutoCreateSharedArchive = false; + } + Arguments::no_shared_spaces("invalid archive"); + } + } else if (base_archive_path == nullptr) { + // User has specified a single archive, which is a static archive. + _static_archive_path = const_cast(SharedArchiveFile); + } else { + // User has specified a single archive, which is a dynamic archive. + _dynamic_archive_path = const_cast(SharedArchiveFile); + _static_archive_path = base_archive_path; // has been c-heap allocated. + } + } else { + extract_shared_archive_paths((const char*)SharedArchiveFile, + &_static_archive_path, &_dynamic_archive_path); + if (_static_archive_path == nullptr) { + assert(_dynamic_archive_path == nullptr, "must be"); + Arguments::no_shared_spaces("invalid archive"); + } + } + + if (_dynamic_archive_path != nullptr) { + // Check for case (c) + if (RecordDynamicDumpInfo) { + vm_exit_during_initialization("-XX:+RecordDynamicDumpInfo is unsupported when a dynamic CDS archive is specified in -XX:SharedArchiveFile", + SharedArchiveFile); + } + if (ArchiveClassesAtExit != nullptr) { + vm_exit_during_initialization("-XX:ArchiveClassesAtExit is unsupported when a dynamic CDS archive is specified in -XX:SharedArchiveFile", + SharedArchiveFile); + } + } + + if (ArchiveClassesAtExit != nullptr && os::same_files(SharedArchiveFile, ArchiveClassesAtExit)) { + vm_exit_during_initialization( + "Cannot have the same archive file specified for -XX:SharedArchiveFile and -XX:ArchiveClassesAtExit", + SharedArchiveFile); + } + } + } +} + +void CDSConfig::check_system_property(const char* key, const char* value) { + if (Arguments::is_internal_module_property(key)) { + MetaspaceShared::disable_optimized_module_handling(); + log_info(cds)("optimized module handling: disabled due to incompatible property: %s=%s", key, value); + } + if (strcmp(key, "jdk.module.showModuleResolution") == 0 || + strcmp(key, "jdk.module.validation") == 0 || + strcmp(key, "java.system.class.loader") == 0) { + disable_loading_full_module_graph(); + disable_dumping_full_module_graph(); + log_info(cds)("full module graph: disabled due to incompatible property: %s=%s", key, value); + } +} + +static const char* unsupported_properties[] = { + "jdk.module.limitmods", + "jdk.module.upgrade.path", + "jdk.module.patch.0" +}; +static const char* unsupported_options[] = { + "--limit-modules", + "--upgrade-module-path", + "--patch-module" +}; + +void CDSConfig::check_unsupported_dumping_properties() { + assert(is_dumping_archive(), "this function is only used with CDS dump time"); + assert(ARRAY_SIZE(unsupported_properties) == ARRAY_SIZE(unsupported_options), "must be"); + // If a vm option is found in the unsupported_options array, vm will exit with an error message. + SystemProperty* sp = Arguments::system_properties(); + while (sp != nullptr) { + for (uint i = 0; i < ARRAY_SIZE(unsupported_properties); i++) { + if (strcmp(sp->key(), unsupported_properties[i]) == 0) { + vm_exit_during_initialization( + "Cannot use the following option when dumping the shared archive", unsupported_options[i]); + } + } + sp = sp->next(); + } + + // Check for an exploded module build in use with -Xshare:dump. + if (!Arguments::has_jimage()) { + vm_exit_during_initialization("Dumping the shared archive is not supported with an exploded module build"); + } +} + +bool CDSConfig::check_unsupported_cds_runtime_properties() { + assert(UseSharedSpaces, "this function is only used with -Xshare:{on,auto}"); + assert(ARRAY_SIZE(unsupported_properties) == ARRAY_SIZE(unsupported_options), "must be"); + if (ArchiveClassesAtExit != nullptr) { + // dynamic dumping, just return false for now. + // check_unsupported_dumping_properties() will be called later to check the same set of + // properties, and will exit the VM with the correct error message if the unsupported properties + // are used. + return false; + } + for (uint i = 0; i < ARRAY_SIZE(unsupported_properties); i++) { + if (Arguments::get_property(unsupported_properties[i]) != nullptr) { + if (RequireSharedSpaces) { + warning("CDS is disabled when the %s option is specified.", unsupported_options[i]); + } else { + log_info(cds)("CDS is disabled when the %s option is specified.", unsupported_options[i]); + } + return true; + } + } + return false; +} + +bool CDSConfig::check_vm_args_consistency(bool patch_mod_javabase, bool mode_flag_cmd_line) { + if (is_dumping_static_archive()) { + if (!mode_flag_cmd_line) { + // By default, -Xshare:dump runs in interpreter-only mode, which is required for deterministic archive. + // + // If your classlist is large and you don't care about deterministic dumping, you can use + // -Xshare:dump -Xmixed to improve dumping speed. + Arguments::set_mode_flags(Arguments::_int); + } else if (Arguments::mode() == Arguments::_comp) { + // -Xcomp may use excessive CPU for the test tiers. Also, -Xshare:dump runs a small and fixed set of + // Java code, so there's not much benefit in running -Xcomp. + log_info(cds)("reduced -Xcomp to -Xmixed for static dumping"); + Arguments::set_mode_flags(Arguments::_mixed); + } + + // String deduplication may cause CDS to iterate the strings in different order from one + // run to another which resulting in non-determinstic CDS archives. + // Disable UseStringDeduplication while dumping CDS archive. + UseStringDeduplication = false; + } + + // RecordDynamicDumpInfo is not compatible with ArchiveClassesAtExit + if (ArchiveClassesAtExit != nullptr && RecordDynamicDumpInfo) { + jio_fprintf(defaultStream::output_stream(), + "-XX:+RecordDynamicDumpInfo cannot be used with -XX:ArchiveClassesAtExit.\n"); + return false; + } + + if (ArchiveClassesAtExit == nullptr && !RecordDynamicDumpInfo) { + disable_dumping_dynamic_archive(); + } else { + enable_dumping_dynamic_archive(); + } + + if (AutoCreateSharedArchive) { + if (SharedArchiveFile == nullptr) { + log_warning(cds)("-XX:+AutoCreateSharedArchive requires -XX:SharedArchiveFile"); + return false; + } + if (ArchiveClassesAtExit != nullptr) { + log_warning(cds)("-XX:+AutoCreateSharedArchive does not work with ArchiveClassesAtExit"); + return false; + } + } + + if (UseSharedSpaces && patch_mod_javabase) { + Arguments::no_shared_spaces("CDS is disabled when " JAVA_BASE_NAME " module is patched."); + } + if (UseSharedSpaces && check_unsupported_cds_runtime_properties()) { + UseSharedSpaces = false; + } + + if (is_dumping_archive()) { + // Always verify non-system classes during CDS dump + if (!BytecodeVerificationRemote) { + BytecodeVerificationRemote = true; + log_info(cds)("All non-system classes will be verified (-Xverify:remote) during CDS dump time."); + } + } + + return true; +} + #if INCLUDE_CDS_JAVA_HEAP bool CDSConfig::is_dumping_heap() { // heap dump is not supported in dynamic dump diff --git a/src/hotspot/share/cds/cdsConfig.hpp b/src/hotspot/share/cds/cdsConfig.hpp index cc3c5556d0abe..d7de147d20cf5 100644 --- a/src/hotspot/share/cds/cdsConfig.hpp +++ b/src/hotspot/share/cds/cdsConfig.hpp @@ -26,6 +26,7 @@ #define SHARE_CDS_CDSCONFIG_HPP #include "memory/allStatic.hpp" +#include "utilities/globalDefinitions.hpp" #include "utilities/macros.hpp" class CDSConfig : public AllStatic { @@ -34,9 +35,25 @@ class CDSConfig : public AllStatic { static bool _is_dumping_dynamic_archive; static bool _dumping_full_module_graph_disabled; static bool _loading_full_module_graph_disabled; + + static char* _default_archive_path; + static char* _static_archive_path; + static char* _dynamic_archive_path; #endif + static void extract_shared_archive_paths(const char* archive_path, + char** base_archive_path, + char** top_archive_path); + static void init_shared_archive_paths(); + static bool check_unsupported_cds_runtime_properties(); + public: + // Initialization and command-line checking + static void initialize() NOT_CDS_RETURN; + static void check_system_property(const char* key, const char* value) NOT_CDS_RETURN; + static void check_unsupported_dumping_properties() NOT_CDS_RETURN; + static bool check_vm_args_consistency(bool patch_mod_javabase, bool mode_flag_cmd_line) NOT_CDS_RETURN_(false); + // Basic CDS features static bool is_dumping_archive() { return is_dumping_static_archive() || is_dumping_dynamic_archive(); } static bool is_dumping_static_archive() { return CDS_ONLY(_is_dumping_static_archive) NOT_CDS(false); } @@ -45,6 +62,17 @@ class CDSConfig : public AllStatic { static void enable_dumping_dynamic_archive() { CDS_ONLY(_is_dumping_dynamic_archive = true); } static void disable_dumping_dynamic_archive() { CDS_ONLY(_is_dumping_dynamic_archive = false); } + // Archive paths + // Points to the classes.jsa in $JAVA_HOME + static char* default_archive_path() NOT_CDS_RETURN_(nullptr); + // The actual static archive (if any) selected at runtime + static const char* static_archive_path() { return CDS_ONLY(_static_archive_path) NOT_CDS(nullptr); } + // The actual dynamic archive (if any) selected at runtime + static const char* dynamic_archive_path() { return CDS_ONLY(_dynamic_archive_path) NOT_CDS(nullptr); } + + static int num_archives(const char* archive_path) NOT_CDS_RETURN_(0); + + // CDS archived heap static bool is_dumping_heap() NOT_CDS_JAVA_HEAP_RETURN_(false); static void disable_dumping_full_module_graph(const char* reason = nullptr) NOT_CDS_JAVA_HEAP_RETURN; diff --git a/src/hotspot/share/cds/filemap.cpp b/src/hotspot/share/cds/filemap.cpp index 0810c17c00a75..99acbb4ace8f2 100644 --- a/src/hotspot/share/cds/filemap.cpp +++ b/src/hotspot/share/cds/filemap.cpp @@ -162,8 +162,8 @@ void FileMapInfo::populate_header(size_t core_region_alignment) { c_header_size = sizeof(DynamicArchiveHeader); header_size = c_header_size; - const char* default_base_archive_name = Arguments::get_default_shared_archive_path(); - const char* current_base_archive_name = Arguments::GetSharedArchivePath(); + const char* default_base_archive_name = CDSConfig::default_archive_path(); + const char* current_base_archive_name = CDSConfig::static_archive_path(); if (!os::same_files(current_base_archive_name, default_base_archive_name)) { base_archive_name_size = strlen(current_base_archive_name) + 1; header_size += base_archive_name_size; @@ -199,7 +199,7 @@ void FileMapHeader::populate(FileMapInfo *info, size_t core_region_alignment, if (!info->is_static() && base_archive_name_size != 0) { // copy base archive name - copy_base_archive_name(Arguments::GetSharedArchivePath()); + copy_base_archive_name(CDSConfig::static_archive_path()); } _core_region_alignment = core_region_alignment; _obj_alignment = ObjectAlignmentInBytes; @@ -918,7 +918,7 @@ void FileMapInfo::log_paths(const char* msg, int start_idx, int end_idx) { bool FileMapInfo::check_module_paths() { const char* rp = Arguments::get_property("jdk.module.path"); - int num_paths = Arguments::num_archives(rp); + int num_paths = CDSConfig::num_archives(rp); if (num_paths != header()->num_module_paths()) { return false; } @@ -1250,7 +1250,7 @@ bool FileMapInfo::get_base_archive_name_from_header(const char* archive_name, const char* base = file_helper.base_archive_name(); if (base == nullptr) { - *base_archive_name = Arguments::get_default_shared_archive_path(); + *base_archive_name = CDSConfig::default_archive_path(); } else { *base_archive_name = os::strdup_check_oom(base); } @@ -2275,7 +2275,7 @@ bool FileMapInfo::initialize() { log_info(cds)("Initialize dynamic archive failed."); if (AutoCreateSharedArchive) { CDSConfig::enable_dumping_dynamic_archive(); - ArchiveClassesAtExit = Arguments::GetSharedDynamicArchivePath(); + ArchiveClassesAtExit = CDSConfig::dynamic_archive_path(); } return false; } diff --git a/src/hotspot/share/cds/metaspaceShared.cpp b/src/hotspot/share/cds/metaspaceShared.cpp index dedd7cb85ee5d..fedbc5841b682 100644 --- a/src/hotspot/share/cds/metaspaceShared.cpp +++ b/src/hotspot/share/cds/metaspaceShared.cpp @@ -539,7 +539,7 @@ void VM_PopulateDumpSharedSpace::doit() { builder.relocate_to_requested(); // Write the archive file - const char* static_archive = Arguments::GetSharedArchivePath(); + const char* static_archive = CDSConfig::static_archive_path(); assert(static_archive != nullptr, "SharedArchiveFile not set?"); FileMapInfo* mapinfo = new FileMapInfo(static_archive, true); mapinfo->populate_header(MetaspaceShared::core_region_alignment()); @@ -651,8 +651,7 @@ void MetaspaceShared::link_shared_classes(bool jcmd_request, TRAPS) { void MetaspaceShared::prepare_for_dumping() { assert(CDSConfig::is_dumping_archive(), "sanity"); - Arguments::check_unsupported_dumping_properties(); - + CDSConfig::check_unsupported_dumping_properties(); ClassLoader::initialize_shared_path(JavaThread::current()); } @@ -987,8 +986,8 @@ void MetaspaceShared::initialize_runtime_shared_and_meta_spaces() { } FileMapInfo* MetaspaceShared::open_static_archive() { - const char* static_archive = Arguments::GetSharedArchivePath(); - assert(static_archive != nullptr, "SharedArchivePath is nullptr"); + const char* static_archive = CDSConfig::static_archive_path(); + assert(static_archive != nullptr, "sanity"); FileMapInfo* mapinfo = new FileMapInfo(static_archive, true); if (!mapinfo->initialize()) { delete(mapinfo); @@ -1001,7 +1000,7 @@ FileMapInfo* MetaspaceShared::open_dynamic_archive() { if (CDSConfig::is_dumping_dynamic_archive()) { return nullptr; } - const char* dynamic_archive = Arguments::GetSharedDynamicArchivePath(); + const char* dynamic_archive = CDSConfig::dynamic_archive_path(); if (dynamic_archive == nullptr) { return nullptr; } @@ -1494,7 +1493,7 @@ void MetaspaceShared::initialize_shared_spaces() { if (PrintSharedArchiveAndExit) { // Print archive names if (dynamic_mapinfo != nullptr) { - tty->print_cr("\n\nBase archive name: %s", Arguments::GetSharedArchivePath()); + tty->print_cr("\n\nBase archive name: %s", CDSConfig::static_archive_path()); tty->print_cr("Base archive version %d", static_mapinfo->version()); } else { tty->print_cr("Static archive name: %s", static_mapinfo->full_path()); diff --git a/src/hotspot/share/prims/whitebox.cpp b/src/hotspot/share/prims/whitebox.cpp index 230129ea2df31..d70c775937fd0 100644 --- a/src/hotspot/share/prims/whitebox.cpp +++ b/src/hotspot/share/prims/whitebox.cpp @@ -2043,7 +2043,7 @@ WB_ENTRY(jobject, WB_GetMethodStringOption(JNIEnv* env, jobject wb, jobject meth WB_END WB_ENTRY(jobject, WB_GetDefaultArchivePath(JNIEnv* env, jobject wb)) - const char* p = Arguments::get_default_shared_archive_path(); + const char* p = CDSConfig::default_archive_path(); ThreadToNativeFromVM ttn(thread); jstring path_string = env->NewStringUTF(p); diff --git a/src/hotspot/share/runtime/arguments.cpp b/src/hotspot/share/runtime/arguments.cpp index 477a1ebe8d110..fd8f155af420e 100644 --- a/src/hotspot/share/runtime/arguments.cpp +++ b/src/hotspot/share/runtime/arguments.cpp @@ -101,10 +101,6 @@ size_t Arguments::_default_SharedBaseAddress = SharedBaseAddress; bool Arguments::_enable_preview = false; -char* Arguments::_default_shared_archive_path = nullptr; -char* Arguments::SharedArchivePath = nullptr; -char* Arguments::SharedDynamicArchivePath = nullptr; - LegacyGCLogging Arguments::_legacyGCLogging = { 0, 0 }; // These are not set by the JDK's built-in launchers, but they can be set by @@ -1263,19 +1259,7 @@ bool Arguments::add_property(const char* prop, PropertyWriteable writeable, Prop value = &prop[key_len + 1]; } -#if INCLUDE_CDS - if (is_internal_module_property(key)) { - MetaspaceShared::disable_optimized_module_handling(); - log_info(cds)("optimized module handling: disabled due to incompatible property: %s=%s", key, value); - } - if (strcmp(key, "jdk.module.showModuleResolution") == 0 || - strcmp(key, "jdk.module.validation") == 0 || - strcmp(key, "java.system.class.loader") == 0) { - CDSConfig::disable_loading_full_module_graph(); - CDSConfig::disable_dumping_full_module_graph(); - log_info(cds)("full module graph: disabled due to incompatible property: %s=%s", key, value); - } -#endif + CDSConfig::check_system_property(key, value); if (strcmp(key, "java.compiler") == 0) { // we no longer support java.compiler system property, log a warning and let it get @@ -1329,60 +1313,6 @@ bool Arguments::add_property(const char* prop, PropertyWriteable writeable, Prop return true; } -#if INCLUDE_CDS -const char* unsupported_properties[] = { "jdk.module.limitmods", - "jdk.module.upgrade.path", - "jdk.module.patch.0" }; -const char* unsupported_options[] = { "--limit-modules", - "--upgrade-module-path", - "--patch-module" - }; -void Arguments::check_unsupported_dumping_properties() { - assert(CDSConfig::is_dumping_archive(), - "this function is only used with CDS dump time"); - assert(ARRAY_SIZE(unsupported_properties) == ARRAY_SIZE(unsupported_options), "must be"); - // If a vm option is found in the unsupported_options array, vm will exit with an error message. - SystemProperty* sp = system_properties(); - while (sp != nullptr) { - for (uint i = 0; i < ARRAY_SIZE(unsupported_properties); i++) { - if (strcmp(sp->key(), unsupported_properties[i]) == 0) { - vm_exit_during_initialization( - "Cannot use the following option when dumping the shared archive", unsupported_options[i]); - } - } - sp = sp->next(); - } - - // Check for an exploded module build in use with -Xshare:dump. - if (!has_jimage()) { - vm_exit_during_initialization("Dumping the shared archive is not supported with an exploded module build"); - } -} - -bool Arguments::check_unsupported_cds_runtime_properties() { - assert(UseSharedSpaces, "this function is only used with -Xshare:{on,auto}"); - assert(ARRAY_SIZE(unsupported_properties) == ARRAY_SIZE(unsupported_options), "must be"); - if (ArchiveClassesAtExit != nullptr) { - // dynamic dumping, just return false for now. - // check_unsupported_dumping_properties() will be called later to check the same set of - // properties, and will exit the VM with the correct error message if the unsupported properties - // are used. - return false; - } - for (uint i = 0; i < ARRAY_SIZE(unsupported_properties); i++) { - if (get_property(unsupported_properties[i]) != nullptr) { - if (RequireSharedSpaces) { - warning("CDS is disabled when the %s option is specified.", unsupported_options[i]); - } else { - log_info(cds)("CDS is disabled when the %s option is specified.", unsupported_options[i]); - } - return true; - } - } - return false; -} -#endif - //=========================================================================================================== // Setting int/mixed/comp mode flags @@ -1432,7 +1362,7 @@ void Arguments::set_mode_flags(Mode mode) { // Conflict: required to use shared spaces (-Xshare:on), but // incompatible command line options were chosen. -static void no_shared_spaces(const char* message) { +void Arguments::no_shared_spaces(const char* message) { if (RequireSharedSpaces) { jio_fprintf(defaultStream::error_stream(), "Class data sharing is inconsistent with other specified options.\n"); @@ -3037,67 +2967,10 @@ jint Arguments::finalize_vm_init_args(bool patch_mod_javabase) { return JNI_ERR; } -#if INCLUDE_CDS - if (CDSConfig::is_dumping_static_archive()) { - if (!mode_flag_cmd_line) { - // By default, -Xshare:dump runs in interpreter-only mode, which is required for deterministic archive. - // - // If your classlist is large and you don't care about deterministic dumping, you can use - // -Xshare:dump -Xmixed to improve dumping speed. - set_mode_flags(_int); - } else if (_mode == _comp) { - // -Xcomp may use excessive CPU for the test tiers. Also, -Xshare:dump runs a small and fixed set of - // Java code, so there's not much benefit in running -Xcomp. - log_info(cds)("reduced -Xcomp to -Xmixed for static dumping"); - set_mode_flags(_mixed); - } - - // String deduplication may cause CDS to iterate the strings in different order from one - // run to another which resulting in non-determinstic CDS archives. - // Disable UseStringDeduplication while dumping CDS archive. - UseStringDeduplication = false; - } - - // RecordDynamicDumpInfo is not compatible with ArchiveClassesAtExit - if (ArchiveClassesAtExit != nullptr && RecordDynamicDumpInfo) { - jio_fprintf(defaultStream::output_stream(), - "-XX:+RecordDynamicDumpInfo cannot be used with -XX:ArchiveClassesAtExit.\n"); + if (!CDSConfig::check_vm_args_consistency(patch_mod_javabase, mode_flag_cmd_line)) { return JNI_ERR; } - if (ArchiveClassesAtExit == nullptr && !RecordDynamicDumpInfo) { - CDSConfig::disable_dumping_dynamic_archive(); - } else { - CDSConfig::enable_dumping_dynamic_archive(); - } - - if (AutoCreateSharedArchive) { - if (SharedArchiveFile == nullptr) { - log_warning(cds)("-XX:+AutoCreateSharedArchive requires -XX:SharedArchiveFile"); - return JNI_ERR; - } - if (ArchiveClassesAtExit != nullptr) { - log_warning(cds)("-XX:+AutoCreateSharedArchive does not work with ArchiveClassesAtExit"); - return JNI_ERR; - } - } - - if (UseSharedSpaces && patch_mod_javabase) { - no_shared_spaces("CDS is disabled when " JAVA_BASE_NAME " module is patched."); - } - if (UseSharedSpaces && check_unsupported_cds_runtime_properties()) { - UseSharedSpaces = false; - } - - if (CDSConfig::is_dumping_archive()) { - // Always verify non-system classes during CDS dump - if (!BytecodeVerificationRemote) { - BytecodeVerificationRemote = true; - log_info(cds)("All non-system classes will be verified (-Xverify:remote) during CDS dump time."); - } - } -#endif - #ifndef CAN_SHOW_REGISTERS_ON_ASSERT UNSUPPORTED_OPTION(ShowRegistersOnAssert); #endif // CAN_SHOW_REGISTERS_ON_ASSERT @@ -3365,187 +3238,6 @@ jint Arguments::parse_options_buffer(const char* name, char* buffer, const size_ return vm_args->set_args(&options); } -void Arguments::set_shared_spaces_flags_and_archive_paths() { - if (CDSConfig::is_dumping_static_archive()) { - if (RequireSharedSpaces) { - warning("Cannot dump shared archive while using shared archive"); - } - UseSharedSpaces = false; - } -#if INCLUDE_CDS - // Initialize shared archive paths which could include both base and dynamic archive paths - // This must be after set_ergonomics_flags() called so flag UseCompressedOops is set properly. - // - // UseSharedSpaces may be disabled if -XX:SharedArchiveFile is invalid. - if (CDSConfig::is_dumping_static_archive() || UseSharedSpaces) { - init_shared_archive_paths(); - } -#endif // INCLUDE_CDS -} - -#if INCLUDE_CDS -// Sharing support -// Construct the path to the archive -char* Arguments::get_default_shared_archive_path() { - if (_default_shared_archive_path == nullptr) { - char jvm_path[JVM_MAXPATHLEN]; - os::jvm_path(jvm_path, sizeof(jvm_path)); - char *end = strrchr(jvm_path, *os::file_separator()); - if (end != nullptr) *end = '\0'; - size_t jvm_path_len = strlen(jvm_path); - size_t file_sep_len = strlen(os::file_separator()); - const size_t len = jvm_path_len + file_sep_len + 20; - _default_shared_archive_path = NEW_C_HEAP_ARRAY(char, len, mtArguments); - jio_snprintf(_default_shared_archive_path, len, - LP64_ONLY(!UseCompressedOops ? "%s%sclasses_nocoops.jsa":) "%s%sclasses.jsa", - jvm_path, os::file_separator()); - } - return _default_shared_archive_path; -} - -int Arguments::num_archives(const char* archive_path) { - if (archive_path == nullptr) { - return 0; - } - int npaths = 1; - char* p = (char*)archive_path; - while (*p != '\0') { - if (*p == os::path_separator()[0]) { - npaths++; - } - p++; - } - return npaths; -} - -void Arguments::extract_shared_archive_paths(const char* archive_path, - char** base_archive_path, - char** top_archive_path) { - char* begin_ptr = (char*)archive_path; - char* end_ptr = strchr((char*)archive_path, os::path_separator()[0]); - if (end_ptr == nullptr || end_ptr == begin_ptr) { - vm_exit_during_initialization("Base archive was not specified", archive_path); - } - size_t len = end_ptr - begin_ptr; - char* cur_path = NEW_C_HEAP_ARRAY(char, len + 1, mtInternal); - strncpy(cur_path, begin_ptr, len); - cur_path[len] = '\0'; - *base_archive_path = cur_path; - - begin_ptr = ++end_ptr; - if (*begin_ptr == '\0') { - vm_exit_during_initialization("Top archive was not specified", archive_path); - } - end_ptr = strchr(begin_ptr, '\0'); - assert(end_ptr != nullptr, "sanity"); - len = end_ptr - begin_ptr; - cur_path = NEW_C_HEAP_ARRAY(char, len + 1, mtInternal); - strncpy(cur_path, begin_ptr, len + 1); - *top_archive_path = cur_path; -} - -void Arguments::init_shared_archive_paths() { - if (ArchiveClassesAtExit != nullptr) { - assert(!RecordDynamicDumpInfo, "already checked"); - if (CDSConfig::is_dumping_static_archive()) { - vm_exit_during_initialization("-XX:ArchiveClassesAtExit cannot be used with -Xshare:dump"); - } - check_unsupported_dumping_properties(); - - if (os::same_files(get_default_shared_archive_path(), ArchiveClassesAtExit)) { - vm_exit_during_initialization( - "Cannot specify the default CDS archive for -XX:ArchiveClassesAtExit", get_default_shared_archive_path()); - } - } - - if (SharedArchiveFile == nullptr) { - SharedArchivePath = get_default_shared_archive_path(); - } else { - int archives = num_archives(SharedArchiveFile); - assert(archives > 0, "must be"); - - if (CDSConfig::is_dumping_archive() && archives > 1) { - vm_exit_during_initialization( - "Cannot have more than 1 archive file specified in -XX:SharedArchiveFile during CDS dumping"); - } - - if (CDSConfig::is_dumping_static_archive()) { - assert(archives == 1, "must be"); - // Static dump is simple: only one archive is allowed in SharedArchiveFile. This file - // will be overwritten no matter regardless of its contents - SharedArchivePath = os::strdup_check_oom(SharedArchiveFile, mtArguments); - } else { - // SharedArchiveFile may specify one or two files. In case (c), the path for base.jsa - // is read from top.jsa - // (a) 1 file: -XX:SharedArchiveFile=base.jsa - // (b) 2 files: -XX:SharedArchiveFile=base.jsa:top.jsa - // (c) 2 files: -XX:SharedArchiveFile=top.jsa - // - // However, if either RecordDynamicDumpInfo or ArchiveClassesAtExit is used, we do not - // allow cases (b) and (c). Case (b) is already checked above. - - if (archives > 2) { - vm_exit_during_initialization( - "Cannot have more than 2 archive files specified in the -XX:SharedArchiveFile option"); - } - if (archives == 1) { - char* base_archive_path = nullptr; - bool success = - FileMapInfo::get_base_archive_name_from_header(SharedArchiveFile, &base_archive_path); - if (!success) { - // If +AutoCreateSharedArchive and the specified shared archive does not exist, - // regenerate the dynamic archive base on default archive. - if (AutoCreateSharedArchive && !os::file_exists(SharedArchiveFile)) { - CDSConfig::enable_dumping_dynamic_archive(); - ArchiveClassesAtExit = const_cast(SharedArchiveFile); - SharedArchivePath = get_default_shared_archive_path(); - SharedArchiveFile = nullptr; - } else { - if (AutoCreateSharedArchive) { - warning("-XX:+AutoCreateSharedArchive is unsupported when base CDS archive is not loaded. Run with -Xlog:cds for more info."); - AutoCreateSharedArchive = false; - } - no_shared_spaces("invalid archive"); - } - } else if (base_archive_path == nullptr) { - // User has specified a single archive, which is a static archive. - SharedArchivePath = const_cast(SharedArchiveFile); - } else { - // User has specified a single archive, which is a dynamic archive. - SharedDynamicArchivePath = const_cast(SharedArchiveFile); - SharedArchivePath = base_archive_path; // has been c-heap allocated. - } - } else { - extract_shared_archive_paths((const char*)SharedArchiveFile, - &SharedArchivePath, &SharedDynamicArchivePath); - if (SharedArchivePath == nullptr) { - assert(SharedDynamicArchivePath == nullptr, "must be"); - no_shared_spaces("invalid archive"); - } - } - - if (SharedDynamicArchivePath != nullptr) { - // Check for case (c) - if (RecordDynamicDumpInfo) { - vm_exit_during_initialization("-XX:+RecordDynamicDumpInfo is unsupported when a dynamic CDS archive is specified in -XX:SharedArchiveFile", - SharedArchiveFile); - } - if (ArchiveClassesAtExit != nullptr) { - vm_exit_during_initialization("-XX:ArchiveClassesAtExit is unsupported when a dynamic CDS archive is specified in -XX:SharedArchiveFile", - SharedArchiveFile); - } - } - - if (ArchiveClassesAtExit != nullptr && os::same_files(SharedArchiveFile, ArchiveClassesAtExit)) { - vm_exit_during_initialization( - "Cannot have the same archive file specified for -XX:SharedArchiveFile and -XX:ArchiveClassesAtExit", - SharedArchiveFile); - } - } - } -} -#endif // INCLUDE_CDS - #ifndef PRODUCT // Determine whether LogVMOutput should be implicitly turned on. static bool use_vm_log() { @@ -3990,7 +3682,7 @@ jint Arguments::apply_ergo() { GCConfig::arguments()->initialize(); - set_shared_spaces_flags_and_archive_paths(); + CDSConfig::initialize(); // Initialize Metaspace flags and alignments Metaspace::ergo_initialize(); diff --git a/src/hotspot/share/runtime/arguments.hpp b/src/hotspot/share/runtime/arguments.hpp index 2b871fdc0c96c..8251db3d0d59a 100644 --- a/src/hotspot/share/runtime/arguments.hpp +++ b/src/hotspot/share/runtime/arguments.hpp @@ -248,7 +248,6 @@ class Arguments : AllStatic { // Operation modi static Mode _mode; - static void set_mode_flags(Mode mode); // preview features static bool _enable_preview; @@ -264,7 +263,6 @@ class Arguments : AllStatic { static void set_use_compressed_oops(); static void set_use_compressed_klass_ptrs(); static jint set_ergonomics_flags(); - static void set_shared_spaces_flags_and_archive_paths(); // Limits the given heap size by the maximum amount of virtual // memory this process is currently allowed to use. It also takes // the virtual-to-physical ratio of the current GC into account. @@ -363,17 +361,9 @@ class Arguments : AllStatic { // Return the "real" name for option arg if arg is an alias, and print a warning if arg is deprecated. // Return nullptr if the arg has expired. static const char* handle_aliases_and_deprecation(const char* arg); - - static char* _default_shared_archive_path; - static char* SharedArchivePath; - static char* SharedDynamicArchivePath; static size_t _default_SharedBaseAddress; // The default value specified in globals.hpp - static void extract_shared_archive_paths(const char* archive_path, - char** base_archive_path, - char** top_archive_path) NOT_CDS_RETURN; public: - static int num_archives(const char* archive_path) NOT_CDS_RETURN_(0); // Parses the arguments, first phase static jint parse(const JavaVMInitArgs* args); // Parse a string for a unsigned integer. Returns true if value @@ -441,8 +431,7 @@ class Arguments : AllStatic { static exit_hook_t exit_hook() { return _exit_hook; } static vfprintf_hook_t vfprintf_hook() { return _vfprintf_hook; } - static const char* GetSharedArchivePath() { return SharedArchivePath; } - static const char* GetSharedDynamicArchivePath() { return SharedDynamicArchivePath; } + static void no_shared_spaces(const char* message); static size_t default_SharedBaseAddress() { return _default_SharedBaseAddress; } // Java launcher properties static void process_sun_java_launcher_properties(JavaVMInitArgs* args); @@ -501,11 +490,9 @@ class Arguments : AllStatic { static char* get_appclasspath() { return _java_class_path->value(); } static void fix_appclasspath(); - static char* get_default_shared_archive_path() NOT_CDS_RETURN_(nullptr); - static void init_shared_archive_paths() NOT_CDS_RETURN; - // Operation modi static Mode mode() { return _mode; } + static void set_mode_flags(Mode mode); static bool is_interpreter_only() { return mode() == _int; } static bool is_compiler_only() { return mode() == _comp; } @@ -517,10 +504,6 @@ class Arguments : AllStatic { // Utility: copies src into buf, replacing "%%" with "%" and "%p" with pid. static bool copy_expand_pid(const char* src, size_t srclen, char* buf, size_t buflen); - static void check_unsupported_dumping_properties() NOT_CDS_RETURN; - - static bool check_unsupported_cds_runtime_properties() NOT_CDS_RETURN0; - static bool atojulong(const char *s, julong* result); static bool has_jfr_option() NOT_JFR_RETURN_(false); diff --git a/src/jdk.hotspot.agent/share/native/libsaproc/ps_core_common.c b/src/jdk.hotspot.agent/share/native/libsaproc/ps_core_common.c index 3912332662ae1..bcce23f12216a 100644 --- a/src/jdk.hotspot.agent/share/native/libsaproc/ps_core_common.c +++ b/src/jdk.hotspot.agent/share/native/libsaproc/ps_core_common.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2023, 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 @@ -264,16 +264,16 @@ bool read_string(struct ps_prochandle* ph, uintptr_t addr, char* buf, size_t siz } #ifdef LINUX -// mangled name of Arguments::SharedArchivePath -#define SHARED_ARCHIVE_PATH_SYM "_ZN9Arguments17SharedArchivePathE" +// mangled name of CDSConfig::_static_archive_path +#define SHARED_ARCHIVE_PATH_SYM "_ZN9CDSConfig20_static_archive_pathE" #define USE_SHARED_SPACES_SYM "UseSharedSpaces" #define SHARED_BASE_ADDRESS_SYM "SharedBaseAddress" #define LIBJVM_NAME "/libjvm.so" #endif #ifdef __APPLE__ -// mangled name of Arguments::SharedArchivePath -#define SHARED_ARCHIVE_PATH_SYM "__ZN9Arguments17SharedArchivePathE" +// mangled name of CDSConfig::_static_archive_path +#define SHARED_ARCHIVE_PATH_SYM "__ZN9CDSConfig20_static_archive_pathE" #define USE_SHARED_SPACES_SYM "_UseSharedSpaces" #define SHARED_BASE_ADDRESS_SYM "_SharedBaseAddress" #define LIBJVM_NAME "/libjvm.dylib" From 9d776777c503ede4410ae3fe744cb267e9175433 Mon Sep 17 00:00:00 2001 From: Viktor Klang Date: Wed, 6 Dec 2023 07:12:03 +0000 Subject: [PATCH 229/250] 8321124: java/util/stream/GatherersTest.java times out Reviewed-by: alanb --- test/jdk/ProblemList.txt | 1 - test/jdk/java/util/stream/GathererTest.java | 2 +- .../java/util/stream/GatherersFoldTest.java | 92 +++++ .../stream/GatherersMapConcurrentTest.java | 317 +++++++++++++++ .../java/util/stream/GatherersScanTest.java | 103 +++++ test/jdk/java/util/stream/GatherersTest.java | 368 ------------------ .../util/stream/GatherersWindowFixedTest.java | 134 +++++++ .../stream/GatherersWindowSlidingTest.java | 139 +++++++ test/jdk/java/util/stream/TEST.properties | 1 + 9 files changed, 787 insertions(+), 370 deletions(-) create mode 100644 test/jdk/java/util/stream/GatherersFoldTest.java create mode 100644 test/jdk/java/util/stream/GatherersMapConcurrentTest.java create mode 100644 test/jdk/java/util/stream/GatherersScanTest.java delete mode 100644 test/jdk/java/util/stream/GatherersTest.java create mode 100644 test/jdk/java/util/stream/GatherersWindowFixedTest.java create mode 100644 test/jdk/java/util/stream/GatherersWindowSlidingTest.java create mode 100644 test/jdk/java/util/stream/TEST.properties diff --git a/test/jdk/ProblemList.txt b/test/jdk/ProblemList.txt index 096ea9231ec2c..1faa360aacdaf 100644 --- a/test/jdk/ProblemList.txt +++ b/test/jdk/ProblemList.txt @@ -722,7 +722,6 @@ com/sun/jdi/InvokeHangTest.java 8218463 linux-al java/util/Locale/LocaleProvidersRun.java 8268379 macosx-x64 sun/util/locale/provider/CalendarDataRegression.java 8268379 macosx-x64 -java/util/stream/GatherersTest.java 8321124 generic-all ############################################################################ diff --git a/test/jdk/java/util/stream/GathererTest.java b/test/jdk/java/util/stream/GathererTest.java index 5d5f0b517aa09..3d8e608cc6c2d 100644 --- a/test/jdk/java/util/stream/GathererTest.java +++ b/test/jdk/java/util/stream/GathererTest.java @@ -349,7 +349,7 @@ public void testCompositionOfStatefulGatherers(Config config) { @ParameterizedTest @MethodSource("configurations") public void testMassivelyComposedGatherers(Config config) { - final int ITERATIONS = 512; // Total number of compositions is 1 + (iterations*2) + final int ITERATIONS = 256; // Total number of compositions is 1 + (iterations*2) Gatherer g = addOne; for(int i = 0;i < ITERATIONS;++i) { g = g.andThen(timesTwo).andThen(addOne); diff --git a/test/jdk/java/util/stream/GatherersFoldTest.java b/test/jdk/java/util/stream/GatherersFoldTest.java new file mode 100644 index 0000000000000..caecff19e3ac5 --- /dev/null +++ b/test/jdk/java/util/stream/GatherersFoldTest.java @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2023, 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. + */ + +import java.util.List; +import java.util.stream.Gatherers; +import java.util.stream.Stream; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; +import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assumptions.*; + +/** + * @test + * @summary Tests the API and contract of Gatherers.fold + * @enablePreview + * @run junit GatherersFoldTest + */ + +public class GatherersFoldTest { + + record Config(int streamSize, boolean parallel) { + Stream stream() { + var stream = Stream.iterate(1, i -> i + 1).limit(streamSize); + stream = parallel ? stream.parallel() : stream.sequential(); + return stream; + } + } + + static final Stream sizes(){ + return Stream.of(0,1,10,33,99,9999); + } + + static final Stream sequentialAndParallel(int size) { + return Stream.of(false, true) + .map(parallel -> + new Config(size, parallel)); + } + + static final Stream configurations() { + return sizes().flatMap(i -> sequentialAndParallel(i)); + } + + @Test + public void throwsNPEWhenStateSupplierIsNull() { + assertThrows(NullPointerException.class, () -> Gatherers.fold(null, (state, next) -> state)); + } + + @Test + public void throwsNPEWhenFolderFunctionIsNull() { + assertThrows(NullPointerException.class, () -> Gatherers.fold(() -> "", null)); + } + + @ParameterizedTest + @MethodSource("configurations") + public void behavesAsExpected(Config config) { + final var expectedResult = List.of( + config.stream() + .sequential() + .reduce(0L, (acc, next) -> acc + next,(l, r) -> { + throw new IllegalStateException(); + }) + ); + + final var result = config.stream() + .gather(Gatherers.fold(() -> 0L, (acc, next) -> acc + next)) + .toList(); + + assertEquals(expectedResult, result); + } +} diff --git a/test/jdk/java/util/stream/GatherersMapConcurrentTest.java b/test/jdk/java/util/stream/GatherersMapConcurrentTest.java new file mode 100644 index 0000000000000..5ff845f55b9a4 --- /dev/null +++ b/test/jdk/java/util/stream/GatherersMapConcurrentTest.java @@ -0,0 +1,317 @@ +/* + * Copyright (c) 2023, 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. + */ + +import java.util.List; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.Semaphore; +import java.util.stream.Gatherer; +import java.util.stream.Gatherers; +import java.util.stream.Stream; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; +import org.junit.jupiter.params.provider.ValueSource; +import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assumptions.*; + +/** + * @test + * @summary Tests the API and contract of Gatherers.mapConcurrent + * @enablePreview + * @run junit GatherersMapConcurrentTest + */ + +public class GatherersMapConcurrentTest { + + record Config(int streamSize, boolean parallel) { + Stream stream() { + var stream = Stream.iterate(1, i -> i + 1).limit(streamSize); + stream = parallel ? stream.parallel() : stream.sequential(); + return stream; + } + } + + record ConcurrencyConfig(Config config, int concurrencyLevel) {} + + static final Stream sizes(){ + return Stream.of(0,1,10,33,99,9999); + } + + static final Stream concurrencyLevels() { return Stream.of(1, 2, 3, 10, + 1000); } + + static final Stream sequentialAndParallel(int size) { + return Stream.of(false, true) + .map(parallel -> + new Config(size, parallel)); + } + + static final Stream configurations() { + return sizes().flatMap(i -> sequentialAndParallel(i)); + } + + static final Stream concurrencyConfigurations() { + return configurations().flatMap( c -> concurrencyLevels().map( l -> new ConcurrencyConfig(c, l)) ); + } + + static final Stream small_atleast3_configurations() { + return sizes().filter(i -> i > 2 && i < 100).flatMap(i -> sequentialAndParallel(i)); + } + + static final class TestException extends RuntimeException { + TestException(String message) { + super(message); + } + } + + @ParameterizedTest + @ValueSource(ints = { Integer.MIN_VALUE, -999, -1, 0}) + public void throwsIAEWhenConcurrencyLevelIsLowerThanOne(int level) { + assertThrows(IllegalArgumentException.class, + () -> Gatherers.mapConcurrent(level, s -> s)); + } + + @Test + public void throwsNPEWhenMapperFunctionIsNull() { + assertThrows(NullPointerException.class, () -> Gatherers.mapConcurrent(2, null)); + } + + @ParameterizedTest + @ValueSource(booleans = { true, false } ) + public void rethrowsRuntimeExceptionsUnwrapped(boolean parallel) { + final var stream = parallel ? Stream.of(1).parallel() : Stream.of(1); + + var exception = + assertThrows( + RuntimeException.class, + () -> stream.gather( + Gatherers.mapConcurrent(2, x -> { + throw new RuntimeException("expected"); + }) + ).toList() + ); + assertEquals("expected", exception.getMessage()); + assertNull(exception.getCause()); + } + + @ParameterizedTest + @ValueSource(booleans = { true, false } ) + public void rethrowsSubtypesOfRuntimeExceptionsUnwrapped(boolean parallel) { + final var stream = parallel ? Stream.of(1).parallel() : Stream.of(1); + + var exception = + assertThrows( + IllegalStateException.class, + () -> stream.gather( + Gatherers.mapConcurrent(2, x -> { + throw new IllegalStateException("expected"); + }) + ).toList() + ); + assertEquals("expected", exception.getMessage()); + assertNull(exception.getCause()); + } + + @ParameterizedTest + @ValueSource(booleans = { true, false } ) + public void rethrowsErrorsWrappedAsRuntimeExceptions(boolean parallel) { + final var stream = parallel ? Stream.of(1).parallel() : Stream.of(1); + + var exception = + assertThrows( + RuntimeException.class, + () -> stream.gather( + Gatherers.mapConcurrent(2, x -> { + throw new Error("expected"); + }) + ).toList() + ); + assertEquals("expected", exception.getCause().getMessage()); + assertEquals(Error.class, exception.getCause().getClass()); + } + + @ParameterizedTest + @MethodSource("small_atleast3_configurations") + public void cancelsStartedTasksIfExceptionDuringProcessingIsThrown(Config config) { + final var streamSize = config.streamSize(); + + assertTrue(streamSize > 2, "This test case won't work with tiny streams!"); + + final var tasksToCancel = streamSize - 2; + final var throwerReady = new CountDownLatch(1); + final var initiateThrow = new CountDownLatch(1); + final var tasksCancelled = new CountDownLatch(tasksToCancel); + + final var tasksWaiting = new Semaphore(0); + + try { + config.stream() + .gather( + Gatherers.mapConcurrent(streamSize, i -> { + switch (i) { + case 1 -> { + throwerReady.countDown(); + try { initiateThrow.await(); } + catch (InterruptedException ie) { + fail("Unexpected"); + } + throw new TestException("expected"); + } + + case Integer n when n == streamSize -> { + try { throwerReady.await(); } + catch (InterruptedException ie) { + fail("Unexpected"); + } + while(tasksWaiting.getQueueLength() < tasksToCancel) { + try { + Thread.sleep(10); + } catch (InterruptedException ie) { + // Ignore + } + } + initiateThrow.countDown(); + } + + default -> { + try { + tasksWaiting.acquire(); + } catch (InterruptedException ie) { + tasksCancelled.countDown(); // used to ensure that they all were interrupted + } + } + } + + return i; + }) + ) + .toList(); + fail("This should not be reached"); + } catch (TestException te) { + assertEquals("expected", te.getMessage()); + try { tasksCancelled.await(); } + catch (InterruptedException ie) { + fail("Unexpected"); + } + return; + } + + fail("This should not be reached"); + } + + @ParameterizedTest + @MethodSource("small_atleast3_configurations") + public void cancelsStartedTasksIfShortCircuited(Config config) { + final var streamSize = config.streamSize(); + + assertTrue(streamSize > 2, "This test case won't work with tiny streams!"); + + final var tasksToCancel = streamSize - 2; + final var firstReady = new CountDownLatch(1); + final var lastDone = new CountDownLatch(1); + final var tasksCancelled = new CountDownLatch(tasksToCancel); + + final var tasksWaiting = new Semaphore(0); + + final var result = + config.stream().gather( + Gatherers.mapConcurrent(streamSize, i -> { + switch (i) { + case 1 -> { + firstReady.countDown(); + try { lastDone.await(); } + catch (InterruptedException ie) { + fail("Unexpected!"); + } + } + + case Integer n when n == streamSize -> { + try { firstReady.await(); } + catch (InterruptedException ie) { + fail("Unexpected!"); + } + while(tasksWaiting.getQueueLength() < tasksToCancel) { + try { + Thread.sleep(10); + } catch (InterruptedException ie) { + // Ignore + } + } + lastDone.countDown(); + } + + default -> { + try { + tasksWaiting.acquire(); + } catch (InterruptedException ie) { + tasksCancelled.countDown(); // used to ensure that they all were interrupted + } + } + } + + return i; + }) + ) + .gather(Gatherer.of((unused, state, downstream) -> downstream.push(state) && false)) // emulate limit(1) + .toList(); + assertEquals(List.of(1), result); + try { + tasksCancelled.await(); + } catch (InterruptedException ie) { + fail("Unexpected"); + } + } + + @ParameterizedTest + @MethodSource("concurrencyConfigurations") + public void behavesAsExpected(ConcurrencyConfig cc) { + final var expectedResult = cc.config().stream() + .map(x -> x * x) + .toList(); + + final var result = cc.config().stream() + .gather(Gatherers.mapConcurrent(cc.concurrencyLevel(), x -> x * x)) + .toList(); + + assertEquals(expectedResult, result); + } + + @ParameterizedTest + @MethodSource("concurrencyConfigurations") + public void behavesAsExpectedWhenShortCircuited(ConcurrencyConfig cc) { + final var limitTo = Math.max(cc.config().streamSize() / 2, 1); + + final var expectedResult = cc.config().stream() + .map(x -> x * x) + .limit(limitTo) + .toList(); + + final var result = cc.config().stream() + .gather(Gatherers.mapConcurrent(cc.concurrencyLevel(), x -> x * x)) + .limit(limitTo) + .toList(); + + assertEquals(expectedResult, result); + } +} diff --git a/test/jdk/java/util/stream/GatherersScanTest.java b/test/jdk/java/util/stream/GatherersScanTest.java new file mode 100644 index 0000000000000..993a616233c70 --- /dev/null +++ b/test/jdk/java/util/stream/GatherersScanTest.java @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2023, 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. + */ + +import java.util.LinkedList; +import java.util.List; +import java.util.stream.Gatherers; +import java.util.stream.Stream; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; +import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assumptions.*; + +/** + * @test + * @summary Tests the API and contract of Gatherers.scan + * @enablePreview + * @run junit GatherersScanTest + */ + +public class GatherersScanTest { + + record Config(int streamSize, boolean parallel) { + Stream stream() { + var stream = Stream.iterate(1, i -> i + 1).limit(streamSize); + stream = parallel ? stream.parallel() : stream.sequential(); + return stream; + } + } + + static final Stream sizes(){ + return Stream.of(0,1,10,33,99,9999); + } + + static final Stream sequentialAndParallel(int size) { + return Stream.of(false, true) + .map(parallel -> + new Config(size, parallel)); + } + + static final Stream configurations() { + return sizes().flatMap(i -> sequentialAndParallel(i)); + } + + @Test + public void throwsNPEWhenStateSupplierIsNull() { + assertThrows(NullPointerException.class, + () -> Gatherers.scan(null, (state, next) -> state)); + } + + @Test + public void throwsNPEWhenScannerFunctionIsNull() { + assertThrows(NullPointerException.class, + () -> Gatherers.scan(() -> "", null)); + } + + @ParameterizedTest + @MethodSource("configurations") + public void behavesAsExpected(Config config) { + final List expectedResult; + if (config.streamSize() == 0) { + expectedResult = List.of(); + } else { + expectedResult = config.stream() + .sequential() + .reduce( + new LinkedList(), + (acc, next) -> { + acc.addLast((acc.isEmpty() ? 0L : acc.getLast()) + next); + return acc; + }, + (l, r) -> { throw new IllegalStateException(); } + ); + } + + final var result = config.stream() + .gather(Gatherers.scan(() -> 0L, (acc, next) -> acc + next)) + .toList(); + + assertEquals(expectedResult, result); + } +} diff --git a/test/jdk/java/util/stream/GatherersTest.java b/test/jdk/java/util/stream/GatherersTest.java deleted file mode 100644 index e2cbee38fc2b5..0000000000000 --- a/test/jdk/java/util/stream/GatherersTest.java +++ /dev/null @@ -1,368 +0,0 @@ -/* - * Copyright (c) 2023, 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. - */ -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Set; -import java.util.concurrent.ConcurrentLinkedQueue; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Semaphore; -import java.util.function.Predicate; -import java.util.function.Supplier; -import java.util.stream.*; -import java.util.stream.Gatherer; - -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.MethodSource; -import static org.junit.jupiter.api.Assertions.*; -import static org.junit.jupiter.api.Assumptions.*; - -/** - * @test - * @summary Testing the built-in Gatherer implementations and their contracts - * @enablePreview - * @run junit GatherersTest - */ - -public class GatherersTest { - - record Config(int streamSize, boolean parallel) { - Stream stream() { - return wrapStream(Stream.iterate(1, i -> i + 1).limit(streamSize)); - } - - Stream wrapStream(Stream stream) { - stream = parallel ? stream.parallel() : stream.sequential(); - return stream; - } - } - - final static Stream configurations() { - return Stream.of(0,1,10,33,99,9999) - .flatMap(size -> - Stream.of(false, true) - .map(parallel -> - new Config(size, parallel)) - ); - } - - final class TestException extends RuntimeException { - TestException(String message) { - super(message); - } - } - - @ParameterizedTest - @MethodSource("configurations") - public void testFixedWindowAPIandContract(Config config) { - // Groups must be greater than 0 - assertThrows(IllegalArgumentException.class, () -> Gatherers.windowFixed(0)); - - final var streamSize = config.streamSize(); - - // We're already covering less-than-one scenarios above - if (streamSize > 0) { - //Test creating a window of the same size as the stream - { - final var result = config.stream() - .gather(Gatherers.windowFixed(streamSize)) - .toList(); - assertEquals(1, result.size()); - assertEquals(config.stream().toList(), result.get(0)); - } - - //Test nulls as elements - { - assertEquals( - config.stream() - .map(n -> Arrays.asList(null, null)) - .toList(), - config.stream() - .flatMap(n -> Stream.of(null, null)) - .gather(Gatherers.windowFixed(2)) - .toList()); - } - - // Test unmodifiability of windows - { - var window = config.stream() - .gather(Gatherers.windowFixed(1)) - .findFirst() - .get(); - assertThrows(UnsupportedOperationException.class, - () -> window.add(2)); - } - } - - - // Tests that the layout of the returned data is as expected - for (var windowSize : List.of(1, 2, 3, 10)) { - final var expectLastWindowSize = streamSize % windowSize == 0 ? windowSize : streamSize % windowSize; - final var expectedSize = (streamSize / windowSize) + ((streamSize % windowSize == 0) ? 0 : 1); - - final var expected = config.stream().toList().iterator(); - - final var result = config.stream() - .gather(Gatherers.windowFixed(windowSize)) - .toList(); - - int currentWindow = 0; - for (var window : result) { - ++currentWindow; - assertEquals(currentWindow < expectedSize ? windowSize : expectLastWindowSize, window.size()); - for (var element : window) - assertEquals(expected.next(), element); - } - - assertEquals(expectedSize, currentWindow); - } - } - - @ParameterizedTest - @MethodSource("configurations") - public void testSlidingAPIandContract(Config config) { - // Groups must be greater than 0 - assertThrows(IllegalArgumentException.class, () -> Gatherers.windowSliding(0)); - - final var streamSize = config.streamSize(); - - // We're already covering less-than-one scenarios above - if (streamSize > 0) { - //Test greating a window larger than the size of the stream - { - final var result = config.stream() - .gather(Gatherers.windowSliding(streamSize + 1)) - .toList(); - assertEquals(1, result.size()); - assertEquals(config.stream().toList(), result.get(0)); - } - - //Test nulls as elements - { - assertEquals( - List.of( - Arrays.asList(null, null), - Arrays.asList(null, null) - ), - config.wrapStream(Stream.of(null, null, null)) - .gather(Gatherers.windowSliding(2)) - .toList()); - } - - // Test unmodifiability of windows - { - var window = config.stream() - .gather(Gatherers.windowSliding(1)) - .findFirst() - .get(); - assertThrows(UnsupportedOperationException.class, - () -> window.add(2)); - } - } - - // Tests that the layout of the returned data is as expected - for (var windowSize : List.of(1, 2, 3, 10)) { - final var expectLastWindowSize = streamSize < windowSize ? streamSize : windowSize; - final var expectedNumberOfWindows = streamSize == 0 ? 0 : Math.max(1, 1 + streamSize - windowSize); - - int expectedElement = 0; - int currentWindow = 0; - - final var result = config.stream() - .gather(Gatherers.windowSliding(windowSize)) - .toList(); - - for (var window : result) { - ++currentWindow; - assertEquals(currentWindow < expectedNumberOfWindows ? windowSize : expectLastWindowSize, window.size()); - for (var element : window) { - assertEquals(++expectedElement, element.intValue()); - } - // rewind for the sliding motion - expectedElement -= (window.size() - 1); - } - - assertEquals(expectedNumberOfWindows, currentWindow); - } - } - - @ParameterizedTest - @MethodSource("configurations") - public void testFoldAPIandContract(Config config) { - // Verify prereqs - assertThrows(NullPointerException.class, () -> Gatherers.fold(null, (state, next) -> state)); - assertThrows(NullPointerException.class, () -> Gatherers.fold(() -> "", null)); - - final var expectedResult = List.of( - config.stream() - .sequential() - .reduce("", (acc, next) -> acc + next, (l,r) -> { throw new IllegalStateException(); }) - ); - - final var result = config.stream() - .gather(Gatherers.fold(() -> "", (acc, next) -> acc + next)) - .toList(); - - assertEquals(expectedResult, result); - } - - @ParameterizedTest - @MethodSource("configurations") - public void testMapConcurrentAPIandContract(Config config) throws InterruptedException { - // Verify prereqs - assertThrows(IllegalArgumentException.class, () -> Gatherers.mapConcurrent(0, s -> s)); - assertThrows(NullPointerException.class, () -> Gatherers.mapConcurrent(2, null)); - - // Test exception during processing - { - final var stream = config.parallel() ? Stream.of(1).parallel() : Stream.of(1); - - assertThrows(RuntimeException.class, - () -> stream.gather(Gatherers.mapConcurrent(2, x -> { - throw new RuntimeException(); - })).toList()); - } - - // Test cancellation after exception during processing - if (config.streamSize > 2) { // We need streams of a minimum size to test this - final var firstLatch = new CountDownLatch(1); - final var secondLatch = new CountDownLatch(1); - final var cancellationLatch = new CountDownLatch(config.streamSize - 2); // all but two will get cancelled - - try { - config.stream() - .gather( - Gatherers.mapConcurrent(config.streamSize(), i -> { - switch (i) { - case 1 -> { - try { - firstLatch.await(); // the first waits for the last element to start - } catch (InterruptedException ie) { - throw new IllegalStateException(ie); - } - throw new TestException("expected"); - } - - case Integer n when n == config.streamSize - 1 -> { // last element - firstLatch.countDown(); // ensure that the first element can now proceed - } - - default -> { - try { - secondLatch.await(); // These should all get interrupted - } catch (InterruptedException ie) { - cancellationLatch.countDown(); // used to ensure that they all were interrupted - } - } - } - - return i; - }) - ) - .toList(); - fail("This should not be reached"); - } catch (RuntimeException re) { - assertSame(TestException.class, re.getClass()); - assertEquals("expected", re.getMessage()); - cancellationLatch.await(); - return; - } - - fail("This should not be reached"); - } - - // Test cancellation during short-circuiting - if (config.streamSize > 2) { - final var firstLatch = new CountDownLatch(1); - final var secondLatch = new CountDownLatch(1); - final var cancellationLatch = new CountDownLatch(config.streamSize - 2); // all but two will get cancelled - - final var result = - config.stream() - .gather( - Gatherers.mapConcurrent(config.streamSize(), i -> { - switch (i) { - case 1 -> { - try { - firstLatch.await(); // the first waits for the last element to start - } catch (InterruptedException ie) { - throw new IllegalStateException(ie); - } - } - - case Integer n when n == config.streamSize - 1 -> { // last element - firstLatch.countDown(); // ensure that the first element can now proceed - } - - default -> { - try { - secondLatch.await(); // These should all get interrupted - } catch (InterruptedException ie) { - cancellationLatch.countDown(); // used to ensure that they all were interrupted - } - } - } - - return i; - }) - ) - .limit(2) - .toList(); - cancellationLatch.await(); // If this hangs, then we didn't cancel and interrupt the tasks - assertEquals(List.of(1,2), result); - } - - for (var concurrency : List.of(1, 2, 3, 10, 1000)) { - // Test normal operation - { - final var expectedResult = config.stream() - .map(x -> x * x) - .toList(); - - final var result = config.stream() - .gather(Gatherers.mapConcurrent(concurrency, x -> x * x)) - .toList(); - - assertEquals(expectedResult, result); - } - - // Test short-circuiting - { - final var limitTo = Math.max(config.streamSize() / 2, 1); - - final var expectedResult = config.stream() - .map(x -> x * x) - .limit(limitTo) - .toList(); - - final var result = config.stream() - .gather(Gatherers.mapConcurrent(concurrency, x -> x * x)) - .limit(limitTo) - .toList(); - - assertEquals(expectedResult, result); - } - } - } -} diff --git a/test/jdk/java/util/stream/GatherersWindowFixedTest.java b/test/jdk/java/util/stream/GatherersWindowFixedTest.java new file mode 100644 index 0000000000000..69426dfd768e9 --- /dev/null +++ b/test/jdk/java/util/stream/GatherersWindowFixedTest.java @@ -0,0 +1,134 @@ +/* + * Copyright (c) 2023, 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. + */ + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Gatherers; +import java.util.stream.Stream; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; +import org.junit.jupiter.params.provider.ValueSource; +import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assumptions.*; + +/** + * @test + * @summary Tests the API and contract of Gatherers.windowFixed + * @enablePreview + * @run junit GatherersWindowFixedTest + */ + +public class GatherersWindowFixedTest { + + record Config(int streamSize, boolean parallel) { + Stream stream() { + var stream = Stream.iterate(1, i -> i + 1).limit(streamSize); + stream = parallel ? stream.parallel() : stream.sequential(); + return stream; + } + } + + static final Stream sizes(){ + return Stream.of(0,1,10,33,99,9999); + } + + static final Stream sequentialAndParallel(int size) { + return Stream.of(false, true) + .map(parallel -> + new Config(size, parallel)); + } + + static final Stream configurations() { + return sizes().flatMap(i -> sequentialAndParallel(i)); + } + + static final Stream nonempty_configurations() { + return sizes().filter(i -> i > 0).flatMap(i -> sequentialAndParallel(i)); + } + + @ParameterizedTest + @ValueSource(ints = { Integer.MIN_VALUE, -999, -1, 0}) + public void throwsIAEWhenWindowSizeIsSmallerThanOne(int windowSize) { + assertThrows(IllegalArgumentException.class, + () -> Gatherers.windowFixed(windowSize)); + } + + @ParameterizedTest + @MethodSource("nonempty_configurations") + public void behavesAsExpectedWhenWindowSizeIsSizeOfStream(Config config) { + final var streamSize = config.streamSize(); + final var result = config.stream() + .gather(Gatherers.windowFixed(streamSize)) + .toList(); + assertEquals(1, result.size()); + assertEquals(config.stream().toList(), result.get(0)); + } + + @Test + public void toleratesNullElements() { + assertEquals( + List.of(Arrays.asList(null, null)), + Stream.of(null, null) + .gather(Gatherers.windowFixed(2)) + .toList()); + } + + @Test + public void throwsUOEWhenWindowsAreAttemptedToBeModified() { + var window = Stream.of(1) + .gather(Gatherers.windowFixed(1)) + .findFirst() + .get(); + assertThrows(UnsupportedOperationException.class, + () -> window.add(2)); + } + + @ParameterizedTest + @MethodSource("configurations") + public void behavesAsExpected(Config config) { + final var streamSize = config.streamSize(); + // Tests that the layout of the returned data is as expected + for (var windowSize : List.of(1, 2, 3, 10)) { + final var expectLastWindowSize = streamSize % windowSize == 0 ? windowSize : streamSize % windowSize; + final var expectedSize = (streamSize / windowSize) + ((streamSize % windowSize == 0) ? 0 : 1); + + final var expected = config.stream().toList().iterator(); + + final var result = config.stream() + .gather(Gatherers.windowFixed(windowSize)) + .toList(); + + int currentWindow = 0; + for (var window : result) { + ++currentWindow; + assertEquals(currentWindow < expectedSize ? windowSize : expectLastWindowSize, window.size()); + for (var element : window) + assertEquals(expected.next(), element); + } + + assertEquals(expectedSize, currentWindow); + } + } +} diff --git a/test/jdk/java/util/stream/GatherersWindowSlidingTest.java b/test/jdk/java/util/stream/GatherersWindowSlidingTest.java new file mode 100644 index 0000000000000..27ed6ecc4dde7 --- /dev/null +++ b/test/jdk/java/util/stream/GatherersWindowSlidingTest.java @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2023, 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. + */ + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Gatherers; +import java.util.stream.Stream; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; +import org.junit.jupiter.params.provider.ValueSource; +import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assumptions.*; + +/** + * @test + * @summary Tests the API and contract of Gatherers.windowSliding + * @enablePreview + * @run junit GatherersWindowSlidingTest + */ + +public class GatherersWindowSlidingTest { + + record Config(int streamSize, boolean parallel) { + Stream stream() { + var stream = Stream.iterate(1, i -> i + 1).limit(streamSize); + stream = parallel ? stream.parallel() : stream.sequential(); + return stream; + } + } + + static final Stream sizes(){ + return Stream.of(0,1,10,33,99,9999); + } + + static final Stream sequentialAndParallel(int size) { + return Stream.of(false, true) + .map(parallel -> + new Config(size, parallel)); + } + + static final Stream configurations() { + return sizes().flatMap(i -> sequentialAndParallel(i)); + } + + static final Stream nonempty_configurations() { + return sizes().filter(i -> i > 0).flatMap(i -> sequentialAndParallel(i)); + } + + @ParameterizedTest + @ValueSource(ints = { Integer.MIN_VALUE, -999, -1, 0}) + public void throwsIAEWhenWindowSizeIsSmallerThanOne(int windowSize) { + assertThrows(IllegalArgumentException.class, () -> Gatherers.windowSliding(windowSize)); + } + + @ParameterizedTest + @MethodSource("nonempty_configurations") + public void behavesAsExpectedWhenWindowSizeIsLargerThanStreamSize(Config config) { + final var streamSize = config.streamSize(); + final var result = config.stream() + .gather(Gatherers.windowSliding(streamSize + 1)) + .toList(); + assertEquals(1, result.size()); + assertEquals(config.stream().toList(), result.get(0)); + } + + @Test + public void toleratesNullElements() { + assertEquals( + List.of( + Arrays.asList(null, null), + Arrays.asList(null, null) + ), + Stream.of(null, null, null) + .gather(Gatherers.windowSliding(2)) + .toList()); + } + + @Test + public void throwsUOEWhenWindowsAreAttemptedToBeModified() { + var window = Stream.of(1) + .gather(Gatherers.windowSliding(1)) + .findFirst() + .get(); + assertThrows(UnsupportedOperationException.class, + () -> window.add(2)); + } + + @ParameterizedTest + @MethodSource("configurations") + public void behavesAsExpected(Config config) { + final var streamSize = config.streamSize(); + // Tests that the layout of the returned data is as expected + for (var windowSize : List.of(1, 2, 3, 10)) { + final var expectLastWindowSize = streamSize < windowSize ? streamSize : windowSize; + final var expectedNumberOfWindows = streamSize == 0 ? 0 : Math.max(1, 1 + streamSize - windowSize); + + int expectedElement = 0; + int currentWindow = 0; + + final var result = config.stream() + .gather(Gatherers.windowSliding(windowSize)) + .toList(); + + for (var window : result) { + ++currentWindow; + assertEquals(currentWindow < expectedNumberOfWindows ? windowSize : expectLastWindowSize, window.size()); + for (var element : window) { + assertEquals(++expectedElement, element.intValue()); + } + // rewind for the sliding motion + expectedElement -= (window.size() - 1); + } + + assertEquals(expectedNumberOfWindows, currentWindow); + } + } +} diff --git a/test/jdk/java/util/stream/TEST.properties b/test/jdk/java/util/stream/TEST.properties new file mode 100644 index 0000000000000..74a024f2880ac --- /dev/null +++ b/test/jdk/java/util/stream/TEST.properties @@ -0,0 +1 @@ +maxOutputSize=2000000 From a0920aa436943b88b53a81f46752e8c4bb0a0fc7 Mon Sep 17 00:00:00 2001 From: Per Minborg Date: Wed, 6 Dec 2023 08:02:52 +0000 Subject: [PATCH 230/250] 8321159: SymbolLookup.libraryLookup(Path, Arena) Assumes default Filesystem Reviewed-by: mcimadamore --- .../java/lang/foreign/SymbolLookup.java | 5 +++ test/jdk/java/foreign/LibraryLookupTest.java | 37 +++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/src/java.base/share/classes/java/lang/foreign/SymbolLookup.java b/src/java.base/share/classes/java/lang/foreign/SymbolLookup.java index 1d04032a1ff3a..de955a0254198 100644 --- a/src/java.base/share/classes/java/lang/foreign/SymbolLookup.java +++ b/src/java.base/share/classes/java/lang/foreign/SymbolLookup.java @@ -37,6 +37,7 @@ import jdk.internal.reflect.Reflection; import java.lang.invoke.MethodHandles; +import java.nio.file.FileSystems; import java.nio.file.Path; import java.util.Objects; import java.util.Optional; @@ -284,6 +285,7 @@ static SymbolLookup libraryLookup(String name, Arena arena) { * @throws WrongThreadException if {@code arena} is a confined arena, and this method * is called from a thread {@code T}, other than the arena's owner thread * @throws IllegalArgumentException if {@code path} does not point to a valid library + * in the default file system * @throws IllegalCallerException If the caller is in a module that does not have * native access enabled */ @@ -292,6 +294,9 @@ static SymbolLookup libraryLookup(String name, Arena arena) { static SymbolLookup libraryLookup(Path path, Arena arena) { Reflection.ensureNativeAccess(Reflection.getCallerClass(), SymbolLookup.class, "libraryLookup"); + if (path.getFileSystem() != FileSystems.getDefault()) { + throw new IllegalArgumentException("Path not in default file system: " + path); + } return libraryLookup(path, RawNativeLibraries::load, arena); } diff --git a/test/jdk/java/foreign/LibraryLookupTest.java b/test/jdk/java/foreign/LibraryLookupTest.java index 90aa589654b9b..950e769b0f61a 100644 --- a/test/jdk/java/foreign/LibraryLookupTest.java +++ b/test/jdk/java/foreign/LibraryLookupTest.java @@ -23,10 +23,16 @@ import org.testng.annotations.Test; +import java.io.IOException; import java.lang.foreign.*; import java.lang.foreign.Arena; import java.lang.invoke.MethodHandle; +import java.net.URI; +import java.net.URISyntaxException; +import java.nio.file.FileSystem; +import java.nio.file.FileSystems; import java.nio.file.Path; +import java.util.HashMap; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; @@ -91,6 +97,37 @@ void testLoadLibraryBadLookupName() { } } + @Test + void testLoadLibraryNonDefaultFileSystem() throws URISyntaxException, IOException { + try (FileSystem customFs = fsFromJarOfClass(org.testng.annotations.Test.class)) { + try (Arena arena = Arena.ofConfined()) { + Path p = customFs.getPath("."); + try { + SymbolLookup.libraryLookup(p, arena); + fail("Did not throw IAE"); + } catch (IllegalArgumentException iae) { + assertTrue(iae.getMessage().contains("not in default file system")); + } + } + } + } + + private static FileSystem fsFromJarOfClass(Class clazz) throws URISyntaxException, IOException { + String name = clazz.getName(); + final int lastDot = name.lastIndexOf('.'); + if (lastDot != -1) { + name = name.substring(lastDot + 1); + } + URI uri = clazz.getResource(name + ".class").toURI(); + if (uri.getScheme().equals("jar")) { + final String[] parts = uri.toString().split("!"); + if (parts.length == 2) { + return FileSystems.newFileSystem(URI.create(parts[0]), new HashMap<>()); + } + } + throw new AssertionError("Unable to create file system from " + clazz); + } + private static MemorySegment loadLibrary(Arena session) { SymbolLookup lib = SymbolLookup.libraryLookup(LIB_PATH, session); MemorySegment addr = lib.find("inc").get(); From 2678e4cd9424ca4e33ebb9693c84f9a86bf5504c Mon Sep 17 00:00:00 2001 From: Jatin Bhateja Date: Wed, 6 Dec 2023 09:58:06 +0000 Subject: [PATCH 231/250] 8319111: Mismatched MemorySegment heap access is not consistently intrinsified Reviewed-by: sviswanathan, psandoz, thartmann --- src/hotspot/share/classfile/vmIntrinsics.hpp | 4 + src/hotspot/share/opto/vectorIntrinsics.cpp | 209 ++++++++++-------- .../misc/X-ScopedMemoryAccess.java.template | 8 +- .../jdk/internal/vm/vector/VectorSupport.java | 8 +- .../jdk/incubator/vector/AbstractMask.java | 2 +- .../jdk/incubator/vector/ByteVector.java | 18 +- .../jdk/incubator/vector/DoubleVector.java | 10 +- .../jdk/incubator/vector/FloatVector.java | 10 +- .../jdk/incubator/vector/IntVector.java | 10 +- .../jdk/incubator/vector/LongVector.java | 10 +- .../jdk/incubator/vector/ShortVector.java | 18 +- .../jdk/incubator/vector/VectorMask.java | 2 +- .../incubator/vector/X-Vector.java.template | 26 +-- .../vector/TestLoadSegmentVarious.java | 26 +++ 14 files changed, 205 insertions(+), 156 deletions(-) diff --git a/src/hotspot/share/classfile/vmIntrinsics.hpp b/src/hotspot/share/classfile/vmIntrinsics.hpp index 66b8a43640728..8ed99d74c0b53 100644 --- a/src/hotspot/share/classfile/vmIntrinsics.hpp +++ b/src/hotspot/share/classfile/vmIntrinsics.hpp @@ -997,6 +997,7 @@ class methodHandle; "I" \ "Ljava/lang/Object;" \ "J" \ + "Z" \ "Ljava/lang/Object;" \ "J" \ "Ljdk/internal/vm/vector/VectorSupport$VectorSpecies;" \ @@ -1011,6 +1012,7 @@ class methodHandle; "I" \ "Ljava/lang/Object;" \ "J" \ + "Z" \ "Ljdk/internal/vm/vector/VectorSupport$VectorMask;" \ "I" \ "Ljava/lang/Object;" \ @@ -1026,6 +1028,7 @@ class methodHandle; "I" \ "Ljava/lang/Object;" \ "J" \ + "Z" \ "Ljdk/internal/vm/vector/VectorSupport$VectorPayload;" \ "Ljava/lang/Object;" \ "J" \ @@ -1040,6 +1043,7 @@ class methodHandle; "I" \ "Ljava/lang/Object;" \ "J" \ + "Z" \ "Ljdk/internal/vm/vector/VectorSupport$Vector;" \ "Ljdk/internal/vm/vector/VectorSupport$VectorMask;" \ "Ljava/lang/Object;" \ diff --git a/src/hotspot/share/opto/vectorIntrinsics.cpp b/src/hotspot/share/opto/vectorIntrinsics.cpp index bb046d8552717..c51ee30895e8d 100644 --- a/src/hotspot/share/opto/vectorIntrinsics.cpp +++ b/src/hotspot/share/opto/vectorIntrinsics.cpp @@ -928,7 +928,7 @@ bool LibraryCallKit::inline_vector_frombits_coerced() { return true; } -static bool elem_consistent_with_arr(BasicType elem_bt, const TypeAryPtr* arr_type) { +static bool elem_consistent_with_arr(BasicType elem_bt, const TypeAryPtr* arr_type, bool mismatched_ms) { assert(arr_type != nullptr, "unexpected"); BasicType arr_elem_bt = arr_type->elem()->array_element_basic_type(); if (elem_bt == arr_elem_bt) { @@ -940,41 +940,44 @@ static bool elem_consistent_with_arr(BasicType elem_bt, const TypeAryPtr* arr_ty // Load/store of byte vector from/to boolean[] is supported return true; } else { - return false; + return mismatched_ms; } } -// public static -// > -// VM load(Class vmClass, Class elementType, int length, -// Object base, long offset, // Unsafe addressing -// C container, long index, S s, // Arguments for default implementation -// LoadOperation defaultImpl) -// -// public static -// > -// void store(Class vectorClass, Class elementType, int length, -// Object base, long offset, // Unsafe addressing -// V v, -// C container, long index, // Arguments for default implementation -// StoreVectorOperation defaultImpl) - +// public static +// > +// VM load(Class vmClass, Class eClass, +// int length, +// Object base, long offset, // Unsafe addressing +// boolean fromSegment, +// C container, long index, S s, // Arguments for default implementation +// LoadOperation defaultImpl) { +// public static +// +// void store(Class vClass, Class eClass, +// int length, +// Object base, long offset, // Unsafe addressing +// boolean fromSegment, +// V v, C container, long index, // Arguments for default implementation +// StoreVectorOperation defaultImpl) { bool LibraryCallKit::inline_vector_mem_operation(bool is_store) { const TypeInstPtr* vector_klass = gvn().type(argument(0))->isa_instptr(); const TypeInstPtr* elem_klass = gvn().type(argument(1))->isa_instptr(); const TypeInt* vlen = gvn().type(argument(2))->isa_int(); + const TypeInt* from_ms = gvn().type(argument(6))->isa_int(); - if (vector_klass == nullptr || elem_klass == nullptr || vlen == nullptr || + if (vector_klass == nullptr || elem_klass == nullptr || vlen == nullptr || !from_ms->is_con() || vector_klass->const_oop() == nullptr || elem_klass->const_oop() == nullptr || !vlen->is_con()) { if (C->print_intrinsics()) { - tty->print_cr(" ** missing constant: vclass=%s etype=%s vlen=%s", + tty->print_cr(" ** missing constant: vclass=%s etype=%s vlen=%s from_ms=%s", NodeClassNames[argument(0)->Opcode()], NodeClassNames[argument(1)->Opcode()], - NodeClassNames[argument(2)->Opcode()]); + NodeClassNames[argument(2)->Opcode()], + NodeClassNames[argument(6)->Opcode()]); } return false; // not enough info for intrinsification } @@ -1033,11 +1036,10 @@ bool LibraryCallKit::inline_vector_mem_operation(bool is_store) { const bool needs_cpu_membar = is_mixed_access || is_mismatched_access; - // Now handle special case where load/store happens from/to byte array but element type is not byte. - bool using_byte_array = arr_type != nullptr && arr_type->elem()->array_element_basic_type() == T_BYTE && elem_bt != T_BYTE; - // Handle loading masks. - // If there is no consistency between array and vector element types, it must be special byte array case or loading masks - if (arr_type != nullptr && !using_byte_array && !is_mask && !elem_consistent_with_arr(elem_bt, arr_type)) { + bool mismatched_ms = from_ms->get_con() && !is_mask && arr_type != nullptr && arr_type->elem()->array_element_basic_type() != elem_bt; + BasicType mem_elem_bt = mismatched_ms ? arr_type->elem()->array_element_basic_type() : elem_bt; + int mem_num_elem = mismatched_ms ? (num_elem * type2aelembytes(elem_bt)) / type2aelembytes(mem_elem_bt) : num_elem; + if (arr_type != nullptr && !is_mask && !elem_consistent_with_arr(elem_bt, arr_type, mismatched_ms)) { if (C->print_intrinsics()) { tty->print_cr(" ** not supported: arity=%d op=%s vlen=%d etype=%s atype=%s ismask=no", is_store, is_store ? "store" : "load", @@ -1047,19 +1049,33 @@ bool LibraryCallKit::inline_vector_mem_operation(bool is_store) { set_sp(old_sp); return false; } - // Since we are using byte array, we need to double check that the byte operations are supported by backend. - if (using_byte_array) { - int byte_num_elem = num_elem * type2aelembytes(elem_bt); - if (!arch_supports_vector(is_store ? Op_StoreVector : Op_LoadVector, byte_num_elem, T_BYTE, VecMaskNotUsed) - || !arch_supports_vector(Op_VectorReinterpret, byte_num_elem, T_BYTE, VecMaskNotUsed)) { - if (C->print_intrinsics()) { - tty->print_cr(" ** not supported: arity=%d op=%s vlen=%d*8 etype=%s/8 ismask=no", - is_store, is_store ? "store" : "load", - byte_num_elem, type2name(elem_bt)); + + // In case of mismatched memory segment accesses, we need to double check that the source type memory operations are supported by backend. + if (mismatched_ms) { + if (is_store) { + if (!arch_supports_vector(Op_StoreVector, num_elem, elem_bt, VecMaskNotUsed) + || !arch_supports_vector(Op_VectorReinterpret, mem_num_elem, mem_elem_bt, VecMaskNotUsed)) { + if (C->print_intrinsics()) { + tty->print_cr(" ** not supported: arity=%d op=%s vlen=%d*8 etype=%s/8 ismask=no", + is_store, "store", + num_elem, type2name(elem_bt)); + } + set_map(old_map); + set_sp(old_sp); + return false; // not supported + } + } else { + if (!arch_supports_vector(Op_LoadVector, mem_num_elem, mem_elem_bt, VecMaskNotUsed) + || !arch_supports_vector(Op_VectorReinterpret, num_elem, elem_bt, VecMaskNotUsed)) { + if (C->print_intrinsics()) { + tty->print_cr(" ** not supported: arity=%d op=%s vlen=%d*8 etype=%s/8 ismask=no", + is_store, "load", + mem_num_elem, type2name(mem_elem_bt)); + } + set_map(old_map); + set_sp(old_sp); + return false; // not supported } - set_map(old_map); - set_sp(old_sp); - return false; // not supported } } if (is_mask) { @@ -1085,7 +1101,7 @@ bool LibraryCallKit::inline_vector_mem_operation(bool is_store) { } if (is_store) { - Node* val = unbox_vector(argument(6), vbox_type, elem_bt, num_elem); + Node* val = unbox_vector(argument(7), vbox_type, elem_bt, num_elem); if (val == nullptr) { set_map(old_map); set_sp(old_sp); @@ -1095,9 +1111,9 @@ bool LibraryCallKit::inline_vector_mem_operation(bool is_store) { // In case the store needs to happen to byte array, reinterpret the incoming vector to byte vector. int store_num_elem = num_elem; - if (using_byte_array) { - store_num_elem = num_elem * type2aelembytes(elem_bt); - const TypeVect* to_vect_type = TypeVect::make(T_BYTE, store_num_elem); + if (mismatched_ms) { + store_num_elem = mem_num_elem; + const TypeVect* to_vect_type = TypeVect::make(mem_elem_bt, store_num_elem); val = gvn().transform(new VectorReinterpretNode(val, val->bottom_type()->is_vect(), to_vect_type)); } if (is_mask) { @@ -1108,9 +1124,8 @@ bool LibraryCallKit::inline_vector_mem_operation(bool is_store) { } else { // When using byte array, we need to load as byte then reinterpret the value. Otherwise, do a simple vector load. Node* vload = nullptr; - if (using_byte_array) { - int load_num_elem = num_elem * type2aelembytes(elem_bt); - vload = gvn().transform(LoadVectorNode::make(0, control(), memory(addr), addr, addr_type, load_num_elem, T_BYTE)); + if (mismatched_ms) { + vload = gvn().transform(LoadVectorNode::make(0, control(), memory(addr), addr, addr_type, mem_num_elem, mem_elem_bt)); const TypeVect* to_vect_type = TypeVect::make(elem_bt, num_elem); vload = gvn().transform(new VectorReinterpretNode(vload, vload->bottom_type()->is_vect(), to_vect_type)); } else { @@ -1136,43 +1151,47 @@ bool LibraryCallKit::inline_vector_mem_operation(bool is_store) { return true; } -// public static -// , -// E, -// S extends VectorSpecies, -// M extends VectorMask> -// V loadMasked(Class vectorClass, Class maskClass, Class elementType, -// int length, Object base, long offset, M m, int offsetInRange, -// C container, long index, S s, // Arguments for default implementation -// LoadVectorMaskedOperation defaultImpl) { -// -// public static -// , -// M extends VectorMask, -// E> -// void storeMasked(Class vectorClass, Class maskClass, Class elementType, -// int length, Object base, long offset, -// V v, M m, -// C container, long index, // Arguments for default implementation -// StoreVectorMaskedOperation defaultImpl) { -// +// public static +// , +// E, +// S extends VectorSpecies, +// M extends VectorMask> +// V loadMasked(Class vClass, Class mClass, Class eClass, +// int length, Object base, long offset, // Unsafe addressing +// boolean fromSegment, +// M m, int offsetInRange, +// C container, long index, S s, // Arguments for default implementation +// LoadVectorMaskedOperation defaultImpl) { +// public static +// , +// M extends VectorMask, +// E> +// void storeMasked(Class vClass, Class mClass, Class eClass, +// int length, +// Object base, long offset, // Unsafe addressing +// boolean fromSegment, +// V v, M m, C container, long index, // Arguments for default implementation +// StoreVectorMaskedOperation defaultImpl) { + bool LibraryCallKit::inline_vector_mem_masked_operation(bool is_store) { const TypeInstPtr* vector_klass = gvn().type(argument(0))->isa_instptr(); const TypeInstPtr* mask_klass = gvn().type(argument(1))->isa_instptr(); const TypeInstPtr* elem_klass = gvn().type(argument(2))->isa_instptr(); const TypeInt* vlen = gvn().type(argument(3))->isa_int(); + const TypeInt* from_ms = gvn().type(argument(7))->isa_int(); if (vector_klass == nullptr || mask_klass == nullptr || elem_klass == nullptr || vlen == nullptr || - vector_klass->const_oop() == nullptr || mask_klass->const_oop() == nullptr || - elem_klass->const_oop() == nullptr || !vlen->is_con()) { + vector_klass->const_oop() == nullptr || mask_klass->const_oop() == nullptr || from_ms == nullptr || + elem_klass->const_oop() == nullptr || !vlen->is_con() || !from_ms->is_con()) { if (C->print_intrinsics()) { - tty->print_cr(" ** missing constant: vclass=%s mclass=%s etype=%s vlen=%s", + tty->print_cr(" ** missing constant: vclass=%s mclass=%s etype=%s vlen=%s from_ms=%s", NodeClassNames[argument(0)->Opcode()], NodeClassNames[argument(1)->Opcode()], NodeClassNames[argument(2)->Opcode()], - NodeClassNames[argument(3)->Opcode()]); + NodeClassNames[argument(3)->Opcode()], + NodeClassNames[argument(7)->Opcode()]); } return false; // not enough info for intrinsification } @@ -1212,10 +1231,10 @@ bool LibraryCallKit::inline_vector_mem_masked_operation(bool is_store) { const TypePtr *addr_type = gvn().type(addr)->isa_ptr(); const TypeAryPtr* arr_type = addr_type->isa_aryptr(); - // Now handle special case where load/store happens from/to byte array but element type is not byte. - bool using_byte_array = arr_type != nullptr && arr_type->elem()->array_element_basic_type() == T_BYTE && elem_bt != T_BYTE; + bool mismatched_ms = from_ms->get_con() && arr_type != nullptr && arr_type->elem()->array_element_basic_type() != elem_bt; + BIG_ENDIAN_ONLY(if (mismatched_ms) return false;) // If there is no consistency between array and vector element types, it must be special byte array case - if (arr_type != nullptr && !using_byte_array && !elem_consistent_with_arr(elem_bt, arr_type)) { + if (arr_type != nullptr && !elem_consistent_with_arr(elem_bt, arr_type, mismatched_ms)) { if (C->print_intrinsics()) { tty->print_cr(" ** not supported: arity=%d op=%s vlen=%d etype=%s atype=%s", is_store, is_store ? "storeMasked" : "loadMasked", @@ -1226,8 +1245,8 @@ bool LibraryCallKit::inline_vector_mem_masked_operation(bool is_store) { return false; } - int mem_num_elem = using_byte_array ? num_elem * type2aelembytes(elem_bt) : num_elem; - BasicType mem_elem_bt = using_byte_array ? T_BYTE : elem_bt; + int mem_num_elem = mismatched_ms ? num_elem * type2aelembytes(elem_bt) : num_elem; + BasicType mem_elem_bt = mismatched_ms ? T_BYTE : elem_bt; bool supports_predicate = arch_supports_vector(is_store ? Op_StoreVectorMasked : Op_LoadVectorMasked, mem_num_elem, mem_elem_bt, VecMaskUseLoad); @@ -1240,7 +1259,7 @@ bool LibraryCallKit::inline_vector_mem_masked_operation(bool is_store) { needs_predicate = true; } else { // Masked vector load with IOOBE always uses the predicated load. - const TypeInt* offset_in_range = gvn().type(argument(8))->isa_int(); + const TypeInt* offset_in_range = gvn().type(argument(9))->isa_int(); if (!offset_in_range->is_con()) { if (C->print_intrinsics()) { tty->print_cr(" ** missing constant: offsetInRange=%s", @@ -1255,9 +1274,9 @@ bool LibraryCallKit::inline_vector_mem_masked_operation(bool is_store) { if (needs_predicate) { if (C->print_intrinsics()) { - tty->print_cr(" ** not supported: op=%s vlen=%d etype=%s using_byte_array=%d", + tty->print_cr(" ** not supported: op=%s vlen=%d etype=%s mismatched_ms=%d", is_store ? "storeMasked" : "loadMasked", - num_elem, type2name(elem_bt), using_byte_array ? 1 : 0); + num_elem, type2name(elem_bt), mismatched_ms ? 1 : 0); } set_map(old_map); set_sp(old_sp); @@ -1270,8 +1289,8 @@ bool LibraryCallKit::inline_vector_mem_masked_operation(bool is_store) { if (!supports_predicate && (!arch_supports_vector(Op_LoadVector, mem_num_elem, mem_elem_bt, VecMaskNotUsed) || !arch_supports_vector(Op_VectorBlend, mem_num_elem, mem_elem_bt, VecMaskUseLoad))) { if (C->print_intrinsics()) { - tty->print_cr(" ** not supported: op=loadMasked vlen=%d etype=%s using_byte_array=%d", - num_elem, type2name(elem_bt), using_byte_array ? 1 : 0); + tty->print_cr(" ** not supported: op=loadMasked vlen=%d etype=%s mismatched_ms=%d", + num_elem, type2name(elem_bt), mismatched_ms ? 1 : 0); } set_map(old_map); set_sp(old_sp); @@ -1280,10 +1299,10 @@ bool LibraryCallKit::inline_vector_mem_masked_operation(bool is_store) { // Since we are using byte array, we need to double check that the vector reinterpret operation // with byte type is supported by backend. - if (using_byte_array) { + if (mismatched_ms) { if (!arch_supports_vector(Op_VectorReinterpret, mem_num_elem, T_BYTE, VecMaskNotUsed)) { if (C->print_intrinsics()) { - tty->print_cr(" ** not supported: arity=%d op=%s vlen=%d etype=%s using_byte_array=1", + tty->print_cr(" ** not supported: arity=%d op=%s vlen=%d etype=%s mismatched_ms=1", is_store, is_store ? "storeMasked" : "loadMasked", num_elem, type2name(elem_bt)); } @@ -1318,12 +1337,12 @@ bool LibraryCallKit::inline_vector_mem_masked_operation(bool is_store) { const TypeInstPtr* vbox_type = TypeInstPtr::make_exact(TypePtr::NotNull, vbox_klass); const TypeInstPtr* mbox_type = TypeInstPtr::make_exact(TypePtr::NotNull, mbox_klass); - Node* mask = unbox_vector(is_store ? argument(8) : argument(7), mbox_type, elem_bt, num_elem); + Node* mask = unbox_vector(is_store ? argument(9) : argument(8), mbox_type, elem_bt, num_elem); if (mask == nullptr) { if (C->print_intrinsics()) { tty->print_cr(" ** unbox failed mask=%s", - is_store ? NodeClassNames[argument(8)->Opcode()] - : NodeClassNames[argument(7)->Opcode()]); + is_store ? NodeClassNames[argument(9)->Opcode()] + : NodeClassNames[argument(8)->Opcode()]); } set_map(old_map); set_sp(old_sp); @@ -1331,11 +1350,11 @@ bool LibraryCallKit::inline_vector_mem_masked_operation(bool is_store) { } if (is_store) { - Node* val = unbox_vector(argument(7), vbox_type, elem_bt, num_elem); + Node* val = unbox_vector(argument(8), vbox_type, elem_bt, num_elem); if (val == nullptr) { if (C->print_intrinsics()) { tty->print_cr(" ** unbox failed vector=%s", - NodeClassNames[argument(7)->Opcode()]); + NodeClassNames[argument(8)->Opcode()]); } set_map(old_map); set_sp(old_sp); @@ -1343,7 +1362,7 @@ bool LibraryCallKit::inline_vector_mem_masked_operation(bool is_store) { } set_all_memory(reset_memory()); - if (using_byte_array) { + if (mismatched_ms) { // Reinterpret the incoming vector to byte vector. const TypeVect* to_vect_type = TypeVect::make(mem_elem_bt, mem_num_elem); val = gvn().transform(new VectorReinterpretNode(val, val->bottom_type()->is_vect(), to_vect_type)); @@ -1357,7 +1376,7 @@ bool LibraryCallKit::inline_vector_mem_masked_operation(bool is_store) { } else { Node* vload = nullptr; - if (using_byte_array) { + if (mismatched_ms) { // Reinterpret the vector mask to byte type. const TypeVect* from_mask_type = TypeVect::makemask(elem_bt, num_elem); const TypeVect* to_mask_type = TypeVect::makemask(mem_elem_bt, mem_num_elem); @@ -1376,7 +1395,7 @@ bool LibraryCallKit::inline_vector_mem_masked_operation(bool is_store) { vload = gvn().transform(new VectorBlendNode(zero, vload, mask)); } - if (using_byte_array) { + if (mismatched_ms) { const TypeVect* to_vect_type = TypeVect::make(elem_bt, num_elem); vload = gvn().transform(new VectorReinterpretNode(vload, vload->bottom_type()->is_vect(), to_vect_type)); } @@ -1525,7 +1544,7 @@ bool LibraryCallKit::inline_vector_gather_scatter(bool is_scatter) { const TypeAryPtr* arr_type = addr_type->isa_aryptr(); // The array must be consistent with vector type - if (arr_type == nullptr || (arr_type != nullptr && !elem_consistent_with_arr(elem_bt, arr_type))) { + if (arr_type == nullptr || (arr_type != nullptr && !elem_consistent_with_arr(elem_bt, arr_type, false))) { if (C->print_intrinsics()) { tty->print_cr(" ** not supported: arity=%d op=%s vlen=%d etype=%s atype=%s ismask=no", is_scatter, is_scatter ? "scatter" : "gather", diff --git a/src/java.base/share/classes/jdk/internal/misc/X-ScopedMemoryAccess.java.template b/src/java.base/share/classes/jdk/internal/misc/X-ScopedMemoryAccess.java.template index 0147b3bacd86e..e3f8787e9e6f4 100644 --- a/src/java.base/share/classes/jdk/internal/misc/X-ScopedMemoryAccess.java.template +++ b/src/java.base/share/classes/jdk/internal/misc/X-ScopedMemoryAccess.java.template @@ -355,7 +355,7 @@ public class ScopedMemoryAccess { session.checkValidStateRaw(); return VectorSupport.load(vmClass, e, length, - msp.unsafeGetBase(), msp.unsafeGetOffset() + offset, + msp.unsafeGetBase(), msp.unsafeGetOffset() + offset, true, msp, offset, s, defaultImpl); } finally { @@ -397,7 +397,7 @@ public class ScopedMemoryAccess { session.checkValidStateRaw(); return VectorSupport.loadMasked(vmClass, maskClass, e, length, - msp.unsafeGetBase(), msp.unsafeGetOffset() + offset, m, offsetInRange, + msp.unsafeGetBase(), msp.unsafeGetOffset() + offset, true, m, offsetInRange, msp, offset, s, defaultImpl); } finally { @@ -438,7 +438,7 @@ public class ScopedMemoryAccess { session.checkValidStateRaw(); VectorSupport.store(vmClass, e, length, - msp.unsafeGetBase(), msp.unsafeGetOffset() + offset, + msp.unsafeGetBase(), msp.unsafeGetOffset() + offset, true, v, msp, offset, defaultImpl); @@ -480,7 +480,7 @@ public class ScopedMemoryAccess { session.checkValidStateRaw(); VectorSupport.storeMasked(vmClass, maskClass, e, length, - msp.unsafeGetBase(), msp.unsafeGetOffset() + offset, + msp.unsafeGetBase(), msp.unsafeGetOffset() + offset, true, v, m, msp, offset, defaultImpl); diff --git a/src/java.base/share/classes/jdk/internal/vm/vector/VectorSupport.java b/src/java.base/share/classes/jdk/internal/vm/vector/VectorSupport.java index 21415ee0484d2..ccfa006b102c2 100644 --- a/src/java.base/share/classes/jdk/internal/vm/vector/VectorSupport.java +++ b/src/java.base/share/classes/jdk/internal/vm/vector/VectorSupport.java @@ -421,7 +421,7 @@ public interface LoadOperation> VM load(Class vmClass, Class eClass, int length, - Object base, long offset, + Object base, long offset, boolean fromSegment, C container, long index, S s, LoadOperation defaultImpl) { assert isNonCapturingLambda(defaultImpl) : defaultImpl; @@ -445,7 +445,7 @@ public interface LoadVectorMaskedOperation, M extends VectorMask> V loadMasked(Class vClass, Class mClass, Class eClass, - int length, Object base, long offset, + int length, Object base, long offset, boolean fromSegment, M m, int offsetInRange, C container, long index, S s, LoadVectorMaskedOperation defaultImpl) { @@ -494,7 +494,7 @@ public interface StoreVectorOperation void store(Class vClass, Class eClass, int length, - Object base, long offset, + Object base, long offset, boolean fromSegment, V v, C container, long index, StoreVectorOperation defaultImpl) { assert isNonCapturingLambda(defaultImpl) : defaultImpl; @@ -515,7 +515,7 @@ public interface StoreVectorMaskedOperation void storeMasked(Class vClass, Class mClass, Class eClass, int length, - Object base, long offset, + Object base, long offset, boolean fromSegment, V v, M m, C container, long index, StoreVectorMaskedOperation defaultImpl) { assert isNonCapturingLambda(defaultImpl) : defaultImpl; diff --git a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/AbstractMask.java b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/AbstractMask.java index 7adbd3a18524b..30297b24db06c 100644 --- a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/AbstractMask.java +++ b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/AbstractMask.java @@ -74,7 +74,7 @@ public void intoArray(boolean[] bits, int i) { i = VectorIntrinsics.checkFromIndexSize(i, laneCount, bits.length); VectorSupport.store( vsp.maskType(), vsp.elementType(), laneCount, - bits, (long) i + Unsafe.ARRAY_BOOLEAN_BASE_OFFSET, + bits, (long) i + Unsafe.ARRAY_BOOLEAN_BASE_OFFSET, false, this, bits, i, (c, idx, s) -> System.arraycopy(s.getBits(), 0, c, (int) idx, s.length())); diff --git a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/ByteVector.java b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/ByteVector.java index 74b9461a5cb3a..ecd162bbdb8d2 100644 --- a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/ByteVector.java +++ b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/ByteVector.java @@ -3373,7 +3373,7 @@ void intoArray(byte[] a, int offset) { ByteSpecies vsp = vspecies(); VectorSupport.store( vsp.vectorType(), vsp.elementType(), vsp.laneCount(), - a, arrayAddress(a, offset), + a, arrayAddress(a, offset), false, this, a, offset, (arr, off, v) @@ -3526,7 +3526,7 @@ void intoBooleanArray(boolean[] a, int offset) { ByteVector normalized = this.and((byte) 1); VectorSupport.store( vsp.vectorType(), vsp.elementType(), vsp.laneCount(), - a, booleanArrayAddress(a, offset), + a, booleanArrayAddress(a, offset), false, normalized, a, offset, (arr, off, v) @@ -3737,7 +3737,7 @@ ByteVector fromArray0Template(byte[] a, int offset) { ByteSpecies vsp = vspecies(); return VectorSupport.load( vsp.vectorType(), vsp.elementType(), vsp.laneCount(), - a, arrayAddress(a, offset), + a, arrayAddress(a, offset), false, a, offset, vsp, (arr, off, s) -> s.ldOp(arr, (int) off, (arr_, off_, i) -> arr_[off_ + i])); @@ -3754,7 +3754,7 @@ ByteVector fromArray0Template(Class maskClass, byte[] a, int offset, M m, int ByteSpecies vsp = vspecies(); return VectorSupport.loadMasked( vsp.vectorType(), maskClass, vsp.elementType(), vsp.laneCount(), - a, arrayAddress(a, offset), m, offsetInRange, + a, arrayAddress(a, offset), false, m, offsetInRange, a, offset, vsp, (arr, off, s, vm) -> s.ldOp(arr, (int) off, vm, (arr_, off_, i) -> arr_[off_ + i])); @@ -3771,7 +3771,7 @@ ByteVector fromBooleanArray0Template(boolean[] a, int offset) { ByteSpecies vsp = vspecies(); return VectorSupport.load( vsp.vectorType(), vsp.elementType(), vsp.laneCount(), - a, booleanArrayAddress(a, offset), + a, booleanArrayAddress(a, offset), false, a, offset, vsp, (arr, off, s) -> s.ldOp(arr, (int) off, (arr_, off_, i) -> (byte) (arr_[off_ + i] ? 1 : 0))); @@ -3788,7 +3788,7 @@ ByteVector fromBooleanArray0Template(Class maskClass, boolean[] a, int offset ByteSpecies vsp = vspecies(); return VectorSupport.loadMasked( vsp.vectorType(), maskClass, vsp.elementType(), vsp.laneCount(), - a, booleanArrayAddress(a, offset), m, offsetInRange, + a, booleanArrayAddress(a, offset), false, m, offsetInRange, a, offset, vsp, (arr, off, s, vm) -> s.ldOp(arr, (int) off, vm, (arr_, off_, i) -> (byte) (arr_[off_ + i] ? 1 : 0))); @@ -3836,7 +3836,7 @@ void intoArray0Template(byte[] a, int offset) { ByteSpecies vsp = vspecies(); VectorSupport.store( vsp.vectorType(), vsp.elementType(), vsp.laneCount(), - a, arrayAddress(a, offset), + a, arrayAddress(a, offset), false, this, a, offset, (arr, off, v) -> v.stOp(arr, (int) off, @@ -3853,7 +3853,7 @@ void intoArray0Template(Class maskClass, byte[] a, int offset, M m) { ByteSpecies vsp = vspecies(); VectorSupport.storeMasked( vsp.vectorType(), maskClass, vsp.elementType(), vsp.laneCount(), - a, arrayAddress(a, offset), + a, arrayAddress(a, offset), false, this, m, a, offset, (arr, off, v, vm) -> v.stOp(arr, (int) off, vm, @@ -3872,7 +3872,7 @@ void intoBooleanArray0Template(Class maskClass, boolean[] a, int offset, M m) ByteVector normalized = this.and((byte) 1); VectorSupport.storeMasked( vsp.vectorType(), maskClass, vsp.elementType(), vsp.laneCount(), - a, booleanArrayAddress(a, offset), + a, booleanArrayAddress(a, offset), false, normalized, m, a, offset, (arr, off, v, vm) -> v.stOp(arr, (int) off, vm, diff --git a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/DoubleVector.java b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/DoubleVector.java index f6e9b7b01ea3e..9b3d683520eb8 100644 --- a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/DoubleVector.java +++ b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/DoubleVector.java @@ -3061,7 +3061,7 @@ void intoArray(double[] a, int offset) { DoubleSpecies vsp = vspecies(); VectorSupport.store( vsp.vectorType(), vsp.elementType(), vsp.laneCount(), - a, arrayAddress(a, offset), + a, arrayAddress(a, offset), false, this, a, offset, (arr, off, v) @@ -3294,7 +3294,7 @@ DoubleVector fromArray0Template(double[] a, int offset) { DoubleSpecies vsp = vspecies(); return VectorSupport.load( vsp.vectorType(), vsp.elementType(), vsp.laneCount(), - a, arrayAddress(a, offset), + a, arrayAddress(a, offset), false, a, offset, vsp, (arr, off, s) -> s.ldOp(arr, (int) off, (arr_, off_, i) -> arr_[off_ + i])); @@ -3311,7 +3311,7 @@ DoubleVector fromArray0Template(Class maskClass, double[] a, int offset, M m, DoubleSpecies vsp = vspecies(); return VectorSupport.loadMasked( vsp.vectorType(), maskClass, vsp.elementType(), vsp.laneCount(), - a, arrayAddress(a, offset), m, offsetInRange, + a, arrayAddress(a, offset), false, m, offsetInRange, a, offset, vsp, (arr, off, s, vm) -> s.ldOp(arr, (int) off, vm, (arr_, off_, i) -> arr_[off_ + i])); @@ -3413,7 +3413,7 @@ void intoArray0Template(double[] a, int offset) { DoubleSpecies vsp = vspecies(); VectorSupport.store( vsp.vectorType(), vsp.elementType(), vsp.laneCount(), - a, arrayAddress(a, offset), + a, arrayAddress(a, offset), false, this, a, offset, (arr, off, v) -> v.stOp(arr, (int) off, @@ -3430,7 +3430,7 @@ void intoArray0Template(Class maskClass, double[] a, int offset, M m) { DoubleSpecies vsp = vspecies(); VectorSupport.storeMasked( vsp.vectorType(), maskClass, vsp.elementType(), vsp.laneCount(), - a, arrayAddress(a, offset), + a, arrayAddress(a, offset), false, this, m, a, offset, (arr, off, v, vm) -> v.stOp(arr, (int) off, vm, diff --git a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/FloatVector.java b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/FloatVector.java index 7265243b6b93f..f9bb4a9c6300a 100644 --- a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/FloatVector.java +++ b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/FloatVector.java @@ -3067,7 +3067,7 @@ void intoArray(float[] a, int offset) { FloatSpecies vsp = vspecies(); VectorSupport.store( vsp.vectorType(), vsp.elementType(), vsp.laneCount(), - a, arrayAddress(a, offset), + a, arrayAddress(a, offset), false, this, a, offset, (arr, off, v) @@ -3281,7 +3281,7 @@ FloatVector fromArray0Template(float[] a, int offset) { FloatSpecies vsp = vspecies(); return VectorSupport.load( vsp.vectorType(), vsp.elementType(), vsp.laneCount(), - a, arrayAddress(a, offset), + a, arrayAddress(a, offset), false, a, offset, vsp, (arr, off, s) -> s.ldOp(arr, (int) off, (arr_, off_, i) -> arr_[off_ + i])); @@ -3298,7 +3298,7 @@ FloatVector fromArray0Template(Class maskClass, float[] a, int offset, M m, i FloatSpecies vsp = vspecies(); return VectorSupport.loadMasked( vsp.vectorType(), maskClass, vsp.elementType(), vsp.laneCount(), - a, arrayAddress(a, offset), m, offsetInRange, + a, arrayAddress(a, offset), false, m, offsetInRange, a, offset, vsp, (arr, off, s, vm) -> s.ldOp(arr, (int) off, vm, (arr_, off_, i) -> arr_[off_ + i])); @@ -3382,7 +3382,7 @@ void intoArray0Template(float[] a, int offset) { FloatSpecies vsp = vspecies(); VectorSupport.store( vsp.vectorType(), vsp.elementType(), vsp.laneCount(), - a, arrayAddress(a, offset), + a, arrayAddress(a, offset), false, this, a, offset, (arr, off, v) -> v.stOp(arr, (int) off, @@ -3399,7 +3399,7 @@ void intoArray0Template(Class maskClass, float[] a, int offset, M m) { FloatSpecies vsp = vspecies(); VectorSupport.storeMasked( vsp.vectorType(), maskClass, vsp.elementType(), vsp.laneCount(), - a, arrayAddress(a, offset), + a, arrayAddress(a, offset), false, this, m, a, offset, (arr, off, v, vm) -> v.stOp(arr, (int) off, vm, diff --git a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/IntVector.java b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/IntVector.java index f9c913f823caf..b6e9cba081617 100644 --- a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/IntVector.java +++ b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/IntVector.java @@ -3223,7 +3223,7 @@ void intoArray(int[] a, int offset) { IntSpecies vsp = vspecies(); VectorSupport.store( vsp.vectorType(), vsp.elementType(), vsp.laneCount(), - a, arrayAddress(a, offset), + a, arrayAddress(a, offset), false, this, a, offset, (arr, off, v) @@ -3437,7 +3437,7 @@ IntVector fromArray0Template(int[] a, int offset) { IntSpecies vsp = vspecies(); return VectorSupport.load( vsp.vectorType(), vsp.elementType(), vsp.laneCount(), - a, arrayAddress(a, offset), + a, arrayAddress(a, offset), false, a, offset, vsp, (arr, off, s) -> s.ldOp(arr, (int) off, (arr_, off_, i) -> arr_[off_ + i])); @@ -3454,7 +3454,7 @@ IntVector fromArray0Template(Class maskClass, int[] a, int offset, M m, int o IntSpecies vsp = vspecies(); return VectorSupport.loadMasked( vsp.vectorType(), maskClass, vsp.elementType(), vsp.laneCount(), - a, arrayAddress(a, offset), m, offsetInRange, + a, arrayAddress(a, offset), false, m, offsetInRange, a, offset, vsp, (arr, off, s, vm) -> s.ldOp(arr, (int) off, vm, (arr_, off_, i) -> arr_[off_ + i])); @@ -3538,7 +3538,7 @@ void intoArray0Template(int[] a, int offset) { IntSpecies vsp = vspecies(); VectorSupport.store( vsp.vectorType(), vsp.elementType(), vsp.laneCount(), - a, arrayAddress(a, offset), + a, arrayAddress(a, offset), false, this, a, offset, (arr, off, v) -> v.stOp(arr, (int) off, @@ -3555,7 +3555,7 @@ void intoArray0Template(Class maskClass, int[] a, int offset, M m) { IntSpecies vsp = vspecies(); VectorSupport.storeMasked( vsp.vectorType(), maskClass, vsp.elementType(), vsp.laneCount(), - a, arrayAddress(a, offset), + a, arrayAddress(a, offset), false, this, m, a, offset, (arr, off, v, vm) -> v.stOp(arr, (int) off, vm, diff --git a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/LongVector.java b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/LongVector.java index 9339dc8616fcd..98cf154e4a7e1 100644 --- a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/LongVector.java +++ b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/LongVector.java @@ -3102,7 +3102,7 @@ void intoArray(long[] a, int offset) { LongSpecies vsp = vspecies(); VectorSupport.store( vsp.vectorType(), vsp.elementType(), vsp.laneCount(), - a, arrayAddress(a, offset), + a, arrayAddress(a, offset), false, this, a, offset, (arr, off, v) @@ -3335,7 +3335,7 @@ LongVector fromArray0Template(long[] a, int offset) { LongSpecies vsp = vspecies(); return VectorSupport.load( vsp.vectorType(), vsp.elementType(), vsp.laneCount(), - a, arrayAddress(a, offset), + a, arrayAddress(a, offset), false, a, offset, vsp, (arr, off, s) -> s.ldOp(arr, (int) off, (arr_, off_, i) -> arr_[off_ + i])); @@ -3352,7 +3352,7 @@ LongVector fromArray0Template(Class maskClass, long[] a, int offset, M m, int LongSpecies vsp = vspecies(); return VectorSupport.loadMasked( vsp.vectorType(), maskClass, vsp.elementType(), vsp.laneCount(), - a, arrayAddress(a, offset), m, offsetInRange, + a, arrayAddress(a, offset), false, m, offsetInRange, a, offset, vsp, (arr, off, s, vm) -> s.ldOp(arr, (int) off, vm, (arr_, off_, i) -> arr_[off_ + i])); @@ -3454,7 +3454,7 @@ void intoArray0Template(long[] a, int offset) { LongSpecies vsp = vspecies(); VectorSupport.store( vsp.vectorType(), vsp.elementType(), vsp.laneCount(), - a, arrayAddress(a, offset), + a, arrayAddress(a, offset), false, this, a, offset, (arr, off, v) -> v.stOp(arr, (int) off, @@ -3471,7 +3471,7 @@ void intoArray0Template(Class maskClass, long[] a, int offset, M m) { LongSpecies vsp = vspecies(); VectorSupport.storeMasked( vsp.vectorType(), maskClass, vsp.elementType(), vsp.laneCount(), - a, arrayAddress(a, offset), + a, arrayAddress(a, offset), false, this, m, a, offset, (arr, off, v, vm) -> v.stOp(arr, (int) off, vm, diff --git a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/ShortVector.java b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/ShortVector.java index cfe91f6e14e65..0a0f359a40bd4 100644 --- a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/ShortVector.java +++ b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/ShortVector.java @@ -3372,7 +3372,7 @@ void intoArray(short[] a, int offset) { ShortSpecies vsp = vspecies(); VectorSupport.store( vsp.vectorType(), vsp.elementType(), vsp.laneCount(), - a, arrayAddress(a, offset), + a, arrayAddress(a, offset), false, this, a, offset, (arr, off, v) @@ -3520,7 +3520,7 @@ void intoCharArray(char[] a, int offset) { ShortSpecies vsp = vspecies(); VectorSupport.store( vsp.vectorType(), vsp.elementType(), vsp.laneCount(), - a, charArrayAddress(a, offset), + a, charArrayAddress(a, offset), false, this, a, offset, (arr, off, v) @@ -3723,7 +3723,7 @@ ShortVector fromArray0Template(short[] a, int offset) { ShortSpecies vsp = vspecies(); return VectorSupport.load( vsp.vectorType(), vsp.elementType(), vsp.laneCount(), - a, arrayAddress(a, offset), + a, arrayAddress(a, offset), false, a, offset, vsp, (arr, off, s) -> s.ldOp(arr, (int) off, (arr_, off_, i) -> arr_[off_ + i])); @@ -3740,7 +3740,7 @@ ShortVector fromArray0Template(Class maskClass, short[] a, int offset, M m, i ShortSpecies vsp = vspecies(); return VectorSupport.loadMasked( vsp.vectorType(), maskClass, vsp.elementType(), vsp.laneCount(), - a, arrayAddress(a, offset), m, offsetInRange, + a, arrayAddress(a, offset), false, m, offsetInRange, a, offset, vsp, (arr, off, s, vm) -> s.ldOp(arr, (int) off, vm, (arr_, off_, i) -> arr_[off_ + i])); @@ -3756,7 +3756,7 @@ ShortVector fromCharArray0Template(char[] a, int offset) { ShortSpecies vsp = vspecies(); return VectorSupport.load( vsp.vectorType(), vsp.elementType(), vsp.laneCount(), - a, charArrayAddress(a, offset), + a, charArrayAddress(a, offset), false, a, offset, vsp, (arr, off, s) -> s.ldOp(arr, (int) off, (arr_, off_, i) -> (short) arr_[off_ + i])); @@ -3773,7 +3773,7 @@ ShortVector fromCharArray0Template(Class maskClass, char[] a, int offset, M m ShortSpecies vsp = vspecies(); return VectorSupport.loadMasked( vsp.vectorType(), maskClass, vsp.elementType(), vsp.laneCount(), - a, charArrayAddress(a, offset), m, offsetInRange, + a, charArrayAddress(a, offset), false, m, offsetInRange, a, offset, vsp, (arr, off, s, vm) -> s.ldOp(arr, (int) off, vm, (arr_, off_, i) -> (short) arr_[off_ + i])); @@ -3822,7 +3822,7 @@ void intoArray0Template(short[] a, int offset) { ShortSpecies vsp = vspecies(); VectorSupport.store( vsp.vectorType(), vsp.elementType(), vsp.laneCount(), - a, arrayAddress(a, offset), + a, arrayAddress(a, offset), false, this, a, offset, (arr, off, v) -> v.stOp(arr, (int) off, @@ -3839,7 +3839,7 @@ void intoArray0Template(Class maskClass, short[] a, int offset, M m) { ShortSpecies vsp = vspecies(); VectorSupport.storeMasked( vsp.vectorType(), maskClass, vsp.elementType(), vsp.laneCount(), - a, arrayAddress(a, offset), + a, arrayAddress(a, offset), false, this, m, a, offset, (arr, off, v, vm) -> v.stOp(arr, (int) off, vm, @@ -3889,7 +3889,7 @@ void intoCharArray0Template(Class maskClass, char[] a, int offset, M m) { ShortSpecies vsp = vspecies(); VectorSupport.storeMasked( vsp.vectorType(), maskClass, vsp.elementType(), vsp.laneCount(), - a, charArrayAddress(a, offset), + a, charArrayAddress(a, offset), false, this, m, a, offset, (arr, off, v, vm) -> v.stOp(arr, (int) off, vm, diff --git a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/VectorMask.java b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/VectorMask.java index 40d20835534e6..f5ce894b13fc0 100644 --- a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/VectorMask.java +++ b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/VectorMask.java @@ -207,7 +207,7 @@ public static VectorMask fromArray(VectorSpecies species, boolean[] bi offset = VectorIntrinsics.checkFromIndexSize(offset, laneCount, bits.length); return VectorSupport.load( vsp.maskType(), vsp.elementType(), laneCount, - bits, (long) offset + Unsafe.ARRAY_BOOLEAN_BASE_OFFSET, + bits, (long) offset + Unsafe.ARRAY_BOOLEAN_BASE_OFFSET, false, bits, offset, vsp, (c, idx, s) -> s.opm(n -> c[((int )idx) + n])); diff --git a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/X-Vector.java.template b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/X-Vector.java.template index 48fc5628f2523..31441207a9e8c 100644 --- a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/X-Vector.java.template +++ b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/X-Vector.java.template @@ -4178,7 +4178,7 @@ public abstract class $abstractvectortype$ extends AbstractVector<$Boxtype$> { $Type$Species vsp = vspecies(); VectorSupport.store( vsp.vectorType(), vsp.elementType(), vsp.laneCount(), - a, arrayAddress(a, offset), + a, arrayAddress(a, offset), false, this, a, offset, (arr, off, v) @@ -4397,7 +4397,7 @@ public abstract class $abstractvectortype$ extends AbstractVector<$Boxtype$> { $Type$Species vsp = vspecies(); VectorSupport.store( vsp.vectorType(), vsp.elementType(), vsp.laneCount(), - a, charArrayAddress(a, offset), + a, charArrayAddress(a, offset), false, this, a, offset, (arr, off, v) @@ -4558,7 +4558,7 @@ public abstract class $abstractvectortype$ extends AbstractVector<$Boxtype$> { ByteVector normalized = this.and((byte) 1); VectorSupport.store( vsp.vectorType(), vsp.elementType(), vsp.laneCount(), - a, booleanArrayAddress(a, offset), + a, booleanArrayAddress(a, offset), false, normalized, a, offset, (arr, off, v) @@ -4770,7 +4770,7 @@ public abstract class $abstractvectortype$ extends AbstractVector<$Boxtype$> { $Type$Species vsp = vspecies(); return VectorSupport.load( vsp.vectorType(), vsp.elementType(), vsp.laneCount(), - a, arrayAddress(a, offset), + a, arrayAddress(a, offset), false, a, offset, vsp, (arr, off, s) -> s.ldOp(arr, (int) off, (arr_, off_, i) -> arr_[off_ + i])); @@ -4787,7 +4787,7 @@ public abstract class $abstractvectortype$ extends AbstractVector<$Boxtype$> { $Type$Species vsp = vspecies(); return VectorSupport.loadMasked( vsp.vectorType(), maskClass, vsp.elementType(), vsp.laneCount(), - a, arrayAddress(a, offset), m, offsetInRange, + a, arrayAddress(a, offset), false, m, offsetInRange, a, offset, vsp, (arr, off, s, vm) -> s.ldOp(arr, (int) off, vm, (arr_, off_, i) -> arr_[off_ + i])); @@ -4864,7 +4864,7 @@ public abstract class $abstractvectortype$ extends AbstractVector<$Boxtype$> { $Type$Species vsp = vspecies(); return VectorSupport.load( vsp.vectorType(), vsp.elementType(), vsp.laneCount(), - a, charArrayAddress(a, offset), + a, charArrayAddress(a, offset), false, a, offset, vsp, (arr, off, s) -> s.ldOp(arr, (int) off, (arr_, off_, i) -> (short) arr_[off_ + i])); @@ -4881,7 +4881,7 @@ public abstract class $abstractvectortype$ extends AbstractVector<$Boxtype$> { $Type$Species vsp = vspecies(); return VectorSupport.loadMasked( vsp.vectorType(), maskClass, vsp.elementType(), vsp.laneCount(), - a, charArrayAddress(a, offset), m, offsetInRange, + a, charArrayAddress(a, offset), false, m, offsetInRange, a, offset, vsp, (arr, off, s, vm) -> s.ldOp(arr, (int) off, vm, (arr_, off_, i) -> (short) arr_[off_ + i])); @@ -4898,7 +4898,7 @@ public abstract class $abstractvectortype$ extends AbstractVector<$Boxtype$> { $Type$Species vsp = vspecies(); return VectorSupport.load( vsp.vectorType(), vsp.elementType(), vsp.laneCount(), - a, booleanArrayAddress(a, offset), + a, booleanArrayAddress(a, offset), false, a, offset, vsp, (arr, off, s) -> s.ldOp(arr, (int) off, (arr_, off_, i) -> (byte) (arr_[off_ + i] ? 1 : 0))); @@ -4915,7 +4915,7 @@ public abstract class $abstractvectortype$ extends AbstractVector<$Boxtype$> { $Type$Species vsp = vspecies(); return VectorSupport.loadMasked( vsp.vectorType(), maskClass, vsp.elementType(), vsp.laneCount(), - a, booleanArrayAddress(a, offset), m, offsetInRange, + a, booleanArrayAddress(a, offset), false, m, offsetInRange, a, offset, vsp, (arr, off, s, vm) -> s.ldOp(arr, (int) off, vm, (arr_, off_, i) -> (byte) (arr_[off_ + i] ? 1 : 0))); @@ -4964,7 +4964,7 @@ public abstract class $abstractvectortype$ extends AbstractVector<$Boxtype$> { $Type$Species vsp = vspecies(); VectorSupport.store( vsp.vectorType(), vsp.elementType(), vsp.laneCount(), - a, arrayAddress(a, offset), + a, arrayAddress(a, offset), false, this, a, offset, (arr, off, v) -> v.stOp(arr, (int) off, @@ -4981,7 +4981,7 @@ public abstract class $abstractvectortype$ extends AbstractVector<$Boxtype$> { $Type$Species vsp = vspecies(); VectorSupport.storeMasked( vsp.vectorType(), maskClass, vsp.elementType(), vsp.laneCount(), - a, arrayAddress(a, offset), + a, arrayAddress(a, offset), false, this, m, a, offset, (arr, off, v, vm) -> v.stOp(arr, (int) off, vm, @@ -5062,7 +5062,7 @@ public abstract class $abstractvectortype$ extends AbstractVector<$Boxtype$> { ByteVector normalized = this.and((byte) 1); VectorSupport.storeMasked( vsp.vectorType(), maskClass, vsp.elementType(), vsp.laneCount(), - a, booleanArrayAddress(a, offset), + a, booleanArrayAddress(a, offset), false, normalized, m, a, offset, (arr, off, v, vm) -> v.stOp(arr, (int) off, vm, @@ -5112,7 +5112,7 @@ public abstract class $abstractvectortype$ extends AbstractVector<$Boxtype$> { $Type$Species vsp = vspecies(); VectorSupport.storeMasked( vsp.vectorType(), maskClass, vsp.elementType(), vsp.laneCount(), - a, charArrayAddress(a, offset), + a, charArrayAddress(a, offset), false, this, m, a, offset, (arr, off, v, vm) -> v.stOp(arr, (int) off, vm, diff --git a/test/micro/org/openjdk/bench/jdk/incubator/vector/TestLoadSegmentVarious.java b/test/micro/org/openjdk/bench/jdk/incubator/vector/TestLoadSegmentVarious.java index 58cd93f3c5166..5ec17c26ca5dd 100644 --- a/test/micro/org/openjdk/bench/jdk/incubator/vector/TestLoadSegmentVarious.java +++ b/test/micro/org/openjdk/bench/jdk/incubator/vector/TestLoadSegmentVarious.java @@ -55,6 +55,9 @@ public class TestLoadSegmentVarious { private static final VectorSpecies INTEGER_SPECIES = VectorSpecies.ofLargestShape(int.class); private static final VectorSpecies DOUBLE_SPECIES = VectorSpecies.ofLargestShape(double.class); + private static final VectorMask INTEGER_MASK = VectorMask.fromLong(INTEGER_SPECIES, (1 << (INTEGER_SPECIES.length() / 2)) - 1); + private static final VectorMask DOUBLE_MASK = VectorMask.fromLong(DOUBLE_SPECIES, (1 << (DOUBLE_SPECIES.length() / 2)) - 1); + // Must be evenly dividable by Double.BYTES @Param("1024") private int size; @@ -253,4 +256,27 @@ public void doubleVectorFromDoubleBackedSegment(Blackhole bh) { } } + @Benchmark + public void intVectorFromIntBackedSegmentMasked(Blackhole bh) { + for (int i = 0; i < INTEGER_SPECIES.loopBound(intSrcArray.length); i += INTEGER_SPECIES.vectorByteSize()) { + var v = IntVector.fromMemorySegment(INTEGER_SPECIES, doubleSegment, i, ByteOrder.nativeOrder(), INTEGER_MASK); + bh.consume(v); + } + } + + @Benchmark + public void intVectorFromDoubleBackedSegmentMasked(Blackhole bh) { + for (int i = 0; i < INTEGER_SPECIES.loopBound(intSrcArray.length); i += INTEGER_SPECIES.vectorByteSize()) { + var v = IntVector.fromMemorySegment(INTEGER_SPECIES, doubleSegment, i, ByteOrder.nativeOrder(), INTEGER_MASK); + bh.consume(v); + } + } + + @Benchmark + public void doubleVectorFromIntBackedSegmentMasked(Blackhole bh) { + for (int i = 0; i < DOUBLE_SPECIES.loopBound(doubleSrcArray.length); i += DOUBLE_SPECIES.vectorByteSize()) { + var v = DoubleVector.fromMemorySegment(DOUBLE_SPECIES, intSegment, i, ByteOrder.nativeOrder(), DOUBLE_MASK); + bh.consume(v); + } + } } From 7fbfb3b74a283261027e6c293e1a5dbc354cf0af Mon Sep 17 00:00:00 2001 From: Thomas Schatzl Date: Wed, 6 Dec 2023 10:34:27 +0000 Subject: [PATCH 232/250] 8321369: Unproblemlist gc/cslocker/TestCSLocker.java Reviewed-by: dholmes --- test/hotspot/jtreg/ProblemList-Xcomp.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/test/hotspot/jtreg/ProblemList-Xcomp.txt b/test/hotspot/jtreg/ProblemList-Xcomp.txt index 09d7cab6972a8..4eb388e5d5cff 100644 --- a/test/hotspot/jtreg/ProblemList-Xcomp.txt +++ b/test/hotspot/jtreg/ProblemList-Xcomp.txt @@ -48,4 +48,3 @@ vmTestbase/nsk/jdi/StepRequest/addClassFilter_rt/filter_rt003/TestDescription.ja vmTestbase/nsk/jvmti/scenarios/capability/CM03/cm03t001/TestDescription.java 8299493 macosx-x64 gc/arguments/TestNewSizeFlags.java 8299116 macosx-aarch64 -gc/cslocker/TestCSLocker.java 8310480 linux-x64 \ No newline at end of file From 0217b5ac8b25db96fce026ac027b18024e25a329 Mon Sep 17 00:00:00 2001 From: Adam Sotona Date: Wed, 6 Dec 2023 15:32:24 +0000 Subject: [PATCH 233/250] 8321248: ClassFile API ClassModel::verify is inconsistent with the rest of the API Reviewed-by: jlahoda, mcimadamore --- .../java/lang/classfile/ClassFile.java | 28 +++++++++++++++++++ .../java/lang/classfile/ClassModel.java | 25 ----------------- .../java/lang/classfile/package-info.java | 4 +-- .../classfile/impl/ClassFileImpl.java | 16 +++++++++++ .../foreign/abi/BindingSpecializer.java | 2 +- .../AdvancedTransformationsTest.java | 9 +++--- .../jdk/classfile/ClassHierarchyInfoTest.java | 2 +- test/jdk/jdk/classfile/CorpusTest.java | 2 +- test/jdk/jdk/classfile/StackMapsTest.java | 7 ++--- test/jdk/jdk/classfile/VerifierSelfTest.java | 11 ++------ test/jdk/tools/lib/tests/JImageValidator.java | 6 ++-- 11 files changed, 62 insertions(+), 50 deletions(-) diff --git a/src/java.base/share/classes/java/lang/classfile/ClassFile.java b/src/java.base/share/classes/java/lang/classfile/ClassFile.java index 7b1ef16ba6def..6f94a3f39f611 100644 --- a/src/java.base/share/classes/java/lang/classfile/ClassFile.java +++ b/src/java.base/share/classes/java/lang/classfile/ClassFile.java @@ -43,6 +43,7 @@ import java.lang.classfile.attribute.LocalVariableInfo; import java.lang.classfile.attribute.LocalVariableTypeInfo; import java.lang.classfile.instruction.ExceptionCatch; +import java.util.List; import static java.util.Objects.requireNonNull; import jdk.internal.javac.PreviewFeature; @@ -481,6 +482,33 @@ default byte[] transform(ClassModel model, ClassDesc newClassName, ClassTransfor */ byte[] transform(ClassModel model, ClassEntry newClassName, ClassTransform transform); + /** + * Verify a classfile. Any verification errors found will be returned. + * @param model the class model to verify + * @return a list of verification errors, or an empty list if no errors are + * found + */ + List verify(ClassModel model); + + /** + * Verify a classfile. Any verification errors found will be returned. + * @param bytes the classfile bytes to verify + * @return a list of verification errors, or an empty list if no errors are + * found + */ + List verify(byte[] bytes); + + /** + * Verify a classfile. Any verification errors found will be returned. + * @param path the classfile path to verify + * @return a list of verification errors, or an empty list if no errors are + * found + * @throws java.io.IOException if an I/O error occurs + */ + default List verify(Path path) throws IOException { + return verify(Files.readAllBytes(path)); + } + /** 0xCAFEBABE */ int MAGIC_NUMBER = 0xCAFEBABE; diff --git a/src/java.base/share/classes/java/lang/classfile/ClassModel.java b/src/java.base/share/classes/java/lang/classfile/ClassModel.java index e0ce7e3386598..282392a8c5ef8 100644 --- a/src/java.base/share/classes/java/lang/classfile/ClassModel.java +++ b/src/java.base/share/classes/java/lang/classfile/ClassModel.java @@ -78,29 +78,4 @@ public sealed interface ClassModel /** {@return whether this class is a module descriptor} */ boolean isModuleInfo(); - - /** - * Verify this classfile. Any verification errors found will be returned. - * - * @param debugOutput handler to receive debug information - * @return a list of verification errors, or an empty list if no errors are - * found - */ - default List verify(Consumer debugOutput) { - return VerifierImpl.verify(this, debugOutput); - } - - /** - * Verify this classfile. Any verification errors found will be returned. - * - * @param debugOutput handler to receive debug information - * @param classHierarchyResolver class hierarchy resolver to provide - * additional information about the class hierarchy - * @return a list of verification errors, or an empty list if no errors are - * found - */ - default List verify(ClassHierarchyResolver classHierarchyResolver, - Consumer debugOutput) { - return VerifierImpl.verify(this, classHierarchyResolver, debugOutput); - } } diff --git a/src/java.base/share/classes/java/lang/classfile/package-info.java b/src/java.base/share/classes/java/lang/classfile/package-info.java index 71c97ca6960ef..39244e98cfc46 100644 --- a/src/java.base/share/classes/java/lang/classfile/package-info.java +++ b/src/java.base/share/classes/java/lang/classfile/package-info.java @@ -277,8 +277,8 @@ * constantPoolBuilder.utf8Entry("mypackage.MyClass")); * } *

    - * More complex verification of a classfile can be achieved by explicit invocation - * of {@link java.lang.classfile.ClassModel#verify}. + * More complex verification of a classfile can be achieved by invocation of + * {@link java.lang.classfile.ClassFile#verify}. * *

    Transforming classfiles

    * ClassFile Processing APIs are most frequently used to combine reading and diff --git a/src/java.base/share/classes/jdk/internal/classfile/impl/ClassFileImpl.java b/src/java.base/share/classes/jdk/internal/classfile/impl/ClassFileImpl.java index 33dc78918246b..8bffbd6de4f5d 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/impl/ClassFileImpl.java +++ b/src/java.base/share/classes/jdk/internal/classfile/impl/ClassFileImpl.java @@ -39,6 +39,7 @@ import java.lang.classfile.constantpool.ClassEntry; import java.lang.classfile.constantpool.ConstantPoolBuilder; import java.lang.classfile.constantpool.Utf8Entry; +import jdk.internal.classfile.impl.verifier.VerifierImpl; public record ClassFileImpl(StackMapsOption stackMapsOption, DebugElementsOption debugElementsOption, @@ -128,6 +129,21 @@ public void accept(ClassBuilder builder) { } }); } + + @Override + public List verify(ClassModel model) { + return VerifierImpl.verify(model, classHierarchyResolverOption().classHierarchyResolver(), null); + } + + @Override + public List verify(byte[] bytes) { + try { + return verify(parse(bytes)); + } catch (IllegalArgumentException parsingError) { + return List.of(new VerifyError(parsingError.getMessage())); + } + } + public record AttributeMapperOptionImpl(Function> attributeMapper) implements AttributeMapperOption { } diff --git a/src/java.base/share/classes/jdk/internal/foreign/abi/BindingSpecializer.java b/src/java.base/share/classes/jdk/internal/foreign/abi/BindingSpecializer.java index b32b512fb3b6d..a399b815ee614 100644 --- a/src/java.base/share/classes/jdk/internal/foreign/abi/BindingSpecializer.java +++ b/src/java.base/share/classes/jdk/internal/foreign/abi/BindingSpecializer.java @@ -212,7 +212,7 @@ private static byte[] specializeHelper(MethodType leafType, MethodType callerMet } if (PERFORM_VERIFICATION) { - List errors = ClassFile.of().parse(bytes).verify(null); + List errors = ClassFile.of().verify(bytes); if (!errors.isEmpty()) { errors.forEach(System.err::println); throw new IllegalStateException("Verification error(s)"); diff --git a/test/jdk/jdk/classfile/AdvancedTransformationsTest.java b/test/jdk/jdk/classfile/AdvancedTransformationsTest.java index 24444bd3ab03a..9b4609fe8bc48 100644 --- a/test/jdk/jdk/classfile/AdvancedTransformationsTest.java +++ b/test/jdk/jdk/classfile/AdvancedTransformationsTest.java @@ -75,7 +75,7 @@ void testShiftLocals() throws Exception { try (var in = StackMapGenerator.class.getResourceAsStream("StackMapGenerator.class")) { var cc = ClassFile.of(); var clm = cc.parse(in.readAllBytes()); - var remapped = cc.parse(cc.transform(clm, (clb, cle) -> { + cc.verify(cc.transform(clm, (clb, cle) -> { if (cle instanceof MethodModel mm) { clb.transformMethod(mm, (mb, me) -> { if (me instanceof CodeModel com) { @@ -99,7 +99,6 @@ public void accept(CodeBuilder builder, CodeElement element) { else clb.with(cle); })); - remapped.verify(null); } } @@ -115,12 +114,12 @@ void testRemapClass() throws Exception { var cc = ClassFile.of(); var clm = cc.parse(in.readAllBytes()); var remapped = cc.parse(ClassRemapper.of(map).remapClass(cc, clm)); - assertEmpty(remapped.verify( + assertEmpty(ClassFile.of(ClassFile.ClassHierarchyResolverOption.of( ClassHierarchyResolver.of(Set.of(ClassDesc.of("remapped.List")), Map.of( ClassDesc.of("remapped.RemappedBytecode"), ConstantDescs.CD_Object, ClassDesc.ofDescriptor(RawBytecodeHelper.class.descriptorString()), ClassDesc.of("remapped.RemappedBytecode"))) .orElse(ClassHierarchyResolver.defaultResolver()) - , null)); //System.out::print)); + )).verify(remapped)); remapped.fields().forEach(f -> f.findAttribute(Attributes.SIGNATURE).ifPresent(sa -> verifySignature(f.fieldTypeSymbol(), sa.asTypeSignature()))); remapped.methods().forEach(m -> m.findAttribute(Attributes.SIGNATURE).ifPresent(sa -> { @@ -239,7 +238,7 @@ void testInstrumentClass() throws Exception { var instrumentor = cc.parse(AdvancedTransformationsTest.class.getResourceAsStream("AdvancedTransformationsTest$InstrumentorClass.class").readAllBytes()); var target = cc.parse(AdvancedTransformationsTest.class.getResourceAsStream("AdvancedTransformationsTest$TargetClass.class").readAllBytes()); var instrumentedBytes = instrument(target, instrumentor, mm -> mm.methodName().stringValue().equals("instrumentedMethod")); - assertEmpty(cc.parse(instrumentedBytes).verify(null)); //System.out::print)); + assertEmpty(cc.verify(instrumentedBytes)); var targetClass = new ByteArrayClassLoader(AdvancedTransformationsTest.class.getClassLoader(), "AdvancedTransformationsTest$TargetClass", instrumentedBytes).loadClass("AdvancedTransformationsTest$TargetClass"); assertEquals(targetClass.getDeclaredMethod("instrumentedMethod", Boolean.class).invoke(targetClass.getDeclaredConstructor().newInstance(), false), 34); } diff --git a/test/jdk/jdk/classfile/ClassHierarchyInfoTest.java b/test/jdk/jdk/classfile/ClassHierarchyInfoTest.java index 699197a6f5ecd..b8eadeda5e12b 100644 --- a/test/jdk/jdk/classfile/ClassHierarchyInfoTest.java +++ b/test/jdk/jdk/classfile/ClassHierarchyInfoTest.java @@ -136,7 +136,7 @@ void transformAndVerifySingle(ClassHierarchyResolver res) throws Exception { else clb.with(cle); }); - var errors = ClassFile.of().parse(newBytes).verify(null); + var errors = ClassFile.of().verify(newBytes); if (!errors.isEmpty()) { var itr = errors.iterator(); var thrown = itr.next(); diff --git a/test/jdk/jdk/classfile/CorpusTest.java b/test/jdk/jdk/classfile/CorpusTest.java index b30a5a11d2369..450643dda2901 100644 --- a/test/jdk/jdk/classfile/CorpusTest.java +++ b/test/jdk/jdk/classfile/CorpusTest.java @@ -208,7 +208,7 @@ void testReadAndTransform(Path path) throws IOException { ClassRecord.ofClassModel(classModel, CompatibilityFilter.By_ClassBuilder), "ClassModel[%s] transformed by ClassBuilder (actual) vs ClassModel before transformation (expected)".formatted(path)); - assertEmpty(newModel.verify(null)); + assertEmpty(cc.verify(newModel)); //testing maxStack and maxLocals are calculated identically by StackMapGenerator and StackCounter byte[] noStackMaps = ClassFile.of(ClassFile.StackMapsOption.DROP_STACK_MAPS) diff --git a/test/jdk/jdk/classfile/StackMapsTest.java b/test/jdk/jdk/classfile/StackMapsTest.java index 77b35a741e84a..88858ce839481 100644 --- a/test/jdk/jdk/classfile/StackMapsTest.java +++ b/test/jdk/jdk/classfile/StackMapsTest.java @@ -229,11 +229,10 @@ void testClassVersions() throws Exception { .walk().anyMatch(n -> n.name().equals("stack map frames"))); //test transformation to class version 50 with re-generation of StackMapTable attributes - assertEmpty(cc.parse(cc.transform( + assertEmpty(cc.verify(cc.transform( version49, ClassTransform.transformingMethodBodies(CodeTransform.ACCEPT_ALL) - .andThen(ClassTransform.endHandler(clb -> clb.withVersion(50, 0))))) - .verify(null)); + .andThen(ClassTransform.endHandler(clb -> clb.withVersion(50, 0)))))); } @Test @@ -271,7 +270,7 @@ private static void testTransformedStackMaps(byte[] originalBytes, ClassFile.Opt }); //then verify transformed bytecode - assertEmpty(cc.parse(transformedBytes).verify(null)); + assertEmpty(cc.verify(transformedBytes)); } @Test diff --git a/test/jdk/jdk/classfile/VerifierSelfTest.java b/test/jdk/jdk/classfile/VerifierSelfTest.java index 7c184df0391c3..8cbc90d2ff6fd 100644 --- a/test/jdk/jdk/classfile/VerifierSelfTest.java +++ b/test/jdk/jdk/classfile/VerifierSelfTest.java @@ -51,7 +51,7 @@ void testVerify() throws IOException { .flatMap(p -> p) .filter(p -> Files.isRegularFile(p) && p.toString().endsWith(".class")).forEach(path -> { try { - ClassFile.of().parse(path).verify(null); + ClassFile.of().verify(path); } catch (IOException e) { throw new AssertionError(e); } @@ -59,7 +59,7 @@ void testVerify() throws IOException { } @Test - void testFailedDump() throws IOException { + void testFailed() throws IOException { Path path = FileSystems.getFileSystem(URI.create("jrt:/")).getPath("modules/java.base/java/util/HashMap.class"); var cc = ClassFile.of(ClassFile.ClassHierarchyResolverOption.of( className -> ClassHierarchyResolver.ClassHierarchyInfo.ofClass(null))); @@ -79,13 +79,8 @@ void testFailedDump() throws IOException { clb.with(cle); }); StringBuilder sb = new StringBuilder(); - if (ClassFile.of().parse(brokenClassBytes).verify(sb::append).isEmpty()) { + if (ClassFile.of().verify(brokenClassBytes).isEmpty()) { throw new AssertionError("expected verification failure"); } - String output = sb.toString(); - if (!output.contains("- method name: ")) { - System.out.println(output); - throw new AssertionError("failed method not dumped to output"); - } } } diff --git a/test/jdk/tools/lib/tests/JImageValidator.java b/test/jdk/tools/lib/tests/JImageValidator.java index 4915f7fce1efe..125afb9d24cf1 100644 --- a/test/jdk/tools/lib/tests/JImageValidator.java +++ b/test/jdk/tools/lib/tests/JImageValidator.java @@ -223,10 +223,10 @@ public long getModuleLauncherExecutionTime() { } public static void readClass(byte[] clazz) throws IOException{ - var errors = ClassFile.of().parse(clazz).verify( + var errors = ClassFile.of( //resolution of all classes as interfaces cancels assignability verification - cls -> ClassHierarchyResolver.ClassHierarchyInfo.ofInterface(), - null); + ClassFile.ClassHierarchyResolverOption.of(cls -> ClassHierarchyResolver.ClassHierarchyInfo.ofInterface())) + .verify(clazz); if (!errors.isEmpty()) { var itr = errors.iterator(); var thrown = itr.next(); From 50f31240555888018f0f496ab29c8a5932dce459 Mon Sep 17 00:00:00 2001 From: Andrew Haley Date: Wed, 6 Dec 2023 15:32:35 +0000 Subject: [PATCH 234/250] 8320892: AArch64: Restore FPU control state after JNI Reviewed-by: adinn, stuefe --- .../cpu/aarch64/downcallLinker_aarch64.cpp | 3 +++ .../cpu/aarch64/macroAssembler_aarch64.cpp | 17 +++++++++++++++++ .../cpu/aarch64/macroAssembler_aarch64.hpp | 4 ++-- .../cpu/aarch64/sharedRuntime_aarch64.cpp | 3 +++ .../templateInterpreterGenerator_aarch64.cpp | 3 +++ 5 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/hotspot/cpu/aarch64/downcallLinker_aarch64.cpp b/src/hotspot/cpu/aarch64/downcallLinker_aarch64.cpp index b9a480af7ba97..4322eb1c4fcb6 100644 --- a/src/hotspot/cpu/aarch64/downcallLinker_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/downcallLinker_aarch64.cpp @@ -278,6 +278,9 @@ void DowncallLinker::StubGenerator::generate() { Label L_reguard; Label L_after_reguard; if (_needs_transition) { + // Restore cpu control state after JNI call + __ restore_cpu_control_state_after_jni(rscratch1, tmp1); + __ mov(tmp1, _thread_in_native_trans); __ strw(tmp1, Address(rthread, JavaThread::thread_state_offset())); diff --git a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp index 4b465d7a8ca94..a3c560b28d3cf 100644 --- a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp @@ -4428,6 +4428,23 @@ void MacroAssembler::load_klass(Register dst, Register src) { } } +void MacroAssembler::restore_cpu_control_state_after_jni(Register tmp1, Register tmp2) { + if (RestoreMXCSROnJNICalls) { + Label OK; + get_fpcr(tmp1); + mov(tmp2, tmp1); + // Set FPCR to the state we need. We do want Round to Nearest. We + // don't want non-IEEE rounding modes or floating-point traps. + bfi(tmp1, zr, 22, 4); // Clear DN, FZ, and Rmode + bfi(tmp1, zr, 8, 5); // Clear exception-control bits (8-12) + bfi(tmp1, zr, 0, 2); // Clear AH:FIZ + eor(tmp2, tmp1, tmp2); + cbz(tmp2, OK); // Only reset FPCR if it's wrong + set_fpcr(tmp1); + bind(OK); + } +} + // ((OopHandle)result).resolve(); void MacroAssembler::resolve_oop_handle(Register result, Register tmp1, Register tmp2) { // OopHandle::resolve is an indirection. diff --git a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp index 3bd22ee25fb81..84931c409cfe9 100644 --- a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp +++ b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp @@ -1047,8 +1047,8 @@ class MacroAssembler: public Assembler { #define verify_method_ptr(reg) _verify_method_ptr(reg, "broken method " #reg, __FILE__, __LINE__) #define verify_klass_ptr(reg) _verify_klass_ptr(reg, "broken klass " #reg, __FILE__, __LINE__) - // only if +VerifyFPU - void verify_FPU(int stack_depth, const char* s = "illegal FPU state"); + // Restore cpu control state after JNI call + void restore_cpu_control_state_after_jni(Register tmp1, Register tmp2); // prints msg, dumps registers and stops execution void stop(const char* msg); diff --git a/src/hotspot/cpu/aarch64/sharedRuntime_aarch64.cpp b/src/hotspot/cpu/aarch64/sharedRuntime_aarch64.cpp index fa2faddd714d3..c7b45ff0dde17 100644 --- a/src/hotspot/cpu/aarch64/sharedRuntime_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/sharedRuntime_aarch64.cpp @@ -1838,6 +1838,9 @@ nmethod* SharedRuntime::generate_native_wrapper(MacroAssembler* masm, intptr_t return_pc = (intptr_t) __ pc(); oop_maps->add_gc_map(return_pc - start, map); + // Verify or restore cpu control state after JNI call + __ restore_cpu_control_state_after_jni(rscratch1, rscratch2); + // Unpack native results. switch (ret_type) { case T_BOOLEAN: __ c2bool(r0); break; diff --git a/src/hotspot/cpu/aarch64/templateInterpreterGenerator_aarch64.cpp b/src/hotspot/cpu/aarch64/templateInterpreterGenerator_aarch64.cpp index c21a56972e433..89f5fbd281b79 100644 --- a/src/hotspot/cpu/aarch64/templateInterpreterGenerator_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/templateInterpreterGenerator_aarch64.cpp @@ -1383,6 +1383,9 @@ address TemplateInterpreterGenerator::generate_native_entry(bool synchronized) { __ get_method(rmethod); // result potentially in r0 or v0 + // Restore cpu control state after JNI call + __ restore_cpu_control_state_after_jni(rscratch1, rscratch2); + // make room for the pushes we're about to do __ sub(rscratch1, esp, 4 * wordSize); __ andr(sp, rscratch1, -16); From 90e433d72e73abf3252969f535451b56ecacc952 Mon Sep 17 00:00:00 2001 From: Aggelos Biboudis Date: Wed, 6 Dec 2023 15:34:25 +0000 Subject: [PATCH 235/250] 8320144: Compilation crashes when a custom annotation with invalid default value is used Reviewed-by: vromero, jlahoda --- .../com/sun/tools/javac/comp/Annotate.java | 7 +++++-- test/langtools/tools/javac/T8320144.java | 19 +++++++++++++++++++ test/langtools/tools/javac/T8320144.out | 4 ++++ 3 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 test/langtools/tools/javac/T8320144.java create mode 100644 test/langtools/tools/javac/T8320144.out diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Annotate.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Annotate.java index 40ba3152958c0..366e16f1da3f9 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Annotate.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Annotate.java @@ -556,7 +556,6 @@ private Attribute attributeAnnotationValue(Type expectedElementType, JCExpressio if (expectedElementType.hasTag(ARRAY)) { return getAnnotationArrayValue(expectedElementType, tree, env); - } //error recovery @@ -708,11 +707,15 @@ private Attribute getAnnotationArrayValue(Type expectedElementType, JCExpression } JCNewArray na = (JCNewArray)tree; + List elems = na.elems; if (na.elemtype != null) { log.error(na.elemtype.pos(), Errors.NewNotAllowedInAnnotation); + if (elems == null) { + elems = List.nil(); + } } ListBuffer buf = new ListBuffer<>(); - for (List l = na.elems; l.nonEmpty(); l=l.tail) { + for (List l = elems; l.nonEmpty(); l = l.tail) { buf.append(attributeAnnotationValue(types.elemtype(expectedElementType), l.head, env)); diff --git a/test/langtools/tools/javac/T8320144.java b/test/langtools/tools/javac/T8320144.java new file mode 100644 index 0000000000000..6bd3c4ab66dc1 --- /dev/null +++ b/test/langtools/tools/javac/T8320144.java @@ -0,0 +1,19 @@ +/* + * @test /nodynamiccopyright/ + * @bug 8320144 + * @summary Compilation crashes when a custom annotation with invalid default value is used + * @compile/fail/ref=T8320144.out -XDrawDiagnostics T8320144.java + */ +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +public class T8320144 { + @Retention(RetentionPolicy.RUNTIME) + @Target({ElementType.TYPE}) + public @interface TestAnnotation { + public String[] excludeModules() default new String[0]; + public String[] value() default new String[] { 3 }; + } +} diff --git a/test/langtools/tools/javac/T8320144.out b/test/langtools/tools/javac/T8320144.out new file mode 100644 index 0000000000000..cb09e379cd1aa --- /dev/null +++ b/test/langtools/tools/javac/T8320144.out @@ -0,0 +1,4 @@ +T8320144.java:16:54: compiler.err.new.not.allowed.in.annotation +T8320144.java:17:45: compiler.err.new.not.allowed.in.annotation +T8320144.java:17:56: compiler.err.prob.found.req: (compiler.misc.inconvertible.types: int, java.lang.String) +3 errors From cc25d8b12bbab9dde9ade7762927dcb8d27e23c5 Mon Sep 17 00:00:00 2001 From: Doug Lea Date: Wed, 6 Dec 2023 16:12:59 +0000 Subject: [PATCH 236/250] 8319662: ForkJoinPool trims worker threads too slowly 8319498: ForkJoinPool.invoke(ForkJoinTask) does not specify behavior when task throws checked exception Reviewed-by: alanb --- .../java/util/concurrent/ForkJoinPool.java | 362 +++++++++--------- .../util/concurrent/tck/ForkJoinPoolTest.java | 16 + 2 files changed, 206 insertions(+), 172 deletions(-) diff --git a/src/java.base/share/classes/java/util/concurrent/ForkJoinPool.java b/src/java.base/share/classes/java/util/concurrent/ForkJoinPool.java index a14f6d884e0b5..4cdafb0a44f5f 100644 --- a/src/java.base/share/classes/java/util/concurrent/ForkJoinPool.java +++ b/src/java.base/share/classes/java/util/concurrent/ForkJoinPool.java @@ -556,14 +556,16 @@ public class ForkJoinPool extends AbstractExecutorService { * signalling (because its queue is empty), also resulting in * logarithmic full activation time * - * * Because we don't know about usage patterns (or most commonly, + * * Because we don't know about usage patterns (or most commonly, * mixtures), we use both approaches, which present even more * opportunities to over-signal. Note that in either of these * contexts, signals may be (and often are) unnecessary because * active workers continue scanning after running tasks without * the need to be signalled (which is one reason work stealing * is often faster than alternatives), so additional workers - * aren't needed. But there is no efficient way to detect this. + * aren't needed. We filter out some of these cases by exiting + * retry loops in signalWork if the task responsible for the + * signal has already been taken. * * * For rapidly branching tasks that require full pool resources, * oversignalling is OK, because signalWork will soon have no @@ -579,9 +581,7 @@ public class ForkJoinPool extends AbstractExecutorService { * top-level polls (argument "window" in method scan, with setup * in method runWorker) as an encoded sliding window of current * and previous two sources (or INVALID_ID if none), and stop - * signalling when all were from the same source. Also, retries - * are suppressed on CAS failures by newly activated workers, - * which serves as a form of admission control. These + * signalling when all were from the same source. These * mechanisms may result in transiently too few workers, but * once workers poll from a new source, they rapidly reactivate * others. @@ -609,22 +609,13 @@ public class ForkJoinPool extends AbstractExecutorService { * contention. * * Deactivation. When method scan indicates that no tasks are - * found by a worker, it tries to deactivate (in runWorker). Note - * that not finding tasks doesn't mean that there won't soon be - * some. Further, a scan may give up under contention, returning - * even without knowing whether any tasks are still present, which - * is OK given, a secondary check (in awaitWork) needed to cover - * deactivation/signal races. Blocking and unblocking via - * park/unpark can cause serious slowdowns when tasks are rapidly - * but irregularly generated (which is often due to garbage - * collectors and other activities). One way to ameliorate is for - * workers to rescan multiple times, even when there are unlikely - * to be tasks. But this causes enough memory traffic and CAS - * contention to prefer using quieter short spinwaits in awaitWork - * and elsewhere. Those in awaitWork are set to small values that - * only cover near-miss scenarios for inactivate/activate races. - * Because idle workers are often not yet blocked (parked), we use - * the WorkQueue parker field to advertise that a waiter actually + * found by a worker, it tries to deactivate (in awaitWork), + * giving up (and rescanning) on ctl contention. To avoid missed + * signals during deactivation, the method rescans and reactivates + * if there may have been a missed signal during deactivation, + * filtering out most cases in which this is unnecessary. Because + * idle workers are often not yet blocked (parked), we use the + * WorkQueue parking field to advertise that a waiter actually * needs unparking upon signal. * * Quiescence. Workers scan looking for work, giving up when they @@ -676,7 +667,10 @@ public class ForkJoinPool extends AbstractExecutorService { * Trimming workers. To release resources after periods of lack of * use, a worker starting to wait when the pool is quiescent will * time out and terminate if the pool has remained quiescent for - * period given by field keepAlive. + * period given by field keepAlive (default 60sec), which applies + * to the first timeout of a fully populated pool. Subsequent (or + * other) cases use delays such that, if still quiescent, all will + * be released before one additional keepAlive unit elapses. * * Joining Tasks * ============= @@ -687,7 +681,7 @@ public class ForkJoinPool extends AbstractExecutorService { * task would otherwise be blocked waiting for completion of * another, basically, just by running that task or one of its * subtasks if not already taken. These mechanics are disabled for - * InterruptibleTasks, that guarantee that callers do not executed + * InterruptibleTasks, that guarantee that callers do not execute * submitted tasks. * * The basic structure of joining is an extended spin/block scheme @@ -886,22 +880,24 @@ public class ForkJoinPool extends AbstractExecutorService { * control (for good reason). Similarly for relying on fields * being placed in size-sorted declaration order. * - * For class ForkJoinPool, it is usually more effective to order - * fields such that the most commonly accessed fields are unlikely - * to share cache lines with adjacent objects under JVM layout - * rules. For class WorkQueue, an embedded @Contended region - * segregates fields most heavily updated by owners from those - * most commonly read by stealers or other management. Initial - * sizing and resizing of WorkQueue arrays is an even more - * delicate tradeoff because the best strategy systematically - * varies across garbage collectors. Small arrays are better for - * locality and reduce GC scan time, but large arrays reduce both - * direct false-sharing and indirect cases due to GC bookkeeping - * (cardmarks etc), and reduce the number of resizes, which are - * not especially fast because they require atomic transfers. - * Currently, arrays are initialized to be fairly small but early - * resizes rapidly increase size by more than a factor of two - * until very large. (Maintenance note: any changes in fields, + * We isolate the ForkJoinPool.ctl field that otherwise causes the + * most false-sharing misses with respect to other fields. Also, + * ForkJoinPool fields are ordered such that fields less prone to + * contention effects are first, offsetting those that otherwise + * would be, while also reducing total footprint vs using + * multiple @Contended regions, which tends to slow down + * less-contended applications. For class WorkQueue, an + * embedded @Contended region segregates fields most heavily + * updated by owners from those most commonly read by stealers or + * other management. Initial sizing and resizing of WorkQueue + * arrays is an even more delicate tradeoff because the best + * strategy systematically varies across garbage collectors. Small + * arrays are better for locality and reduce GC scan time, but + * large arrays reduce both direct false-sharing and indirect + * cases due to GC bookkeeping (cardmarks etc), and reduce the + * number of resizes, which are not especially fast because they + * require atomic transfers. Currently, arrays are initialized to + * be fairly small. (Maintenance note: any changes in fields, * queues, or their uses, or JVM layout policies, must be * accompanied by re-evaluation of these placement and sizing * decisions.) @@ -1035,7 +1031,8 @@ public class ForkJoinPool extends AbstractExecutorService { // source history window packing used in scan() and runWorker() static final long RESCAN = 1L << 63; // must be negative - static final long WMASK = ~(((long)SMASK) << 48); // id bits only + static final long HMASK = ((((long)SMASK) << 32) | + (((long)SMASK) << 16)); // history bits static final long NO_HISTORY = ((((long)INVALID_ID) << 32) | // no 3rd (((long)INVALID_ID) << 16)); // no 2nd @@ -1210,7 +1207,6 @@ public ForkJoinWorkerThread run() { static final class WorkQueue { // fields declared in order of their likely layout on most VMs final ForkJoinWorkerThread owner; // null if shared - volatile Thread parker; // set when parking in awaitWork ForkJoinTask[] array; // the queued tasks; power of 2 size int base; // index of next slot for poll final int config; // mode bits @@ -1226,6 +1222,8 @@ static final class WorkQueue { volatile int source; // source queue id (or DEREGISTERED) @jdk.internal.vm.annotation.Contended("w") int nsteals; // number of steals from other queues + @jdk.internal.vm.annotation.Contended("w") + volatile int parking; // nonzero if parked in awaitWork // Support for atomic operations private static final Unsafe U; @@ -1295,7 +1293,7 @@ final int queueSize() { */ final void push(ForkJoinTask task, ForkJoinPool pool, boolean internal) { - int s = top, b = base, cap, m, room; ForkJoinTask[] a; + int s = top, b = base, cap, m, p, room, newCap; ForkJoinTask[] a; if ((a = array) == null || (cap = a.length) <= 0 || (room = (m = cap - 1) - (s - b)) < 0) { // could not resize if (!internal) @@ -1303,36 +1301,34 @@ final void push(ForkJoinTask task, ForkJoinPool pool, throw new RejectedExecutionException("Queue capacity exceeded"); } top = s + 1; - long pos = slotOffset(m & s); + long pos = slotOffset(p = m & s); if (!internal) U.putReference(a, pos, task); // inside lock else U.getAndSetReference(a, pos, task); // fully fenced - if (room == 0) { // resize for next time - int newCap; // rapidly grow until large - if ((newCap = (cap < 1 << 24) ? cap << 2 : cap << 1) > 0) { - ForkJoinTask[] newArray = null; - try { - newArray = new ForkJoinTask[newCap]; - } catch (OutOfMemoryError ex) { - } - if (newArray != null) { // else throw on next push - int newMask = newCap - 1; // poll old, push to new - for (int k = s, j = cap; j > 0; --j, --k) { - if ((newArray[k & newMask] = - (ForkJoinTask)U.getAndSetReference( - a, slotOffset(k & m), null)) == null) - break; // lost to pollers - } - updateArray(newArray); // fully fenced + if (room == 0 && (newCap = cap << 1) > 0) { + ForkJoinTask[] newArray = null; + try { // resize for next time + newArray = new ForkJoinTask[newCap]; + } catch (OutOfMemoryError ex) { + } + if (newArray != null) { // else throw on next push + int newMask = newCap - 1; // poll old, push to new + for (int k = s, j = cap; j > 0; --j, --k) { + ForkJoinTask u; + if ((u = (ForkJoinTask)U.getAndSetReference( + a, slotOffset(k & m), null)) == null) + break; // lost to pollers + newArray[k & newMask] = u; } + updateArray(newArray); // fully fenced } + a = null; // always signal } if (!internal) unlockPhase(); - if ((room == 0 || room >= m || a[m & (s - 1)] == null) && - pool != null) - pool.signalWork(); + if ((a == null || a[m & (s - 1)] == null) && pool != null) + pool.signalWork(a, p); } /** @@ -1439,7 +1435,7 @@ else if (t == (o = U.compareAndExchangeReference( a, slotOffset(k), t, null))) { updateBase(nb); if (a[nk] != null && pool != null) - pool.signalWork(); // propagate + pool.signalWork(a, nk); // propagate return t; } if (o == null && a[nk] == null && array == a && @@ -1456,14 +1452,23 @@ a, slotOffset(k), t, null))) { * to repoll from the queue obtained from pool.scan. */ private ForkJoinTask tryPoll() { - ForkJoinTask t; ForkJoinTask[] a; int b, cap, k; - if ((a = array) != null && (cap = a.length) > 0 && - (t = a[k = (b = base) & (cap - 1)]) != null) { - U.loadFence(); - if (base == b && - U.compareAndSetReference(a, slotOffset(k), t, null)) { - updateBase(b + 1); - return t; + ForkJoinTask[] a; int cap; + if ((a = array) != null && (cap = a.length) > 0) { + for (int b = base, k;;) { // loop only if inconsistent + ForkJoinTask t = a[k = b & (cap - 1)]; + U.loadFence(); + if (b == (b = base)) { + Object o; + if (t == null) + o = a[k]; + else if (t == (o = U.compareAndExchangeReference( + a, slotOffset(k), t, null))) { + updateBase(b + 1); + return t; + } + if (o == null) + break; + } } } return null; @@ -1676,9 +1681,11 @@ final boolean isApparentlyUnblocked() { final long config; // static configuration bits volatile long stealCount; // collects worker nsteals volatile long threadIds; // for worker thread names + volatile int runState; // versioned, lockable + @jdk.internal.vm.annotation.Contended("fjpctl") // segregate volatile long ctl; // main pool control + @jdk.internal.vm.annotation.Contended("fjpctl") // colocate int parallelism; // target number of workers - volatile int runState; // versioned, lockable // Support for atomic operations private static final Unsafe U; @@ -1876,8 +1883,8 @@ final void deregisterWorker(ForkJoinWorkerThread wt, Throwable ex) { c, ((RC_MASK & (c - RC_UNIT)) | (TC_MASK & (c - TC_UNIT)) | (LMASK & c))))); - else if ((int)c == 0) // was dropped on timeout - replaceable = false; + else if ((int)c != 0) + replaceable = true; // signal below to cascade timeouts if (w != null) { // cancel remaining tasks for (ForkJoinTask t; (t = w.nextLocalTask()) != null; ) { try { @@ -1898,15 +1905,19 @@ else if ((int)c == 0) // was dropped on timeout unlockRunState(); } if ((runState & STOP) == 0 && replaceable) - signalWork(); // may replace unless trimmed or uninitialized + signalWork(null, 0); // may replace unless trimmed or uninitialized if (ex != null) ForkJoinTask.rethrow(ex); } /** - * Releases an idle worker, or creates one if not enough exist. + * Releases an idle worker, or creates one if not enough exist, + * returning on contention if a signal task is already taken. + * + * @param a if nonnull, a task array holding task signalled + * @param k index of task in array */ - final void signalWork() { + final void signalWork(ForkJoinTask[] a, int k) { int pc = parallelism; for (long c = ctl;;) { WorkQueue[] qs = queues; @@ -1928,20 +1939,21 @@ else if ((short)(c >>> RC_SHIFT) >= pc || (v = w) == null) if (v == null) createWorker(); else { - Thread t; v.phase = sp; - if ((t = v.parker) != null) - U.unpark(t); + if (v.parking != 0) + U.unpark(v.owner); } break; } + if (a != null && k >= 0 && k < a.length && a[k] == null) + break; } } /** - * Reactivates the given worker, and possibly interrupts others if - * not top of ctl stack. Called only during shutdown to ensure release - * on termination. + * Reactivates the given worker, and possibly others if not top of + * ctl stack. Called only during shutdown to ensure release on + * termination. */ private void reactivate(WorkQueue w) { for (long c = ctl;;) { @@ -1953,16 +1965,11 @@ private void reactivate(WorkQueue w) { if (c == (c = compareAndExchangeCtl( c, ((UMASK & (c + RC_UNIT)) | (c & TC_MASK) | (v.stackPred & LMASK))))) { - Thread t; v.phase = sp; - if ((t = v.parker) != null) { - try { - t.interrupt(); - } catch (Throwable ignore) { - } - } if (v == w) break; + if (v.parking != 0) + U.unpark(v.owner); } } } @@ -1993,18 +2000,18 @@ else if (!swept || e != prevRunState || (e & RS_LOCK) != 0) { sum += (p & 0xffffffffL) | ((long)b << 32); if ((p & IDLE) == 0 || s - b > 0) { if ((i & 1) == 0 && compareAndSetCtl(c, c)) - signalWork(); // ensure live + signalWork(null, 0); // ensure live return false; } } } swept = (phaseSum == (phaseSum = sum)); } - else if (compareAndSetCtl(c, c) && // confirm - casRunState(e, (e & SHUTDOWN) != 0 ? e | STOP : e)) { - if ((e & SHUTDOWN) != 0) // enable termination - interruptAll(); + else if ((e & SHUTDOWN) == 0) return true; + else if (compareAndSetCtl(c, c) && casRunState(e, e | STOP)) { + interruptAll(); // confirmed + return true; // enable termination } else break; // restart @@ -2021,17 +2028,12 @@ else if (compareAndSetCtl(c, c) && // confirm final void runWorker(WorkQueue w) { if (w != null) { int phase = w.phase, r = w.stackPred; // seed from registerWorker - for (long window = NO_HISTORY | (r >>> 16);;) { - r ^= r << 13; r ^= r >>> 17; r ^= r << 5; // xorshift - if ((runState & STOP) != 0) // terminating - break; - if (window == (window = scan(w, window & WMASK, r)) && - window >= 0L && phase != (phase = awaitWork(w, phase))) { - if ((phase & IDLE) != 0) - break; // worker exit - window = NO_HISTORY | (window & SMASK); // clear history - } - } + long window = (long)((r >>> 16) & SMASK) | NO_HISTORY; + do { + r ^= r << 13; r ^= r >>> 17; r ^= r << 5; // xorshift + } while ((runState & STOP) == 0 && + (((window = scan(w, window, r)) < 0L || + ((phase = awaitWork(w, phase)) & IDLE) == 0))); } } @@ -2048,105 +2050,116 @@ final void runWorker(WorkQueue w) { private long scan(WorkQueue w, long window, int r) { WorkQueue[] qs = queues; int n = (qs == null) ? 0 : qs.length, step = (r << 1) | 1; + long next = window & ~RESCAN; outer: for (int i = (short)window, l = n; l > 0; --l, i += step) { int j, cap; WorkQueue q; ForkJoinTask[] a; if ((q = qs[j = i & SMASK & (n - 1)]) != null && (a = q.array) != null && (cap = a.length) > 0) { - for (;;) { - int b, k; Object o; - ForkJoinTask t = a[k = (b = q.base) & (cap - 1)]; + for (int b = q.base;;) { + int nb = b + 1, nk = nb & (cap - 1), k; + ForkJoinTask t = a[k = b & (cap - 1)]; U.loadFence(); // re-read b and t - if (q.base == b) { // else inconsistent; retry - int nb = b + 1, nk = nb & (cap - 1); - if (t == null) { - if (a[k] == null) { // revisit if another task - if (window >= 0L && a[nk] != null) - window |= RESCAN; - break; - } - } + if (b == (b = q.base)) { // else inconsistent; retry + Object o; + if (t == null) + o = a[k]; else if (t == (o = U.compareAndExchangeReference( - a, slotOffset(k), t, null))) { + a, slotOffset(k), t, null))) { q.updateBase(nb); - long pw = window, nw = ((pw << 16) | j) & WMASK; - window = nw | RESCAN; - if ((nw != pw || (short)(nw >>> 32) != j) && - a[nk] != null) - signalWork(); // limit propagation + next = RESCAN | ((window << 16) & HMASK) | j; + if (window != next && a[nk] != null) + signalWork(a, nk); // limit propagation if (w != null) // always true w.topLevelExec(t, q, j); break outer; } - else if (o == null) // contended - break; // retried unless newly active + if (o == null) { + if (next >= 0L && a[nk] != null) + next |= RESCAN; + break; + } } } } } - return window; + return next; } /** * Tries to inactivate, and if successful, awaits signal or termination. * * @param w the worker (may be null if already terminated) - * @param p current phase + * @param phase current phase * @return current phase, with IDLE set if worker should exit */ - private int awaitWork(WorkQueue w, int p) { + private int awaitWork(WorkQueue w, int phase) { + boolean quiet; // true if possibly quiescent + int active = phase + (IDLE << 1), p = phase | IDLE, e; if (w != null) { - int idlePhase = p + IDLE, nextPhase = p + (IDLE << 1); - long pc = ctl, qc = (nextPhase & LMASK) | ((pc - RC_UNIT) & UMASK); - w.stackPred = (int)pc; // set ctl stack link - w.phase = idlePhase; // try to inactivate - if (!compareAndSetCtl(pc, qc)) // contended enque - return w.phase = p; // back out - int ac = (short)(qc >>> RC_SHIFT); - boolean quiescent = (ac <= 0 && quiescent()); - if ((runState & STOP) != 0) - return idlePhase; - int spins = ac + ((((int)(qc >>> TC_SHIFT)) & SMASK) << 1); - while ((p = w.phase) == idlePhase && --spins > 0) - Thread.onSpinWait(); // spin for approx #accesses to signal - if (p == idlePhase) { - long deadline = (!quiescent ? 0L : // timeout for trim - System.currentTimeMillis() + keepAlive); - WorkQueue[] qs = queues; + w.phase = p; // deactivate + long np = active & LMASK, pc = ctl; // try to enqueue + long qc = np | ((pc - RC_UNIT) & UMASK); + w.stackPred = (int)pc; // set ctl stack link + if (pc != (pc = compareAndExchangeCtl(pc, qc))) { + qc = np | ((pc - RC_UNIT) & UMASK); + w.stackPred = (int)pc; // retry once + if (pc != (pc = compareAndExchangeCtl(pc, qc))) + p = w.phase = phase; // back out + } + if (p != phase && ((e = runState) & STOP) == 0 && + (!(quiet = (qc & RC_MASK) <= 0L) || (e & SHUTDOWN) == 0 || + !(quiet = quiescent()) || (runState & STOP) == 0)) { + long deadline = 0L; // not terminating + if (quiet) { // use timeout if trimmable + int nt = (short)(qc >>> TC_SHIFT); + long delay = keepAlive; // scale if not at target + if (nt != (nt = Math.max(nt, parallelism)) && nt > 0) + delay = Math.max(TIMEOUT_SLOP, delay / nt); + if ((deadline = delay + System.currentTimeMillis()) == 0L) + deadline = 1L; // avoid zero + } + boolean release = quiet; + WorkQueue[] qs = queues; // recheck queues int n = (qs == null) ? 0 : qs.length; - for (int i = 0; i < n; ++i) { // recheck queues + for (int l = -n, j = active; l < n; ++l, ++j) { WorkQueue q; ForkJoinTask[] a; int cap; - if ((q = qs[i]) != null && - (a = q.array) != null && (cap = a.length) > 0 && - a[q.base & (cap - 1)] != null && - ctl == qc && compareAndSetCtl(qc, pc)) { - w.phase = (int)qc; // release + if ((p = w.phase) == active) // interleave signal checks break; + if ((q = qs[j & (n - 1)]) != null && + (a = q.array) != null && (cap = a.length) > 0 && + a[q.base & (cap - 1)] != null) { + if (release && qc == ctl && compareAndSetCtl(qc, pc)) { + p = w.phase = active; + break; // possible missed signal + } + release = true; // track multiple or reencounter } + Thread.onSpinWait(); // reduce memory traffic } - if ((p = w.phase) == idlePhase) { // emulate LockSupport.park + if (p != active) { // emulate LockSupport.park LockSupport.setCurrentBlocker(this); - w.parker = Thread.currentThread(); + w.parking = 1; for (;;) { - if ((runState & STOP) != 0 || (p = w.phase) != idlePhase) + if ((runState & STOP) != 0 || (p = w.phase) == active) break; - U.park(quiescent, deadline); - if ((p = w.phase) != idlePhase || (runState & STOP) != 0) + U.park(deadline != 0L, deadline); + if ((p = w.phase) == active || (runState & STOP) != 0) break; - Thread.interrupted(); // clear for next park - if (quiescent && TIMEOUT_SLOP > + Thread.interrupted(); // clear for next park + if (deadline != 0L && TIMEOUT_SLOP > deadline - System.currentTimeMillis()) { - long sp = w.stackPred & LMASK; - long c = ctl, nc = sp | (UMASK & (c - TC_UNIT)); - if (((int)c & SMASK) == (idlePhase & SMASK) && + long sp = w.stackPred & LMASK, c = ctl; + long nc = sp | (UMASK & (c - TC_UNIT)); + if (((int)c & SMASK) == (active & SMASK) && compareAndSetCtl(c, nc)) { w.source = DEREGISTERED; - w.phase = (int)c; - break; + w.phase = active; + break; // trimmed on timeout } - deadline += keepAlive; // not head; reset timer + deadline = 0L; // no longer trimmable } } - w.parker = null; + w.parking = 0; LockSupport.setCurrentBlocker(null); } } @@ -2201,13 +2214,13 @@ private int tryCompensate(long c) { sp = (int)c, stat = -1; // default retry return if (sp != 0 && active <= pc) { // activate idle worker - WorkQueue[] qs; WorkQueue v; int i; Thread t; + WorkQueue[] qs; WorkQueue v; int i; if ((qs = queues) != null && qs.length > (i = sp & SMASK) && (v = qs[i]) != null && compareAndSetCtl(c, (c & UMASK) | (v.stackPred & LMASK))) { v.phase = sp; - if ((t = v.parker) != null) - U.unpark(t); + if (v.parking != 0) + U.unpark(v.owner); stat = UNCOMPENSATE; } } @@ -2807,7 +2820,6 @@ private void interruptAll() { } } - /** * Returns termination signal, constructing if necessary */ @@ -3099,7 +3111,13 @@ public static ForkJoinPool commonPool() { public T invoke(ForkJoinTask task) { Objects.requireNonNull(task); poolSubmit(true, task); - return task.join(); + try { + return task.join(); + } catch (RuntimeException | Error unchecked) { + throw unchecked; + } catch (Exception checked) { + throw new RuntimeException(checked); + } } /** diff --git a/test/jdk/java/util/concurrent/tck/ForkJoinPoolTest.java b/test/jdk/java/util/concurrent/tck/ForkJoinPoolTest.java index 781b7bffe6d0c..7db3e20a2fb75 100644 --- a/test/jdk/java/util/concurrent/tck/ForkJoinPoolTest.java +++ b/test/jdk/java/util/concurrent/tck/ForkJoinPoolTest.java @@ -626,6 +626,22 @@ public void testSubmitEE() throws Throwable { } } + /** + * invoke throws a RuntimeException if task throws unchecked exception + */ + public void testInvokeUncheckedException() throws Throwable { + ForkJoinPool p = new ForkJoinPool(1); + try (PoolCleaner cleaner = cleaner(p)) { + try { + p.invoke(ForkJoinTask.adapt(new Callable() { + public Object call() { throw new ArithmeticException(); }})); + shouldThrow(); + } catch (RuntimeException success) { + assertTrue(success.getCause() instanceof ArithmeticException); + } + } + } + /** * invokeAny(null) throws NullPointerException */ From 4ef24e2596340c5375f2ab07883c26a6458efe0e Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Wed, 6 Dec 2023 16:41:24 +0000 Subject: [PATCH 237/250] 8319938: TestFileChooserSingleDirectorySelection.java fails with "getSelectedFiles returned empty array" Reviewed-by: aivanov, tr --- ...stFileChooserSingleDirectorySelection.java | 185 +++++++++--------- 1 file changed, 95 insertions(+), 90 deletions(-) diff --git a/test/jdk/com/sun/java/swing/plaf/gtk/TestFileChooserSingleDirectorySelection.java b/test/jdk/com/sun/java/swing/plaf/gtk/TestFileChooserSingleDirectorySelection.java index 0f74b09f7fac0..05681550eb2c9 100644 --- a/test/jdk/com/sun/java/swing/plaf/gtk/TestFileChooserSingleDirectorySelection.java +++ b/test/jdk/com/sun/java/swing/plaf/gtk/TestFileChooserSingleDirectorySelection.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2023, 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 @@ -33,12 +33,9 @@ import java.io.File; import java.awt.BorderLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import java.awt.event.InputEvent; import java.awt.Point; import java.awt.Robot; -import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.SwingUtilities; @@ -48,130 +45,128 @@ public class TestFileChooserSingleDirectorySelection { private static JFrame frame; private static JFileChooser fileChooser; - private static JButton getSelectedFilesButton; private static Robot robot; - private static boolean passed; - private static File[] testDir; - private static File[] tempFile; + private static volatile Point clickLocation; public static void main(String[] args) throws Exception { System.setProperty("sun.java2d.uiScale", "1.0"); robot = new Robot(); robot.setAutoDelay(100); - - try { - // create test directory - String tmpDir = System.getProperty("user.home"); - testDir = new File[1]; - testDir[0] = new File(tmpDir, "testDir"); - if (!testDir[0].exists()) - testDir[0].mkdir(); - testDir[0].deleteOnExit(); - - // create temporary files inside testDir - tempFile = new File[5]; - for (int i = 0; i < 5; ++i) { - tempFile[i] = File.createTempFile("temp", ".txt", - new File(testDir[0].getAbsolutePath())); - tempFile[i].deleteOnExit(); - } - } catch (Exception e) { - e.printStackTrace(); - } + File testDirDirs = createFoldersOnlyDir(); + File testDirFiles = createFilesOnlyDir(); + populateDirs(testDirDirs); + populateFiles(testDirFiles); for (UIManager.LookAndFeelInfo laf : - UIManager.getInstalledLookAndFeels()) { + UIManager.getInstalledLookAndFeels()) { System.out.println("Testing LAF: " + laf.getClassName()); SwingUtilities.invokeAndWait(() -> setLookAndFeel(laf)); - checkFileOnlyTest(laf); - checkDirectoriesOnlyTest(laf); - checkFilesAndDirectoriesTest(laf); + checkFileOnlyTest(laf, testDirFiles); + checkDirectoriesOnlyTest(laf, testDirDirs); + checkFilesAndDirectoriesTest(laf, testDirDirs); System.out.println("Passed"); } } - private static void checkFileOnlyTest(UIManager.LookAndFeelInfo laf) - throws Exception { + private static File createFoldersOnlyDir() { + String tmpDir = System.getProperty("java.io.tmpdir"); + File dirsDir = new File(tmpDir, "dirsDir"); + if (!dirsDir.exists()) { + dirsDir.mkdir(); + } + dirsDir.deleteOnExit(); + return dirsDir; + } + + private static void populateDirs(File parent) { + for (int i = 0; i < 10; ++i) { + File subDir = new File(parent, "subDir_" + (i+1)); + subDir.mkdir(); + subDir.deleteOnExit(); + } + } + + private static File createFilesOnlyDir() { + String tmpDir = System.getProperty("java.io.tmpdir"); + File filesDir = new File(tmpDir, "filesDir"); + if (!filesDir.exists()) { + filesDir.mkdir(); + } + filesDir.deleteOnExit(); + return filesDir; + } + + private static void populateFiles(File parent) throws Exception { + for (int i = 0; i < 10; ++i) { + File subFile = new File(parent, "subFiles_" + (i+1)); + subFile.createNewFile(); + subFile.deleteOnExit(); + } + } + + private static void checkFileOnlyTest(UIManager.LookAndFeelInfo laf, + File dir) throws Exception { System.out.println("Testing File Only mode"); try { SwingUtilities.invokeAndWait(() -> { createAndShowUI(); - fileChooser.setCurrentDirectory(testDir[0]); + fileChooser.setCurrentDirectory(dir); + fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); }); robot.waitForIdle(); robot.delay(1000); - fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); - doTesting(laf, 230); + if (laf.getClassName().contains("Motif") + || laf.getClassName().contains("GTK")) { + doTesting(laf, 230); + } else { + doTesting(laf, 50); + } } finally { - SwingUtilities.invokeAndWait(() -> { - if (frame != null) { - frame.dispose(); - } - }); + disposeFrame(); } } - private static void checkDirectoriesOnlyTest(UIManager.LookAndFeelInfo laf) - throws Exception { + private static void checkDirectoriesOnlyTest(UIManager.LookAndFeelInfo laf, + File dir) throws Exception { System.out.println("Testing Directories Only mode"); try { SwingUtilities.invokeAndWait(() -> { createAndShowUI(); + fileChooser.setCurrentDirectory(dir); + fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); }); robot.waitForIdle(); robot.delay(1000); - fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); doTesting(laf, 50); } finally { - SwingUtilities.invokeAndWait(() -> { - if (frame != null) { - frame.dispose(); - } - }); + disposeFrame(); } } - private static void checkFilesAndDirectoriesTest(UIManager.LookAndFeelInfo laf) - throws Exception { + private static void checkFilesAndDirectoriesTest(UIManager.LookAndFeelInfo laf, + File dir) throws Exception { System.out.println("Testing Files and Directories mode"); try { SwingUtilities.invokeAndWait(() -> { createAndShowUI(); + fileChooser.setCurrentDirectory(dir); + fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); }); robot.waitForIdle(); robot.delay(1000); - fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); doTesting(laf, 50); } finally { - SwingUtilities.invokeAndWait(() -> { - if (frame != null) { - frame.dispose(); - } - }); + disposeFrame(); } } private static void createAndShowUI() { frame = new JFrame("Test File Chooser Single Directory Selection"); frame.getContentPane().setLayout(new BorderLayout()); - fileChooser = new JFileChooser("user.home"); + fileChooser = new JFileChooser(); fileChooser.setMultiSelectionEnabled(true); fileChooser.setControlButtonsAreShown(false); - - getSelectedFilesButton = new JButton(); - getSelectedFilesButton.setText("Print selected Files"); - getSelectedFilesButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent evt) { - passed = false; - File files[] = fileChooser.getSelectedFiles(); - if (files.length != 0) { - passed = true; - } - } - }); - frame.getContentPane().add(fileChooser, BorderLayout.CENTER); - frame.getContentPane().add(getSelectedFilesButton, BorderLayout.SOUTH); frame.pack(); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); @@ -189,30 +184,40 @@ private static void setLookAndFeel(UIManager.LookAndFeelInfo laf) { } } - private static void doTesting(UIManager.LookAndFeelInfo laf, int xOffset) { - Point frameLocation = fileChooser.getLocationOnScreen(); - int frameWidth = frame.getWidth(); - int frameHeight = frame.getHeight(); - - Point btnLocation = getSelectedFilesButton.getLocationOnScreen(); - int btnWidth = getSelectedFilesButton.getWidth(); - int btnHeight = getSelectedFilesButton.getHeight(); - clickMouse(frameLocation, 0, frameHeight, xOffset); - clickMouse(btnLocation, btnWidth, btnHeight, 0); + private static void doTesting(UIManager.LookAndFeelInfo laf, int xOffset) + throws Exception { + SwingUtilities.invokeAndWait(() -> { + Point fileChooserLocation = fileChooser.getLocationOnScreen(); + fileChooserLocation.y += frame.getHeight() / 3; + clickLocation = new Point(fileChooserLocation); + }); + clickMouse(clickLocation, xOffset); checkResult(laf); } - private static void clickMouse(Point point, int width, int height, - int xOffset) { - robot.mouseMove(point.x + width/2 + xOffset , point.y + height/3); + private static void clickMouse(Point point, int xOffset) { + robot.mouseMove(point.x + xOffset , point.y); robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); robot.delay(100); + robot.waitForIdle(); + } + + private static void checkResult(UIManager.LookAndFeelInfo laf) throws Exception { + SwingUtilities.invokeAndWait(() -> { + File[] files = fileChooser.getSelectedFiles(); + if (files.length == 0) { + throw new RuntimeException("getSelectedFiles returned " + + "empty array for LAF: " + laf.getClassName()); + } + }); } - private static void checkResult(UIManager.LookAndFeelInfo laf) { - if (!passed) - throw new RuntimeException("getSelectedFiles returned " + - "empty array for LAF: "+laf.getClassName()); + private static void disposeFrame() throws Exception { + SwingUtilities.invokeAndWait(() -> { + if (frame != null) { + frame.dispose(); + } + }); } } From a9cb120d03e5b2efa244086e213d3b9e4706558a Mon Sep 17 00:00:00 2001 From: Vicente Romero Date: Wed, 6 Dec 2023 16:48:08 +0000 Subject: [PATCH 238/250] 8320948: NPE due to unreported compiler error Reviewed-by: jlahoda --- .../sun/tools/javac/comp/DeferredAttr.java | 5 +++- .../recovery/CrashDueToUnreportedError.java | 29 +++++++++++++++++++ .../recovery/CrashDueToUnreportedError.out | 2 ++ 3 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 test/langtools/tools/javac/recovery/CrashDueToUnreportedError.java create mode 100644 test/langtools/tools/javac/recovery/CrashDueToUnreportedError.out diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/DeferredAttr.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/DeferredAttr.java index bc43c427a3474..56249fefad985 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/DeferredAttr.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/DeferredAttr.java @@ -1089,7 +1089,10 @@ private Type recover(DeferredType dt, Type pt) { boolean isLambdaOrMemberRef = dt.tree.hasTag(REFERENCE) || dt.tree.hasTag(LAMBDA); boolean needsRecoveryType = - pt == null || (isLambdaOrMemberRef && !types.isFunctionalInterface(pt)); + pt == null || + ((dt instanceof ArgumentAttr.ArgumentType at) && + at.speculativeTypes.values().stream().allMatch(type -> type.hasTag(ERROR))) || + (isLambdaOrMemberRef && !types.isFunctionalInterface(pt)); Type ptRecovery = needsRecoveryType ? Type.recoveryType: pt; dt.check(attr.new RecoveryInfo(deferredAttrContext, ptRecovery) { @Override diff --git a/test/langtools/tools/javac/recovery/CrashDueToUnreportedError.java b/test/langtools/tools/javac/recovery/CrashDueToUnreportedError.java new file mode 100644 index 0000000000000..4520a01f7ec88 --- /dev/null +++ b/test/langtools/tools/javac/recovery/CrashDueToUnreportedError.java @@ -0,0 +1,29 @@ +/** + * @test /nodynamiccopyright/ + * @bug 8320948 + * @summary NPE due to unreported compiler error + * @compile/fail/ref=CrashDueToUnreportedError.out -XDrawDiagnostics CrashDueToUnreportedError.java + */ + +import java.util.List; + +public class CrashDueToUnreportedError { + class Builder { + private Builder(Person person, String unused) {} + public Builder withTypes(Entity entities) { + return new Builder(Person.make(Entity.combineAll(entities))); + } + } + + interface Person { + static Person make(List> eventSubtypes) { + return null; + } + } + + class Entity { + public static List> combineAll(Entity subtypes) { + return null; + } + } +} diff --git a/test/langtools/tools/javac/recovery/CrashDueToUnreportedError.out b/test/langtools/tools/javac/recovery/CrashDueToUnreportedError.out new file mode 100644 index 0000000000000..83655eb07baae --- /dev/null +++ b/test/langtools/tools/javac/recovery/CrashDueToUnreportedError.out @@ -0,0 +1,2 @@ +CrashDueToUnreportedError.java:14:43: compiler.err.prob.found.req: (compiler.misc.infer.no.conforming.assignment.exists: E,compiler.misc.type.captureof: 1, ? extends CrashDueToUnreportedError.Entity,Root, (compiler.misc.inconvertible.types: java.util.List>, java.util.List>)) +1 error From dc9c77bebe28570096345d3d22fd3ed10280acad Mon Sep 17 00:00:00 2001 From: Anthony Scarpino Date: Wed, 6 Dec 2023 18:09:10 +0000 Subject: [PATCH 239/250] 8318756: Create better internal buffer for AEADs Reviewed-by: djelinski --- .../crypto/provider/AEADBufferedStream.java | 108 +++++ .../sun/crypto/provider/ChaCha20Cipher.java | 291 ++++++++++++- .../crypto/provider/GaloisCounterMode.java | 92 ++--- ...GCMBufferTest.java => AEADBufferTest.java} | 381 ++++++++++-------- .../bench/javax/crypto/full/AESGCMBench.java | 96 +---- .../javax/crypto/full/AESGCMByteBuffer.java | 124 +----- .../bench/javax/crypto/full/BenchBase.java | 131 ++++++ .../javax/crypto/full/ByteBufferBase.java | 160 ++++++++ .../javax/crypto/full/CC20P1305Bench.java | 49 +++ .../crypto/full/CC20P1305ByteBuffer.java | 50 +++ .../bench/javax/crypto/small/AESGCMBench.java | 20 +- .../javax/crypto/small/AESGCMByteBuffer.java | 20 +- .../javax/crypto/small/CC20P1305Bench.java | 48 +++ .../crypto/small/CC20P1305ByteBuffer.java | 48 +++ 14 files changed, 1173 insertions(+), 445 deletions(-) create mode 100644 src/java.base/share/classes/com/sun/crypto/provider/AEADBufferedStream.java rename test/jdk/com/sun/crypto/provider/Cipher/AEAD/{GCMBufferTest.java => AEADBufferTest.java} (69%) create mode 100644 test/micro/org/openjdk/bench/javax/crypto/full/BenchBase.java create mode 100644 test/micro/org/openjdk/bench/javax/crypto/full/ByteBufferBase.java create mode 100644 test/micro/org/openjdk/bench/javax/crypto/full/CC20P1305Bench.java create mode 100644 test/micro/org/openjdk/bench/javax/crypto/full/CC20P1305ByteBuffer.java create mode 100644 test/micro/org/openjdk/bench/javax/crypto/small/CC20P1305Bench.java create mode 100644 test/micro/org/openjdk/bench/javax/crypto/small/CC20P1305ByteBuffer.java diff --git a/src/java.base/share/classes/com/sun/crypto/provider/AEADBufferedStream.java b/src/java.base/share/classes/com/sun/crypto/provider/AEADBufferedStream.java new file mode 100644 index 0000000000000..340458ca77e7f --- /dev/null +++ b/src/java.base/share/classes/com/sun/crypto/provider/AEADBufferedStream.java @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.sun.crypto.provider; + +import jdk.internal.util.ArraysSupport; + +import java.io.ByteArrayOutputStream; +import java.nio.ByteBuffer; +import java.util.Arrays; +import java.util.HexFormat; + +/** + * This class extends ByteArrayOutputStream by optimizing internal buffering. + * It skips bounds checking, as the buffers are known and input previously + * checked. toByteArray() returns the internal buffer to avoid an extra copy. + * + * This uses `count` to determine the state of `buf`. `buf` can still + * point to an array while `count` equals zero. + */ +final class AEADBufferedStream extends ByteArrayOutputStream { + + /** + * Create an instance with the specified buffer + */ + + public AEADBufferedStream(int len) { + super(len); + } + + /** + * This method saves memory by returning the internal buffer. The calling + * method must use {@code size()} for the relevant data length as the + * returning byte[] maybe larger. + * + * @return internal buffer. + */ + public byte[] getBuffer() { + return buf; + } + + /** + * This method with expand the buffer if {@code count} + {@code len} + * is larger than the buffer byte[] length. + * @param len length to add to the current buffer + */ + private void checkCapacity(int len) { + int blen = buf.length; + // Create a new larger buffer and append the new data + if (blen < count + len) { + buf = Arrays.copyOf(buf, ArraysSupport.newLength(blen, len, blen)); + } + } + + /** + * Takes a ByteBuffer writing non-blocksize data directly to the internal + * buffer. + * @param src remaining non-blocksize ByteBuffer + */ + public void write(ByteBuffer src) { + int pos = src.position(); + int len = src.remaining(); + + if (src.hasArray()) { + write(src.array(), pos + src.arrayOffset(), len); + src.position(pos + len); + return; + } + + checkCapacity(len); + src.get(buf, count, len); + count += len; + } + + @Override + public void write(byte[] in, int offset, int len) { + checkCapacity(len); + System.arraycopy(in, offset, buf, count, len); + count += len; + } + + @Override + public String toString() { + return (count == 0 ? "null" : HexFormat.of().formatHex(buf)); + } +} diff --git a/src/java.base/share/classes/com/sun/crypto/provider/ChaCha20Cipher.java b/src/java.base/share/classes/com/sun/crypto/provider/ChaCha20Cipher.java index 857cf52d3b614..ed2fda5bf0086 100644 --- a/src/java.base/share/classes/com/sun/crypto/provider/ChaCha20Cipher.java +++ b/src/java.base/share/classes/com/sun/crypto/provider/ChaCha20Cipher.java @@ -25,7 +25,6 @@ package com.sun.crypto.provider; -import java.io.ByteArrayOutputStream; import java.io.IOException; import java.lang.invoke.MethodHandles; import java.lang.invoke.VarHandle; @@ -64,7 +63,6 @@ abstract class ChaCha20Cipher extends CipherSpi { private static final int KS_MAX_LEN = 1024; private static final int KS_BLK_SIZE = 64; private static final int KS_SIZE_INTS = KS_BLK_SIZE / Integer.BYTES; - private static final int CIPHERBUF_BASE = 1024; // The initialization state of the cipher private boolean initialized; @@ -650,7 +648,7 @@ protected byte[] engineUpdate(byte[] in, int inOfs, int inLen) { try { engine.doUpdate(in, inOfs, inLen, out, 0); } catch (ShortBufferException | KeyException exc) { - throw new RuntimeException(exc); + throw new ProviderException(exc); } return out; @@ -681,11 +679,35 @@ protected int engineUpdate(byte[] in, int inOfs, int inLen, try { bytesUpdated = engine.doUpdate(in, inOfs, inLen, out, outOfs); } catch (KeyException ke) { - throw new RuntimeException(ke); + throw new ProviderException(ke); } return bytesUpdated; } + /** + * Update the currently running operation with additional data + * + * @param input the plaintext or ciphertext ByteBuffer + * @param output ByteBuffer that will hold the resulting data. This + * must be large enough to hold the resulting data. + * + * @return the length in bytes of the data written into the {@code out} + * buffer. + * + * @throws ShortBufferException if the buffer {@code out} does not have + * enough space to hold the resulting data. + */ + @Override + protected int engineUpdate(ByteBuffer input, ByteBuffer output) + throws ShortBufferException { + try { + return bufferCrypt(input, output, true); + } catch (AEADBadTagException e) { + // exception is never thrown by update ops + throw new AssertionError(e); + } + } + /** * Complete the currently running operation using any final * data provided by the caller. @@ -753,6 +775,118 @@ protected int engineDoFinal(byte[] in, int inOfs, int inLen, byte[] out, return bytesUpdated; } + /** + * Complete the currently running operation using any final + * data provided by the caller. + * + * @param input the plaintext or ciphertext input bytebuffer. + * @param output ByteBuffer that will hold the resulting data. This + * must be large enough to hold the resulting data. + * + * @return the resulting plaintext or ciphertext bytes. + * + * @throws AEADBadTagException if, during decryption, the provided tag + * does not match the calculated tag. + */ + @Override + protected int engineDoFinal(ByteBuffer input, ByteBuffer output) + throws ShortBufferException, AEADBadTagException { + return bufferCrypt(input, output, false); + } + + /* + * Optimized version of bufferCrypt from CipherSpi.java. Direct + * ByteBuffers send to the engine code. + */ + private int bufferCrypt(ByteBuffer input, ByteBuffer output, + boolean isUpdate) throws ShortBufferException, AEADBadTagException { + if ((input == null) || (output == null)) { + throw new NullPointerException + ("Input and output buffers must not be null"); + } + int inPos = input.position(); + int inLimit = input.limit(); + int inLen = inLimit - inPos; + if (isUpdate && (inLen == 0)) { + return 0; + } + int outLenNeeded = engine.getOutputSize(inLen, !isUpdate); + + if (output.remaining() < outLenNeeded) { + throw new ShortBufferException("Need at least " + outLenNeeded + + " bytes of space in output buffer"); + } + + int total = 0; + + // Check if input bytebuffer is heap-backed + if (input.hasArray()) { + byte[] inArray = input.array(); + int inOfs = input.arrayOffset() + inPos; + + byte[] outArray; + // Check if output bytebuffer is heap-backed + if (output.hasArray()) { + outArray = output.array(); + int outPos = output.position(); + int outOfs = output.arrayOffset() + outPos; + + // check array address and offsets and use temp output buffer + // if output offset is larger than input offset and + // falls within the range of input data + boolean useTempOut = false; + if (inArray == outArray && + ((inOfs < outOfs) && (outOfs < inOfs + inLen))) { + useTempOut = true; + outArray = new byte[outLenNeeded]; + outOfs = 0; + } + try { + if (isUpdate) { + total = engine.doUpdate(inArray, inOfs, inLen, outArray, + outOfs); + } else { + total = engine.doFinal(inArray, inOfs, inLen, outArray, + outOfs); + } + } catch (KeyException e) { + throw new ProviderException(e); + } + if (useTempOut) { + output.put(outArray, outOfs, total); + } else { + // adjust output position manually + output.position(outPos + total); + } + } else { // if output is direct + if (isUpdate) { + outArray = engineUpdate(inArray, inOfs, inLen); + } else { + outArray = engineDoFinal(inArray, inOfs, inLen); + } + if (outArray != null && outArray.length != 0) { + output.put(outArray); + total = outArray.length; + } + } + // adjust input position manually + input.position(inLimit); + } else { // Bytebuffers are both direct + try { + if (isUpdate) { + return engine.doUpdate(input, output); + } + return engine.doFinal(input, output); + } catch (KeyException e) { + throw new ProviderException(e); + } + } + + return total; + } + + + /** * Wrap a {@code Key} using this Cipher's current encryption parameters. * @@ -1243,6 +1377,11 @@ int doUpdate(byte[] in, int inOff, int inLen, byte[] out, int outOff) */ int doFinal(byte[] in, int inOff, int inLen, byte[] out, int outOff) throws ShortBufferException, AEADBadTagException, KeyException; + + int doUpdate(ByteBuffer input, ByteBuffer output) throws + ShortBufferException, KeyException; + int doFinal(ByteBuffer input, ByteBuffer output) throws + ShortBufferException, KeyException, AEADBadTagException; } private final class EngineStreamOnly implements ChaChaEngine { @@ -1285,6 +1424,22 @@ public int doFinal(byte[] in, int inOff, int inLen, byte[] out, int outOff) throws ShortBufferException, KeyException { return doUpdate(in, inOff, inLen, out, outOff); } + + @Override + public int doUpdate(ByteBuffer input, ByteBuffer output) throws + ShortBufferException, KeyException { + byte[] data = new byte[input.remaining()]; + input.get(data); + doUpdate(data, 0, data.length, data, 0); + output.put(data); + return data.length; + } + + @Override + public int doFinal(ByteBuffer input, ByteBuffer output) + throws ShortBufferException, KeyException { + return doUpdate(input, output); + } } private final class EngineAEADEnc implements ChaChaEngine { @@ -1348,11 +1503,32 @@ public int doFinal(byte[] in, int inOff, int inLen, byte[] out, aadDone = false; return inLen + TAG_LENGTH; } + + @Override + public int doUpdate(ByteBuffer input, ByteBuffer output) throws + ShortBufferException, KeyException { + byte[] data = new byte[input.remaining()]; + input.get(data); + doUpdate(data, 0, data.length, data, 0); + output.put(data); + return data.length; + } + + @Override + public int doFinal(ByteBuffer input, ByteBuffer output) throws + ShortBufferException, KeyException { + int len = input.remaining(); + byte[] data = new byte[len + TAG_LENGTH]; + input.get(data, 0, len); + doFinal(data, 0, len, data, 0); + output.put(data); + return data.length; + } } private final class EngineAEADDec implements ChaChaEngine { - private final ByteArrayOutputStream cipherBuf; + private AEADBufferedStream cipherBuf = null; private final byte[] tag; @Override @@ -1364,20 +1540,32 @@ public int getOutputSize(int inLen, boolean isFinal) { // size. return (isFinal ? Integer.max(Math.addExact((inLen - TAG_LENGTH), - cipherBuf.size()), 0) : 0); + getBufferedLength()), 0) : 0); + } + + private void initBuffer(int len) { + if (cipherBuf == null) { + cipherBuf = new AEADBufferedStream(len); + } + } + + private int getBufferedLength() { + if (cipherBuf != null) { + return cipherBuf.size(); + } + return 0; } private EngineAEADDec() throws InvalidKeyException { initAuthenticator(); initCounterValue = 1; counter = initCounterValue; - cipherBuf = new ByteArrayOutputStream(CIPHERBUF_BASE); tag = new byte[TAG_LENGTH]; } @Override public int doUpdate(byte[] in, int inOff, int inLen, byte[] out, - int outOff) { + int outOff) { if (initialized) { // If this is the first update since AAD updates, signal that // we're done processing AAD info and pad the AAD to a multiple @@ -1389,6 +1577,7 @@ public int doUpdate(byte[] in, int inOff, int inLen, byte[] out, if (in != null) { Objects.checkFromIndexSize(inOff, inLen, in.length); + initBuffer(inLen); cipherBuf.write(in, inOff, inLen); } } else { @@ -1399,6 +1588,14 @@ public int doUpdate(byte[] in, int inOff, int inLen, byte[] out, return 0; } + + @Override + public int doUpdate(ByteBuffer input, ByteBuffer output) { + initBuffer(input.remaining()); + cipherBuf.write(input); + return 0; + } + @Override public int doFinal(byte[] in, int inOff, int inLen, byte[] out, int outOff) throws ShortBufferException, AEADBadTagException, @@ -1406,7 +1603,7 @@ public int doFinal(byte[] in, int inOff, int inLen, byte[] out, byte[] ctPlusTag; int ctPlusTagLen; - if (cipherBuf.size() == 0 && inOff == 0) { + if (getBufferedLength() == 0) { // No previous data has been seen before doFinal, so we do // not need to hold any ciphertext in a buffer. We can // process it directly from the "in" parameter. @@ -1415,10 +1612,11 @@ public int doFinal(byte[] in, int inOff, int inLen, byte[] out, ctPlusTagLen = inLen; } else { doUpdate(in, inOff, inLen, out, outOff); - ctPlusTag = cipherBuf.toByteArray(); - ctPlusTagLen = ctPlusTag.length; + ctPlusTag = cipherBuf.getBuffer(); + inOff = 0; + ctPlusTagLen = cipherBuf.size(); + cipherBuf.reset(); } - cipherBuf.reset(); // There must at least be a tag length's worth of ciphertext // data in the buffered input. @@ -1436,19 +1634,80 @@ public int doFinal(byte[] in, int inOff, int inLen, byte[] out, // Calculate and compare the tag. Only do the decryption // if and only if the tag matches. - authFinalizeData(ctPlusTag, 0, ctLen, tag, 0); - long tagCompare = ((long)asLongView.get(ctPlusTag, ctLen) ^ + authFinalizeData(ctPlusTag, inOff, ctLen, tag, 0); + long tagCompare = ((long)asLongView.get(ctPlusTag, ctLen + inOff) ^ (long)asLongView.get(tag, 0)) | - ((long)asLongView.get(ctPlusTag, ctLen + Long.BYTES) ^ + ((long)asLongView.get(ctPlusTag, ctLen + inOff + Long.BYTES) ^ (long)asLongView.get(tag, Long.BYTES)); if (tagCompare != 0) { throw new AEADBadTagException("Tag mismatch"); } - chaCha20Transform(ctPlusTag, 0, ctLen, out, outOff); + chaCha20Transform(ctPlusTag, inOff, ctLen, out, outOff); aadDone = false; return ctLen; } + + @Override + public int doFinal(ByteBuffer input, ByteBuffer output) + throws ShortBufferException, AEADBadTagException, KeyException { + int len; + int inLen = input.remaining(); + byte[] ct = null, buf = null; + //buf = (getBufferedLength() == 0 ? null : cipherBuf.toByteArray()); + int bufLen = 0; + // The length of cipher text and tag + int ctLen = getBufferedLength() + inLen; + + if (ctLen < TAG_LENGTH) { + throw new AEADBadTagException("Input too short - need tag"); + } + + if (inLen < TAG_LENGTH) { + if (inLen > 0) { + doUpdate(input, output); + } + if (cipherBuf != null) { + ct = cipherBuf.getBuffer(); + } + len = ctLen; + } else { + if (cipherBuf != null) { + buf = cipherBuf.getBuffer(); + bufLen = cipherBuf.size(); + } + ct = new byte[inLen]; + input.get(ct, 0, inLen); + len = inLen; + } + doUpdate(null, 0, 0, null, 0); + + // If there is an internal buffer, calculate its tag contribution. + if (buf != null) { + dataLen = authUpdate(buf, 0, bufLen); + } + // Complete tag calculation + len -= TAG_LENGTH; + authFinalizeData(ct, 0, len, tag, 0); + // Check tag + if ((((long) asLongView.get(ct, len) ^ + (long) asLongView.get(tag, 0)) | + ((long) asLongView.get(ct, len + Long.BYTES) ^ + (long) asLongView.get(tag, Long.BYTES))) != 0) { + throw new AEADBadTagException("Tag mismatch"); + } + + // decrypt internal buffer in-place, then put it into the bytebuffer + if (buf != null) { + chaCha20Transform(buf, 0, bufLen, buf, 0); + output.put(buf, 0, bufLen); + } + // decrypt input buffer in-place, append it to the bytebuffer + chaCha20Transform(ct, 0, len, ct, 0); + output.put(ct, 0, len); + aadDone = false; + return ctLen - TAG_LENGTH; + } } public static final class ChaCha20Only extends ChaCha20Cipher { diff --git a/src/java.base/share/classes/com/sun/crypto/provider/GaloisCounterMode.java b/src/java.base/share/classes/com/sun/crypto/provider/GaloisCounterMode.java index bca020b74ed23..8cfd7d13f12b2 100644 --- a/src/java.base/share/classes/com/sun/crypto/provider/GaloisCounterMode.java +++ b/src/java.base/share/classes/com/sun/crypto/provider/GaloisCounterMode.java @@ -40,8 +40,6 @@ import javax.crypto.NoSuchPaddingException; import javax.crypto.ShortBufferException; import javax.crypto.spec.GCMParameterSpec; -import java.io.ByteArrayOutputStream; -import java.io.IOException; import java.lang.invoke.MethodHandles; import java.lang.invoke.VarHandle; import java.nio.ByteBuffer; @@ -249,7 +247,7 @@ private static byte[] createIv(SecureRandom rand) { protected AlgorithmParameters engineGetParameters() { GCMParameterSpec spec; spec = new GCMParameterSpec(tagLenBytes * 8, - iv == null ? createIv(random) : iv.clone()); + iv == null ? createIv(random) : iv); // iv.clone() not necessary try { AlgorithmParameters params = AlgorithmParameters.getInstance("GCM", @@ -680,12 +678,12 @@ abstract class GCMEngine { final int blockSize; // buffer for AAD data; if null, meaning update has been called - ByteArrayOutputStream aadBuffer = null; + AEADBufferedStream aadBuffer = null; int sizeOfAAD = 0; boolean aadProcessed = false; // buffer data for crypto operation - ByteArrayOutputStream ibuffer = null; + AEADBufferedStream ibuffer = null; // Original dst buffer if there was an overlap situation ByteBuffer originalDst = null; @@ -736,7 +734,7 @@ abstract int doFinal(ByteBuffer src, ByteBuffer dst) // Initialize internal data buffer, if not already. void initBuffer(int len) { if (ibuffer == null) { - ibuffer = new ByteArrayOutputStream(len); + ibuffer = new AEADBufferedStream(len); } } @@ -788,20 +786,6 @@ int implGCMCrypt(ByteBuffer src, ByteBuffer dst) { } } - /** - * The method takes two buffers to create one block of data. The - * difference with the other mergeBlock is this will calculate - * the bufLen from the existing 'buffer' length & offset - * - * This is only called when buffer length is less than a blockSize - * @return number of bytes used from 'in' - */ - int mergeBlock(byte[] buffer, int bufOfs, byte[] in, int inOfs, - int inLen, byte[] block) { - return mergeBlock(buffer, bufOfs, buffer.length - bufOfs, in, - inOfs, inLen, block); - } - /** * The method takes two buffers to create one block of data * @@ -822,7 +806,7 @@ int mergeBlock(byte[] buffer, int bufOfs, int bufLen, byte[] in, } /** - * Continues a multi-part update of the Additional Authentication + * Continues a multipart update of the Additional Authentication * Data (AAD), using a subset of the provided buffer. All AAD must be * supplied before beginning operations on the ciphertext (via the * {@code update} and {@code doFinal} methods). @@ -843,7 +827,7 @@ void updateAAD(byte[] src, int offset, int len) { if (aadBuffer == null) { if (sizeOfAAD == 0 && !aadProcessed) { - aadBuffer = new ByteArrayOutputStream(len); + aadBuffer = new AEADBufferedStream(len); } else { // update has already been called throw new IllegalStateException @@ -856,18 +840,17 @@ void updateAAD(byte[] src, int offset, int len) { // Feed the AAD data to GHASH, pad if necessary void processAAD() { if (aadBuffer != null) { - if (aadBuffer.size() > 0) { - byte[] aad = aadBuffer.toByteArray(); - sizeOfAAD = aad.length; - - int lastLen = aad.length % blockSize; + sizeOfAAD = aadBuffer.size(); + if (sizeOfAAD > 0) { + byte[] aad = aadBuffer.getBuffer(); + int lastLen = sizeOfAAD % blockSize; if (lastLen != 0) { - ghash.update(aad, 0, aad.length - lastLen); + ghash.update(aad, 0, sizeOfAAD - lastLen); byte[] padded = expandToOneBlock(aad, - aad.length - lastLen, lastLen, blockSize); + sizeOfAAD - lastLen, lastLen, blockSize); ghash.update(padded); } else { - ghash.update(aad); + ghash.update(aad, 0, sizeOfAAD); } } aadBuffer = null; @@ -1147,7 +1130,7 @@ public int doUpdate(byte[] in, int inOfs, int inLen, byte[] out, // if there is enough data in the ibuffer and 'in', encrypt it. if (bLen > 0) { - byte[] buffer = ibuffer.toByteArray(); + byte[] buffer = ibuffer.getBuffer(); // number of bytes not filling a block int remainder = blockSize - bLen; @@ -1167,7 +1150,7 @@ public int doUpdate(byte[] in, int inOfs, int inLen, byte[] out, } } - // Encrypt the remaining blocks inside of 'in' + // Encrypt the remaining blocks inside 'in' if (inLen >= PARALLEL_LEN) { int r = GaloisCounterMode.implGCMCrypt(in, inOfs, inLen, out, outOfs, out, outOfs, gctr, ghash); @@ -1223,7 +1206,8 @@ public int doUpdate(ByteBuffer src, ByteBuffer dst) // Check if there is enough 'src' and 'buffer' to fill a block if (src.remaining() >= remainder) { byte[] block = new byte[blockSize]; - ByteBuffer buffer = ByteBuffer.wrap(ibuffer.toByteArray()); + ByteBuffer buffer = ByteBuffer.wrap(ibuffer.getBuffer(), + 0, ibuffer.size()); buffer.get(block, 0, bLen); src.get(block, bLen, remainder); len += op.update(ByteBuffer.wrap(block, 0, blockSize), @@ -1251,14 +1235,8 @@ public int doUpdate(ByteBuffer src, ByteBuffer dst) // Write the remaining bytes into the 'ibuffer' if (srcLen > 0) { initBuffer(srcLen); - byte[] b = new byte[srcLen]; - src.get(b); // remainder offset is based on original buffer length - try { - ibuffer.write(b); - } catch (IOException e) { - throw new RuntimeException(e); - } + ibuffer.write(src); } restoreDst(dst); @@ -1290,13 +1268,13 @@ public int doFinal(byte[] in, int inOfs, int inLen, byte[] out, // process what is in the ibuffer if (bLen > 0) { - byte[] buffer = ibuffer.toByteArray(); + byte[] buffer = ibuffer.getBuffer(); // Make a block if the remaining ibuffer and 'in' can make one. if (bLen + inLen >= blockSize) { int r; block = new byte[blockSize]; - r = mergeBlock(buffer, 0, in, inOfs, inLen, block); + r = mergeBlock(buffer, 0, ibuffer.size(), in, inOfs, inLen, block); inOfs += r; inLen -= r; op.update(block, 0, blockSize, out, outOfs); @@ -1353,7 +1331,8 @@ public int doFinal(ByteBuffer src, ByteBuffer dst) throws if (len > 0) { processed += doLastBlock(op, (ibuffer == null || ibuffer.size() == 0) ? null : - ByteBuffer.wrap(ibuffer.toByteArray()), src, dst); + ByteBuffer.wrap(ibuffer.getBuffer(), 0, + ibuffer.size()), src, dst); } // release buffer if needed @@ -1427,9 +1406,10 @@ void findTag(byte[] in, int inOfs, int inLen) { tagLenBytes); } else { // tagOfs will be negative - byte[] buffer = ibuffer.toByteArray(); - tagOfs = mergeBlock(buffer, - buffer.length - (tagLenBytes - inLen), in, inOfs, inLen, + byte[] buffer = ibuffer.getBuffer(); + int ofs = ibuffer.size() - (tagLenBytes - inLen); + tagOfs = mergeBlock(buffer, ofs, ibuffer.size() - ofs, + in, inOfs, inLen, tag) - tagLenBytes; } } @@ -1475,15 +1455,8 @@ public int doUpdate(ByteBuffer src, ByteBuffer dst) src.remaining(), null, 0); src.position(src.limit()); } else { - byte[] b = new byte[src.remaining()]; - src.get(b); - initBuffer(b.length); - try { - ibuffer.write(b); - } catch (IOException e) { - throw new ProviderException( - "Unable to add remaining input to the buffer", e); - } + initBuffer(src.remaining()); + ibuffer.write(src); } } return 0; @@ -1491,7 +1464,7 @@ public int doUpdate(ByteBuffer src, ByteBuffer dst) /** * Use available data from ibuffer and 'in' to verify and decrypt the - * data. If the verification fails, the 'out' left to it's original + * data. If the verification fails, the 'out' left to its original * values if crypto was in-place; otherwise 'out' is zeroed */ @Override @@ -1551,7 +1524,7 @@ public int doFinal(byte[] in, int inOfs, int inLen, byte[] out, /** * Use available data from ibuffer and 'src' to verify and decrypt the - * data. If the verification fails, the 'dst' left to it's original + * data. If the verification fails, the 'dst' left to its original * values if crypto was in-place; otherwise 'dst' is zeroed */ @Override @@ -1568,7 +1541,8 @@ public int doFinal(ByteBuffer src, ByteBuffer dst) // Check if ibuffer has data if (getBufferedLength() != 0) { - buffer = ByteBuffer.wrap(ibuffer.toByteArray()); + buffer = ByteBuffer.wrap(ibuffer.getBuffer(), 0, + ibuffer.size()); len += buffer.remaining(); } @@ -1684,7 +1658,7 @@ int decryptBlocks(GCMOperation op, byte[] in, int inOfs, int inLen, } if (bLen > 0) { - buffer = ibuffer.toByteArray(); + buffer = ibuffer.getBuffer(); if (bLen >= PARALLEL_LEN) { len = GaloisCounterMode.implGCMCrypt(buffer, 0, bLen, diff --git a/test/jdk/com/sun/crypto/provider/Cipher/AEAD/GCMBufferTest.java b/test/jdk/com/sun/crypto/provider/Cipher/AEAD/AEADBufferTest.java similarity index 69% rename from test/jdk/com/sun/crypto/provider/Cipher/AEAD/GCMBufferTest.java rename to test/jdk/com/sun/crypto/provider/Cipher/AEAD/AEADBufferTest.java index dd414ad06daba..4bf5a6263a90b 100644 --- a/test/jdk/com/sun/crypto/provider/Cipher/AEAD/GCMBufferTest.java +++ b/test/jdk/com/sun/crypto/provider/Cipher/AEAD/AEADBufferTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2023, 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 @@ -34,16 +34,18 @@ import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.spec.GCMParameterSpec; +import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.io.ByteArrayOutputStream; import java.nio.ByteBuffer; import java.security.SecureRandom; +import java.security.spec.AlgorithmParameterSpec; import java.util.Arrays; import java.util.HashMap; import java.util.HexFormat; import java.util.List; -public class GCMBufferTest implements Cloneable { +public class AEADBufferTest implements Cloneable { // Data type for the operation enum dtype { BYTE, HEAP, DIRECT }; @@ -52,7 +54,7 @@ enum dtype { BYTE, HEAP, DIRECT }; // List of enum values for order of operation List ops; - static final int AESBLOCK = 16; + static final String AES = "AES"; // The remaining input data length is inserted at the particular index // in sizes[] during execution. static final int REMAINDER = -1; @@ -71,42 +73,59 @@ static class Data { int id; SecretKey key; byte[] iv; + int counter; // for CC20 byte[] pt; byte[] aad; byte[] ct; byte[] tag; + int blockSize; // 16 for GCM, 0 for CC20 Data(String keyalgo, int id, String key, String iv, byte[] pt, String aad, + String ct, String tag) { + this(keyalgo, id, key, iv, 0,pt, aad, ct,tag); + } + + Data(String keyalgo, int id, String key, String iv, String pt, String aad, + String ct, String tag) { + this(keyalgo, id, key, iv, HexToBytes(pt), aad, ct, tag); + } + + Data(String keyalgo, int id, String key, String iv, int counter, byte[] pt, String aad, String ct, String tag) { this.id = id; this.key = new SecretKeySpec(HexToBytes(key), keyalgo); this.iv = HexToBytes(iv); + this.counter = counter; this.pt = pt; this.aad = HexToBytes(aad); this.ct = HexToBytes(ct); this.tag = HexToBytes(tag); + this.blockSize = (keyalgo.equals(AES) ? 16 : 0); } - Data(String keyalgo, int id, String key, String iv, String pt, String aad, + Data(String keyalgo, int id, String key, String iv, int counter, String pt, String aad, String ct, String tag) { - this(keyalgo, id, key, iv, HexToBytes(pt), aad, ct, tag); + this(keyalgo, id, key, iv, counter, HexToBytes(pt), aad, ct, tag); } - Data(String keyalgo, int id, String key, int ptlen) { + Data(String keyalgo, int id, String key, int ivLen, int ptlen) { this.id = id; this.key = new SecretKeySpec(HexToBytes(key), keyalgo); - iv = new byte[16]; + iv = new byte[ivLen]; + counter = 0; pt = new byte[ptlen]; - tag = new byte[12]; + tag = new byte[16]; aad = new byte[0]; + boolean isGCM = keyalgo.equals(AES); + this.blockSize = (isGCM ? 16 : 0); byte[] tct = null; try { SecureRandom r = new SecureRandom(); r.nextBytes(iv); r.nextBytes(pt); - Cipher c = Cipher.getInstance("AES/GCM/NoPadding"); + Cipher c = Cipher.getInstance(isGCM ? "AES/GCM/NoPadding": "ChaCha20-Poly1305"); c.init(Cipher.ENCRYPT_MODE, this.key, - new GCMParameterSpec(tag.length * 8, this.iv)); + getAPS(keyalgo, tag.length, iv)); tct = c.doFinal(pt); } catch (Exception e) { throw new RuntimeException("Error in generating data for length " + @@ -117,7 +136,7 @@ static class Data { System.arraycopy(tct, ct.length, tag, 0, tag.length); } - private static final byte[] HexToBytes(String hexVal) { + private static byte[] HexToBytes(String hexVal) { if (hexVal == null) { return new byte[0]; } @@ -133,15 +152,15 @@ private static final byte[] HexToBytes(String hexVal) { * doFinal operation will occur. If multiple dtypes are * specified, the last is a doFinal, the others are updates. */ - GCMBufferTest(String algo, List ops) { + AEADBufferTest(String algo, List ops) { this.algo = algo; this.ops = ops; theoreticalCheck = true; dataSet = datamap.get(algo); } - public GCMBufferTest clone() throws CloneNotSupportedException{ - return (GCMBufferTest)super.clone(); + public AEADBufferTest clone() throws CloneNotSupportedException{ + return (AEADBufferTest)super.clone(); } /** @@ -150,7 +169,7 @@ public GCMBufferTest clone() throws CloneNotSupportedException{ * that index during execution. * @param sizes Data sizes for each dtype in the list. */ - GCMBufferTest dataSegments(int[] sizes) { + AEADBufferTest dataSegments(int[] sizes) { this.sizes = sizes; return this; } @@ -158,7 +177,7 @@ GCMBufferTest dataSegments(int[] sizes) { /** * Do not perform in-place operations */ - GCMBufferTest differentBufferOnly() { + AEADBufferTest differentBufferOnly() { this.same = false; return this; } @@ -167,7 +186,7 @@ GCMBufferTest differentBufferOnly() { * Enable incrementing through each data size available. This can only be * used when the List has more than one dtype entry. */ - GCMBufferTest incrementalSegments() { + AEADBufferTest incrementalSegments() { this.incremental = true; return this; } @@ -177,7 +196,7 @@ GCMBufferTest incrementalSegments() { * * @param id id value for the test data to used in this test. */ - GCMBufferTest dataSet(int id) throws Exception { + AEADBufferTest dataSet(int id) throws Exception { for (Data d : datamap.get(algo)) { if (d.id == id) { dataSet = List.of(d); @@ -192,7 +211,7 @@ GCMBufferTest dataSet(int id) throws Exception { * @param offset value for inOfs and outOfs * @return */ - GCMBufferTest offset(int offset) { + AEADBufferTest offset(int offset) { this.inOfs = offset; this.outOfs = offset; return this; @@ -201,9 +220,8 @@ GCMBufferTest offset(int offset) { /** * Set the input offset * @param offset value for input offset - * @return */ - GCMBufferTest inOfs(int offset) { + AEADBufferTest inOfs(int offset) { this.inOfs = offset; return this; } @@ -211,9 +229,8 @@ GCMBufferTest inOfs(int offset) { /** * Set the output offset * @param offset value for output offset - * @return */ - GCMBufferTest outOfs(int offset) { + AEADBufferTest outOfs(int offset) { this.outOfs = offset; return this; } @@ -313,7 +330,7 @@ void encrypt(Data data) throws Exception { // Test with in-place buffers if (same) { System.err.println("\tinput len: " + input.length + " inOfs " + - inOfs + " outOfs " + outOfs + " in/out buffer: in-place"); + inOfs + " outOfs " + outOfs + " in/out buffer: in-place"); cryptoSameBuffer(true, data, input, output); } } @@ -335,31 +352,40 @@ void decrypt(Data data) throws Exception { // Test with in-place buffers if (same) { System.err.println("\tinput len: " + input.length + " inOfs " + - inOfs + " outOfs " + outOfs + " in-place: same"); + inOfs + " outOfs " + outOfs + " in-place: same"); cryptoSameBuffer(false, data, input, output); } } + static AlgorithmParameterSpec getAPS(String algo, int tLen, byte[] iv) { + return switch (algo) { + case "AES", "AES/GCM/NoPadding" -> + new GCMParameterSpec(tLen * 8, iv); + case "CC20", "ChaCha20-Poly1305" -> new IvParameterSpec(iv); + default -> null; + }; + } + /** * Perform cipher operation using different input and output buffers. * This method allows mixing of data types (byte, heap, direct). */ - void crypto(boolean encrypt, Data d, byte[] input, byte[] output) - throws Exception { + void crypto(boolean encrypt, Data d, byte[] input, byte[] output) + throws Exception { byte[] pt = new byte[input.length + inOfs]; System.arraycopy(input, 0, pt, inOfs, input.length); - byte[] expectedOut = new byte[output.length + outOfs]; - System.arraycopy(output, 0, expectedOut, outOfs, output.length); + byte[] expectedOut = new byte[output.length + outOfs]; + System.arraycopy(output, 0, expectedOut, outOfs, output.length); int plen = input.length / ops.size(); // partial input length int theoreticallen;// expected output length int dataoffset = 0; // offset of unconsumed data in pt int index = 0; // index of which op we are on int rlen; // result length - int pbuflen = 0; // plen remaining in the GCM internal buffers + int pbuflen = 0; // plen remaining in the internal buffers Cipher cipher = Cipher.getInstance(algo); cipher.init((encrypt ? Cipher.ENCRYPT_MODE : Cipher.DECRYPT_MODE), - d.key, new GCMParameterSpec(d.tag.length * 8, d.iv)); + d.key, getAPS(algo, d.tag.length, d.iv)); cipher.updateAAD(d.aad); ByteArrayOutputStream ba = new ByteArrayOutputStream(); @@ -382,10 +408,11 @@ void crypto(boolean encrypt, Data d, byte[] input, byte[] output) /* * The theoretical limit is the length of the data sent to - * update() + any data might be setting in CipherCore or GCM + * update() + any data might be setting in CipherCore or AEAD * internal buffers % the block size. */ - theoreticallen = (plen + pbuflen) - ((plen + pbuflen) % AESBLOCK); + theoreticallen = (plen + pbuflen) - (d.blockSize > 0 ? + (plen + pbuflen) % d.blockSize : 0); // Update operations switch (v) { @@ -525,7 +552,8 @@ void cryptoSameBuffer(boolean encrypt, Data d, byte[] input, byte[] output) thro byte[] expectedOut = new byte[output.length + outOfs]; System.arraycopy(output, 0, expectedOut, outOfs, output.length); int plen = input.length / ops.size(); // partial input length - int theorticallen = plen - (plen % AESBLOCK); // output length + int theorticallen = plen - + (d.blockSize > 0 ? plen % d.blockSize : 0); // output length int dataoffset = 0; int index = 0; int rlen = 0; // result length @@ -533,7 +561,7 @@ void cryptoSameBuffer(boolean encrypt, Data d, byte[] input, byte[] output) thro Cipher cipher = Cipher.getInstance(algo); cipher.init((encrypt ? Cipher.ENCRYPT_MODE : Cipher.DECRYPT_MODE), - d.key, new GCMParameterSpec(d.tag.length * 8, d.iv)); + d.key, getAPS(algo, d.tag.length, d.iv)); cipher.updateAAD(d.aad); // Prepare data @@ -567,8 +595,8 @@ void cryptoSameBuffer(boolean encrypt, Data d, byte[] input, byte[] output) thro data, len + outOfs); } case HEAP, DIRECT -> { - theorticallen = bbin.remaining() - - (bbin.remaining() % AESBLOCK); + theorticallen = bbin.remaining() - (d.blockSize > 0 ? + bbin.remaining() % d.blockSize : 0); rlen = cipher.update(bbin, bbout); } default -> throw new Exception("Unknown op: " + v.name()); @@ -620,7 +648,7 @@ void cryptoSameBuffer(boolean encrypt, Data d, byte[] input, byte[] output) thro } } } - static void offsetTests(GCMBufferTest t) throws Exception { + static void offsetTests(AEADBufferTest t) throws Exception { t.clone().offset(2).test(); t.clone().inOfs(2).test(); // Test not designed for overlap situations @@ -628,108 +656,205 @@ static void offsetTests(GCMBufferTest t) throws Exception { } public static void main(String args[]) throws Exception { - GCMBufferTest t; + AEADBufferTest t; initTest(); + // **** GCM Tests + // Test single byte array - new GCMBufferTest("AES/GCM/NoPadding", List.of(dtype.BYTE)).test(); - offsetTests(new GCMBufferTest("AES/GCM/NoPadding", List.of(dtype.BYTE))); + new AEADBufferTest("AES/GCM/NoPadding", List.of(dtype.BYTE)).test(); + offsetTests(new AEADBufferTest("AES/GCM/NoPadding", List.of(dtype.BYTE))); // Test update-doFinal with byte arrays - new GCMBufferTest("AES/GCM/NoPadding", List.of(dtype.BYTE, dtype.BYTE)).test(); - offsetTests(new GCMBufferTest("AES/GCM/NoPadding", List.of(dtype.BYTE, dtype.BYTE))); + new AEADBufferTest("AES/GCM/NoPadding", List.of(dtype.BYTE, dtype.BYTE)).test(); + offsetTests(new AEADBufferTest("AES/GCM/NoPadding", List.of(dtype.BYTE, dtype.BYTE))); // Test update-update-doFinal with byte arrays - new GCMBufferTest("AES/GCM/NoPadding", + new AEADBufferTest("AES/GCM/NoPadding", List.of(dtype.BYTE, dtype.BYTE, dtype.BYTE)).test(); - offsetTests(new GCMBufferTest("AES/GCM/NoPadding", List.of(dtype.BYTE, dtype.BYTE, dtype.BYTE))); + offsetTests(new AEADBufferTest("AES/GCM/NoPadding", List.of(dtype.BYTE, dtype.BYTE, dtype.BYTE))); // Test single heap bytebuffer - new GCMBufferTest("AES/GCM/NoPadding", List.of(dtype.HEAP)).test(); - offsetTests(new GCMBufferTest("AES/GCM/NoPadding", List.of(dtype.HEAP))); + new AEADBufferTest("AES/GCM/NoPadding", List.of(dtype.HEAP)).test(); + offsetTests(new AEADBufferTest("AES/GCM/NoPadding", List.of(dtype.HEAP))); // Test update-doFinal with heap bytebuffer - new GCMBufferTest("AES/GCM/NoPadding", + new AEADBufferTest("AES/GCM/NoPadding", List.of(dtype.HEAP, dtype.HEAP)).test(); - offsetTests(new GCMBufferTest("AES/GCM/NoPadding", List.of(dtype.HEAP, dtype.HEAP))); + offsetTests(new AEADBufferTest("AES/GCM/NoPadding", List.of(dtype.HEAP, dtype.HEAP))); // Test update-update-doFinal with heap bytebuffer - new GCMBufferTest("AES/GCM/NoPadding", + new AEADBufferTest("AES/GCM/NoPadding", List.of(dtype.HEAP, dtype.HEAP, dtype.HEAP)).test(); - offsetTests(new GCMBufferTest("AES/GCM/NoPadding", List.of(dtype.HEAP, dtype.HEAP, dtype.HEAP))); + offsetTests(new AEADBufferTest("AES/GCM/NoPadding", List.of(dtype.HEAP, dtype.HEAP, dtype.HEAP))); // Test single direct bytebuffer - new GCMBufferTest("AES/GCM/NoPadding", List.of(dtype.DIRECT)).test(); - offsetTests(new GCMBufferTest("AES/GCM/NoPadding", List.of(dtype.DIRECT))); + new AEADBufferTest("AES/GCM/NoPadding", List.of(dtype.DIRECT)).test(); + offsetTests(new AEADBufferTest("AES/GCM/NoPadding", List.of(dtype.DIRECT))); // Test update-doFinal with direct bytebuffer - new GCMBufferTest("AES/GCM/NoPadding", + new AEADBufferTest("AES/GCM/NoPadding", List.of(dtype.DIRECT, dtype.DIRECT)).test(); - offsetTests(new GCMBufferTest("AES/GCM/NoPadding", + offsetTests(new AEADBufferTest("AES/GCM/NoPadding", List.of(dtype.DIRECT, dtype.DIRECT))); // Test update-update-doFinal with direct bytebuffer - new GCMBufferTest("AES/GCM/NoPadding", + new AEADBufferTest("AES/GCM/NoPadding", List.of(dtype.DIRECT, dtype.DIRECT, dtype.DIRECT)).test(); - offsetTests(new GCMBufferTest("AES/GCM/NoPadding", + offsetTests(new AEADBufferTest("AES/GCM/NoPadding", List.of(dtype.DIRECT, dtype.DIRECT, dtype.DIRECT))); // Test update-update-doFinal with byte arrays and preset data sizes - t = new GCMBufferTest("AES/GCM/NoPadding", + t = new AEADBufferTest("AES/GCM/NoPadding", List.of(dtype.BYTE, dtype.BYTE, dtype.BYTE)).dataSegments( - new int[] { 1, 1, GCMBufferTest.REMAINDER}); + new int[] { 1, 1, AEADBufferTest.REMAINDER}); t.clone().test(); offsetTests(t.clone()); // Test update-doFinal with a byte array and a direct bytebuffer - t = new GCMBufferTest("AES/GCM/NoPadding", + t = new AEADBufferTest("AES/GCM/NoPadding", List.of(dtype.BYTE, dtype.DIRECT)).differentBufferOnly(); t.clone().test(); offsetTests(t.clone()); // Test update-doFinal with a byte array and heap and direct bytebuffer - t = new GCMBufferTest("AES/GCM/NoPadding", + t = new AEADBufferTest("AES/GCM/NoPadding", List.of(dtype.BYTE, dtype.HEAP, dtype.DIRECT)).differentBufferOnly(); t.clone().test(); offsetTests(t.clone()); // Test update-doFinal with a direct bytebuffer and a byte array. - t = new GCMBufferTest("AES/GCM/NoPadding", + t = new AEADBufferTest("AES/GCM/NoPadding", List.of(dtype.DIRECT, dtype.BYTE)).differentBufferOnly(); t.clone().test(); offsetTests(t.clone()); // Test update-doFinal with a direct bytebuffer and a byte array with // preset data sizes. - t = new GCMBufferTest("AES/GCM/NoPadding", + t = new AEADBufferTest("AES/GCM/NoPadding", List.of(dtype.DIRECT, dtype.BYTE)).differentBufferOnly(). - dataSegments(new int[] { 20, GCMBufferTest.REMAINDER }); + dataSegments(new int[] { 20, AEADBufferTest.REMAINDER }); t.clone().test(); offsetTests(t.clone()); // Test update-update-doFinal with a direct and heap bytebuffer and a // byte array with preset data sizes. - t = new GCMBufferTest("AES/GCM/NoPadding", + t = new AEADBufferTest("AES/GCM/NoPadding", List.of(dtype.DIRECT, dtype.BYTE, dtype.HEAP)). differentBufferOnly().dataSet(5). - dataSegments(new int[] { 5000, 1000, GCMBufferTest.REMAINDER }); + dataSegments(new int[] { 5000, 1000, AEADBufferTest.REMAINDER }); t.clone().test(); offsetTests(t.clone()); // Test update-update-doFinal with byte arrays, incrementing through // every data size combination for the Data set 0 - new GCMBufferTest("AES/GCM/NoPadding", + new AEADBufferTest("AES/GCM/NoPadding", List.of(dtype.BYTE, dtype.BYTE, dtype.BYTE)).incrementalSegments(). dataSet(0).test(); // Test update-update-doFinal with direct bytebuffers, incrementing through // every data size combination for the Data set 0 - new GCMBufferTest("AES/GCM/NoPadding", + new AEADBufferTest("AES/GCM/NoPadding", List.of(dtype.DIRECT, dtype.DIRECT, dtype.DIRECT)). incrementalSegments().dataSet(0).test(); - new GCMBufferTest("AES/GCM/NoPadding", + new AEADBufferTest("AES/GCM/NoPadding", + List.of(dtype.DIRECT, dtype.DIRECT, dtype.DIRECT)). + dataSegments(new int[] { 49, 0, 2 }).dataSet(0).test(); + + // **** CC20P1305 Tests + + // Test single byte array + new AEADBufferTest("ChaCha20-Poly1305", List.of(dtype.BYTE)).test(); + offsetTests(new AEADBufferTest("ChaCha20-Poly1305", List.of(dtype.BYTE))); + // Test update-doFinal with byte arrays + new AEADBufferTest("ChaCha20-Poly1305", List.of(dtype.BYTE, dtype.BYTE)).test(); + offsetTests(new AEADBufferTest("ChaCha20-Poly1305", List.of(dtype.BYTE, dtype.BYTE))); + // Test update-update-doFinal with byte arrays + new AEADBufferTest("ChaCha20-Poly1305", + List.of(dtype.BYTE, dtype.BYTE, dtype.BYTE)).test(); + offsetTests(new AEADBufferTest("ChaCha20-Poly1305", List.of(dtype.BYTE, dtype.BYTE, dtype.BYTE))); + + // Test single heap bytebuffer + new AEADBufferTest("ChaCha20-Poly1305", List.of(dtype.HEAP)).test(); + offsetTests(new AEADBufferTest("ChaCha20-Poly1305", List.of(dtype.HEAP))); + // Test update-doFinal with heap bytebuffer + new AEADBufferTest("ChaCha20-Poly1305", + List.of(dtype.HEAP, dtype.HEAP)).test(); + offsetTests(new AEADBufferTest("ChaCha20-Poly1305", List.of(dtype.HEAP, dtype.HEAP))); + // Test update-update-doFinal with heap bytebuffer + new AEADBufferTest("ChaCha20-Poly1305", + List.of(dtype.HEAP, dtype.HEAP, dtype.HEAP)).test(); + offsetTests(new AEADBufferTest("ChaCha20-Poly1305", List.of(dtype.HEAP, dtype.HEAP, dtype.HEAP))); + + // Test single direct bytebuffer + new AEADBufferTest("ChaCha20-Poly1305", List.of(dtype.DIRECT)).test(); + offsetTests(new AEADBufferTest("ChaCha20-Poly1305", List.of(dtype.DIRECT))); + // Test update-doFinal with direct bytebuffer + new AEADBufferTest("ChaCha20-Poly1305", + List.of(dtype.DIRECT, dtype.DIRECT)).test(); + offsetTests(new AEADBufferTest("ChaCha20-Poly1305", + List.of(dtype.DIRECT, dtype.DIRECT))); + // Test update-update-doFinal with direct bytebuffer + new AEADBufferTest("ChaCha20-Poly1305", + List.of(dtype.DIRECT, dtype.DIRECT, dtype.DIRECT)).test(); + offsetTests(new AEADBufferTest("ChaCha20-Poly1305", + List.of(dtype.DIRECT, dtype.DIRECT, dtype.DIRECT))); + + // Test update-update-doFinal with byte arrays and preset data sizes + t = new AEADBufferTest("ChaCha20-Poly1305", + List.of(dtype.BYTE, dtype.BYTE, dtype.BYTE)).dataSegments( + new int[] { 1, 1, AEADBufferTest.REMAINDER}); + t.clone().test(); + offsetTests(t.clone()); + + // Test update-doFinal with a byte array and a direct bytebuffer + t = new AEADBufferTest("ChaCha20-Poly1305", + List.of(dtype.BYTE, dtype.DIRECT)).differentBufferOnly(); + t.clone().test(); + offsetTests(t.clone()); + // Test update-doFinal with a byte array and heap and direct bytebuffer + t = new AEADBufferTest("ChaCha20-Poly1305", + List.of(dtype.BYTE, dtype.HEAP, dtype.DIRECT)).differentBufferOnly(); + t.clone().test(); + offsetTests(t.clone()); + + // Test update-doFinal with a direct bytebuffer and a byte array. + t = new AEADBufferTest("ChaCha20-Poly1305", + List.of(dtype.DIRECT, dtype.BYTE)).differentBufferOnly(); + t.clone().test(); + offsetTests(t.clone()); + + // Test update-doFinal with a direct bytebuffer and a byte array with + // preset data sizes. + t = new AEADBufferTest("ChaCha20-Poly1305", + List.of(dtype.DIRECT, dtype.BYTE)).differentBufferOnly(). + dataSegments(new int[] { 20, AEADBufferTest.REMAINDER }); + t.clone().test(); + offsetTests(t.clone()); + // Test update-update-doFinal with a direct and heap bytebuffer and a + // byte array with preset data sizes. + t = new AEADBufferTest("ChaCha20-Poly1305", + List.of(dtype.DIRECT, dtype.BYTE, dtype.HEAP)). + differentBufferOnly().dataSet(1). + dataSegments(new int[] { 5000, 1000, AEADBufferTest.REMAINDER }); + t.clone().test(); + offsetTests(t.clone()); + + // Test update-update-doFinal with byte arrays, incrementing through + // every data size combination for the Data set 0 + new AEADBufferTest("ChaCha20-Poly1305", + List.of(dtype.BYTE, dtype.BYTE, dtype.BYTE)).incrementalSegments(). + dataSet(0).test(); + // Test update-update-doFinal with direct bytebuffers, incrementing through + // every data size combination for the Data set 0 + new AEADBufferTest("ChaCha20-Poly1305", + List.of(dtype.DIRECT, dtype.DIRECT, dtype.DIRECT)). + incrementalSegments().dataSet(0).test(); + + new AEADBufferTest("ChaCha20-Poly1305", List.of(dtype.DIRECT, dtype.DIRECT, dtype.DIRECT)). dataSegments(new int[] { 49, 0, 2 }).dataSet(0).test(); } // Test data static void initTest() { + datamap.put("AES/GCM/NoPadding", List.of( // GCM KAT - new Data("AES", 0, + new Data(AES, 0, "141f1ce91989b07e7eb6ae1dbd81ea5e", "49451da24bd6074509d3cebc2c0394c972e6934b45a1d91f3ce1d3ca69e19" + "4aa1958a7c21b6f21d530ce6d2cc5256a3f846b6f9d2f38df0102c4791e5" + @@ -744,100 +869,32 @@ static void initTest() { "240446b28dc088abd42b0fc687f208190ff24c0548", "dbb93bbb56d0439cd09f620a57687f5d"), // GCM KAT - new Data("AES", 1, "11754cd72aec309bf52f7687212e8957", + new Data(AES, 1, "11754cd72aec309bf52f7687212e8957", "3c819d9a9bed087615030b65", - (String)null, null, null, + new byte[0], null, null, "250327c674aaf477aef2675748cf6971"), - // GCM KAT - new Data("AES", 2, "272f16edb81a7abbea887357a58c1917", - "794ec588176c703d3d2a7a07", - (String)null, null, null, - "b6e6f197168f5049aeda32dafbdaeb"), - // zero'd test data - new Data("AES", 3, "272f16edb81a7abbea887357a58c1917", - "794ec588176c703d3d2a7a07", new byte[256], null, - "15b461672153270e8ba1e6789f7641c5411f3e642abda731b6086f535c216457" + - "e87305bc59a1ff1f7e1e0bbdf302b75549b136606c67d7e5f71277aeca4bc670" + - "07a98f78e0cfa002ed183e62f07893ad31fe67aad1bb37e15b957a14d145f14f" + - "7483d041f2c3612ad5033155984470bdfc64d18df73c2745d92f28461bb09832" + - "33524811321ba87d213692825815dd13f528dba601a3c319cac6be9b48686c23" + - "a0ce23d5062916ea8827bbb243f585e446131489e951354c8ab24661f625c02e" + - "15536c5bb602244e98993ff745f3e523399b2059f0e062d8933fad2366e7e147" + - "510a931282bb0e3f635efe7bf05b1dd715f95f5858261b00735224256b6b3e80", - "08b3593840d4ed005f5234ae062a5c"), - // Random test data - new Data("AES", 4, "272f16edb81a7abbea887357a58c1917", - "794ec588176c703d3d2a7a07", - new byte[2075], null, - "15b461672153270e8ba1e6789f7641c5411f3e642abda731b6086f535c216457" + - "e87305bc59a1ff1f7e1e0bbdf302b75549b136606c67d7e5f71277aeca4bc670" + - "07a98f78e0cfa002ed183e62f07893ad31fe67aad1bb37e15b957a14d145f14f" + - "7483d041f2c3612ad5033155984470bdfc64d18df73c2745d92f28461bb09832" + - "33524811321ba87d213692825815dd13f528dba601a3c319cac6be9b48686c23" + - "a0ce23d5062916ea8827bbb243f585e446131489e951354c8ab24661f625c02e" + - "15536c5bb602244e98993ff745f3e523399b2059f0e062d8933fad2366e7e147" + - "510a931282bb0e3f635efe7bf05b1dd715f95f5858261b00735224256b6b3e80" + - "7364cb53ff6d4e88f928cf67ac70da127718a8a35542efbae9dd7567c818a074" + - "9a0c74bd69014639f59768bc55056d1166ea5523e8c66f9d78d980beb8f0d83b" + - "a9e2c5544b94dc3a1a4b6f0f95f897b010150e89ebcacf0daee3c2793d6501a0" + - "b58b411de273dee987e8e8cf8bb29ef2e7f655b46b55fabf64c6a4295e0d080b" + - "6a570ace90eb0fe0f5b5d878bdd90eddaa1150e4d5a6505b350aac814fe99615" + - "317ecd0516a464c7904011ef5922409c0d65b1e43b69d7c3293a8f7d3e9fbee9" + - "eb91ec0007a7d6f72e64deb675d459c5ba07dcfd58d08e6820b100465e6e04f0" + - "663e310584a00d36d23699c1bffc6afa094c75184fc7cde7ad35909c0f49f2f3" + - "fe1e6d745ab628d74ea56b757047de57ce18b4b3c71e8af31a6fac16189cb0a3" + - "a97a1bea447042ce382fcf726560476d759c24d5c735525ea26a332c2094408e" + - "671c7deb81d5505bbfd178f866a6f3a011b3cfdbe089b4957a790688028dfdf7" + - "9a096b3853f9d0d6d3feef230c7f5f46ffbf7486ebdaca5804dc5bf9d202415e" + - "e0d67b365c2f92a17ea740807e4f0b198b42b54f15faa9dff2c7c35d2cf8d72e" + - "b8f8b18875a2e7b5c43d1e0aa5139c461e8153c7f632895aa46ffe2b134e6a0d" + - "dfbf6a336e709adfe951bd52c4dfc7b07a15fb3888fc35b7e758922f87a104c4" + - "563c5c7839cfe5a7edbdb97264a7c4ebc90367b10cbe09dbf2390767ad7afaa8" + - "8fb46b39d3f55f216d2104e5cf040bf3d39b758bea28e2dbce576c808d17a8eb" + - "e2fd183ef42a774e39119dff1f539efeb6ad15d889dfcb0d54d0d4d4cc03c8d9" + - "aa6c9ebd157f5e7170183298d6a30ada8792dcf793d931e2a1eafccbc63c11c0" + - "c5c5ed60837f30017d693ccb294df392a8066a0594a56954aea7b78a16e9a11f" + - "4a8bc2104070a7319f5fab0d2c4ccad8ec5cd8f47c839179bfd54a7bf225d502" + - "cd0a318752fe763e8c09eb88fa57fc5399ad1f797d0595c7b8afdd23f13603e9" + - "6802192bb51433b7723f4e512bd4f799feb94b458e7f9792f5f9bd6733828f70" + - "a6b7ffbbc0bb7575021f081ec2a0d37fecd7cda2daec9a3a9d9dfe1c8034cead" + - "e4b56b581cc82bd5b74b2b30817967d9da33850336f171a4c68e2438e03f4b11" + - "96da92f01b3b7aeab795180ccf40a4b090b1175a1fc0b67c95f93105c3aef00e" + - "13d76cc402539192274fee703730cd0d1c5635257719cc96cacdbad00c6255e2" + - "bd40c775b43ad09599e84f2c3205d75a6661ca3f151183be284b354ce21457d1" + - "3ba65b9b2cdb81874bd14469c2008b3ddec78f7225ecc710cc70de7912ca6a6d" + - "348168322ab59fdafcf5c833bfa0ad4046f4b6da90e9f263db7079af592eda07" + - "5bf16c6b1a8346da9c292a48bf660860a4fc89eaef40bc132779938eca294569" + - "787c740af2b5a8de7f5e10ac750d1e3d0ef3ed168ba408a676e10b8a20bd4be8" + - "3e8336b45e54481726d73e1bd19f165a98e242aca0d8387f2dd22d02d74e23db" + - "4cef9a523587413e0a44d7e3260019a34d3a6b38426ae9fa4655be338d721970" + - "cb9fe76c073f26f9303093a033022cd2c62b2790bce633ba9026a1c93b6535f1" + - "1882bf5880e511b9e1b0b7d8f23a993aae5fd275faac3a5b4ccaf7c06b0b266a" + - "ee970a1e3a4cd7a41094f516960630534e692545b25a347c30e3f328bba4825f" + - "ed754e5525d846131ecba7ca120a6aeabc7bab9f59c890c80b7e31f9bc741591" + - "55d292433ce9558e104102f2cc63ee267c1c8333e841522707ea6d595cb802b9" + - "61697da77bbc4cb404ea62570ab335ebffa2023730732ac5ddba1c3dbb5be408" + - "3c50aea462c1ffa166d7cc3db4b742b747e81b452db2363e91374dee8c6b40f0" + - "e7fbf50e60eaf5cc5649f6bb553aae772c185026ceb052af088c545330a1ffbf" + - "50615b8c7247c6cd386afd7440654f4e15bcfae0c45442ec814fe88433a9d616" + - "ee6cc3f163f0d3d325526d05f25d3b37ad5eeb3ca77248ad86c9042b16c65554" + - "aebb6ad3e17b981492b13f42c5a5dc088e991da303e5a273fdbb8601aece4267" + - "47b01f6cb972e6da1743a0d7866cf206e95f23c6f8e337c901b9cd34a9a1fbbe" + - "1694f2c26b00dfa4d02c0d54540163e798fbdc9c25f30d6406f5b4c13f7ed619" + - "34e350f4059c13aa5e973307a9e3058917cda96fdd082e9c629ccfb2a9f98d12" + - "5c6e4703a7b0f348f5cdeb63cef2133d1c6c1a087591e0a2bca29d09c6565e66" + - "e91042f83b0e74e60a5d57562c23e2fbcd6599c29d7c19e47cf625c2ce24bb8a" + - "13f8e54041498437eec2cedd1e3d8e57a051baa962c0a62d70264d99c5ee716d" + - "5c8b9078db08c8b2c5613f464198a7aff43f76c5b4612b46a4f1cd2a494386c5" + - "7fd28f3d199f0ba8d8e39116cc7db16ce6188205ee49a9dce3d4fa32ea394919" + - "f6e91ef58b84d00b99596b4306c2d9f432d917bb4ac73384c42ae12adb4920d8" + - "c33a816febcb299dcddf3ec7a8eb6e04cdc90891c6e145bd9fc5f41dc4061a46" + - "9feba38545b64ec8203f386ceef52785619e991d274ae80af7e54af535e0b011" + - "5effdf847472992875e09398457604d04e0bb965db692c0cdcf11a", - "687cc09c89298491deb51061d709af"), // Randomly generated data at the time of execution. - new Data("AES", 5, "11754cd72aec309bf52f7687212e8957", 12345) - ) - ); + new Data(AES, 5, "11754cd72aec309bf52f7687212e8957", + 16, 12345))); + + datamap.put("ChaCha20-Poly1305", List.of( + new Data("CC20", 0, + "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "070000004041424344454647", + 1, + "4c616469657320616e642047656e746c656d656e206f662074686520636c6173" + + "73206f66202739393a204966204920636f756c64206f6666657220796f75206f" + + "6e6c79206f6e652074697020666f7220746865206675747572652c2073756e73" + + "637265656e20776f756c642062652069742e", + "50515253c0c1c2c3c4c5c6c7", + "d31a8d34648e60db7b86afbc53ef7ec2a4aded51296e08fea9e2b5a736ee62d6" + + "3dbea45e8ca9671282fafb69da92728b1a71de0a9e060b2905d6a5b67ecd3b36" + + "92ddbd7f2d778b8c9803aee328091b58fab324e4fad675945585808b4831d7bc" + + "3ff4def08e4b7a9de576d26586cec64b61161ae10b59", + "4f09e26a7e902ecbd0600691"), + // Randomly generated data at the time of execution. + new Data("CC20", 1, + "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + 12, 12345))); } } diff --git a/test/micro/org/openjdk/bench/javax/crypto/full/AESGCMBench.java b/test/micro/org/openjdk/bench/javax/crypto/full/AESGCMBench.java index 9e5d4d8ad0320..e46f50678ef81 100644 --- a/test/micro/org/openjdk/bench/javax/crypto/full/AESGCMBench.java +++ b/test/micro/org/openjdk/bench/javax/crypto/full/AESGCMBench.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,107 +22,31 @@ */ package org.openjdk.bench.javax.crypto.full; -import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.Param; import org.openjdk.jmh.annotations.Setup; -import javax.crypto.Cipher; +import java.security.spec.AlgorithmParameterSpec; import javax.crypto.spec.GCMParameterSpec; -import javax.crypto.spec.SecretKeySpec; /** - * This performance tests runs AES/GCM encryption and decryption using byte[] - * as input and output buffers for single and multi-part testing. - * - * This test rotates the IV and creates a new GCMParameterSpec for each encrypt - * benchmark operation + * This performance tests runs AES/GCM encryption and decryption + * using input and output byte[] buffers with single and multi-part testing. */ -public class AESGCMBench extends CryptoBase { +public class AESGCMBench extends BenchBase { @Param({"128"}) - private int keyLength; - - @Param({"1024", "1500", "4096", "16384"}) - private int dataSize; + int keyLength; - byte[] encryptedData; - byte[] in, out; - private Cipher encryptCipher; - private Cipher decryptCipher; - SecretKeySpec ks; - GCMParameterSpec gcm_spec; - byte[] iv; + public static final int IV_MODULO = 16; - private static final int IV_BUFFER_SIZE = 32; - private static final int IV_MODULO = IV_BUFFER_SIZE - 16; - int iv_index = 0; - int updateLen = 0; - - private int next_iv_index() { - int r = iv_index; + public AlgorithmParameterSpec getNewSpec() { iv_index = (iv_index + 1) % IV_MODULO; - return r; + return new GCMParameterSpec(128, iv, iv_index, IV_MODULO); } @Setup public void setup() throws Exception { - setupProvider(); - - // Setup key material - byte[] keystring = fillSecureRandom(new byte[keyLength / 8]); - ks = new SecretKeySpec(keystring, "AES"); - iv = fillSecureRandom(new byte[IV_BUFFER_SIZE]); - gcm_spec = new GCMParameterSpec(96, iv, next_iv_index(), 16); - - // Setup Cipher classes - encryptCipher = makeCipher(prov, "AES/GCM/NoPadding"); - encryptCipher.init(Cipher.ENCRYPT_MODE, ks, gcm_spec); - decryptCipher = makeCipher(prov, "AES/GCM/NoPadding"); - decryptCipher.init(Cipher.DECRYPT_MODE, ks, - encryptCipher.getParameters(). - getParameterSpec(GCMParameterSpec.class)); - - // Setup input/output buffers - in = fillRandom(new byte[dataSize]); - encryptedData = new byte[encryptCipher.getOutputSize(in.length)]; - out = new byte[encryptedData.length]; - encryptCipher.doFinal(in, 0, in.length, encryptedData, 0); - updateLen = in.length / 2; - - } - - @Benchmark - public void encrypt() throws Exception { - gcm_spec = new GCMParameterSpec(96, iv, next_iv_index(), 16); - encryptCipher.init(Cipher.ENCRYPT_MODE, ks, gcm_spec); - encryptCipher.doFinal(in, 0, in.length, out, 0); - } - - @Benchmark - public void encryptMultiPart() throws Exception { - gcm_spec = new GCMParameterSpec(96, iv, next_iv_index(), 16); - encryptCipher.init(Cipher.ENCRYPT_MODE, ks, gcm_spec); - int outOfs = encryptCipher.update(in, 0, updateLen, out, 0); - encryptCipher.doFinal(in, updateLen, in.length - updateLen, - out, outOfs); - } - - @Benchmark - public void decrypt() throws Exception { - decryptCipher.init(Cipher.DECRYPT_MODE, ks, - encryptCipher.getParameters(). - getParameterSpec(GCMParameterSpec.class)); - decryptCipher.doFinal(encryptedData, 0, encryptedData.length, out, 0); - } - - @Benchmark - public void decryptMultiPart() throws Exception { - decryptCipher.init(Cipher.DECRYPT_MODE, ks, - encryptCipher.getParameters(). - getParameterSpec(GCMParameterSpec.class)); - decryptCipher.update(encryptedData, 0, updateLen, out, 0); - decryptCipher.doFinal(encryptedData, updateLen, - encryptedData.length - updateLen, out, 0); + init("AES/GCM/NoPadding", keyLength); } } diff --git a/test/micro/org/openjdk/bench/javax/crypto/full/AESGCMByteBuffer.java b/test/micro/org/openjdk/bench/javax/crypto/full/AESGCMByteBuffer.java index 3e07c6b691028..ce5e7e8358c9b 100644 --- a/test/micro/org/openjdk/bench/javax/crypto/full/AESGCMByteBuffer.java +++ b/test/micro/org/openjdk/bench/javax/crypto/full/AESGCMByteBuffer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,140 +22,32 @@ */ package org.openjdk.bench.javax.crypto.full; -import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.Param; import org.openjdk.jmh.annotations.Setup; -import javax.crypto.Cipher; +import java.security.spec.AlgorithmParameterSpec; import javax.crypto.spec.GCMParameterSpec; -import javax.crypto.spec.SecretKeySpec; -import java.nio.ByteBuffer; /** * This performance tests runs AES/GCM encryption and decryption using heap and * direct ByteBuffers as input and output buffers for single and multi-part * operations. - * - * This test rotates the IV and creates a new GCMParameterSpec for each encrypt - * benchmark operation */ -public class AESGCMByteBuffer extends CryptoBase { +public class AESGCMByteBuffer extends ByteBufferBase { @Param({"128"}) - private int keyLength; - - @Param({"1024", "1500", "4096", "16384"}) - private int dataSize; - - @Param({"direct", "heap"}) - private String dataMethod; + int keyLength; - byte[] data; - ByteBuffer encryptedData; - ByteBuffer in, out; - private Cipher encryptCipher; - private Cipher decryptCipher; - SecretKeySpec ks; - GCMParameterSpec gcm_spec; - byte[] iv; + public static final int IV_MODULO = 16; - private static final int IV_BUFFER_SIZE = 32; - private static final int IV_MODULO = IV_BUFFER_SIZE - 16; - int iv_index = 0; - int updateLen = 0; - - private int next_iv_index() { - int r = iv_index; + public AlgorithmParameterSpec getNewSpec() { iv_index = (iv_index + 1) % IV_MODULO; - return r; + return new GCMParameterSpec(128, iv, iv_index, IV_MODULO); } @Setup public void setup() throws Exception { - setupProvider(); - - // Setup key material - byte[] keystring = fillSecureRandom(new byte[keyLength / 8]); - ks = new SecretKeySpec(keystring, "AES"); - iv = fillSecureRandom(new byte[IV_BUFFER_SIZE]); - gcm_spec = new GCMParameterSpec(96, iv, next_iv_index(), 16); - - // Setup Cipher classes - encryptCipher = makeCipher(prov, "AES/GCM/NoPadding"); - encryptCipher.init(Cipher.ENCRYPT_MODE, ks, gcm_spec); - decryptCipher = makeCipher(prov, "AES/GCM/NoPadding"); - decryptCipher.init(Cipher.DECRYPT_MODE, ks, - encryptCipher.getParameters(). - getParameterSpec(GCMParameterSpec.class)); - - // Setup input/output buffers - data = fillRandom(new byte[dataSize]); - if (dataMethod.equalsIgnoreCase("direct")) { - in = ByteBuffer.allocateDirect(data.length); - in.put(data); - in.flip(); - encryptedData = ByteBuffer.allocateDirect( - encryptCipher.getOutputSize(data.length)); - out = ByteBuffer.allocateDirect(encryptedData.capacity()); - } else if (dataMethod.equalsIgnoreCase("heap")) { - in = ByteBuffer.wrap(data); - encryptedData = ByteBuffer.allocate( - encryptCipher.getOutputSize(data.length)); - out = ByteBuffer.allocate(encryptedData.capacity()); - } - - encryptCipher.doFinal(in, encryptedData); - encryptedData.flip(); - in.flip(); - updateLen = in.remaining() / 2; - } - - @Benchmark - public void encrypt() throws Exception { - gcm_spec = new GCMParameterSpec(96, iv, next_iv_index(), 16); - encryptCipher.init(Cipher.ENCRYPT_MODE, ks, gcm_spec); - encryptCipher.doFinal(in, out); - out.flip(); - in.flip(); + init("AES/GCM/NoPadding", keyLength); } - - @Benchmark - public void encryptMultiPart() throws Exception { - gcm_spec = new GCMParameterSpec(96, iv, next_iv_index(), 16); - encryptCipher.init(Cipher.ENCRYPT_MODE, ks, gcm_spec); - in.limit(updateLen); - encryptCipher.update(in, out); - in.limit(in.capacity()); - encryptCipher.doFinal(in, out); - out.flip(); - in.flip(); - } - - @Benchmark - public void decrypt() throws Exception { - decryptCipher.init(Cipher.DECRYPT_MODE, ks, - encryptCipher.getParameters(). - getParameterSpec(GCMParameterSpec.class)); - decryptCipher.doFinal(encryptedData, out); - encryptedData.flip(); - out.flip(); - } - - @Benchmark - public void decryptMultiPart() throws Exception { - decryptCipher.init(Cipher.DECRYPT_MODE, ks, - encryptCipher.getParameters(). - getParameterSpec(GCMParameterSpec.class)); - - int len = encryptedData.remaining(); - encryptedData.limit(updateLen); - decryptCipher.update(encryptedData, out); - encryptedData.limit(len); - - decryptCipher.doFinal(encryptedData, out); - encryptedData.flip(); - out.flip(); - } - } diff --git a/test/micro/org/openjdk/bench/javax/crypto/full/BenchBase.java b/test/micro/org/openjdk/bench/javax/crypto/full/BenchBase.java new file mode 100644 index 0000000000000..0c5df20d9cb64 --- /dev/null +++ b/test/micro/org/openjdk/bench/javax/crypto/full/BenchBase.java @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2023, 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. + */ +package org.openjdk.bench.javax.crypto.full; + +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.Param; +import org.openjdk.jmh.annotations.Setup; + +import java.security.spec.AlgorithmParameterSpec; +import javax.crypto.Cipher; +import javax.crypto.spec.SecretKeySpec; + +/** + * This is the common code for the AES/GCM and ChaCha20-Poly1305 performance + * tests. Encryption and decryption use byte[] as input and output buffers for + * single and multi-part testing. + * + * The IV rotates through a set buffer and creates a new AlgorithmParameterSpec + * for each encrypt benchmark operation. + */ + +public abstract class BenchBase extends CryptoBase { + // Defined by the test + String algorithm; + int keyLength = 256; + + // Default data sizes for full tests + @Param({"1024", "1500", "4096", "16384"}) + int dataSize; + + static final int IV_BUFFER_SIZE = 36; + public byte[] iv; + public int iv_index = 0; + private int updateLen = 0; + + private Cipher encryptCipher, decryptCipher; + private byte[] encryptedData, in, out; + private SecretKeySpec ks; + // Used for decryption to avoid repeated getParameter() calls + private AlgorithmParameterSpec spec; + + abstract AlgorithmParameterSpec getNewSpec(); + + // Configure setup with particular test parameters + public void init(String algorithm, int keyLength) throws Exception { + this.algorithm = algorithm; + this.keyLength = keyLength; + init(); + } + + // Configure setup with particular test parameters + public void init(String algorithm, int keyLength, int dataSize) + throws Exception { + this.dataSize = dataSize; + init(algorithm, keyLength); + } + + // Initalize test setup + private void init() throws Exception { + setupProvider(); + + // Setup key material + iv = fillSecureRandom(new byte[IV_BUFFER_SIZE]); + spec = getNewSpec(); + // CC20 doesn't care about the algorithm name on the key, but AES does. + ks = new SecretKeySpec(fillSecureRandom(new byte[keyLength / 8]), + "AES"); + + // Setup Cipher classes + encryptCipher = makeCipher(prov, algorithm); + encryptCipher.init(Cipher.ENCRYPT_MODE, ks, spec); + decryptCipher = makeCipher(prov, algorithm); + decryptCipher.init(Cipher.DECRYPT_MODE, ks, spec); + + // Setup input/output buffers + in = fillRandom(new byte[dataSize]); + encryptedData = new byte[encryptCipher.getOutputSize(in.length)]; + out = new byte[encryptedData.length]; + encryptCipher.doFinal(in, 0, in.length, encryptedData, 0); + updateLen = in.length / 2; + + } + + @Benchmark + public void encrypt() throws Exception { + encryptCipher.init(Cipher.ENCRYPT_MODE, ks, getNewSpec()); + encryptCipher.doFinal(in, 0, in.length, out, 0); + } + + @Benchmark + public void encryptMultiPart() throws Exception { + encryptCipher.init(Cipher.ENCRYPT_MODE, ks, getNewSpec()); + int outOfs = encryptCipher.update(in, 0, updateLen, out, 0); + encryptCipher.doFinal(in, updateLen, in.length - updateLen, + out, outOfs); + } + + @Benchmark + public void decrypt() throws Exception { + decryptCipher.init(Cipher.DECRYPT_MODE, ks, spec); + decryptCipher.doFinal(encryptedData, 0, encryptedData.length, out, 0); + } + + @Benchmark + public void decryptMultiPart() throws Exception { + decryptCipher.init(Cipher.DECRYPT_MODE, ks, spec); + decryptCipher.update(encryptedData, 0, updateLen, out, 0); + decryptCipher.doFinal(encryptedData, updateLen, + encryptedData.length - updateLen, out, 0); + } +} diff --git a/test/micro/org/openjdk/bench/javax/crypto/full/ByteBufferBase.java b/test/micro/org/openjdk/bench/javax/crypto/full/ByteBufferBase.java new file mode 100644 index 0000000000000..79fa2bcbab300 --- /dev/null +++ b/test/micro/org/openjdk/bench/javax/crypto/full/ByteBufferBase.java @@ -0,0 +1,160 @@ +/* + * Copyright (c) 2023, 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. + */ +package org.openjdk.bench.javax.crypto.full; + +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.Param; +import org.openjdk.jmh.annotations.Setup; + +import java.security.spec.AlgorithmParameterSpec; +import javax.crypto.Cipher; +import javax.crypto.spec.SecretKeySpec; +import java.nio.ByteBuffer; + +/** + * This is the common code for the AES/GCM and ChaCha20-Poly1305 performance + * tests. Encryption and decryption are run with input and output + * ByteBuffers, direct and heap, for single and multi-part testing. + * + * The IV rotates through a set buffer and creates a new AlgorithmParameterSpec + * for each encrypt benchmark operation. + */ + +public abstract class ByteBufferBase extends CryptoBase { + // Defined by the test + String algorithm; + int keyLength = 256; + + @Param({"1024", "1500", "4096", "16384"}) + int dataSize; + + @Param({"direct", "heap"}) + String dataMethod; + + static final int IV_BUFFER_SIZE = 36; + public byte[] iv; + public int iv_index = 0; + private int updateLen = 0; + + private Cipher encryptCipher, decryptCipher; + private ByteBuffer encryptedData, in, out; + private SecretKeySpec ks; + // Used for decryption to avoid repeated getParameter() calls + private AlgorithmParameterSpec spec; + + abstract AlgorithmParameterSpec getNewSpec(); + + // Configure setup with particular test parameters + public void init(String algorithm, int keyLength) throws Exception { + this.algorithm = algorithm; + this.keyLength = keyLength; + init(); + } + + // Configure setup with particular test parameters + public void init(String algorithm, int keyLength, int dataSize) + throws Exception { + this.dataSize = dataSize; + init(algorithm, keyLength); + } + + // Initalize test setup + private void init() throws Exception { + setupProvider(); + + // Setup key material + iv = fillSecureRandom(new byte[IV_BUFFER_SIZE]); + spec = getNewSpec(); + // CC20 doesn't care about the algorithm name on the key, but AES does. + ks = new SecretKeySpec(fillSecureRandom(new byte[keyLength / 8]), + "AES"); + + // Setup Cipher classes + encryptCipher = makeCipher(prov, algorithm); + encryptCipher.init(Cipher.ENCRYPT_MODE, ks, spec); + decryptCipher = makeCipher(prov, algorithm); + decryptCipher.init(Cipher.DECRYPT_MODE, ks, spec); + + // Setup input/output buffers + byte[] data = fillRandom(new byte[dataSize]); + if (dataMethod.equalsIgnoreCase("direct")) { + in = ByteBuffer.allocateDirect(data.length); + in.put(data); + in.flip(); + encryptedData = ByteBuffer.allocateDirect( + encryptCipher.getOutputSize(data.length)); + out = ByteBuffer.allocateDirect(encryptedData.capacity()); + } else if (dataMethod.equalsIgnoreCase("heap")) { + in = ByteBuffer.wrap(data); + encryptedData = ByteBuffer.allocate( + encryptCipher.getOutputSize(data.length)); + out = ByteBuffer.allocate(encryptedData.capacity()); + } + + encryptCipher.doFinal(in, encryptedData); + encryptedData.flip(); + in.flip(); + updateLen = in.remaining() / 2; + } + + @Benchmark + public void encrypt() throws Exception { + encryptCipher.init(Cipher.ENCRYPT_MODE, ks, getNewSpec()); + encryptCipher.doFinal(in, out); + out.flip(); + in.flip(); + } + + @Benchmark + public void encryptMultiPart() throws Exception { + encryptCipher.init(Cipher.ENCRYPT_MODE, ks, getNewSpec()); + in.limit(updateLen); + encryptCipher.update(in, out); + in.limit(in.capacity()); + encryptCipher.doFinal(in, out); + out.flip(); + in.flip(); + } + + @Benchmark + public void decrypt() throws Exception { + decryptCipher.init(Cipher.DECRYPT_MODE, ks, spec); + decryptCipher.doFinal(encryptedData, out); + encryptedData.flip(); + out.flip(); + } + + @Benchmark + public void decryptMultiPart() throws Exception { + decryptCipher.init(Cipher.DECRYPT_MODE, ks, spec); + + int len = encryptedData.remaining(); + encryptedData.limit(updateLen); + decryptCipher.update(encryptedData, out); + encryptedData.limit(len); + + decryptCipher.doFinal(encryptedData, out); + encryptedData.flip(); + out.flip(); + } +} diff --git a/test/micro/org/openjdk/bench/javax/crypto/full/CC20P1305Bench.java b/test/micro/org/openjdk/bench/javax/crypto/full/CC20P1305Bench.java new file mode 100644 index 0000000000000..f6bc5c1052d55 --- /dev/null +++ b/test/micro/org/openjdk/bench/javax/crypto/full/CC20P1305Bench.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2023, 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. + */ +package org.openjdk.bench.javax.crypto.full; + +import org.openjdk.jmh.annotations.Param; +import org.openjdk.jmh.annotations.Setup; + +import java.security.spec.AlgorithmParameterSpec; +import javax.crypto.spec.IvParameterSpec; + +/** + * This performance tests runs ChaCha20-Poly1305 encryption and decryption + * using input and output byte[] buffers with single and multi-part testing. + */ + +public class CC20P1305Bench extends BenchBase { + + public static final int IV_MODULO = 12; + + public AlgorithmParameterSpec getNewSpec() { + iv_index = (iv_index + 1) % IV_MODULO; + return new IvParameterSpec(iv, iv_index, IV_MODULO); + } + + @Setup + public void setup() throws Exception { + init("ChaCha20-Poly1305/None/NoPadding", keyLength); + } +} diff --git a/test/micro/org/openjdk/bench/javax/crypto/full/CC20P1305ByteBuffer.java b/test/micro/org/openjdk/bench/javax/crypto/full/CC20P1305ByteBuffer.java new file mode 100644 index 0000000000000..326e2a6766d1e --- /dev/null +++ b/test/micro/org/openjdk/bench/javax/crypto/full/CC20P1305ByteBuffer.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2023, 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. + */ +package org.openjdk.bench.javax.crypto.full; + +import org.openjdk.jmh.annotations.Param; +import org.openjdk.jmh.annotations.Setup; + +import java.security.spec.AlgorithmParameterSpec; +import javax.crypto.spec.IvParameterSpec; + +/** + * This performance tests runs ChaCha20-Poly1305 encryption and decryption + * using heap and direct ByteBuffers for input and output buffers with single + * and multi-part operations. + */ + +public class CC20P1305ByteBuffer extends ByteBufferBase { + + public static final int IV_MODULO = 12; + + public AlgorithmParameterSpec getNewSpec() { + iv_index = (iv_index + 1) % IV_MODULO; + return new IvParameterSpec(iv, iv_index, IV_MODULO); + } + + @Setup + public void setup() throws Exception { + init("ChaCha20-Poly1305/None/NoPadding", keyLength); + } +} diff --git a/test/micro/org/openjdk/bench/javax/crypto/small/AESGCMBench.java b/test/micro/org/openjdk/bench/javax/crypto/small/AESGCMBench.java index cfdc53ac70458..49d64c7ca4af8 100644 --- a/test/micro/org/openjdk/bench/javax/crypto/small/AESGCMBench.java +++ b/test/micro/org/openjdk/bench/javax/crypto/small/AESGCMBench.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,14 +23,28 @@ package org.openjdk.bench.javax.crypto.small; import org.openjdk.jmh.annotations.Param; +import org.openjdk.jmh.annotations.Setup; + +import java.security.spec.AlgorithmParameterSpec; +import javax.crypto.spec.GCMParameterSpec; + +/** + * This small performance tests runs AES/GCM encryption and decryption + * using input and output byte[] buffers with single and multi-part testing. + * Only 1024 plaintext data length is tested. + */ public class AESGCMBench extends org.openjdk.bench.javax.crypto.full.AESGCMBench { @Param({"128"}) - private int keyLength; + int keyLength; @Param({"1024"}) - private int dataSize; + int dataSize; + @Setup + public void setup() throws Exception { + init("AES/GCM/NoPadding", keyLength, dataSize); + } } diff --git a/test/micro/org/openjdk/bench/javax/crypto/small/AESGCMByteBuffer.java b/test/micro/org/openjdk/bench/javax/crypto/small/AESGCMByteBuffer.java index 19fdab85bbbb4..baa41cd4ec83b 100644 --- a/test/micro/org/openjdk/bench/javax/crypto/small/AESGCMByteBuffer.java +++ b/test/micro/org/openjdk/bench/javax/crypto/small/AESGCMByteBuffer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,14 +23,28 @@ package org.openjdk.bench.javax.crypto.small; import org.openjdk.jmh.annotations.Param; +import org.openjdk.jmh.annotations.Setup; + +import java.security.spec.AlgorithmParameterSpec; +import javax.crypto.spec.GCMParameterSpec; + +/** + * This small performance tests runs AES/GCM encryption and decryption + * using heap and direct ByteBuffers for input and output buffers with single + * and multi-part operations. Only 1024 plaintext data length is tested. + */ public class AESGCMByteBuffer extends org.openjdk.bench.javax.crypto.full.AESGCMByteBuffer { @Param({"128"}) - private int keyLength; + int keyLength; @Param({"1024"}) - private int dataSize; + int dataSize; + @Setup + public void setup() throws Exception { + init("AES/GCM/NoPadding", keyLength, dataSize); + } } \ No newline at end of file diff --git a/test/micro/org/openjdk/bench/javax/crypto/small/CC20P1305Bench.java b/test/micro/org/openjdk/bench/javax/crypto/small/CC20P1305Bench.java new file mode 100644 index 0000000000000..b8b3d45fbc1f9 --- /dev/null +++ b/test/micro/org/openjdk/bench/javax/crypto/small/CC20P1305Bench.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2023, 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. + */ +package org.openjdk.bench.javax.crypto.small; + +import org.openjdk.jmh.annotations.Param; +import org.openjdk.jmh.annotations.Setup; + +import java.security.spec.AlgorithmParameterSpec; +import javax.crypto.spec.IvParameterSpec; + +/** + * This small performance tests runs ChaCha20-Poly1305 encryption and decryption + * using input and output byte[] buffers with single and multi-part testing. + * Only 1024 plaintext data length is tested. + */ + +public class CC20P1305Bench extends + org.openjdk.bench.javax.crypto.full.CC20P1305Bench { + + @Param({"1024"}) + int dataSize; + + @Setup + public void setup() throws Exception { + init("ChaCha20-Poly1305/None/NoPadding", 256, dataSize); + } + +} diff --git a/test/micro/org/openjdk/bench/javax/crypto/small/CC20P1305ByteBuffer.java b/test/micro/org/openjdk/bench/javax/crypto/small/CC20P1305ByteBuffer.java new file mode 100644 index 0000000000000..827b09c2f36b2 --- /dev/null +++ b/test/micro/org/openjdk/bench/javax/crypto/small/CC20P1305ByteBuffer.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2023, 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. + */ +package org.openjdk.bench.javax.crypto.small; + +import org.openjdk.jmh.annotations.Param; +import org.openjdk.jmh.annotations.Setup; + +import java.security.spec.AlgorithmParameterSpec; +import javax.crypto.spec.IvParameterSpec; + +/** + * This small performance tests runs ChaCha20-Poly1305 encryption and decryption + * using heap and direct ByteBuffers for input and output buffers with single + * and multi-part operations. Only 1024 plaintext data length is tested. + */ + +public class CC20P1305ByteBuffer extends + org.openjdk.bench.javax.crypto.full.CC20P1305ByteBuffer { + + @Param({"1024"}) + int dataSize; + + @Setup + public void setup() throws Exception { + init("ChaCha20-Poly1305/None/NoPadding", 256, dataSize); + } + +} From 3edc24a71d29632e0a2166a64fc25ce83f631b47 Mon Sep 17 00:00:00 2001 From: Joe Darcy Date: Wed, 6 Dec 2023 18:36:26 +0000 Subject: [PATCH 240/250] 8321073: Defer policy of disabling annotation processing by default Reviewed-by: vromero, jlahoda, mcimadamore --- .../sun/tools/javac/main/JavaCompiler.java | 17 +++++--- .../tools/javac/6341866/T6341866.java | 12 ++++-- .../tools/javac/diags/examples.not-yet.txt | 4 -- .../ProcUseProcOrImplicit.java | 2 + .../options/TestNoteOnImplicitProcessing.java | 43 +++++++------------ 5 files changed, 35 insertions(+), 43 deletions(-) diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/main/JavaCompiler.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/main/JavaCompiler.java index 82a7465821d4e..10f4d609c683f 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/main/JavaCompiler.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/main/JavaCompiler.java @@ -1144,18 +1144,21 @@ public void initProcessAnnotations(Iterable processors, if (processors != null && processors.iterator().hasNext()) explicitAnnotationProcessingRequested = true; + // Process annotations if processing is not disabled and there + // is at least one Processor available. if (options.isSet(PROC, "none")) { processAnnotations = false; } else if (procEnvImpl == null) { procEnvImpl = JavacProcessingEnvironment.instance(context); procEnvImpl.setProcessors(processors); - - // Process annotations if processing is requested and there - // is at least one Processor available. - processAnnotations = procEnvImpl.atLeastOneProcessor() && - explicitAnnotationProcessingRequested(); + processAnnotations = procEnvImpl.atLeastOneProcessor(); if (processAnnotations) { + if (!explicitAnnotationProcessingRequested() && + !optionsCheckingInitiallyDisabled) { + log.note(Notes.ImplicitAnnotationProcessing); + } + options.put("parameters", "parameters"); reader.saveParameterNames = true; keepComments = true; @@ -1164,9 +1167,9 @@ public void initProcessAnnotations(Iterable processors, taskListener.started(new TaskEvent(TaskEvent.Kind.ANNOTATION_PROCESSING)); deferredDiagnosticHandler = new Log.DeferredDiagnosticHandler(log); procEnvImpl.getFiler().setInitialState(initialFiles, initialClassNames); + } else { // free resources + procEnvImpl.close(); } - } else { // free resources - procEnvImpl.close(); } } diff --git a/test/langtools/tools/javac/6341866/T6341866.java b/test/langtools/tools/javac/6341866/T6341866.java index c04653ed58d0c..33df081c6ba76 100644 --- a/test/langtools/tools/javac/6341866/T6341866.java +++ b/test/langtools/tools/javac/6341866/T6341866.java @@ -67,6 +67,7 @@ enum ImplicitType { enum AnnoType { NONE, // no annotation processing + SERVICE, // implicit annotation processing, via ServiceLoader SPECIFY // explicit annotation processing }; @@ -98,14 +99,14 @@ static boolean test(ImplicitType implicitType, AnnoType annoType) throws IOExcep processorServices.delete(); List opts = new ArrayList(); - opts.addAll(Arrays.asList("-d", ".", - "-sourcepath", testSrc, - "-classpath", testClasses, - "-proc:full")); + opts.addAll(Arrays.asList("-d", ".", "-sourcepath", testSrc, "-classpath", testClasses, "-Xlint:-options")); if (implicitType.opt != null) opts.add(implicitType.opt); switch (annoType) { + case SERVICE: + createProcessorServices(Anno.class.getName()); + break; case SPECIFY: opts.addAll(Arrays.asList("-processor", Anno.class.getName())); break; @@ -144,6 +145,9 @@ static boolean test(ImplicitType implicitType, AnnoType annoType) throws IOExcep String expectKey = null; if (implicitType == ImplicitType.OPT_UNSET) { switch (annoType) { + case SERVICE: + expectKey = "compiler.warn.proc.use.proc.or.implicit"; + break; case SPECIFY: expectKey = "compiler.warn.proc.use.implicit"; break; diff --git a/test/langtools/tools/javac/diags/examples.not-yet.txt b/test/langtools/tools/javac/diags/examples.not-yet.txt index a9ba23fa3743d..716301a913ff1 100644 --- a/test/langtools/tools/javac/diags/examples.not-yet.txt +++ b/test/langtools/tools/javac/diags/examples.not-yet.txt @@ -217,7 +217,3 @@ compiler.err.annotation.unrecognized.attribute.name # this one is transitional (waiting for FFM API to exit preview) compiler.warn.restricted.method - -# Pending removal -compiler.note.implicit.annotation.processing -compiler.warn.proc.use.proc.or.implicit diff --git a/test/langtools/tools/javac/diags/examples/ProcUseProcOrImplicit/ProcUseProcOrImplicit.java b/test/langtools/tools/javac/diags/examples/ProcUseProcOrImplicit/ProcUseProcOrImplicit.java index 6d9d9a70ee919..3a697d40cf838 100644 --- a/test/langtools/tools/javac/diags/examples/ProcUseProcOrImplicit/ProcUseProcOrImplicit.java +++ b/test/langtools/tools/javac/diags/examples/ProcUseProcOrImplicit/ProcUseProcOrImplicit.java @@ -21,6 +21,8 @@ * questions. */ +// key: compiler.warn.proc.use.proc.or.implicit +// key: compiler.note.implicit.annotation.processing // options: -Xprefer:source import p.SomeClass; diff --git a/test/langtools/tools/javac/processing/options/TestNoteOnImplicitProcessing.java b/test/langtools/tools/javac/processing/options/TestNoteOnImplicitProcessing.java index 9d23707c61890..81efbce05aa20 100644 --- a/test/langtools/tools/javac/processing/options/TestNoteOnImplicitProcessing.java +++ b/test/langtools/tools/javac/processing/options/TestNoteOnImplicitProcessing.java @@ -23,8 +23,8 @@ /* * @test - * @bug 8310061 8315534 8306819 - * @summary Verify behavior around implicit annotation processing + * @bug 8310061 8315534 + * @summary Verify a note is issued for implicit annotation processing * * @library /tools/lib /tools/javac/lib * @modules @@ -59,27 +59,19 @@ import toolbox.JarTask; /* - * Does not generates a note and the processor does not run: + * Generates note and the processor runs: * $ javac -cp ImplicitProcTestProc.jar HelloWorldTest.java * - * Does _not_ generate a note and the processor does run: + * Does _not_ generate a note and the processor runs: * $ javac -processorpath ImplicitProcTestProc.jar HelloWorldTest.java * $ javac -cp ImplicitProcTestProc.jar -processor ImplicitProcTestProc.jar HelloWorldTest.java * $ javac -cp ImplicitProcTestProc.jar -proc:full HelloWorldTest.java * $ javac -cp ImplicitProcTestProc.jar -proc:only HelloWorldTest.java - * - * Does _not_ generate a note and the processor does _not_run: * $ javac -cp ImplicitProcTestProc.jar -Xlint:-options HelloWorldTest.java * $ javac -cp ImplicitProcTestProc.jar -Xlint:none HelloWorldTest.java * * Does _not_ generate a note and the processor _doesn't_ run. * $ javac -cp ImplicitProcTestProc.jar -proc:none HelloWorldTest.java - * - * (Previously, annotation processing was implicitly enabled and the - * the class path was searched for processors. This test was - * originally written to probe around a note warning of a potential - * future policy change to disable such implicit processing, a policy - * change now implemented and this test has been updated accordingly.) */ public class TestNoteOnImplicitProcessing extends TestRunner { @@ -173,8 +165,8 @@ public void generateWarning(Path base, Path jarFile) { .run(Expect.SUCCESS) .writeAll(); - checkForProcessorMessage(javacResult, false); - checkForCompilerNote(javacResult, false); + checkForProcessorMessage(javacResult, true); + checkForCompilerNote(javacResult, true); } @Test @@ -247,7 +239,7 @@ public void lintOptions(Path base, Path jarFile) { .run(Expect.SUCCESS) .writeAll(); - checkForProcessorMessage(javacResult, false); + checkForProcessorMessage(javacResult, true); checkForCompilerNote(javacResult, false); } @@ -262,7 +254,7 @@ public void lintNone(Path base, Path jarFile) { .run(Expect.SUCCESS) .writeAll(); - checkForProcessorMessage(javacResult, false); + checkForProcessorMessage(javacResult, true); checkForCompilerNote(javacResult, false); } @@ -325,7 +317,7 @@ public void processorsViaAPI(Path base, Path jarFile) throws Exception { task.call(); - verifyMessages(out, compilerOut, false, false); + verifyMessages(out, compilerOut, true); } { @@ -337,7 +329,7 @@ public void processorsViaAPI(Path base, Path jarFile) throws Exception { task.setProcessors(List.of(processor)); task.call(); - verifyMessages(out, compilerOut, false, true); + verifyMessages(out, compilerOut, false); } { @@ -347,7 +339,7 @@ public void processorsViaAPI(Path base, Path jarFile) throws Exception { task.analyze(); - verifyMessages(out, compilerOut, false, false); + verifyMessages(out, compilerOut, true); } { @@ -361,21 +353,16 @@ public void processorsViaAPI(Path base, Path jarFile) throws Exception { task.setProcessors(List.of(processor)); task.analyze(); - verifyMessages(out, compilerOut, false, true); + verifyMessages(out, compilerOut, false); } } finally { System.setOut(oldOut); } } - private void verifyMessages(ByteArrayOutputStream out, StringWriter compilerOut, boolean expectedNotePresent, - boolean processorRunExpected) { - boolean processorRun = out.toString(StandardCharsets.UTF_8).contains("ImplicitProcTestProc run"); - - if (processorRun != processorRunExpected) { - throw new RuntimeException(processorRunExpected ? - "Expected processor message not printed" : - "Unexpected processor message printed"); + private void verifyMessages(ByteArrayOutputStream out, StringWriter compilerOut, boolean expectedNotePresent) { + if (!out.toString(StandardCharsets.UTF_8).contains("ImplicitProcTestProc run")) { + throw new RuntimeException("Expected processor message not printed"); } out.reset(); From f4822605af44f63e5928f2f279df3f76c01a25a2 Mon Sep 17 00:00:00 2001 From: Stefan Karlsson Date: Wed, 6 Dec 2023 19:07:30 +0000 Subject: [PATCH 241/250] 8319969: os::large_page_init() turns off THPs for ZGC Reviewed-by: stuefe, aboldtch --- .../os/linux/gc/z/zLargePages_linux.cpp | 22 ++-- .../gc/z/zPhysicalMemoryBacking_linux.cpp | 7 +- src/hotspot/os/linux/hugepages.cpp | 83 ++++++++++++++ src/hotspot/os/linux/hugepages.hpp | 37 ++++++- src/hotspot/os/linux/os_linux.cpp | 104 ++++++++++++++---- src/hotspot/os/linux/os_linux.hpp | 11 ++ src/hotspot/share/gc/z/zLargePages.cpp | 13 ++- src/hotspot/share/gc/z/zLargePages.hpp | 1 + .../runtime/os/HugePageConfiguration.java | 61 ++++++++-- .../jtreg/runtime/os/TestTracePageSizes.java | 33 +++++- 10 files changed, 325 insertions(+), 47 deletions(-) diff --git a/src/hotspot/os/linux/gc/z/zLargePages_linux.cpp b/src/hotspot/os/linux/gc/z/zLargePages_linux.cpp index caf70224599e1..a00572f08e769 100644 --- a/src/hotspot/os/linux/gc/z/zLargePages_linux.cpp +++ b/src/hotspot/os/linux/gc/z/zLargePages_linux.cpp @@ -23,16 +23,24 @@ #include "precompiled.hpp" #include "gc/z/zLargePages.hpp" +#include "hugepages.hpp" +#include "os_linux.hpp" #include "runtime/globals.hpp" void ZLargePages::pd_initialize() { + if (os::Linux::thp_requested()) { + // Check if the OS config turned off transparent huge pages for shmem. + _os_enforced_transparent_mode = HugePages::shmem_thp_info().is_disabled(); + _state = _os_enforced_transparent_mode ? Disabled : Transparent; + return; + } + if (UseLargePages) { - if (UseTransparentHugePages) { - _state = Transparent; - } else { - _state = Explicit; - } - } else { - _state = Disabled; + _state = Explicit; + return; } + + // Check if the OS config turned on transparent huge pages for shmem. + _os_enforced_transparent_mode = HugePages::shmem_thp_info().is_forced(); + _state = _os_enforced_transparent_mode ? Transparent : Disabled; } diff --git a/src/hotspot/os/linux/gc/z/zPhysicalMemoryBacking_linux.cpp b/src/hotspot/os/linux/gc/z/zPhysicalMemoryBacking_linux.cpp index fb01e05ff7852..ff891509365a0 100644 --- a/src/hotspot/os/linux/gc/z/zPhysicalMemoryBacking_linux.cpp +++ b/src/hotspot/os/linux/gc/z/zPhysicalMemoryBacking_linux.cpp @@ -32,6 +32,7 @@ #include "gc/z/zNUMA.inline.hpp" #include "gc/z/zPhysicalMemoryBacking_linux.hpp" #include "gc/z/zSyscall_linux.hpp" +#include "hugepages.hpp" #include "logging/log.hpp" #include "os_linux.hpp" #include "runtime/init.hpp" @@ -446,8 +447,10 @@ ZErrno ZPhysicalMemoryBacking::fallocate_compat_mmap_tmpfs(zoffset offset, size_ return errno; } - // Advise mapping to use transparent huge pages - os::realign_memory((char*)addr, length, ZGranuleSize); + // Maybe madvise the mapping to use transparent huge pages + if (os::Linux::should_madvise_shmem_thps()) { + os::Linux::madvise_transparent_huge_pages(addr, length); + } // Touch the mapping (safely) to make sure it's backed by memory const bool backed = safe_touch_mapping(addr, length, _block_size); diff --git a/src/hotspot/os/linux/hugepages.cpp b/src/hotspot/os/linux/hugepages.cpp index f9f9dd497c7b6..67645b91aa566 100644 --- a/src/hotspot/os/linux/hugepages.cpp +++ b/src/hotspot/os/linux/hugepages.cpp @@ -28,6 +28,7 @@ #include "logging/log.hpp" #include "logging/logStream.hpp" +#include "runtime/globals_extension.hpp" #include "runtime/os.hpp" #include "utilities/debug.hpp" #include "utilities/globalDefinitions.hpp" @@ -227,15 +228,97 @@ void THPSupport::print_on(outputStream* os) { } } +ShmemTHPSupport::ShmemTHPSupport() : + _initialized(false), _mode(ShmemTHPMode::unknown) {} + +ShmemTHPMode ShmemTHPSupport::mode() const { + assert(_initialized, "Not initialized"); + return _mode; +} + +bool ShmemTHPSupport::is_forced() const { + return _mode == ShmemTHPMode::always || _mode == ShmemTHPMode::force || _mode == ShmemTHPMode::within_size; +} + +bool ShmemTHPSupport::is_enabled() const { + return is_forced() || _mode == ShmemTHPMode::advise; +} + +bool ShmemTHPSupport::is_disabled() const { + return _mode == ShmemTHPMode::never || _mode == ShmemTHPMode::deny || _mode == ShmemTHPMode::unknown; +} + +void ShmemTHPSupport::scan_os() { + // Scan /sys/kernel/mm/transparent_hugepage/shmem_enabled + // see mm/huge_memory.c + _mode = ShmemTHPMode::unknown; + const char* filename = "/sys/kernel/mm/transparent_hugepage/shmem_enabled"; + FILE* f = ::fopen(filename, "r"); + if (f != nullptr) { + char buf[64]; + char* s = fgets(buf, sizeof(buf), f); + assert(s == buf, "Should have worked"); + if (::strstr(buf, "[always]") != nullptr) { + _mode = ShmemTHPMode::always; + } else if (::strstr(buf, "[within_size]") != nullptr) { + _mode = ShmemTHPMode::within_size; + } else if (::strstr(buf, "[advise]") != nullptr) { + _mode = ShmemTHPMode::advise; + } else if (::strstr(buf, "[never]") != nullptr) { + _mode = ShmemTHPMode::never; + } else if (::strstr(buf, "[deny]") != nullptr) { + _mode = ShmemTHPMode::deny; + } else if (::strstr(buf, "[force]") != nullptr) { + _mode = ShmemTHPMode::force; + } else { + assert(false, "Weird content of %s: %s", filename, buf); + } + fclose(f); + } + + _initialized = true; + + LogTarget(Info, pagesize) lt; + if (lt.is_enabled()) { + LogStream ls(lt); + print_on(&ls); + } +} + +const char* ShmemTHPSupport::mode_to_string(ShmemTHPMode mode) { + switch (mode) { + case ShmemTHPMode::always: return "always"; + case ShmemTHPMode::advise: return "advise"; + case ShmemTHPMode::within_size: return "within_size"; + case ShmemTHPMode::never: return "never"; + case ShmemTHPMode::deny: return "deny"; + case ShmemTHPMode::force: return "force"; + case ShmemTHPMode::unknown: // Fallthrough + default: return "unknown"; + }; +} + +void ShmemTHPSupport::print_on(outputStream* os) { + if (_initialized) { + os->print_cr("Shared memory transparent hugepage (THP) support:"); + os->print_cr(" Shared memory THP mode: %s", mode_to_string(_mode)); + } else { + os->print_cr(" unknown."); + } +} + StaticHugePageSupport HugePages::_static_hugepage_support; THPSupport HugePages::_thp_support; +ShmemTHPSupport HugePages::_shmem_thp_support; void HugePages::initialize() { _static_hugepage_support.scan_os(); _thp_support.scan_os(); + _shmem_thp_support.scan_os(); } void HugePages::print_on(outputStream* os) { _static_hugepage_support.print_on(os); _thp_support.print_on(os); + _shmem_thp_support.print_on(os); } diff --git a/src/hotspot/os/linux/hugepages.hpp b/src/hotspot/os/linux/hugepages.hpp index cb7c992d78950..ce9ab36edccf8 100644 --- a/src/hotspot/os/linux/hugepages.hpp +++ b/src/hotspot/os/linux/hugepages.hpp @@ -91,23 +91,58 @@ class THPSupport { void print_on(outputStream* os); }; +enum class ShmemTHPMode { always, within_size, advise, never, deny, force, unknown }; + +// for transparent shmem hugepages +class ShmemTHPSupport { + bool _initialized; + + // See /sys/kernel/mm/transparent_hugepage/shmem_enabled + ShmemTHPMode _mode; + + static const char* mode_to_string(ShmemTHPMode mode); + +public: + + ShmemTHPSupport(); + + // Queries the OS, fills in object + void scan_os(); + + ShmemTHPMode mode() const; + + bool is_forced() const; + bool is_enabled() const; + bool is_disabled() const; + + // Printing + void print_on(outputStream* os); +}; + // Umbrella static interface class HugePages : public AllStatic { static StaticHugePageSupport _static_hugepage_support; static THPSupport _thp_support; + static ShmemTHPSupport _shmem_thp_support; public: static const StaticHugePageSupport& static_info() { return _static_hugepage_support; } static const THPSupport& thp_info() { return _thp_support; } + static const ShmemTHPSupport& shmem_thp_info() { return _shmem_thp_support; } static size_t default_static_hugepage_size() { return _static_hugepage_support.default_hugepage_size(); } static bool supports_static_hugepages() { return default_static_hugepage_size() > 0 && !_static_hugepage_support.inconsistent(); } - static THPMode thp_mode() { return _thp_support.mode(); } + static bool supports_thp() { return thp_mode() == THPMode::madvise || thp_mode() == THPMode::always; } + static THPMode thp_mode() { return _thp_support.mode(); } static size_t thp_pagesize() { return _thp_support.pagesize(); } + static bool supports_shmem_thp() { return _shmem_thp_support.is_enabled(); } + static ShmemTHPMode shmem_thp_mode() { return _shmem_thp_support.mode(); } + static bool forced_shmem_thp() { return _shmem_thp_support.is_forced(); } + static void initialize(); static void print_on(outputStream* os); }; diff --git a/src/hotspot/os/linux/os_linux.cpp b/src/hotspot/os/linux/os_linux.cpp index 7bde97de9077f..3fc025e510085 100644 --- a/src/hotspot/os/linux/os_linux.cpp +++ b/src/hotspot/os/linux/os_linux.cpp @@ -176,6 +176,8 @@ bool os::Linux::_supports_fast_thread_cpu_time = false; const char * os::Linux::_libc_version = nullptr; const char * os::Linux::_libpthread_version = nullptr; +bool os::Linux::_thp_requested{false}; + #ifdef __GLIBC__ // We want to be buildable and runnable on older and newer glibcs, so resolve both // mallinfo and mallinfo2 dynamically. @@ -2213,6 +2215,8 @@ void os::Linux::print_system_memory_info(outputStream* st) { // https://www.kernel.org/doc/Documentation/vm/transhuge.txt _print_ascii_file_h("/sys/kernel/mm/transparent_hugepage/enabled", "/sys/kernel/mm/transparent_hugepage/enabled", st); + _print_ascii_file_h("/sys/kernel/mm/transparent_hugepage/shmem_enabled", + "/sys/kernel/mm/transparent_hugepage/shmem_enabled", st); _print_ascii_file_h("/sys/kernel/mm/transparent_hugepage/defrag (defrag/compaction efforts parameter)", "/sys/kernel/mm/transparent_hugepage/defrag", st); } @@ -2909,11 +2913,15 @@ void os::pd_commit_memory_or_exit(char* addr, size_t size, } } +void os::Linux::madvise_transparent_huge_pages(void* addr, size_t bytes) { + // We don't check the return value: madvise(MADV_HUGEPAGE) may not + // be supported or the memory may already be backed by huge pages. + ::madvise(addr, bytes, MADV_HUGEPAGE); +} + void os::pd_realign_memory(char *addr, size_t bytes, size_t alignment_hint) { - if (UseTransparentHugePages && alignment_hint > vm_page_size()) { - // We don't check the return value: madvise(MADV_HUGEPAGE) may not - // be supported or the memory may already be backed by huge pages. - ::madvise(addr, bytes, MADV_HUGEPAGE); + if (Linux::should_madvise_anonymous_thps() && alignment_hint > vm_page_size()) { + Linux::madvise_transparent_huge_pages(addr, bytes); } } @@ -3730,7 +3738,7 @@ static void set_coredump_filter(CoredumpFilterBit bit) { static size_t _large_page_size = 0; -void warn_no_large_pages_configured() { +static void warn_no_large_pages_configured() { if (!FLAG_IS_DEFAULT(UseLargePages)) { log_warning(pagesize)("UseLargePages disabled, no large pages configured and available on the system."); } @@ -3747,15 +3755,56 @@ struct LargePageInitializationLoggerMark { os::page_sizes().print_on(&ls); ls.print_cr(". Default large page size: " EXACTFMT ".", EXACTFMTARGS(os::large_page_size())); } else { - ls.print("Large page support disabled."); + ls.print("Large page support %sdisabled.", uses_zgc_shmem_thp() ? "partially " : ""); } } } + + static bool uses_zgc_shmem_thp() { + return UseZGC && + // If user requested THP + ((os::Linux::thp_requested() && HugePages::supports_shmem_thp()) || + // If OS forced THP + HugePages::forced_shmem_thp()); + } }; +static bool validate_thps_configured() { + assert(UseTransparentHugePages, "Sanity"); + assert(os::Linux::thp_requested(), "Sanity"); + + if (UseZGC) { + if (!HugePages::supports_shmem_thp()) { + log_warning(pagesize)("Shared memory transparent huge pages are not enabled in the OS. " + "Set /sys/kernel/mm/transparent_hugepage/shmem_enabled to 'advise' to enable them."); + // UseTransparentHugePages has historically been tightly coupled with + // anonymous THPs. Fall through here and let the validity be determined + // by the OS configuration for anonymous THPs. ZGC doesn't use the flag + // but instead checks os::Linux::thp_requested(). + } + } + + if (!HugePages::supports_thp()) { + log_warning(pagesize)("Anonymous transparent huge pages are not enabled in the OS. " + "Set /sys/kernel/mm/transparent_hugepage/enabled to 'madvise' to enable them."); + log_warning(pagesize)("UseTransparentHugePages disabled, transparent huge pages are not supported by the operating system."); + return false; + } + + return true; +} + void os::large_page_init() { + Linux::large_page_init(); +} + +void os::Linux::large_page_init() { LargePageInitializationLoggerMark logger; + // Decide if the user asked for THPs before we update UseTransparentHugePages. + const bool large_pages_turned_off = !FLAG_IS_DEFAULT(UseLargePages) && !UseLargePages; + _thp_requested = UseTransparentHugePages && !large_pages_turned_off; + // Query OS information first. HugePages::initialize(); @@ -3774,7 +3823,7 @@ void os::large_page_init() { FLAG_SET_ERGO(THPStackMitigation, false); // Mitigation not needed } - // 1) Handle the case where we do not want to use huge pages + // Handle the case where we do not want to use huge pages if (!UseLargePages && !UseTransparentHugePages) { // Not using large pages. @@ -3787,17 +3836,16 @@ void os::large_page_init() { return; } - // 2) check if the OS supports THPs resp. static hugepages. - if (UseTransparentHugePages && !HugePages::supports_thp()) { - if (!FLAG_IS_DEFAULT(UseTransparentHugePages)) { - log_warning(pagesize)("UseTransparentHugePages disabled, transparent huge pages are not supported by the operating system."); - } + // Check if the OS supports THPs + if (UseTransparentHugePages && !validate_thps_configured()) { UseLargePages = UseTransparentHugePages = false; return; } + + // Check if the OS supports static hugepages. if (!UseTransparentHugePages && !HugePages::supports_static_hugepages()) { warn_no_large_pages_configured(); - UseLargePages = UseTransparentHugePages = false; + UseLargePages = false; return; } @@ -3805,7 +3853,7 @@ void os::large_page_init() { // In THP mode: // - os::large_page_size() is the *THP page size* // - os::pagesizes() has two members, the THP page size and the system page size - assert(HugePages::supports_thp() && HugePages::thp_pagesize() > 0, "Missing OS info"); + assert(HugePages::thp_pagesize() > 0, "Missing OS info"); _large_page_size = HugePages::thp_pagesize(); _page_sizes.add(_large_page_size); _page_sizes.add(os::vm_page_size()); @@ -3830,12 +3878,12 @@ void os::large_page_init() { // doesn't match an available page size set _large_page_size to default_large_page_size // and use it as the maximum. if (FLAG_IS_DEFAULT(LargePageSizeInBytes) || - LargePageSizeInBytes == 0 || - LargePageSizeInBytes == default_large_page_size) { - large_page_size = default_large_page_size; - log_info(pagesize)("Using the default large page size: " SIZE_FORMAT "%s", - byte_size_in_exact_unit(large_page_size), - exact_unit_for_byte_size(large_page_size)); + LargePageSizeInBytes == 0 || + LargePageSizeInBytes == default_large_page_size) { + large_page_size = default_large_page_size; + log_info(pagesize)("Using the default large page size: " SIZE_FORMAT "%s", + byte_size_in_exact_unit(large_page_size), + exact_unit_for_byte_size(large_page_size)); } else { if (all_large_pages.contains(LargePageSizeInBytes)) { large_page_size = LargePageSizeInBytes; @@ -3860,7 +3908,6 @@ void os::large_page_init() { if (!hugetlbfs_sanity_check(large_page_size)) { warn_no_large_pages_configured(); UseLargePages = false; - UseTransparentHugePages = false; return; } @@ -3877,6 +3924,18 @@ void os::large_page_init() { set_coredump_filter(LARGEPAGES_BIT); } +bool os::Linux::thp_requested() { + return _thp_requested; +} + +bool os::Linux::should_madvise_anonymous_thps() { + return _thp_requested && HugePages::thp_mode() == THPMode::madvise; +} + +bool os::Linux::should_madvise_shmem_thps() { + return _thp_requested && HugePages::shmem_thp_mode() == ShmemTHPMode::advise; +} + static void log_on_commit_special_failure(char* req_addr, size_t bytes, size_t page_size, int error) { assert(error == ENOMEM, "Only expect to fail if no memory is available"); @@ -3891,7 +3950,8 @@ static bool commit_memory_special(size_t bytes, size_t page_size, char* req_addr, bool exec) { - assert(UseLargePages && !UseTransparentHugePages, "Should only get here for static hugepage mode (+UseLargePages)"); + assert(UseLargePages, "Should only get here for huge pages"); + assert(!UseTransparentHugePages, "Should only get here for static hugepage mode"); assert(is_aligned(bytes, page_size), "Unaligned size"); assert(is_aligned(req_addr, page_size), "Unaligned address"); assert(req_addr != nullptr, "Must have a requested address for special mappings"); diff --git a/src/hotspot/os/linux/os_linux.hpp b/src/hotspot/os/linux/os_linux.hpp index e8f6f486489d7..4b2ccf8e370db 100644 --- a/src/hotspot/os/linux/os_linux.hpp +++ b/src/hotspot/os/linux/os_linux.hpp @@ -175,6 +175,17 @@ class os::Linux { // fields will contain -1. static bool query_process_memory_info(meminfo_t* info); + // Tells if the user asked for transparent huge pages. + static bool _thp_requested; + + static void large_page_init(); + + static bool thp_requested(); + static bool should_madvise_anonymous_thps(); + static bool should_madvise_shmem_thps(); + + static void madvise_transparent_huge_pages(void* addr, size_t bytes); + // Stack repair handling // none present diff --git a/src/hotspot/share/gc/z/zLargePages.cpp b/src/hotspot/share/gc/z/zLargePages.cpp index 88656d1538115..a65bf3b10ebad 100644 --- a/src/hotspot/share/gc/z/zLargePages.cpp +++ b/src/hotspot/share/gc/z/zLargePages.cpp @@ -27,6 +27,7 @@ #include "runtime/os.hpp" ZLargePages::State ZLargePages::_state; +bool ZLargePages::_os_enforced_transparent_mode; void ZLargePages::initialize() { pd_initialize(); @@ -41,9 +42,17 @@ const char* ZLargePages::to_string() { return "Enabled (Explicit)"; case Transparent: - return "Enabled (Transparent)"; + if (_os_enforced_transparent_mode) { + return "Enabled (Transparent, OS enforced)"; + } else { + return "Enabled (Transparent)"; + } default: - return "Disabled"; + if (_os_enforced_transparent_mode) { + return "Disabled (OS enforced)"; + } else { + return "Disabled"; + } } } diff --git a/src/hotspot/share/gc/z/zLargePages.hpp b/src/hotspot/share/gc/z/zLargePages.hpp index 9f7c8310e50f4..72b9e85095c78 100644 --- a/src/hotspot/share/gc/z/zLargePages.hpp +++ b/src/hotspot/share/gc/z/zLargePages.hpp @@ -35,6 +35,7 @@ class ZLargePages : public AllStatic { }; static State _state; + static bool _os_enforced_transparent_mode; static void pd_initialize(); diff --git a/test/hotspot/jtreg/runtime/os/HugePageConfiguration.java b/test/hotspot/jtreg/runtime/os/HugePageConfiguration.java index f475af4c2de5c..4607f1bcf85fa 100644 --- a/test/hotspot/jtreg/runtime/os/HugePageConfiguration.java +++ b/test/hotspot/jtreg/runtime/os/HugePageConfiguration.java @@ -25,7 +25,6 @@ import jdk.test.lib.process.OutputAnalyzer; import java.io.*; -import java.util.Set; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -68,6 +67,9 @@ enum THPMode {always, never, madvise} THPMode _thpMode; long _thpPageSize; + enum ShmemTHPMode {always, within_size, advise, never, deny, force, unknown} + ShmemTHPMode _shmemThpMode; + public Set getStaticHugePageConfigurations() { return _staticHugePageConfigurations; } @@ -89,16 +91,21 @@ public boolean supportsTHP() { return _thpMode == THPMode.always || _thpMode == THPMode.madvise; } + public ShmemTHPMode getShmemThpMode() { + return _shmemThpMode; + } + // Returns true if static huge pages are supported (whether or not we have configured the pools) public boolean supportsStaticHugePages() { return _staticDefaultHugePageSize > 0 && _staticHugePageConfigurations.size() > 0; } - public HugePageConfiguration(Set _staticHugePageConfigurations, long _staticDefaultHugePageSize, THPMode _thpMode, long _thpPageSize) { + public HugePageConfiguration(Set _staticHugePageConfigurations, long _staticDefaultHugePageSize, THPMode _thpMode, long _thpPageSize, ShmemTHPMode _shmemThpMode) { this._staticHugePageConfigurations = _staticHugePageConfigurations; this._staticDefaultHugePageSize = _staticDefaultHugePageSize; this._thpMode = _thpMode; this._thpPageSize = _thpPageSize; + this._shmemThpMode = _shmemThpMode; } @Override @@ -108,6 +115,7 @@ public String toString() { ", _staticDefaultHugePageSize=" + _staticDefaultHugePageSize + ", _thpMode=" + _thpMode + ", _thpPageSize=" + _thpPageSize + + ", _shmemThpMode=" + _shmemThpMode + '}'; } @@ -117,12 +125,12 @@ public boolean equals(Object o) { if (o == null || getClass() != o.getClass()) return false; HugePageConfiguration that = (HugePageConfiguration) o; return _staticDefaultHugePageSize == that._staticDefaultHugePageSize && _thpPageSize == that._thpPageSize && - Objects.equals(_staticHugePageConfigurations, that._staticHugePageConfigurations) && _thpMode == that._thpMode; + Objects.equals(_staticHugePageConfigurations, that._staticHugePageConfigurations) && _thpMode == that._thpMode && + _shmemThpMode == that._shmemThpMode; } private static long readDefaultHugePageSizeFromOS() { Pattern pat = Pattern.compile("Hugepagesize: *(\\d+) +kB"); - long result = 0; try (Scanner scanner = new Scanner(new File("/proc/meminfo"))) { while (scanner.hasNextLine()) { Matcher mat = pat.matcher(scanner.nextLine()); @@ -199,12 +207,41 @@ private static long readTHPPageSizeFromOS() { return pagesize; } + private static ShmemTHPMode readShmemTHPModeFromOS() { + ShmemTHPMode mode = ShmemTHPMode.unknown; + String file = "/sys/kernel/mm/transparent_hugepage/shmem_enabled"; + try (FileReader fr = new FileReader(file); + BufferedReader reader = new BufferedReader(fr)) { + String s = reader.readLine(); + if (s.contains("[always]")) { + mode = ShmemTHPMode.always; + } else if (s.contains("[within_size]")) { + mode = ShmemTHPMode.within_size; + } else if (s.contains("[advise]")) { + mode = ShmemTHPMode.advise; + } else if (s.contains("[never]")) { + mode = ShmemTHPMode.never; + } else if (s.contains("[deny]")) { + mode = ShmemTHPMode.deny; + } else if (s.contains("[force]")) { + mode = ShmemTHPMode.force; + } else { + throw new RuntimeException("Unexpected content of " + file + ": " + s); + } + } catch (IOException e) { + System.out.println("Failed to read " + file); + // Happens when the kernel is not built to support THPs. + } + return mode; + } + // Fill object with info read from proc file system public static HugePageConfiguration readFromOS() throws IOException { return new HugePageConfiguration(readSupportedHugePagesFromOS(), readDefaultHugePageSizeFromOS(), readTHPModeFromOS(), - readTHPPageSizeFromOS()); + readTHPPageSizeFromOS(), + readShmemTHPModeFromOS()); } public static long parseSIUnit(String num, String unit) { @@ -227,14 +264,18 @@ public static HugePageConfiguration readFromJVMLog(OutputAnalyzer output) { // [0.001s][info][pagesize] Transparent hugepage (THP) support: // [0.001s][info][pagesize] THP mode: madvise // [0.001s][info][pagesize] THP pagesize: 2M + // [0.001s][info][pagesize] Shared memory transparent hugepage (THP) support: + // [0.001s][info][pagesize] Shared memory THP mode: always TreeSet staticHugePageConfigs = new TreeSet<>(); long defaultHugepageSize = 0; THPMode thpMode = THPMode.never; + ShmemTHPMode shmemThpMode = ShmemTHPMode.unknown; long thpPageSize = 0; Pattern patternHugepageSize = Pattern.compile(".*\\[pagesize] *hugepage size: (\\d+)([KMG])"); Pattern patternDefaultHugepageSize = Pattern.compile(".*\\[pagesize] *default hugepage size: (\\d+)([KMG]) *"); - Pattern patternTHPPageSize = Pattern.compile(".*\\[pagesize] *THP pagesize: (\\d+)([KMG])"); - Pattern patternTHPMode = Pattern.compile(".*\\[pagesize] *THP mode: (\\S+)"); + Pattern patternTHPPageSize = Pattern.compile(".*\\[pagesize] * THP pagesize: (\\d+)([KMG])"); + Pattern patternTHPMode = Pattern.compile(".*\\[pagesize] * THP mode: (\\S+)"); + Pattern patternShmemTHPMode = Pattern.compile(".*\\[pagesize] *Shared memory THP mode: (\\S+)"); List lines = output.asLines(); for (String s : lines) { Matcher mat = patternHugepageSize.matcher(s); @@ -262,9 +303,13 @@ public static HugePageConfiguration readFromJVMLog(OutputAnalyzer output) { if (mat.matches()) { thpMode = THPMode.valueOf(mat.group(1)); } + mat = patternShmemTHPMode.matcher(s); + if (mat.matches()) { + shmemThpMode = ShmemTHPMode.valueOf(mat.group(1)); + } } - return new HugePageConfiguration(staticHugePageConfigs, defaultHugepageSize, thpMode, thpPageSize); + return new HugePageConfiguration(staticHugePageConfigs, defaultHugepageSize, thpMode, thpPageSize, shmemThpMode); } } diff --git a/test/hotspot/jtreg/runtime/os/TestTracePageSizes.java b/test/hotspot/jtreg/runtime/os/TestTracePageSizes.java index 805b9732afbac..e4ad27b46e5db 100644 --- a/test/hotspot/jtreg/runtime/os/TestTracePageSizes.java +++ b/test/hotspot/jtreg/runtime/os/TestTracePageSizes.java @@ -143,10 +143,12 @@ static class SmapsParser { // or the end of file is encountered. static final Pattern SECTION_START_PATT = Pattern.compile("^([a-f0-9]+)-([a-f0-9]+) [\\-rwpsx]{4}.*"); static final Pattern KERNEL_PAGESIZE_PATT = Pattern.compile("^KernelPageSize:\\s*(\\d*) kB"); + static final Pattern THP_ELIGIBLE_PATT = Pattern.compile("^THPeligible:\\s+(\\d*)"); static final Pattern VMFLAGS_PATT = Pattern.compile("^VmFlags: ([\\w\\? ]*)"); String start; String end; String ps; + String thpEligible; String vmFlags; int lineno; @@ -154,12 +156,13 @@ void reset() { start = null; end = null; ps = null; + thpEligible = null; vmFlags = null; } public void finish() { if (start != null) { - RangeWithPageSize range = new RangeWithPageSize(start, end, ps, vmFlags); + RangeWithPageSize range = new RangeWithPageSize(start, end, ps, thpEligible, vmFlags); ranges.add(range); debug("Added range: " + range); reset(); @@ -167,10 +170,15 @@ public void finish() { } void eatNext(String line) { - debug("" + (lineno++) + " " + line); + // For better debugging experience call finish here before the debug() call. Matcher matSectionStart = SECTION_START_PATT.matcher(line); if (matSectionStart.matches()) { finish(); + } + + debug("" + (lineno++) + " " + line); + + if (matSectionStart.matches()) { start = matSectionStart.group(1); end = matSectionStart.group(2); ps = null; @@ -182,6 +190,11 @@ void eatNext(String line) { ps = matKernelPageSize.group(1); return; } + Matcher matTHPEligible = THP_ELIGIBLE_PATT.matcher(line); + if (matTHPEligible.matches()) { + thpEligible = matTHPEligible.group(1); + return; + } Matcher matVmFlags = VMFLAGS_PATT.matcher(line); if (matVmFlags.matches()) { vmFlags = matVmFlags.group(1); @@ -326,15 +339,18 @@ class RangeWithPageSize { private long start; private long end; private long pageSize; + private boolean thpEligible; private boolean vmFlagHG; private boolean vmFlagHT; + private boolean isTHP; - public RangeWithPageSize(String start, String end, String pageSize, String vmFlags) { + public RangeWithPageSize(String start, String end, String pageSize, String thpEligible, String vmFlags) { // Note: since we insist on kernels >= 3.8, all the following information should be present // (none of the input strings be null). this.start = Long.parseUnsignedLong(start, 16); this.end = Long.parseUnsignedLong(end, 16); this.pageSize = Long.parseLong(pageSize); + this.thpEligible = Integer.parseInt(thpEligible) == 1; vmFlagHG = false; vmFlagHT = false; @@ -348,6 +364,13 @@ public RangeWithPageSize(String start, String end, String pageSize, String vmFla vmFlagHG = true; } } + + // When the THP policy is 'always' instead of 'madvise, the vmFlagHG property is false. + // Check the THPeligible property instead. + isTHP = !vmFlagHT && this.thpEligible; + + // vmFlagHG should imply isTHP + assert !vmFlagHG || isTHP; } public long getPageSize() { @@ -355,7 +378,7 @@ public long getPageSize() { } public boolean isTransparentHuge() { - return vmFlagHG; + return isTHP; } public boolean isExplicitHuge() { @@ -368,6 +391,6 @@ public boolean includes(long addr) { public String toString() { return "[" + Long.toHexString(start) + ", " + Long.toHexString(end) + ") " + - "pageSize=" + pageSize + "KB isTHP=" + vmFlagHG + " isHUGETLB=" + vmFlagHT; + "pageSize=" + pageSize + "KB isTHP=" + isTHP + " isHUGETLB=" + vmFlagHT; } } From 2830dd2a7d3b933fbddca64ca0ac7a91e7ab0775 Mon Sep 17 00:00:00 2001 From: Aleksey Shipilev Date: Wed, 6 Dec 2023 21:17:19 +0000 Subject: [PATCH 242/250] 8321410: Shenandoah: Remove ShenandoahSuspendibleWorkers flag Reviewed-by: rkennke --- .../shenandoah/shenandoahConcurrentMark.cpp | 2 +- .../share/gc/shenandoah/shenandoahHeap.cpp | 12 +++------ .../gc/shenandoah/shenandoahHeap.inline.hpp | 2 +- .../share/gc/shenandoah/shenandoahMark.cpp | 2 +- .../gc/shenandoah/shenandoah_globals.hpp | 3 --- .../jtreg/gc/shenandoah/TestAllocObjects.java | 26 ------------------- 6 files changed, 7 insertions(+), 40 deletions(-) diff --git a/src/hotspot/share/gc/shenandoah/shenandoahConcurrentMark.cpp b/src/hotspot/share/gc/shenandoah/shenandoahConcurrentMark.cpp index e04c55d362d00..f3c72dfc0b10a 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahConcurrentMark.cpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahConcurrentMark.cpp @@ -57,7 +57,7 @@ class ShenandoahConcurrentMarkingTask : public WorkerTask { void work(uint worker_id) { ShenandoahHeap* heap = ShenandoahHeap::heap(); ShenandoahConcurrentWorkerSession worker_session(worker_id); - ShenandoahSuspendibleThreadSetJoiner stsj(ShenandoahSuspendibleWorkers); + ShenandoahSuspendibleThreadSetJoiner stsj; ShenandoahReferenceProcessor* rp = heap->ref_processor(); assert(rp != nullptr, "need reference processor"); StringDedup::Requests requests; diff --git a/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp b/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp index 367c1262c1add..d1b2a676999f5 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahHeap.cpp @@ -1023,7 +1023,7 @@ class ShenandoahEvacuationTask : public WorkerTask { void work(uint worker_id) { if (_concurrent) { ShenandoahConcurrentWorkerSession worker_session(worker_id); - ShenandoahSuspendibleThreadSetJoiner stsj(ShenandoahSuspendibleWorkers); + ShenandoahSuspendibleThreadSetJoiner stsj; ShenandoahEvacOOMScope oom_evac_scope; do_work(); } else { @@ -2056,7 +2056,7 @@ class ShenandoahUpdateHeapRefsTask : public WorkerTask { void work(uint worker_id) { if (CONCURRENT) { ShenandoahConcurrentWorkerSession worker_session(worker_id); - ShenandoahSuspendibleThreadSetJoiner stsj(ShenandoahSuspendibleWorkers); + ShenandoahSuspendibleThreadSetJoiner stsj; do_work(); } else { ShenandoahParallelWorkerSession worker_session(worker_id); @@ -2238,15 +2238,11 @@ bool ShenandoahHeap::uncommit_bitmap_slice(ShenandoahHeapRegion *r) { } void ShenandoahHeap::safepoint_synchronize_begin() { - if (ShenandoahSuspendibleWorkers) { - SuspendibleThreadSet::synchronize(); - } + SuspendibleThreadSet::synchronize(); } void ShenandoahHeap::safepoint_synchronize_end() { - if (ShenandoahSuspendibleWorkers) { - SuspendibleThreadSet::desynchronize(); - } + SuspendibleThreadSet::desynchronize(); } void ShenandoahHeap::entry_uncommit(double shrink_before, size_t shrink_until) { diff --git a/src/hotspot/share/gc/shenandoah/shenandoahHeap.inline.hpp b/src/hotspot/share/gc/shenandoah/shenandoahHeap.inline.hpp index 0c21fdd486b02..87c3ea50ba66f 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahHeap.inline.hpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahHeap.inline.hpp @@ -256,7 +256,7 @@ inline bool ShenandoahHeap::cancelled_gc() const { } inline bool ShenandoahHeap::check_cancelled_gc_and_yield(bool sts_active) { - if (sts_active && ShenandoahSuspendibleWorkers && !cancelled_gc()) { + if (sts_active && !cancelled_gc()) { if (SuspendibleThreadSet::should_yield()) { SuspendibleThreadSet::yield(); } diff --git a/src/hotspot/share/gc/shenandoah/shenandoahMark.cpp b/src/hotspot/share/gc/shenandoah/shenandoahMark.cpp index ffae4f068bc4b..4725b8c3dfae7 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahMark.cpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahMark.cpp @@ -185,7 +185,7 @@ void ShenandoahMark::mark_loop_work(T* cl, ShenandoahLiveData* live_data, uint w if (work == 0) { // No work encountered in current stride, try to terminate. // Need to leave the STS here otherwise it might block safepoints. - ShenandoahSuspendibleThreadSetLeaver stsl(CANCELLABLE && ShenandoahSuspendibleWorkers); + ShenandoahSuspendibleThreadSetLeaver stsl(CANCELLABLE); ShenandoahTerminatorTerminator tt(heap); if (terminator->offer_termination(&tt)) return; } diff --git a/src/hotspot/share/gc/shenandoah/shenandoah_globals.hpp b/src/hotspot/share/gc/shenandoah/shenandoah_globals.hpp index fae08c1e41859..91114906d1960 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoah_globals.hpp +++ b/src/hotspot/share/gc/shenandoah/shenandoah_globals.hpp @@ -331,9 +331,6 @@ "How many times to maximum attempt to flush SATB buffers at the " \ "end of concurrent marking.") \ \ - product(bool, ShenandoahSuspendibleWorkers, true, EXPERIMENTAL, \ - "Suspend concurrent GC worker threads at safepoints") \ - \ product(bool, ShenandoahSATBBarrier, true, DIAGNOSTIC, \ "Turn on/off SATB barriers in Shenandoah") \ \ diff --git a/test/hotspot/jtreg/gc/shenandoah/TestAllocObjects.java b/test/hotspot/jtreg/gc/shenandoah/TestAllocObjects.java index 002991196c7c5..32178555c9f6b 100644 --- a/test/hotspot/jtreg/gc/shenandoah/TestAllocObjects.java +++ b/test/hotspot/jtreg/gc/shenandoah/TestAllocObjects.java @@ -76,12 +76,6 @@ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive * TestAllocObjects - * - * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions - * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=aggressive - * -XX:+ShenandoahSuspendibleWorkers - * TestAllocObjects - * */ /* @@ -97,11 +91,6 @@ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive * TestAllocObjects - * - * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions - * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=adaptive - * -XX:+ShenandoahSuspendibleWorkers - * TestAllocObjects */ /* @@ -112,11 +101,6 @@ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=static * TestAllocObjects - * - * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions - * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=static - * -XX:+ShenandoahSuspendibleWorkers - * TestAllocObjects */ /* @@ -127,11 +111,6 @@ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=compact * TestAllocObjects - * - * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions - * -XX:+UseShenandoahGC -XX:ShenandoahGCHeuristics=compact - * -XX:+ShenandoahSuspendibleWorkers - * TestAllocObjects */ /* @@ -177,11 +156,6 @@ * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=iu * TestAllocObjects - * - * @run main/othervm -Xmx1g -Xms1g -XX:+UnlockDiagnosticVMOptions -XX:+UnlockExperimentalVMOptions - * -XX:+UseShenandoahGC -XX:ShenandoahGCMode=iu - * -XX:+ShenandoahSuspendibleWorkers - * TestAllocObjects */ public class TestAllocObjects { From b02fc8681e57d75b5e05ce98216c53ff4d1e3b5d Mon Sep 17 00:00:00 2001 From: Aleksey Shipilev Date: Wed, 6 Dec 2023 21:19:24 +0000 Subject: [PATCH 243/250] 8321122: Shenandoah: Remove ShenandoahLoopOptsAfterExpansion flag Reviewed-by: kdnilsen, roland, rkennke --- .../gc/shenandoah/c2/shenandoahSupport.cpp | 17 +++++++---------- .../share/gc/shenandoah/shenandoah_globals.hpp | 3 --- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/src/hotspot/share/gc/shenandoah/c2/shenandoahSupport.cpp b/src/hotspot/share/gc/shenandoah/c2/shenandoahSupport.cpp index 07dd900d989fe..d0de328a7b82d 100644 --- a/src/hotspot/share/gc/shenandoah/c2/shenandoahSupport.cpp +++ b/src/hotspot/share/gc/shenandoah/c2/shenandoahSupport.cpp @@ -50,21 +50,18 @@ bool ShenandoahBarrierC2Support::expand(Compile* C, PhaseIterGVN& igvn) { state->load_reference_barriers_count()) > 0) { assert(C->post_loop_opts_phase(), "no loop opts allowed"); C->reset_post_loop_opts_phase(); // ... but we know what we are doing - bool attempt_more_loopopts = ShenandoahLoopOptsAfterExpansion; C->clear_major_progress(); PhaseIdealLoop::optimize(igvn, LoopOptsShenandoahExpand); if (C->failing()) return false; - PhaseIdealLoop::verify(igvn); - if (attempt_more_loopopts) { - C->set_major_progress(); - if (!C->optimize_loops(igvn, LoopOptsShenandoahPostExpand)) { - return false; - } - C->clear_major_progress(); - C->process_for_post_loop_opts_igvn(igvn); - if (C->failing()) return false; + C->set_major_progress(); + if (!C->optimize_loops(igvn, LoopOptsShenandoahPostExpand)) { + return false; } + C->clear_major_progress(); + C->process_for_post_loop_opts_igvn(igvn); + if (C->failing()) return false; + C->set_post_loop_opts_phase(); // now for real! } return true; diff --git a/src/hotspot/share/gc/shenandoah/shenandoah_globals.hpp b/src/hotspot/share/gc/shenandoah/shenandoah_globals.hpp index 91114906d1960..1d22eae207951 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoah_globals.hpp +++ b/src/hotspot/share/gc/shenandoah/shenandoah_globals.hpp @@ -352,9 +352,6 @@ develop(bool, ShenandoahVerifyOptoBarriers, trueInDebug, \ "Verify no missing barriers in C2.") \ \ - product(bool, ShenandoahLoopOptsAfterExpansion, true, DIAGNOSTIC, \ - "Attempt more loop opts after barrier expansion.") \ - \ // end of GC_SHENANDOAH_FLAGS From 781775d73b4dd0b241870be50c921242f561b8a1 Mon Sep 17 00:00:00 2001 From: Joe Darcy Date: Wed, 6 Dec 2023 21:24:56 +0000 Subject: [PATCH 244/250] 8321484: Make TestImplicitlyDeclaredClasses release independent Reviewed-by: vromero --- .../TestImplicitlyDeclaredClasses.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/langtools/jdk/javadoc/doclet/testImplicitlyDeclaredClasses/TestImplicitlyDeclaredClasses.java b/test/langtools/jdk/javadoc/doclet/testImplicitlyDeclaredClasses/TestImplicitlyDeclaredClasses.java index 20cd55e07bcca..80b2a0685ff47 100644 --- a/test/langtools/jdk/javadoc/doclet/testImplicitlyDeclaredClasses/TestImplicitlyDeclaredClasses.java +++ b/test/langtools/jdk/javadoc/doclet/testImplicitlyDeclaredClasses/TestImplicitlyDeclaredClasses.java @@ -65,7 +65,7 @@ public void test(Path base) throws IOException { .collect(Collectors.joining("\n"))); // TODO: remove preview-related options once "Implicitly Declared // Classes and Instance Main Methods" has been standardized - javadoc("--enable-preview", "--source=22", + javadoc("--enable-preview", "--source=" + Runtime.version().feature(), "-d", base.resolve("out-" + index).toString(), src.toString()); From 82796bdebbf56b98ec97a6d572ed68c2842f60c6 Mon Sep 17 00:00:00 2001 From: Jim Laskey Date: Wed, 6 Dec 2023 21:55:05 +0000 Subject: [PATCH 245/250] 8320570: NegativeArraySizeException decoding >1G UTF8 bytes with non-ascii characters Reviewed-by: rriggs --- .../share/classes/java/lang/String.java | 14 ++-- .../String/CompactString/NegativeSize.java | 75 +++++++++++++++++++ 2 files changed, 82 insertions(+), 7 deletions(-) create mode 100644 test/jdk/java/lang/String/CompactString/NegativeSize.java diff --git a/src/java.base/share/classes/java/lang/String.java b/src/java.base/share/classes/java/lang/String.java index 5869e086191fa..2245792999aae 100644 --- a/src/java.base/share/classes/java/lang/String.java +++ b/src/java.base/share/classes/java/lang/String.java @@ -592,7 +592,7 @@ private String(Charset charset, byte[] bytes, int offset, int length) { this.coder = LATIN1; return; } - byte[] utf16 = new byte[length << 1]; + byte[] utf16 = StringUTF16.newBytesFor(length); StringLatin1.inflate(latin1, 0, utf16, 0, dp); dp = decodeUTF8_UTF16(latin1, sp, length, utf16, dp, true); if (dp != length) { @@ -601,7 +601,7 @@ private String(Charset charset, byte[] bytes, int offset, int length) { this.value = utf16; this.coder = UTF16; } else { // !COMPACT_STRINGS - byte[] dst = new byte[length << 1]; + byte[] dst = StringUTF16.newBytesFor(length); int dp = decodeUTF8_UTF16(bytes, offset, offset + length, dst, 0, true); if (dp != length) { dst = Arrays.copyOf(dst, dp << 1); @@ -622,7 +622,7 @@ private String(Charset charset, byte[] bytes, int offset, int length) { this.value = Arrays.copyOfRange(bytes, offset, offset + length); this.coder = LATIN1; } else { - byte[] dst = new byte[length << 1]; + byte[] dst = StringUTF16.newBytesFor(length); int dp = 0; while (dp < length) { int b = bytes[offset++]; @@ -763,15 +763,15 @@ static String newStringUTF8NoRepl(byte[] bytes, int offset, int length, boolean return new String(dst, LATIN1); } if (dp == 0) { - dst = new byte[length << 1]; + dst = StringUTF16.newBytesFor(length); } else { - byte[] buf = new byte[length << 1]; + byte[] buf = StringUTF16.newBytesFor(length); StringLatin1.inflate(dst, 0, buf, 0, dp); dst = buf; } dp = decodeUTF8_UTF16(bytes, offset, sl, dst, dp, false); } else { // !COMPACT_STRINGS - dst = new byte[length << 1]; + dst = StringUTF16.newBytesFor(length); dp = decodeUTF8_UTF16(bytes, offset, offset + length, dst, 0, false); } if (dp != length) { @@ -1316,7 +1316,7 @@ private static byte[] encodeUTF8(byte coder, byte[] val, boolean doReplace) { } int dp = 0; - byte[] dst = new byte[val.length << 1]; + byte[] dst = StringUTF16.newBytesFor(val.length); for (byte c : val) { if (c < 0) { dst[dp++] = (byte) (0xc0 | ((c & 0xff) >> 6)); diff --git a/test/jdk/java/lang/String/CompactString/NegativeSize.java b/test/jdk/java/lang/String/CompactString/NegativeSize.java new file mode 100644 index 0000000000000..a218c5f18f8d7 --- /dev/null +++ b/test/jdk/java/lang/String/CompactString/NegativeSize.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2023, 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. + */ + +import java.io.IOException; +import java.nio.charset.StandardCharsets; + +/* + * @test + * @bug 8077559 + * @summary Tests Compact String for negative size. + * @requires vm.bits == 64 & os.maxMemory >= 4G + * @run main/othervm -XX:+CompactStrings -Xmx4g NegativeSize + * @run main/othervm -XX:-CompactStrings -Xmx4g NegativeSize + */ + +// In Java8: java.lang.OutOfMemoryError: Java heap space +// In Java9+: was java.lang.NegativeArraySizeException: -1894967266 +public class NegativeSize { + + static byte[] generateData() { + int asciisize = 1_200_000_000; + byte[] nonAscii = "非アスキー".getBytes(); + int nonAsciiSize = nonAscii.length; + // 1 GB + byte[] arr = new byte[asciisize + nonAsciiSize]; + for (int i=0; i Date: Wed, 6 Dec 2023 21:57:05 +0000 Subject: [PATCH 246/250] 8320443: [macos] Test java/awt/print/PrinterJob/PrinterDevice.java fails on macOS Reviewed-by: aivanov, azvegint --- .../classes/sun/lwawt/macosx/CPrinterJob.java | 4 + .../share/classes/sun/print/PSPrinterJob.java | 2 +- .../classes/sun/print/RasterPrinterJob.java | 4 +- .../awt/print/PrinterJob/PrinterDevice.java | 99 ++++++++++++------- 4 files changed, 69 insertions(+), 40 deletions(-) diff --git a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPrinterJob.java b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPrinterJob.java index 625494efc999f..407af09810c50 100644 --- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPrinterJob.java +++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPrinterJob.java @@ -823,6 +823,10 @@ private Rectangle2D printAndGetPageFormatArea(final Printable printable, final G public void run() { synchronized (ret) { try { + Paper paper = pageFormat.getPaper(); + double width = Math.rint(paper.getWidth()); + double height = Math.rint(paper.getHeight()); + setGraphicsConfigInfo(((Graphics2D)graphics).getTransform(), width, height); int pageResult = printable.print( graphics, pageFormat, pageIndex); if (pageResult != Printable.NO_SUCH_PAGE) { diff --git a/src/java.desktop/share/classes/sun/print/PSPrinterJob.java b/src/java.desktop/share/classes/sun/print/PSPrinterJob.java index 18c8a663d8ec0..8973467fb9771 100644 --- a/src/java.desktop/share/classes/sun/print/PSPrinterJob.java +++ b/src/java.desktop/share/classes/sun/print/PSPrinterJob.java @@ -264,7 +264,7 @@ public class PSPrinterJob extends RasterPrinterJob { private AffineTransform mLastTransform; private double xres = PS_XRES; - private double yres = PS_XRES; + private double yres = PS_YRES; /* non-null if printing EPS for Java Plugin */ private EPSPrinter epsPrinter = null; diff --git a/src/java.desktop/share/classes/sun/print/RasterPrinterJob.java b/src/java.desktop/share/classes/sun/print/RasterPrinterJob.java index b7dcba05cb00d..0cf9c16f166a0 100644 --- a/src/java.desktop/share/classes/sun/print/RasterPrinterJob.java +++ b/src/java.desktop/share/classes/sun/print/RasterPrinterJob.java @@ -2092,8 +2092,8 @@ protected int getNoncollatedCopies() { private AffineTransform defaultDeviceTransform; private PrinterGraphicsConfig pgConfig; - synchronized void setGraphicsConfigInfo(AffineTransform at, - double pw, double ph) { + protected synchronized void setGraphicsConfigInfo(AffineTransform at, + double pw, double ph) { Point2D.Double pt = new Point2D.Double(pw, ph); at.transform(pt, pt); diff --git a/test/jdk/java/awt/print/PrinterJob/PrinterDevice.java b/test/jdk/java/awt/print/PrinterJob/PrinterDevice.java index 418076105881e..8e1b30aaf94c9 100644 --- a/test/jdk/java/awt/print/PrinterJob/PrinterDevice.java +++ b/test/jdk/java/awt/print/PrinterJob/PrinterDevice.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2023, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -23,22 +23,34 @@ /* * - * @bug 4276227 + * @test + * @bug 4276227 8320443 + * @key printer * @summary Checks that the PrinterGraphics is for a Printer GraphicsDevice. * Test doesn't run unless there's a printer on the system. - * @author prr * @run main/othervm PrinterDevice */ -import java.awt.*; -import java.awt.geom.*; -import java.awt.print.*; -import java.io.*; -import javax.print.attribute.*; -import javax.print.attribute.standard.*; +import java.io.File; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.GraphicsConfiguration; +import java.awt.GraphicsDevice; +import java.awt.Rectangle; +import java.awt.geom.AffineTransform; +import java.awt.print.PageFormat; +import java.awt.print.Printable; +import java.awt.print.PrinterException; +import java.awt.print.PrinterJob; +import javax.print.attribute.HashPrintRequestAttributeSet; +import javax.print.attribute.PrintRequestAttributeSet; +import javax.print.attribute.standard.Destination; +import javax.print.attribute.standard.OrientationRequested; public class PrinterDevice implements Printable { + static volatile boolean failed = false; + public static void main(String args[]) throws PrinterException { System.setProperty("java.awt.headless", "true"); @@ -54,39 +66,52 @@ public static void main(String args[]) throws PrinterException { aset.add(OrientationRequested.LANDSCAPE); pj.setPrintable(new PrinterDevice()); pj.print(aset); + if (failed) { + throw new RuntimeException("Test failed but no exception propagated."); + } } public int print(Graphics g, PageFormat pf, int pageIndex) { - if (pageIndex > 0 ) { - return Printable.NO_SUCH_PAGE; - } - - /* Make sure calls to get DeviceConfig, its transforms, - * etc all work without exceptions and as expected */ - Graphics2D g2 = (Graphics2D)g; - GraphicsConfiguration gConfig = g2.getDeviceConfiguration(); - AffineTransform dt = gConfig.getDefaultTransform(); - AffineTransform nt = gConfig.getNormalizingTransform(); - AffineTransform gt = g2.getTransform(); + if (pageIndex > 0) { + return Printable.NO_SUCH_PAGE; + } - System.out.println("Graphics2D transform = " + gt); - System.out.println("Default transform = " + dt); - System.out.println("Normalizing transform = " + nt); + Graphics2D g2 = (Graphics2D)g; + GraphicsConfiguration gConfig = g2.getDeviceConfiguration(); + AffineTransform nt = null; + try { + /* Make sure calls to get DeviceConfig, its transforms, + * etc all work without exceptions and as expected */ + System.out.println("GraphicsConfig="+gConfig); + AffineTransform dt = gConfig.getDefaultTransform(); + System.out.println("Default transform = " + dt); + nt = gConfig.getNormalizingTransform(); + System.out.println("Normalizing transform = " + nt); + AffineTransform gt = g2.getTransform(); + System.out.println("Graphics2D transform = " + gt); + } catch (Exception e) { + failed = true; + System.err.println("Unexpected exception getting transform."); + e.printStackTrace(); + throw e; + } - Rectangle bounds = gConfig.getBounds(); - System.out.println("Bounds = " + bounds); - if (!nt.isIdentity()) { - throw new RuntimeException("Expected Identity transdform"); - } + Rectangle bounds = gConfig.getBounds(); + System.out.println("Bounds = " + bounds); + if (!nt.isIdentity()) { + failed = true; + throw new RuntimeException("Expected Identity transform"); + } - /* Make sure that device really is TYPE_PRINTER */ - GraphicsDevice gd = gConfig.getDevice(); - System.out.println("Printer Device ID = " + gd.getIDstring()); - if (!(gd.getType() == GraphicsDevice.TYPE_PRINTER)) { - throw new RuntimeException("Expected printer device"); - } - System.out.println(" *** "); - System.out.println(""); - return Printable.PAGE_EXISTS; + /* Make sure that device really is TYPE_PRINTER */ + GraphicsDevice gd = gConfig.getDevice(); + System.out.println("Printer Device ID = " + gd.getIDstring()); + if (gd.getType() != GraphicsDevice.TYPE_PRINTER) { + failed = true; + throw new RuntimeException("Expected printer device"); + } + System.out.println(" *** "); + System.out.println(""); + return Printable.PAGE_EXISTS; } } From 50baaf46b71f6d55281043ef185ac277c2db558e Mon Sep 17 00:00:00 2001 From: Albert Mingkun Yang Date: Wed, 6 Dec 2023 21:58:56 +0000 Subject: [PATCH 247/250] 8321013: Parallel: Refactor ObjectStartArray Reviewed-by: tschatzl, sjohanss --- .../share/gc/parallel/objectStartArray.cpp | 142 +++++++++--------- .../share/gc/parallel/objectStartArray.hpp | 137 ++++------------- .../gc/parallel/objectStartArray.inline.hpp | 50 +++--- src/hotspot/share/gc/parallel/psOldGen.cpp | 17 +-- src/hotspot/share/gc/parallel/psOldGen.hpp | 20 +-- .../share/gc/parallel/psParallelCompact.cpp | 14 +- .../share/gc/parallel/psPromotionLAB.cpp | 11 +- .../share/gc/parallel/psPromotionLAB.hpp | 2 +- .../share/gc/serial/tenuredGeneration.cpp | 4 +- src/hotspot/share/gc/shared/cardTable.cpp | 5 - src/hotspot/share/gc/shared/cardTable.hpp | 2 +- 11 files changed, 152 insertions(+), 252 deletions(-) diff --git a/src/hotspot/share/gc/parallel/objectStartArray.cpp b/src/hotspot/share/gc/parallel/objectStartArray.cpp index 804b936393c45..f55324f5997a0 100644 --- a/src/hotspot/share/gc/parallel/objectStartArray.cpp +++ b/src/hotspot/share/gc/parallel/objectStartArray.cpp @@ -25,32 +25,21 @@ #include "precompiled.hpp" #include "gc/parallel/objectStartArray.inline.hpp" #include "gc/shared/cardTableBarrierSet.hpp" -#include "memory/allocation.inline.hpp" #include "nmt/memTracker.hpp" #include "oops/oop.inline.hpp" #include "runtime/java.hpp" #include "utilities/align.hpp" -uint ObjectStartArray::_card_shift = 0; -uint ObjectStartArray::_card_size = 0; -uint ObjectStartArray::_card_size_in_words = 0; +static size_t num_bytes_required(MemRegion mr) { + assert(CardTable::is_card_aligned(mr.start()), "precondition"); + assert(CardTable::is_card_aligned(mr.end()), "precondition"); -void ObjectStartArray::initialize_block_size(uint card_shift) { - _card_shift = card_shift; - _card_size = 1 << _card_shift; - _card_size_in_words = _card_size / sizeof(HeapWord); + return mr.word_size() / BOTConstants::card_size_in_words(); } void ObjectStartArray::initialize(MemRegion reserved_region) { - // We're based on the assumption that we use the same - // size blocks as the card table. - assert(_card_size == CardTable::card_size(), "Sanity"); - assert(_card_size <= MaxBlockSize, "block_size must be less than or equal to " UINT32_FORMAT, MaxBlockSize); - // Calculate how much space must be reserved - _reserved_region = reserved_region; - - size_t bytes_to_reserve = reserved_region.word_size() / _card_size_in_words; + size_t bytes_to_reserve = num_bytes_required(reserved_region); assert(bytes_to_reserve > 0, "Sanity"); bytes_to_reserve = @@ -62,91 +51,96 @@ void ObjectStartArray::initialize(MemRegion reserved_region) { if (!backing_store.is_reserved()) { vm_exit_during_initialization("Could not reserve space for ObjectStartArray"); } - MemTracker::record_virtual_memory_type((address)backing_store.base(), mtGC); + MemTracker::record_virtual_memory_type(backing_store.base(), mtGC); // We do not commit any memory initially _virtual_space.initialize(backing_store); - _raw_base = (jbyte*)_virtual_space.low_boundary(); - assert(_raw_base != nullptr, "set from the backing_store"); - - _offset_base = _raw_base - (size_t(reserved_region.start()) >> _card_shift); - - _covered_region.set_start(reserved_region.start()); - _covered_region.set_word_size(0); + assert(_virtual_space.low_boundary() != nullptr, "set from the backing_store"); - _blocks_region.set_start((HeapWord*)_raw_base); - _blocks_region.set_word_size(0); + _offset_base = (uint8_t*)(_virtual_space.low_boundary() - (uintptr_t(reserved_region.start()) >> BOTConstants::log_card_size())); } void ObjectStartArray::set_covered_region(MemRegion mr) { - assert(_reserved_region.contains(mr), "MemRegion outside of reserved space"); - assert(_reserved_region.start() == mr.start(), "Attempt to move covered region"); - - HeapWord* low_bound = mr.start(); - HeapWord* high_bound = mr.end(); - assert((uintptr_t(low_bound) & (_card_size - 1)) == 0, "heap must start at block boundary"); - assert((uintptr_t(high_bound) & (_card_size - 1)) == 0, "heap must end at block boundary"); - - size_t requested_blocks_size_in_bytes = mr.word_size() / _card_size_in_words; + DEBUG_ONLY(_covered_region = mr;) + size_t requested_size = num_bytes_required(mr); // Only commit memory in page sized chunks - requested_blocks_size_in_bytes = - align_up(requested_blocks_size_in_bytes, os::vm_page_size()); + requested_size = align_up(requested_size, os::vm_page_size()); - _covered_region = mr; + size_t current_size = _virtual_space.committed_size(); - size_t current_blocks_size_in_bytes = _blocks_region.byte_size(); + if (requested_size == current_size) { + return; + } - if (requested_blocks_size_in_bytes > current_blocks_size_in_bytes) { + if (requested_size > current_size) { // Expand - size_t expand_by = requested_blocks_size_in_bytes - current_blocks_size_in_bytes; + size_t expand_by = requested_size - current_size; if (!_virtual_space.expand_by(expand_by)) { vm_exit_out_of_memory(expand_by, OOM_MMAP_ERROR, "object start array expansion"); } - // Clear *only* the newly allocated region - memset(_blocks_region.end(), clean_block, expand_by); - } - - if (requested_blocks_size_in_bytes < current_blocks_size_in_bytes) { + } else { // Shrink - size_t shrink_by = current_blocks_size_in_bytes - requested_blocks_size_in_bytes; + size_t shrink_by = current_size - requested_size; _virtual_space.shrink_by(shrink_by); } - - _blocks_region.set_word_size(requested_blocks_size_in_bytes / sizeof(HeapWord)); - - assert(requested_blocks_size_in_bytes % sizeof(HeapWord) == 0, "Block table not expanded in word sized increment"); - assert(requested_blocks_size_in_bytes == _blocks_region.byte_size(), "Sanity"); - assert(block_for_addr(low_bound) == &_raw_base[0], "Checking start of map"); - assert(block_for_addr(high_bound-1) <= &_raw_base[_blocks_region.byte_size()-1], "Checking end of map"); } -void ObjectStartArray::reset() { - memset(_blocks_region.start(), clean_block, _blocks_region.byte_size()); +static void fill_range(uint8_t* start, uint8_t* end, uint8_t v) { + // + 1 for inclusive + memset(start, v, pointer_delta(end, start, sizeof(uint8_t)) + 1); } -bool ObjectStartArray::object_starts_in_range(HeapWord* start_addr, - HeapWord* end_addr) const { - assert(start_addr <= end_addr, - "Range is wrong. start_addr (" PTR_FORMAT ") is after end_addr (" PTR_FORMAT ")", - p2i(start_addr), p2i(end_addr)); - - assert(is_aligned(start_addr, _card_size), "precondition"); - - if (start_addr == end_addr) { - // No objects in empty range. - return false; +void ObjectStartArray::update_for_block_work(HeapWord* blk_start, + HeapWord* blk_end) { + HeapWord* const cur_card_boundary = align_up_by_card_size(blk_start); + uint8_t* const offset_entry = entry_for_addr(cur_card_boundary); + + // The first card holds the actual offset. + *offset_entry = checked_cast(pointer_delta(cur_card_boundary, blk_start)); + + // Check if this block spans over other cards. + uint8_t* const end_entry = entry_for_addr(blk_end - 1); + assert(offset_entry <= end_entry, "inv"); + + if (offset_entry != end_entry) { + // Handling remaining entries. + uint8_t* start_entry_for_region = offset_entry + 1; + for (uint i = 0; i < BOTConstants::N_powers; i++) { + // -1 so that the reach ends in this region and not at the start + // of the next. + uint8_t* reach = offset_entry + BOTConstants::power_to_cards_back(i + 1) - 1; + uint8_t value = checked_cast(BOTConstants::card_size_in_words() + i); + + fill_range(start_entry_for_region, MIN2(reach, end_entry), value); + start_entry_for_region = reach + 1; + + if (reach >= end_entry) { + break; + } + } + assert(start_entry_for_region > end_entry, "Sanity check"); } - jbyte* start_block = block_for_addr(start_addr); - jbyte* end_block = block_for_addr(end_addr - 1); + debug_only(verify_for_block(blk_start, blk_end);) +} - for (jbyte* block = start_block; block <= end_block; block++) { - if (*block != clean_block) { - return true; +void ObjectStartArray::verify_for_block(HeapWord* blk_start, HeapWord* blk_end) const { + assert(is_crossing_card_boundary(blk_start, blk_end), "precondition"); + + const uint8_t* const start_entry = entry_for_addr(align_up_by_card_size(blk_start)); + const uint8_t* const end_entry = entry_for_addr(blk_end - 1); + // Check entries in [start_entry, end_entry] + assert(*start_entry < BOTConstants::card_size_in_words(), "offset entry"); + + for (const uint8_t* i = start_entry + 1; i <= end_entry; ++i) { + const uint8_t prev = *(i-1); + const uint8_t value = *i; + if (prev != value) { + assert(value >= prev, "monotonic"); + size_t n_cards_back = BOTConstants::entry_to_cards_back(value); + assert(start_entry == (i - n_cards_back), "inv"); } } - - return false; } diff --git a/src/hotspot/share/gc/parallel/objectStartArray.hpp b/src/hotspot/share/gc/parallel/objectStartArray.hpp index 06005fc007561..cc310997b4e2a 100644 --- a/src/hotspot/share/gc/parallel/objectStartArray.hpp +++ b/src/hotspot/share/gc/parallel/objectStartArray.hpp @@ -26,6 +26,7 @@ #define SHARE_GC_PARALLEL_OBJECTSTARTARRAY_HPP #include "gc/parallel/psVirtualspace.hpp" +#include "gc/shared/blockOffsetTable.hpp" #include "memory/allocation.hpp" #include "memory/memRegion.hpp" #include "oops/oop.hpp" @@ -36,141 +37,65 @@ // class ObjectStartArray : public CHeapObj { - friend class VerifyObjectStartArrayClosure; - - private: - PSVirtualSpace _virtual_space; - MemRegion _reserved_region; // The committed (old-gen heap) virtual space this object-start-array covers. - MemRegion _covered_region; - MemRegion _blocks_region; - jbyte* _raw_base; - jbyte* _offset_base; - - static uint _card_shift; - static uint _card_size; - static uint _card_size_in_words; - - public: - - enum BlockValueConstants { - clean_block = -1 - }; - - // Maximum size an offset table entry can cover. This maximum is derived from that - // we need an extra bit for possible offsets in the byte for backskip values, leaving 2^7 possible offsets. - // Minimum object alignment is 8 bytes (2^3), so we can at most represent 2^10 offsets within a BOT value. - static const uint MaxBlockSize = 1024; - - // Initialize block size based on card size - static void initialize_block_size(uint card_shift); + DEBUG_ONLY(MemRegion _covered_region;) - static uint card_shift() { - return _card_shift; - } - - static uint card_size() { - return _card_size; - } - static uint card_size_in_words() { - return _card_size_in_words; - } + // BOT array + PSVirtualSpace _virtual_space; - protected: + // Biased array-start of BOT array for fast heap-addr / BOT entry translation + uint8_t* _offset_base; // Mapping from address to object start array entry - jbyte* block_for_addr(void* p) const { + uint8_t* entry_for_addr(const void* const p) const { assert(_covered_region.contains(p), "out of bounds access to object start array"); - jbyte* result = &_offset_base[uintptr_t(p) >> _card_shift]; - assert(_blocks_region.contains(result), - "out of bounds result in byte_for"); + uint8_t* result = &_offset_base[uintptr_t(p) >> BOTConstants::log_card_size()]; return result; } // Mapping from object start array entry to address of first word - HeapWord* addr_for_block(jbyte* p) { - assert(_blocks_region.contains(p), - "out of bounds access to object start array"); - size_t delta = pointer_delta(p, _offset_base, sizeof(jbyte)); - HeapWord* result = (HeapWord*) (delta << _card_shift); + HeapWord* addr_for_entry(const uint8_t* const p) const { + size_t delta = pointer_delta(p, _offset_base, sizeof(uint8_t)); + HeapWord* result = (HeapWord*) (delta << BOTConstants::log_card_size()); assert(_covered_region.contains(result), "out of bounds accessor from card marking array"); return result; } - // Mapping that includes the derived offset. - // If the block is clean, returns the last address in the covered region. - // If the block is < index 0, returns the start of the covered region. - HeapWord* offset_addr_for_block(jbyte* p) const { - // We have to do this before the assert - if (p < _raw_base) { - return _covered_region.start(); - } - - assert(_blocks_region.contains(p), - "out of bounds access to object start array"); - - if (*p == clean_block) { - return _covered_region.end(); - } + static HeapWord* align_up_by_card_size(HeapWord* const addr) { + return align_up(addr, BOTConstants::card_size()); + } - size_t delta = pointer_delta(p, _offset_base, sizeof(jbyte)); - HeapWord* result = (HeapWord*) (delta << _card_shift); - result += *p; + void update_for_block_work(HeapWord* blk_start, HeapWord* blk_end); - assert(_covered_region.contains(result), - "out of bounds accessor from card marking array"); - - return result; - } + void verify_for_block(HeapWord* blk_start, HeapWord* blk_end) const; public: - - // This method is in lieu of a constructor, so that this class can be - // embedded inline in other classes. void initialize(MemRegion reserved_region); + // Heap old-gen resizing void set_covered_region(MemRegion mr); - void reset(); - - MemRegion covered_region() { return _covered_region; } - -#define assert_covered_region_contains(addr) \ - assert(_covered_region.contains(addr), \ - #addr " (" PTR_FORMAT ") is not in covered region [" PTR_FORMAT ", " PTR_FORMAT "]", \ - p2i(addr), p2i(_covered_region.start()), p2i(_covered_region.end())) - - void allocate_block(HeapWord* p) { - assert_covered_region_contains(p); - jbyte* block = block_for_addr(p); - HeapWord* block_base = addr_for_block(block); - size_t offset = pointer_delta(p, block_base, sizeof(HeapWord*)); - assert(offset < 128, "Sanity"); - // When doing MT offsets, we can't assert this. - //assert(offset > *block, "Found backwards allocation"); - *block = (jbyte)offset; + static bool is_crossing_card_boundary(HeapWord* const blk_start, + HeapWord* const blk_end) { + HeapWord* cur_card_boundary = align_up_by_card_size(blk_start); + // Strictly greater-than, since we check if this block *crosses* card boundary. + return blk_end > cur_card_boundary; } - // Optimized for finding the first object that crosses into - // a given block. The blocks contain the offset of the last - // object in that block. Scroll backwards by one, and the first - // object hit should be at the beginning of the block - inline HeapWord* object_start(HeapWord* addr) const; + // Returns the address of the start of the block reaching into the card containing + // "addr". + inline HeapWord* block_start_reaching_into_card(HeapWord* const addr) const; - bool is_block_allocated(HeapWord* addr) { - assert_covered_region_contains(addr); - jbyte* block = block_for_addr(addr); - return *block != clean_block; + // [blk_start, blk_end) representing a block of memory in the heap. + void update_for_block(HeapWord* blk_start, HeapWord* blk_end) { + if (is_crossing_card_boundary(blk_start, blk_end)) { + update_for_block_work(blk_start, blk_end); + } } - // Return true iff an object starts in - // [start_addr, end_addr_aligned_up) - // where - // end_addr_aligned_up = align_up(end_addr, _card_size) - // Precondition: start_addr is card-size aligned - bool object_starts_in_range(HeapWord* start_addr, HeapWord* end_addr) const; + inline HeapWord* object_start(HeapWord* const addr) const; }; #endif // SHARE_GC_PARALLEL_OBJECTSTARTARRAY_HPP diff --git a/src/hotspot/share/gc/parallel/objectStartArray.inline.hpp b/src/hotspot/share/gc/parallel/objectStartArray.inline.hpp index 75650a6e1cf0b..3fb6cb61fc1e4 100644 --- a/src/hotspot/share/gc/parallel/objectStartArray.inline.hpp +++ b/src/hotspot/share/gc/parallel/objectStartArray.inline.hpp @@ -27,27 +27,41 @@ #include "gc/parallel/objectStartArray.hpp" -// Optimized for finding the first object that crosses into -// a given block. The blocks contain the offset of the last -// object in that block. Scroll backwards by one, and the first -// object hit should be at the beginning of the block -HeapWord* ObjectStartArray::object_start(HeapWord* addr) const { - assert_covered_region_contains(addr); - jbyte* block = block_for_addr(addr); - HeapWord* scroll_forward = offset_addr_for_block(block--); - while (scroll_forward > addr) { - scroll_forward = offset_addr_for_block(block--); - } +HeapWord* ObjectStartArray::object_start(HeapWord* const addr) const { + HeapWord* cur_block = block_start_reaching_into_card(addr); - HeapWord* next = scroll_forward; - while (next <= addr) { - scroll_forward = next; - next += cast_to_oop(next)->size(); + while (true) { + HeapWord* next_block = cur_block + cast_to_oop(cur_block)->size(); + if (next_block > addr) { + assert(cur_block <= addr, "postcondition"); + return cur_block; + } + // Because the BOT is precise, we should never step into the next card + // (i.e. crossing the card boundary). + assert(!is_crossing_card_boundary(next_block, addr), "must be"); + cur_block = next_block; } - assert(scroll_forward <= addr, "wrong order for current and arg"); - assert(addr <= next, "wrong order for arg and next"); - return scroll_forward; } +HeapWord* ObjectStartArray::block_start_reaching_into_card(HeapWord* const addr) const { + const uint8_t* entry = entry_for_addr(addr); + + uint8_t offset; + while (true) { + offset = *entry; + + if (offset < BOTConstants::card_size_in_words()) { + break; + } + + // The excess of the offset from N_words indicates a power of Base + // to go back by. + size_t n_cards_back = BOTConstants::entry_to_cards_back(offset); + entry -= n_cards_back; + } + + HeapWord* q = addr_for_entry(entry); + return q - offset; +} #endif // SHARE_GC_PARALLEL_OBJECTSTARTARRAY_INLINE_HPP diff --git a/src/hotspot/share/gc/parallel/psOldGen.cpp b/src/hotspot/share/gc/parallel/psOldGen.cpp index 8124f018b2882..14be4745b153d 100644 --- a/src/hotspot/share/gc/parallel/psOldGen.cpp +++ b/src/hotspot/share/gc/parallel/psOldGen.cpp @@ -92,10 +92,10 @@ void PSOldGen::initialize_work(const char* perf_data_name, int level) { // If this wasn't true, a single card could span more than one generation, // which would cause problems when we commit/uncommit memory, and when we // clear and dirty cards. - guarantee(ct->is_card_aligned(reserved_mr.start()), "generation must be card aligned"); + guarantee(CardTable::is_card_aligned(reserved_mr.start()), "generation must be card aligned"); // Check the heap layout documented at `class ParallelScavengeHeap`. assert(reserved_mr.end() != heap->reserved_region().end(), "invariant"); - guarantee(ct->is_card_aligned(reserved_mr.end()), "generation must be card aligned"); + guarantee(CardTable::is_card_aligned(reserved_mr.end()), "generation must be card aligned"); // // ObjectSpace stuff @@ -133,18 +133,14 @@ size_t PSOldGen::num_iterable_blocks() const { void PSOldGen::object_iterate_block(ObjectClosure* cl, size_t block_index) { size_t block_word_size = IterateBlockSize / HeapWordSize; - assert((block_word_size % (ObjectStartArray::card_size())) == 0, - "Block size not a multiple of start_array block"); + assert((block_word_size % BOTConstants::card_size_in_words()) == 0, + "To ensure fast object_start calls"); MutableSpace *space = object_space(); HeapWord* begin = space->bottom() + block_index * block_word_size; HeapWord* end = MIN2(space->top(), begin + block_word_size); - if (!start_array()->object_starts_in_range(begin, end)) { - return; - } - // Get object starting at or reaching into this block. HeapWord* start = start_array()->object_start(begin); if (start < begin) { @@ -286,8 +282,8 @@ void PSOldGen::shrink(size_t bytes) { void PSOldGen::complete_loaded_archive_space(MemRegion archive_space) { HeapWord* cur = archive_space.start(); while (cur < archive_space.end()) { - _start_array.allocate_block(cur); size_t word_size = cast_to_oop(cur)->size(); + _start_array.update_for_block(cur, cur + word_size); cur += word_size; } } @@ -390,14 +386,13 @@ void PSOldGen::verify() { class VerifyObjectStartArrayClosure : public ObjectClosure { ObjectStartArray* _start_array; - public: +public: VerifyObjectStartArrayClosure(ObjectStartArray* start_array) : _start_array(start_array) { } virtual void do_object(oop obj) { HeapWord* test_addr = cast_from_oop(obj) + 1; guarantee(_start_array->object_start(test_addr) == cast_from_oop(obj), "ObjectStartArray cannot find start of object"); - guarantee(_start_array->is_block_allocated(cast_from_oop(obj)), "ObjectStartArray missing block allocation"); } }; diff --git a/src/hotspot/share/gc/parallel/psOldGen.hpp b/src/hotspot/share/gc/parallel/psOldGen.hpp index c26f251f9a275..4898baa3a4409 100644 --- a/src/hotspot/share/gc/parallel/psOldGen.hpp +++ b/src/hotspot/share/gc/parallel/psOldGen.hpp @@ -51,29 +51,11 @@ class PSOldGen : public CHeapObj { // Block size for parallel iteration static const size_t IterateBlockSize = 1024 * 1024; -#ifdef ASSERT - void assert_block_in_covered_region(MemRegion new_memregion) { - // Explicitly capture current covered_region in a local - MemRegion covered_region = this->start_array()->covered_region(); - assert(covered_region.contains(new_memregion), - "new region is not in covered_region [ " PTR_FORMAT ", " PTR_FORMAT " ], " - "new region [ " PTR_FORMAT ", " PTR_FORMAT " ], " - "object space [ " PTR_FORMAT ", " PTR_FORMAT " ]", - p2i(covered_region.start()), - p2i(covered_region.end()), - p2i(new_memregion.start()), - p2i(new_memregion.end()), - p2i(this->object_space()->used_region().start()), - p2i(this->object_space()->used_region().end())); - } -#endif - HeapWord* cas_allocate_noexpand(size_t word_size) { assert_locked_or_safepoint(Heap_lock); HeapWord* res = object_space()->cas_allocate(word_size); if (res != nullptr) { - DEBUG_ONLY(assert_block_in_covered_region(MemRegion(res, word_size))); - _start_array.allocate_block(res); + _start_array.update_for_block(res, res + word_size); } return res; } diff --git a/src/hotspot/share/gc/parallel/psParallelCompact.cpp b/src/hotspot/share/gc/parallel/psParallelCompact.cpp index c966aea5a86c8..09892208c355f 100644 --- a/src/hotspot/share/gc/parallel/psParallelCompact.cpp +++ b/src/hotspot/share/gc/parallel/psParallelCompact.cpp @@ -1496,7 +1496,7 @@ void PSParallelCompact::fill_dense_prefix_end(SpaceId id) _mark_bitmap.mark_obj(obj_beg, obj_len); _summary_data.add_obj(obj_beg, obj_len); assert(start_array(id) != nullptr, "sanity"); - start_array(id)->allocate_block(obj_beg); + start_array(id)->update_for_block(obj_beg, obj_beg + obj_len); } } @@ -2462,7 +2462,6 @@ void PSParallelCompact::compact() { ParallelScavengeHeap* heap = ParallelScavengeHeap::heap(); PSOldGen* old_gen = heap->old_gen(); - old_gen->start_array()->reset(); uint active_gc_threads = ParallelScavengeHeap::heap()->workers().active_workers(); // for [0..last_space_id) @@ -2534,7 +2533,7 @@ void PSParallelCompact::verify_complete(SpaceId space_id) { #endif // #ifdef ASSERT inline void UpdateOnlyClosure::do_addr(HeapWord* addr) { - _start_array->allocate_block(addr); + _start_array->update_for_block(addr, addr + cast_to_oop(addr)->size()); compaction_manager()->update_contents(cast_to_oop(addr)); } @@ -2627,7 +2626,7 @@ void PSParallelCompact::update_deferred_object(ParCompactionManager* cm, HeapWor const SpaceInfo* const space_info = _space_info + space_id(addr); ObjectStartArray* const start_array = space_info->start_array(); if (start_array != nullptr) { - start_array->allocate_block(addr); + start_array->update_for_block(addr, addr + cast_to_oop(addr)->size()); } cm->update_contents(cast_to_oop(addr)); @@ -3133,7 +3132,7 @@ MoveAndUpdateClosure::do_addr(HeapWord* addr, size_t words) { // The start_array must be updated even if the object is not moving. if (_start_array != nullptr) { - _start_array->allocate_block(destination()); + _start_array->update_for_block(destination(), destination() + words); } if (copy_destination() != source()) { @@ -3197,8 +3196,9 @@ FillClosure::do_addr(HeapWord* addr, size_t size) { CollectedHeap::fill_with_objects(addr, size); HeapWord* const end = addr + size; do { - _start_array->allocate_block(addr); - addr += cast_to_oop(addr)->size(); + size_t size = cast_to_oop(addr)->size(); + _start_array->update_for_block(addr, addr + size); + addr += size; } while (addr < end); return ParMarkBitMap::incomplete; } diff --git a/src/hotspot/share/gc/parallel/psPromotionLAB.cpp b/src/hotspot/share/gc/parallel/psPromotionLAB.cpp index 7aa1731fd874c..4c3367cdf9c98 100644 --- a/src/hotspot/share/gc/parallel/psPromotionLAB.cpp +++ b/src/hotspot/share/gc/parallel/psPromotionLAB.cpp @@ -115,7 +115,8 @@ void PSOldPromotionLAB::flush() { assert(_start_array != nullptr, "Sanity"); - _start_array->allocate_block(obj); + // filler obj + _start_array->update_for_block(obj, obj + cast_to_oop(obj)->size()); } #ifdef ASSERT @@ -132,17 +133,11 @@ bool PSYoungPromotionLAB::lab_is_valid(MemRegion lab) { } bool PSOldPromotionLAB::lab_is_valid(MemRegion lab) { - assert(_start_array->covered_region().contains(lab), "Sanity"); - ParallelScavengeHeap* heap = ParallelScavengeHeap::heap(); PSOldGen* old_gen = heap->old_gen(); MemRegion used = old_gen->object_space()->used_region(); - if (used.contains(lab)) { - return true; - } - - return false; + return used.contains(lab); } #endif /* ASSERT */ diff --git a/src/hotspot/share/gc/parallel/psPromotionLAB.hpp b/src/hotspot/share/gc/parallel/psPromotionLAB.hpp index b3c573ec70429..e8e42d3754b36 100644 --- a/src/hotspot/share/gc/parallel/psPromotionLAB.hpp +++ b/src/hotspot/share/gc/parallel/psPromotionLAB.hpp @@ -120,7 +120,7 @@ class PSOldPromotionLAB : public PSPromotionLAB { set_top(new_top); assert(is_object_aligned(obj) && is_object_aligned(new_top), "checking alignment"); - _start_array->allocate_block(obj); + _start_array->update_for_block(obj, obj + size); return obj; } diff --git a/src/hotspot/share/gc/serial/tenuredGeneration.cpp b/src/hotspot/share/gc/serial/tenuredGeneration.cpp index 981322eb14140..ad5fda3aeabb8 100644 --- a/src/hotspot/share/gc/serial/tenuredGeneration.cpp +++ b/src/hotspot/share/gc/serial/tenuredGeneration.cpp @@ -303,8 +303,8 @@ TenuredGeneration::TenuredGeneration(ReservedSpace rs, // If this wasn't true, a single card could span more than on generation, // which would cause problems when we commit/uncommit memory, and when we // clear and dirty cards. - guarantee(_rs->is_card_aligned(reserved_mr.start()), "generation must be card aligned"); - guarantee(_rs->is_card_aligned(reserved_mr.end()), "generation must be card aligned"); + guarantee(CardTable::is_card_aligned(reserved_mr.start()), "generation must be card aligned"); + guarantee(CardTable::is_card_aligned(reserved_mr.end()), "generation must be card aligned"); _min_heap_delta_bytes = MinHeapDeltaBytes; _capacity_at_prologue = initial_byte_size; _used_at_prologue = 0; diff --git a/src/hotspot/share/gc/shared/cardTable.cpp b/src/hotspot/share/gc/shared/cardTable.cpp index a5025a4e5a211..fdf6dcf3ece34 100644 --- a/src/hotspot/share/gc/shared/cardTable.cpp +++ b/src/hotspot/share/gc/shared/cardTable.cpp @@ -54,11 +54,6 @@ void CardTable::initialize_card_size() { // Set blockOffsetTable size based on card table entry size BOTConstants::initialize_bot_size(_card_shift); -#if INCLUDE_PARALLELGC - // Set ObjectStartArray block size based on card table entry size - ObjectStartArray::initialize_block_size(_card_shift); -#endif - log_info_p(gc, init)("CardTable entry size: " UINT32_FORMAT, _card_size); } diff --git a/src/hotspot/share/gc/shared/cardTable.hpp b/src/hotspot/share/gc/shared/cardTable.hpp index b9a7b516d8b30..61858075ca58c 100644 --- a/src/hotspot/share/gc/shared/cardTable.hpp +++ b/src/hotspot/share/gc/shared/cardTable.hpp @@ -119,7 +119,7 @@ class CardTable: public CHeapObj { void clear_MemRegion(MemRegion mr); // Return true if "p" is at the start of a card. - bool is_card_aligned(HeapWord* p) { + static bool is_card_aligned(HeapWord* p) { return is_aligned(p, card_size()); } From 91ffdfb1fcacbb95b93491d412e506695198946e Mon Sep 17 00:00:00 2001 From: Phil Race Date: Wed, 6 Dec 2023 21:59:23 +0000 Subject: [PATCH 248/250] 8320365: IPPPrintService.getAttributes() causes blanket re-initialisation Reviewed-by: aivanov, azvegint --- .../classes/sun/print/IPPPrintService.java | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/src/java.desktop/unix/classes/sun/print/IPPPrintService.java b/src/java.desktop/unix/classes/sun/print/IPPPrintService.java index 91be3e06a5a7a..95a2682e058f1 100644 --- a/src/java.desktop/unix/classes/sun/print/IPPPrintService.java +++ b/src/java.desktop/unix/classes/sun/print/IPPPrintService.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2023, 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 @@ -456,12 +456,14 @@ private void initAttributes() { // IPP currently does not support it but PPD does. try { - cps = new CUPSPrinter(printer); - mediaSizeNames = cps.getMediaSizeNames(); - mediaTrays = cps.getMediaTrays(); - customMediaSizeNames = cps.getCustomMediaSizeNames(); - defaultMediaIndex = cps.getDefaultMediaIndex(); - rawResolutions = cps.getRawResolutions(); + if (cps == null) { + cps = new CUPSPrinter(printer); + mediaSizeNames = cps.getMediaSizeNames(); + mediaTrays = cps.getMediaTrays(); + customMediaSizeNames = cps.getCustomMediaSizeNames(); + defaultMediaIndex = cps.getDefaultMediaIndex(); + rawResolutions = cps.getRawResolutions(); + } urlConnection.disconnect(); init = true; return; @@ -1225,9 +1227,17 @@ T getAttribute(Class category) public synchronized PrintServiceAttributeSet getAttributes() { - // update getAttMap by sending again get-attributes IPP request - init = false; - initAttributes(); + if (!init) { + // get all attributes for the first time. + initAttributes(); + } else { + // only need service attributes updated. + // update getAttMap by sending again get-attributes IPP request + if ((urlConnection = getIPPConnection(myURL)) != null) { + opGetAttributes(); + urlConnection.disconnect(); + } + } HashPrintServiceAttributeSet attrs = new HashPrintServiceAttributeSet(); From 75a7c199d8a3634b258cd713b8b77e026c2ecb4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20Gr=C3=B6nlund?= Date: Wed, 6 Dec 2023 22:59:26 +0000 Subject: [PATCH 249/250] 8315827: Kitchensink.java and RenaissanceStressTest.java time out with jvmti module errors Reviewed-by: egahlin --- src/hotspot/share/jfr/periodic/sampling/jfrThreadSampler.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/hotspot/share/jfr/periodic/sampling/jfrThreadSampler.cpp b/src/hotspot/share/jfr/periodic/sampling/jfrThreadSampler.cpp index acf7e3a7722ce..0ab787a7f3a7d 100644 --- a/src/hotspot/share/jfr/periodic/sampling/jfrThreadSampler.cpp +++ b/src/hotspot/share/jfr/periodic/sampling/jfrThreadSampler.cpp @@ -23,6 +23,7 @@ */ #include "precompiled.hpp" +#include "classfile/javaThreadStatus.hpp" #include "jfr/jfrEvents.hpp" #include "jfr/recorder/jfrRecorder.hpp" #include "jfr/periodic/sampling/jfrCallTrace.hpp" @@ -200,7 +201,7 @@ void OSThreadSampler::protected_task(const SuspendedThreadTaskContext& context) ev->set_starttime(_suspend_time); ev->set_endtime(_suspend_time); // fake to not take an end time ev->set_sampledThread(JfrThreadLocal::thread_id(jt)); - ev->set_state(static_cast(java_lang_Thread::get_thread_status(_thread_oop))); + ev->set_state(static_cast(JavaThreadStatus::RUNNABLE)); } } } @@ -230,7 +231,7 @@ static void write_native_event(JfrThreadSampleClosure& closure, JavaThread* jt, EventNativeMethodSample *ev = closure.next_event_native(); ev->set_starttime(JfrTicks::now()); ev->set_sampledThread(JfrThreadLocal::thread_id(jt)); - ev->set_state(static_cast(java_lang_Thread::get_thread_status(thread_oop))); + ev->set_state(static_cast(JavaThreadStatus::RUNNABLE)); } void JfrNativeSamplerCallback::call() { From 632a3c56e0626b4c4f79c8cb3d2ae312668d63fc Mon Sep 17 00:00:00 2001 From: Alexander Zvegintsev Date: Thu, 7 Dec 2023 03:34:49 +0000 Subject: [PATCH 250/250] 8305825: getBounds API returns wrong value resulting in multiple Regression Test Failures on Ubuntu 23.04 Reviewed-by: prr, achung, honkar, aivanov --- .../classes/sun/awt/X11/XDecoratedPeer.java | 3 ++- .../unix/classes/sun/awt/X11/XWM.java | 4 +++ test/jdk/ProblemList.txt | 5 ++-- .../Modal/NestedModalDialogTest.java | 25 +++++++++++-------- .../OwnedWindowFocusIMECrashTest.java | 3 ++- .../MultiResolutionSplashTest.java | 4 ++- .../swing/JRootPane/DefaultButtonTest.java | 5 +++- .../swing/JTree/8003400/Test8003400.java | 6 ++++- 8 files changed, 36 insertions(+), 19 deletions(-) diff --git a/src/java.desktop/unix/classes/sun/awt/X11/XDecoratedPeer.java b/src/java.desktop/unix/classes/sun/awt/X11/XDecoratedPeer.java index 5942b5957aadd..102a76b16a7d0 100644 --- a/src/java.desktop/unix/classes/sun/awt/X11/XDecoratedPeer.java +++ b/src/java.desktop/unix/classes/sun/awt/X11/XDecoratedPeer.java @@ -341,7 +341,8 @@ public void handlePropertyNotify(XEvent xev) { || ev.get_atom() == XWM.XA_NET_FRAME_EXTENTS.getAtom()) { if (XWM.getWMID() != XWM.UNITY_COMPIZ_WM) { - if (getMWMDecorTitleProperty().isPresent()) { + if ((XWM.getWMID() == XWM.MUTTER_WM && !isTargetUndecorated() && isVisible()) + || getMWMDecorTitleProperty().isPresent()) { // Insets might have changed "in-flight" if that property // is present, so we need to get the actual values of // insets from the WM and propagate them through all the diff --git a/src/java.desktop/unix/classes/sun/awt/X11/XWM.java b/src/java.desktop/unix/classes/sun/awt/X11/XWM.java index 9c18168e1fc40..0382a7b6caf3c 100644 --- a/src/java.desktop/unix/classes/sun/awt/X11/XWM.java +++ b/src/java.desktop/unix/classes/sun/awt/X11/XWM.java @@ -1369,6 +1369,9 @@ Insets guessInsets(XDecoratedPeer window) { case UNITY_COMPIZ_WM: res = new Insets(28, 1, 1, 1); break; + case MUTTER_WM: + res = new Insets(37, 0, 0, 0); + break; case MOTIF_WM: case OPENLOOK_WM: default: @@ -1380,6 +1383,7 @@ Insets guessInsets(XDecoratedPeer window) { } return res; } + /* * Some buggy WMs ignore window gravity when processing * ConfigureRequest and position window as if the gravity is Static. diff --git a/test/jdk/ProblemList.txt b/test/jdk/ProblemList.txt index 1faa360aacdaf..94a020585e475 100644 --- a/test/jdk/ProblemList.txt +++ b/test/jdk/ProblemList.txt @@ -458,6 +458,7 @@ java/awt/Graphics2D/DrawString/RotTransText.java 8316878 linux-all java/awt/KeyboardFocusmanager/TypeAhead/ButtonActionKeyTest/ButtonActionKeyTest.java 8257529 windows-x64 java/awt/KeyboardFocusmanager/ConsumeNextMnemonicKeyTypedTest/ConsumeForModalDialogTest/ConsumeForModalDialogTest.java 8302787 windows-all java/awt/KeyboardFocusmanager/TypeAhead/MenuItemActivatedTest/MenuItemActivatedTest.java 8302787 windows-all +java/awt/KeyboardFocusmanager/ConsumeNextMnemonicKeyTypedTest/ConsumeNextMnemonicKeyTypedTest.java 8321303 linux-all java/awt/Window/GetScreenLocation/GetScreenLocationTest.java 8225787 linux-x64 java/awt/Dialog/MakeWindowAlwaysOnTop/MakeWindowAlwaysOnTop.java 8266243 macosx-aarch64 @@ -650,6 +651,7 @@ javax/sound/sampled/Clip/ClipIsRunningAfterStop.java 8307574 linux-x64 javax/swing/plaf/basic/BasicTextUI/8001470/bug8001470.java 8233177 linux-all,windows-all +javax/swing/JFrame/MaximizeWindowTest.java 8321289 linux-all javax/swing/JWindow/ShapedAndTranslucentWindows/ShapedTranslucentPerPixelTranslucentGradient.java 8233582 linux-all javax/swing/JWindow/ShapedAndTranslucentWindows/ShapedPerPixelTranslucentGradient.java 8233582 linux-all javax/swing/JWindow/ShapedAndTranslucentWindows/PerPixelTranslucentSwing.java 8194128 macosx-all @@ -682,9 +684,6 @@ sanity/client/SwingSet/src/EditorPaneDemoTest.java 8212240 linux-x64 # jdk_swing Ubuntu 23.04 specific -javax/swing/JTree/8003400/Test8003400.java 8309734 linux-all -javax/swing/JTable/7124218/SelectEditTableCell.java 8309734 linux-all -javax/swing/JFileChooser/JFileChooserSetLocationTest.java 8309734 linux-all javax/swing/JComboBox/TestComboBoxComponentRendering.java 8309734 linux-all ############################################################################ diff --git a/test/jdk/java/awt/Dialog/NestedDialogs/Modal/NestedModalDialogTest.java b/test/jdk/java/awt/Dialog/NestedDialogs/Modal/NestedModalDialogTest.java index f5d85d8a2ad83..c7ec4d660007d 100644 --- a/test/jdk/java/awt/Dialog/NestedDialogs/Modal/NestedModalDialogTest.java +++ b/test/jdk/java/awt/Dialog/NestedDialogs/Modal/NestedModalDialogTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2020, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2023, 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 @@ -54,12 +54,11 @@ import java.awt.event.KeyEvent; public class NestedModalDialogTest { - private static Frame frame; + private static StartFrame frame; private static IntermediateDialog interDiag; private static TextDialog txtDiag; // Global variables so the robot thread can locate things. - private static Button[] robot_button = new Button[2]; private static TextField robot_text = null; private static Robot robot = null; @@ -78,6 +77,9 @@ private static void blockTillDisplayed(Component comp) { } private static void clickOnComp(Component comp) { + robot.waitForIdle(); + robot.delay(1000); + Rectangle bounds = new Rectangle(comp.getLocationOnScreen(), comp.getSize()); robot.mouseMove(bounds.x + bounds.width / 2, bounds.y + bounds.height / 2); robot.waitForIdle(); @@ -94,11 +96,11 @@ public void testModalDialogs() throws Exception { // launch first frame with firstButton frame = new StartFrame(); blockTillDisplayed(frame); - clickOnComp(robot_button[0]); + clickOnComp(frame.button); // Dialog must be created and onscreen before we proceed. blockTillDisplayed(interDiag); - clickOnComp(robot_button[1]); + clickOnComp(interDiag.button); // Again, the Dialog must be created and onscreen before we proceed. blockTillDisplayed(robot_text); @@ -144,6 +146,8 @@ public void testModalDialogs() throws Exception { */ class StartFrame extends Frame { + public volatile Button button; + /** * Constructs a new instance. */ @@ -168,7 +172,7 @@ public void actionPerformed(ActionEvent e) { pan.add(but); add(pan); setVisible(true); - robot_button[0] = but; + button = but; } } @@ -177,6 +181,7 @@ public void actionPerformed(ActionEvent e) { class IntermediateDialog extends Dialog { Dialog m_parent; + public volatile Button button; public IntermediateDialog(Frame parent) { super(parent, "Intermediate Modal", true /*Modal*/); @@ -193,9 +198,7 @@ public void actionPerformed(ActionEvent e) { pan.add(but); add(pan); pack(); - - // The robot needs to know about us, so set global - robot_button[1] = but; + button = but; } } @@ -215,12 +218,12 @@ public TextDialog(Dialog parent) { } } - public static void main(String[] args) throws RuntimeException, Exception { + public static void main(String[] args) throws Exception { try { new NestedModalDialogTest().testModalDialogs(); } catch (Exception e) { throw new RuntimeException("NestedModalDialogTest object creation " - + "failed"); + + "failed", e); } } } diff --git a/test/jdk/java/awt/Focus/OwnedWindowFocusIMECrashTest/OwnedWindowFocusIMECrashTest.java b/test/jdk/java/awt/Focus/OwnedWindowFocusIMECrashTest/OwnedWindowFocusIMECrashTest.java index 6fe6b6a1fa559..f81b25cb1d4d2 100644 --- a/test/jdk/java/awt/Focus/OwnedWindowFocusIMECrashTest/OwnedWindowFocusIMECrashTest.java +++ b/test/jdk/java/awt/Focus/OwnedWindowFocusIMECrashTest/OwnedWindowFocusIMECrashTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2023, 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 @@ -64,6 +64,7 @@ public void start() { window.setVisible(true); Util.waitForIdle(robot); + robot.delay(1000); test(); diff --git a/test/jdk/java/awt/SplashScreen/MultiResolutionSplash/MultiResolutionSplashTest.java b/test/jdk/java/awt/SplashScreen/MultiResolutionSplash/MultiResolutionSplashTest.java index 6018d044a6133..1f2de081cce15 100644 --- a/test/jdk/java/awt/SplashScreen/MultiResolutionSplash/MultiResolutionSplashTest.java +++ b/test/jdk/java/awt/SplashScreen/MultiResolutionSplash/MultiResolutionSplashTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2023, 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 @@ -120,6 +120,7 @@ static void testSplash(ImageInfo test) throws Exception { static void testFocus() throws Exception { Robot robot = new Robot(); + robot.setAutoWaitForIdle(true); robot.setAutoDelay(50); Frame frame = new Frame(); @@ -130,6 +131,7 @@ static void testFocus() throws Exception { frame.add(textField); frame.setVisible(true); robot.waitForIdle(); + robot.delay(1000); robot.keyPress(KeyEvent.VK_A); robot.keyRelease(KeyEvent.VK_A); diff --git a/test/jdk/javax/swing/JRootPane/DefaultButtonTest.java b/test/jdk/javax/swing/JRootPane/DefaultButtonTest.java index 560c5d82331d9..784cd00c24473 100644 --- a/test/jdk/javax/swing/JRootPane/DefaultButtonTest.java +++ b/test/jdk/javax/swing/JRootPane/DefaultButtonTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2023, 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 @@ -83,6 +83,7 @@ private void createUI() { public void runTest() throws Exception { Robot robot = new Robot(); + robot.setAutoWaitForIdle(true); robot.setAutoDelay(100); for (UIManager.LookAndFeelInfo laf : UIManager.getInstalledLookAndFeels()) { try { @@ -100,6 +101,8 @@ public void runTest() throws Exception { createUI(); }); robot.waitForIdle(); + robot.delay(1000); + robot.keyPress(KeyEvent.VK_ENTER); robot.keyRelease(KeyEvent.VK_ENTER); robot.waitForIdle(); diff --git a/test/jdk/javax/swing/JTree/8003400/Test8003400.java b/test/jdk/javax/swing/JTree/8003400/Test8003400.java index 95f5e826aa9b3..dcc9b0fce6ee9 100644 --- a/test/jdk/javax/swing/JTree/8003400/Test8003400.java +++ b/test/jdk/javax/swing/JTree/8003400/Test8003400.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2023, 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 @@ -109,6 +109,10 @@ public void run() { Robot robot = new Robot(); robot.setAutoDelay(100); + robot.setAutoWaitForIdle(true); + robot.waitForIdle(); + robot.delay(500); + SwingUtilities.invokeAndWait(() -> { point = tree.getLocationOnScreen(); rect = tree.getBounds();