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

Commit 38e4f1e

Browse files
committed
Only calculate frames if required
1 parent 61f71e7 commit 38e4f1e

1 file changed

Lines changed: 13 additions & 10 deletions

File tree

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

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
import net.lenni0451.classtransform.utils.ASMUtils;
2323
import net.raphimc.javadowngrader.JavaDowngrader;
2424
import net.raphimc.javadowngrader.RuntimeDepCollector;
25+
import net.raphimc.javadowngrader.transformer.DowngradeResult;
26+
import org.objectweb.asm.ClassWriter;
2527
import org.objectweb.asm.tree.ClassNode;
2628

2729
import java.util.function.Predicate;
@@ -62,10 +64,10 @@ public JavaDowngraderTransformer(final TransformerManager transformerManager, fi
6264
}
6365

6466
JavaDowngraderTransformer(
65-
TransformerManager transformerManager,
66-
int targetVersion,
67-
Predicate<String> classFilter,
68-
RuntimeDepCollector depCollector
67+
TransformerManager transformerManager,
68+
int targetVersion,
69+
Predicate<String> classFilter,
70+
RuntimeDepCollector depCollector
6971
) {
7072
this.transformerManager = transformerManager;
7173
this.targetVersion = targetVersion;
@@ -84,10 +86,11 @@ public byte[] transform(String className, byte[] bytecode, boolean calculateStac
8486
}
8587

8688
final ClassNode classNode = ASMUtils.fromBytes(bytecode);
87-
JavaDowngrader.downgrade(classNode, this.targetVersion, this.depCollector);
89+
final DowngradeResult result = JavaDowngrader.downgrade(classNode, this.targetVersion, this.depCollector);
8890

8991
if (calculateStackMapFrames) {
90-
return ASMUtils.toBytes(classNode, this.transformerManager.getClassTree(), this.transformerManager.getClassProvider());
92+
int flags = result.requiresStackMapFrames() ? ClassWriter.COMPUTE_FRAMES : ClassWriter.COMPUTE_MAXS;
93+
return ASMUtils.toBytes(classNode, this.transformerManager.getClassTree(), this.transformerManager.getClassProvider(), flags);
9194
} else {
9295
return ASMUtils.toStacklessBytes(classNode);
9396
}
@@ -124,10 +127,10 @@ public Builder depCollector(RuntimeDepCollector depCollector) {
124127

125128
public JavaDowngraderTransformer build() {
126129
return new JavaDowngraderTransformer(
127-
transformerManager,
128-
targetVersion,
129-
classFilter,
130-
depCollector
130+
transformerManager,
131+
targetVersion,
132+
classFilter,
133+
depCollector
131134
);
132135
}
133136
}

0 commit comments

Comments
 (0)