Skip to content
This repository was archived by the owner on May 12, 2024. It is now read-only.

Commit d0190b0

Browse files
committed
Add RuntimeDepCollector support to impl-classtransform
1 parent 89b527b commit d0190b0

1 file changed

Lines changed: 54 additions & 1 deletion

File tree

impl-classtransform/src/main/java/net/raphimc/javadowngrader/impl/classtransform/JavaDowngraderTransformer.java

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import net.lenni0451.classtransform.transformer.IBytecodeTransformer;
2222
import net.lenni0451.classtransform.utils.ASMUtils;
2323
import net.raphimc.javadowngrader.JavaDowngrader;
24+
import net.raphimc.javadowngrader.RuntimeDepCollector;
2425
import org.objectweb.asm.tree.ClassNode;
2526

2627
import 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

Comments
 (0)