2121import net .lenni0451 .classtransform .transformer .IBytecodeTransformer ;
2222import net .lenni0451 .classtransform .utils .ASMUtils ;
2323import net .raphimc .javadowngrader .JavaDowngrader ;
24+ import net .raphimc .javadowngrader .RuntimeDepCollector ;
2425import org .objectweb .asm .tree .ClassNode ;
2526
2627import java .nio .ByteBuffer ;
@@ -41,6 +42,7 @@ public class JavaDowngraderTransformer implements IBytecodeTransformer {
4142 private final TransformerManager transformerManager ;
4243 private final int targetVersion ;
4344 private final Predicate <String > classFilter ;
45+ private final RuntimeDepCollector depCollector ;
4446
4547 public JavaDowngraderTransformer (final TransformerManager transformerManager ) {
4648 this (transformerManager , NATIVE_CLASS_VERSION );
@@ -50,14 +52,26 @@ public JavaDowngraderTransformer(final TransformerManager transformerManager, fi
5052 this (transformerManager , targetVersion , s -> true );
5153 }
5254
55+ @ Deprecated
5356 public JavaDowngraderTransformer (final TransformerManager transformerManager , final Predicate <String > classFilter ) {
5457 this (transformerManager , NATIVE_CLASS_VERSION , classFilter );
5558 }
5659
60+ @ Deprecated
5761 public JavaDowngraderTransformer (final TransformerManager transformerManager , final int targetVersion , final Predicate <String > classFilter ) {
62+ this (transformerManager , targetVersion , classFilter , RuntimeDepCollector .NULL );
63+ }
64+
65+ JavaDowngraderTransformer (
66+ TransformerManager transformerManager ,
67+ int targetVersion ,
68+ Predicate <String > classFilter ,
69+ RuntimeDepCollector depCollector
70+ ) {
5871 this .transformerManager = transformerManager ;
5972 this .targetVersion = targetVersion ;
6073 this .classFilter = classFilter ;
74+ this .depCollector = depCollector ;
6175 }
6276
6377 @ Override
@@ -70,7 +84,7 @@ public byte[] transform(String className, byte[] bytecode, boolean calculateStac
7084 }
7185
7286 final ClassNode classNode = ASMUtils .fromBytes (bytecode );
73- JavaDowngrader .downgrade (classNode , this .targetVersion );
87+ JavaDowngrader .downgrade (classNode , this .targetVersion , depCollector );
7488
7589 if (calculateStackMapFrames ) {
7690 return ASMUtils .toBytes (classNode , this .transformerManager .getClassTree (), this .transformerManager .getClassProvider ());
@@ -79,4 +93,43 @@ public byte[] transform(String className, byte[] bytecode, boolean calculateStac
7993 }
8094 }
8195
96+ public Builder builder (TransformerManager transformerManager ) {
97+ return new Builder (transformerManager );
98+ }
99+
100+ public static final class Builder {
101+ private final TransformerManager transformerManager ;
102+ private int targetVersion = NATIVE_CLASS_VERSION ;
103+ private Predicate <String > classFilter = c -> true ;
104+ private RuntimeDepCollector depCollector = RuntimeDepCollector .NULL ;
105+
106+ Builder (TransformerManager transformerManager ) {
107+ this .transformerManager = transformerManager ;
108+ }
109+
110+ public Builder targetVersion (int targetVersion ) {
111+ this .targetVersion = targetVersion ;
112+ return this ;
113+ }
114+
115+ public Builder classFilter (Predicate <String > classFilter ) {
116+ this .classFilter = classFilter ;
117+ return this ;
118+ }
119+
120+ public Builder depCollector (RuntimeDepCollector depCollector ) {
121+ this .depCollector = depCollector ;
122+ return this ;
123+ }
124+
125+ public JavaDowngraderTransformer build () {
126+ return new JavaDowngraderTransformer (
127+ transformerManager ,
128+ targetVersion ,
129+ classFilter ,
130+ depCollector
131+ );
132+ }
133+ }
134+
82135}
0 commit comments