On Thu, 12 Feb 2026 13:47:49 GMT, Jean-Philippe Bempel <[email protected]>
wrote:
>> …retransformed
>>
>> Fix a retransform error when retransforming a record with type annotation.
>> processing the record type annotation was done by calling the wrong method
>> and using the one to process regular annotation. Regular annotations have
>> not the same structure and decoding was therefore incorrect. The decoding
>> methods detect a problem but this error was not propagated correctly outside
>> of VM_RedfineClass::load_new_class_versions method, swallowing the error and
>> leaving the retransformed class in bad state.
>>
>> Here we have fixed the call to the right method for decoding the type
>> annotations but also propagated the error when rewriting the constant pool
>> as an JVMTI_ERROR_INTERNAL
>
> Jean-Philippe Bempel has updated the pull request incrementally with one
> additional commit since the last revision:
>
> fix whitespaces
This seems to work:
diff --git
a/test/jdk/java/lang/instrument/RetransformRecordTypeAnn/TestRetransformRecord.java
b/test/jdk/java/lang/instrument/RetransformRecordTypeAnn/TestRetransformRecord.java
index 628eb460564..e8f1ba176d1 100644
---
a/test/jdk/java/lang/instrument/RetransformRecordTypeAnn/TestRetransformRecord.java
+++
b/test/jdk/java/lang/instrument/RetransformRecordTypeAnn/TestRetransformRecord.java
@@ -32,7 +32,8 @@
* @modules java.compiler
* java.instrument
* @compile ../NamedBuffer.java
- * @run driver RunAsmTools altered/MyRecord.jcod altered
+ * @compile altered/MyRecord.jcod
+ * @run driver jdk.test.lib.helpers.ClassFileInstaller MyRecord
* @compile MyRecord.java
* @run main RedefineClassHelper
* @run main/othervm -javaagent:redefineagent.jar -Xlog:redefine*=debug
TestRetransformRecord
@@ -57,7 +58,7 @@ public class TestRetransformRecord {
public static void main(String[] args) throws Exception {
MyRecord.parse("foo");
- File clsfile = new File(DEST + "/altered/MyRecord.class");
+ File clsfile = new File("MyRecord.class");
byte[] buf = null;
try (FileInputStream str = new FileInputStream(clsfile)) {
buf = NamedBuffer.loadBufferFromStream(str);
The ClassfileInstaller copies the class file from the test-classes directory to
the `pwd` and so we can load it from there.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/29445#issuecomment-3995875985