Skip to content

Commit 8723c23

Browse files
committed
Add option to strip synthetics from classes
1 parent 8a2e942 commit 8723c23

File tree

3 files changed

+16
-0
lines changed

3 files changed

+16
-0
lines changed

recaf-core/src/main/java/software/coley/recaf/services/decompile/DecompilerManager.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import software.coley.recaf.util.visitors.IllegalSignatureRemovingVisitor;
2828
import software.coley.recaf.util.visitors.LongAnnotationRemovingVisitor;
2929
import software.coley.recaf.util.visitors.LongExceptionRemovingVisitor;
30+
import software.coley.recaf.util.visitors.SyntheticRemovingVisitor;
3031
import software.coley.recaf.workspace.model.Workspace;
3132

3233
import java.util.Collection;
@@ -377,6 +378,10 @@ public byte[] filter(@Nonnull Workspace workspace, @Nonnull JvmClassInfo initial
377378
cv = new ClassHollowingVisitor(cv, EnumSet.allOf(ClassHollowingVisitor.Item.class));
378379
}
379380
if (config.getFilterSignatures().getValue()) {
381+
if (cv == null) cv = cw.get();
382+
cv = new SyntheticRemovingVisitor(cv);
383+
}
384+
if (config.getFilterSynthetics().getValue()) {
380385
if (cv == null) cv = cw.get();
381386
cv = new IllegalSignatureRemovingVisitor(cv);
382387
}

recaf-core/src/main/java/software/coley/recaf/services/decompile/DecompilerManagerConfig.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public class DecompilerManagerConfig extends BasicConfigContainer implements Ser
3232
private final ObservableBoolean filterLongExceptions = new ObservableBoolean(false);
3333
private final ObservableInteger filterLongExceptionsLength = new ObservableInteger(256);
3434
private final ObservableBoolean filterSignatures = new ObservableBoolean(false);
35+
private final ObservableBoolean filterSynthetics = new ObservableBoolean(false);
3536
private final ObservableBoolean filterNonAsciiNames = new ObservableBoolean(false);
3637

3738
@Inject
@@ -50,6 +51,7 @@ public DecompilerManagerConfig() {
5051
addValue(new BasicConfigValue<>("filter-exceptions-long", boolean.class, filterLongExceptions));
5152
addValue(new BasicConfigValue<>("filter-exceptions-long-limit", int.class, filterLongExceptionsLength));
5253
addValue(new BasicConfigValue<>("filter-illegal-signatures", boolean.class, filterSignatures));
54+
addValue(new BasicConfigValue<>("filter-synthetics", boolean.class, filterSignatures));
5355
addValue(new BasicConfigValue<>("filter-names-ascii", boolean.class, filterNonAsciiNames));
5456
}
5557

@@ -149,6 +151,14 @@ public ObservableBoolean getFilterSignatures() {
149151
return filterSignatures;
150152
}
151153

154+
/**
155+
* @return {@code true} to strip out synthetic/bridge modifiers from classes, fields, and methods.
156+
*/
157+
@Nonnull
158+
public ObservableBoolean getFilterSynthetics() {
159+
return filterSynthetics;
160+
}
161+
152162
/**
153163
* @return {@code true} to filter out any non-ascii referenced name.
154164
*/

recaf-ui/src/main/resources/translations/en_US.lang

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -596,6 +596,7 @@ service.decompile.decompilers-config.filter-exceptions-long=Filter long exceptio
596596
service.decompile.decompilers-config.filter-exceptions-long-limit=Long exceptions limit
597597
service.decompile.decompilers-config.filter-hollow=Filter class content (hollow)
598598
service.decompile.decompilers-config.filter-illegal-signatures=Filter illegal signatures
599+
service.decompile.decompilers-config.filter-synthetics=Filter synthetic flags
599600
service.decompile.decompilers-config.filter-names-ascii=Filter non-ascii names
600601
service.decompile.decompilers-config.filter-strip-debug=Filter debug data (vars, generics)
601602
service.decompile.impl=Implementations

0 commit comments

Comments
 (0)