@@ -18,7 +18,7 @@ public final class ClassTransformers implements IClassTransformerHistory {
1818 private static final Logger LOGGER = Logger .getLogger (ClassTransformers .class .getName ());
1919 private static final boolean DEBUG_CLASS_TRANSFORMING = Boolean .getBoolean ("DEBUG_CLASS_TRANSFORMING" );
2020
21- record TransformerHistoryEntry (Class <?> transformer , String transformerName , TransformerFlag transformerFlag , byte [] classData )
21+ record TransformerHistoryEntry (Class <?> transformer , String transformerName , TransformerFlag transformerFlag , byte [] classData , byte [] transformerResult , ITransformerResultHistory previous )
2222 implements ITransformerResultHistory {}
2323
2424 private final List <IClassTransformer > transformers = new CopyOnWriteArrayList <>();
@@ -37,27 +37,44 @@ byte[] transform(String name, byte[] classData) {
3737 return null ;
3838 }
3939
40+ ITransformerResultHistory previous = null ;
41+ List <ITransformerResultHistory > historyList = DEBUG_CLASS_TRANSFORMING ? transformerHistoryCache .computeIfAbsent (name , k -> new CopyOnWriteArrayList <>()) : null ;
42+
4043 for (IClassTransformer transformer : transformers ) {
4144
4245 TransformResult result = transformer .transform (name , classData );
4346
44- if (DEBUG_CLASS_TRANSFORMING && transformerHistoryCache != null ) {
45- transformerHistoryCache .computeIfAbsent (name , k -> new CopyOnWriteArrayList <>())
46- .add (new TransformerHistoryEntry (transformer .getClass (), transformer .getName (), result .flag (), result .classData ()));
47+ if (DEBUG_CLASS_TRANSFORMING ) {
48+
49+ // create and store the history entry
50+ TransformerHistoryEntry entry = new TransformerHistoryEntry (
51+ transformer .getClass (),
52+ transformer .getName (),
53+ result .flag (),
54+ classData , // original data before this transformer
55+ result .classData (), // result of this transformer
56+ previous // previous history entry
57+ );
58+
59+ historyList .add (entry );
60+ previous = entry ; // update previous for the next iteration
61+
4762 LOGGER .log (Level .FINE , "Transformer history recorded for {0} using {1}" , new Object []{name , transformer .getName ()});
4863 }
4964
5065 if (result .flag () != TransformerFlag .NO_REWRITE ) {
5166 LOGGER .log (Level .INFO , "Class {0} transformed by {1}" , new Object []{name , transformer .getName ()});
5267 return result .classData ();
5368 }
69+
70+ // currentData remains the same if NO_REWRITE
5471 }
5572
5673 LOGGER .log (Level .FINE , "No transformation applied to class: {0}" , name );
57-
5874 return null ;
5975 }
6076
77+
6178 @ Override
6279 public List <ITransformerResultHistory > getHistory (String className ) {
6380 if (!DEBUG_CLASS_TRANSFORMING || transformerHistoryCache == null ) {
0 commit comments