Skip to content

Commit 25e5949

Browse files
committed
Move entries list into DecompilerSettings
1 parent 8cc2c9c commit 25e5949

File tree

5 files changed

+108
-171
lines changed

5 files changed

+108
-171
lines changed

src/main/java/the/bytecode/club/jda/decompilers/CFRDecompiler.java

Lines changed: 44 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import the.bytecode.club.jda.JDA;
2323
import the.bytecode.club.jda.JarUtils;
2424
import the.bytecode.club.jda.settings.DecompilerSettings;
25-
import the.bytecode.club.jda.settings.Setting;
25+
import the.bytecode.club.jda.settings.DecompilerSettings.SettingsEntry;
2626

2727
import java.io.File;
2828
import java.io.IOException;
@@ -38,9 +38,49 @@
3838
public final class CFRDecompiler extends Decompiler {
3939

4040
public CFRDecompiler() {
41-
// for (Settings setting : Settings.values()) {
42-
// settings.registerSetting(setting);
43-
// }
41+
settings.registerSetting(new SettingsEntry("decodeenumswitch", "Decode Enum Switch", true));
42+
settings.registerSetting(new SettingsEntry("sugarenums", "SugarEnums", true));
43+
settings.registerSetting(new SettingsEntry("decodestringswitch", "Decode String Switch", true));
44+
settings.registerSetting(new SettingsEntry("arrayiter", "Arrayiter", true));
45+
settings.registerSetting(new SettingsEntry("collectioniter", "Collectioniter", true));
46+
settings.registerSetting(new SettingsEntry("innerclasses", "Inner Classes", true));
47+
settings.registerSetting(new SettingsEntry("removeboilerplate", "Remove Boiler Plate", true));
48+
settings.registerSetting(new SettingsEntry("removeinnerclasssynthetics", "Remove Inner Class Synthetics", true));
49+
settings.registerSetting(new SettingsEntry("decodelambdas", "Decode Lambdas", true));
50+
settings.registerSetting(new SettingsEntry("hidebridgemethods", "Hide Bridge Methods", true));
51+
settings.registerSetting(new SettingsEntry("liftconstructorinit", "Lift Constructor Init", true));
52+
settings.registerSetting(new SettingsEntry("removedeadmethods", "Remove Dead Methods", true));
53+
settings.registerSetting(new SettingsEntry("removebadgenerics", "Remove Bad Generics", true));
54+
settings.registerSetting(new SettingsEntry("sugarasserts", "Sugar Asserts", true));
55+
settings.registerSetting(new SettingsEntry("sugarboxing", "Sugar Boxing", true));
56+
settings.registerSetting(new SettingsEntry("showversion", "Show Version", true));
57+
settings.registerSetting(new SettingsEntry("decodefinally", "Decode Finally", true));
58+
settings.registerSetting(new SettingsEntry("tidymonitors", "Tidy Monitors", true));
59+
settings.registerSetting(new SettingsEntry("lenient", "Lenient", false));
60+
settings.registerSetting(new SettingsEntry("dumpclasspath", "Dump Classpath", false));
61+
settings.registerSetting(new SettingsEntry("comments", "Comments", true));
62+
settings.registerSetting(new SettingsEntry("forcetopsort", "Force Top Sort", true));
63+
settings.registerSetting(new SettingsEntry("forcetopsortaggress", "Force Top Sort Aggressive", true));
64+
settings.registerSetting(new SettingsEntry("stringbuffer", "StringBuffer", false));
65+
settings.registerSetting(new SettingsEntry("stringbuilder", "StringBuilder", true));
66+
settings.registerSetting(new SettingsEntry("silent", "Silent", true));
67+
settings.registerSetting(new SettingsEntry("recover", "Recover", true));
68+
settings.registerSetting(new SettingsEntry("eclipse", "Eclipse", true));
69+
settings.registerSetting(new SettingsEntry("override", "Override", true));
70+
settings.registerSetting(new SettingsEntry("showinferrable", "Show Inferrable", true));
71+
settings.registerSetting(new SettingsEntry("aexagg", "Force Aggressive Exception Aggregation", true));
72+
settings.registerSetting(new SettingsEntry("forcecondpropagate", "Force Conditional Propogation", true));
73+
settings.registerSetting(new SettingsEntry("hideutf", "Hide UTF", true));
74+
settings.registerSetting(new SettingsEntry("hidelongstrings", "Hide Long Strings", false));
75+
settings.registerSetting(new SettingsEntry("commentmonitors", "Comment Monitors", false));
76+
settings.registerSetting(new SettingsEntry("allowcorrecting", "Allow Correcting", true));
77+
settings.registerSetting(new SettingsEntry("labelledblocks", "Labelled Blocks", true));
78+
settings.registerSetting(new SettingsEntry("j14classobj", "Java 1.4 Class Objects", false));
79+
settings.registerSetting(new SettingsEntry("hidelangimports", "Hide Lang Imports", true));
80+
settings.registerSetting(new SettingsEntry("recovertypeclash", "Recover Type Clash", true));
81+
settings.registerSetting(new SettingsEntry("recovertypehints", "Recover Type Hints", true));
82+
settings.registerSetting(new SettingsEntry("forcereturningifs", "Force Returning Ifs", true));
83+
settings.registerSetting(new SettingsEntry("forloopaggcapture", "For Loop Aggressive Capture", true));
4484
}
4585

4686
@Override
@@ -192,82 +232,4 @@ public static void doJar(DCCommonState dcCommonState, Path input, Path output) t
192232
}
193233
}
194234
}
195-
196-
// TODO: Rewrite!
197-
public enum Settings {
198-
;
199-
// DECODE_ENUM_SWITCH("decodeenumswitch", "Decode Enum Switch", true),
200-
// SUGAR_ENUMS("sugarenums", "SugarEnums", true),
201-
// DECODE_STRING_SWITCH("decodestringswitch", "Decode String Switch", true),
202-
// ARRAYITER("arrayiter", "Arrayiter", true),
203-
// COLLECTIONITER("collectioniter", "Collectioniter", true),
204-
// INNER_CLASSES("innerclasses", "Inner Classes", true),
205-
// REMOVE_BOILER_PLATE("removeboilerplate", "Remove Boiler Plate", true),
206-
// REMOVE_INNER_CLASS_SYNTHETICS("removeinnerclasssynthetics", "Remove Inner Class Synthetics", true),
207-
// DECODE_LAMBDAS("decodelambdas", "Decode Lambdas", true),
208-
// HIDE_BRIDGE_METHODS("hidebridgemethods", "Hide Bridge Methods", true),
209-
// LIFT_CONSTRUCTOR_INIT("liftconstructorinit", "Lift Constructor Init", true),
210-
// REMOVE_DEAD_METHODS("removedeadmethods", "Remove Dead Methods", true),
211-
// REMOVE_BAD_GENERICS("removebadgenerics", "Remove Bad Generics", true),
212-
// SUGAR_ASSERTS("sugarasserts", "Sugar Asserts", true),
213-
// SUGAR_BOXING("sugarboxing", "Sugar Boxing", true),
214-
// SHOW_VERSION("showversion", "Show Version", true),
215-
// DECODE_FINALLY("decodefinally", "Decode Finally", true),
216-
// TIDY_MONITORS("tidymonitors", "Tidy Monitors", true),
217-
// LENIENT("lenient", "Lenient"),
218-
// DUMP_CLASS_PATH("dumpclasspath", "Dump Classpath"),
219-
// COMMENTS("comments", "Comments", true),
220-
// FORCE_TOP_SORT("forcetopsort", "Force Top Sort", true),
221-
// FORCE_TOP_SORT_AGGRESSIVE("forcetopsortaggress", "Force Top Sort Aggressive", true),
222-
// STRINGBUFFER("stringbuffer", "StringBuffer"),
223-
// STRINGBUILDER("stringbuilder", "StringBuilder", true),
224-
// SILENT("silent", "Silent", true),
225-
// RECOVER("recover", "Recover", true),
226-
// ECLIPSE("eclipse", "Eclipse", true),
227-
// OVERRIDE("override", "Override", true),
228-
// SHOW_INFERRABLE("showinferrable", "Show Inferrable", true),
229-
// FORCE_AGGRESSIVE_EXCEPTION_AGG("aexagg", "Force Aggressive Exception Aggregation", true),
230-
// FORCE_COND_PROPAGATE("forcecondpropagate", "Force Conditional Propogation", true),
231-
// HIDE_UTF("hideutf", "Hide UTF", true),
232-
// HIDE_LONG_STRINGS("hidelongstrings", "Hide Long Strings"),
233-
// COMMENT_MONITORS("commentmonitors", "Comment Monitors"),
234-
// ALLOW_CORRECTING("allowcorrecting", "Allow Correcting", true),
235-
// LABELLED_BLOCKS("labelledblocks", "Labelled Blocks", true),
236-
// J14_CLASS_OBJ("j14classobj", "Java 1.4 Class Objects"),
237-
// HIDE_LANG_IMPORTS("hidelangimports", "Hide Lang Imports", true),
238-
// RECOVER_TYPE_CLASH("recovertypeclash", "Recover Type Clash", true),
239-
// RECOVER_TYPE_HINTS("recovertypehints", "Recover Type Hints", true),
240-
// FORCE_RETURNING_IFS("forcereturningifs", "Force Returning Ifs", true),
241-
// FOR_LOOP_AGG_CAPTURE("forloopaggcapture", "For Loop Aggressive Capture", true);
242-
//
243-
private String name;
244-
private String param;
245-
private boolean on;
246-
247-
Settings(String param, String name) {
248-
this(param, name, false);
249-
}
250-
251-
Settings(String param, String name, boolean on) {
252-
this.name = name;
253-
this.param = param;
254-
this.on = on;
255-
}
256-
257-
public String getText() {
258-
return name;
259-
}
260-
261-
public String getParam() {
262-
return param;
263-
}
264-
265-
public String getDefaultValue() {
266-
return String.valueOf(on);
267-
}
268-
269-
public Setting.SettingType getType() {
270-
return Setting.SettingType.BOOLEAN;
271-
}
272-
}
273235
}

src/main/java/the/bytecode/club/jda/decompilers/FernflowerDecompiler.java

Lines changed: 29 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,7 @@
1515
import java.io.File;
1616
import java.nio.file.Files;
1717
import java.nio.file.Path;
18-
import java.util.ArrayList;
1918
import java.util.HashMap;
20-
import java.util.List;
2119
import java.util.Map;
2220
import java.util.concurrent.atomic.AtomicReference;
2321
import java.util.jar.Manifest;
@@ -31,6 +29,32 @@
3129

3230
public final class FernflowerDecompiler extends Decompiler {
3331
public FernflowerDecompiler() {
32+
settings.registerSetting(new SettingsEntry("rbr", "Hide Bridge Methods", true));
33+
settings.registerSetting(new SettingsEntry("rsy", "Hide Synthetic Class Members", false));
34+
settings.registerSetting(new SettingsEntry("din", "Decompile Inner Classes", true));
35+
settings.registerSetting(new SettingsEntry("dc4", "Collapse 1.4 Class References", true));
36+
settings.registerSetting(new SettingsEntry("das", "Decompile Assertions", true));
37+
settings.registerSetting(new SettingsEntry("hes", "Hide Empty Super Invocation", true));
38+
settings.registerSetting(new SettingsEntry("hec", "Hide Empty Default Constructor", true));
39+
settings.registerSetting(new SettingsEntry("dgs", "Decompile Generic Signatures", false));
40+
settings.registerSetting(new SettingsEntry("ner", "Assume return not throwing exceptions", true));
41+
settings.registerSetting(new SettingsEntry("den", "Decompile enumerations", true));
42+
settings.registerSetting(new SettingsEntry("rgn", "Remove getClass = new SettingsEntry()", true));
43+
settings.registerSetting(new SettingsEntry("lit", "Output numeric literals 'as-is'", false));
44+
settings.registerSetting(new SettingsEntry("asc", "Encode non-ASCII as unicode escapes", true));
45+
settings.registerSetting(new SettingsEntry("bto", "Assume int 1 is boolean true", true));
46+
settings.registerSetting(new SettingsEntry("nns", "Allow not set synthetic attribute", true));
47+
settings.registerSetting(new SettingsEntry("uto", "Consider nameless types as java.lang.Object", true));
48+
settings.registerSetting(new SettingsEntry("udv", "Recover variable names", true));
49+
settings.registerSetting(new SettingsEntry("rer", "Remove empty exceptions", true));
50+
settings.registerSetting(new SettingsEntry("fdi", "De-inline finally", true));
51+
settings.registerSetting(new SettingsEntry("mpm", "Maximum processing time", "0", Setting.SettingType.INT)); // this is a numeric setting!
52+
settings.registerSetting(new SettingsEntry("ren", "Rename ambigious members", false));
53+
// urc: IIDentifierRenamer
54+
settings.registerSetting(new SettingsEntry("inn", "Remove IntelliJ @NotNull", true));
55+
settings.registerSetting(new SettingsEntry("lac", "Decompile lambdas to anonymous classes", false));
56+
// settings.registerSetting(new SettingsEntry("nls", "Newline character")); // this is an optional argument!
57+
settings.registerSetting(new SettingsEntry("ind", "Indentation string", " ", Setting.SettingType.STRING));
3458
}
3559

3660
@Override
@@ -131,69 +155,13 @@ public void decompileToZip(String zipName) {
131155
}
132156
}
133157

134-
private static Map<String, Object> generateFernflowerArgs() {
158+
private Map<String, Object> generateFernflowerArgs() {
135159
Map<String, Object> options = new HashMap<>();
136-
for (SettingsEntry setting : FernflowerDecompiler.settings) {
160+
for (SettingsEntry setting : settings.getEntries()) {
137161
options.put(setting.param, setting.get());
138162
System.out.println(setting.param + " " + setting.get());
139163
}
140164
return options;
141165
}
142-
143-
private static List<SettingsEntry> settings = new ArrayList<>();
144-
145-
static
146-
{
147-
SettingsEntry HIDE_BRIDGE_METHODS = new SettingsEntry("rbr", "Hide Bridge Methods", "true");
148-
SettingsEntry HIDE_SYNTHETIC_CLASS_MEMBERS = new SettingsEntry("rsy", "Hide Synthetic Class Members", "false");
149-
SettingsEntry DECOMPILE_INNER_CLASSES = new SettingsEntry("din", "Decompile Inner Classes", "true");
150-
SettingsEntry COLLAPSE_14_CLASS_REFERENCES = new SettingsEntry("dc4", "Collapse 1.4 Class References", "true");
151-
SettingsEntry DECOMPILE_ASSERTIONS = new SettingsEntry("das", "Decompile Assertions", "true");
152-
SettingsEntry HIDE_EMPTY_SUPER_INVOCATION = new SettingsEntry("hes", "Hide Empty Super Invocation", "true");
153-
SettingsEntry HIDE_EMPTY_DEFAULT_CONSTRUCTOR = new SettingsEntry("hec", "Hide Empty Default Constructor", "true");
154-
SettingsEntry DECOMPILE_GENERIC_SIGNATURES = new SettingsEntry("dgs", "Decompile Generic Signatures", "false");
155-
SettingsEntry ASSUME_RETURN_NOT_THROWING_EXCEPTIONS = new SettingsEntry("ner", "Assume return not throwing exceptions", "true");
156-
SettingsEntry DECOMPILE_ENUMS = new SettingsEntry("den", "Decompile enumerations", "true");
157-
SettingsEntry REMOVE_GETCLASS = new SettingsEntry("rgn", "Remove getClass = new SettingsEntry()", "true");
158-
SettingsEntry OUTPUT_NUMBERIC_LITERALS = new SettingsEntry("lit", "Output numeric literals 'as-is'", "false");
159-
SettingsEntry ENCODE_UNICODE = new SettingsEntry("asc", "Encode non-ASCII as unicode escapes", "true");
160-
SettingsEntry INT_1_AS_BOOLEAN_TRUE = new SettingsEntry("bto", "Assume int 1 is boolean true", "true");
161-
SettingsEntry ALLOW_NOT_SET_SYNTHETIC = new SettingsEntry("nns", "Allow not set synthetic attribute", "true");
162-
SettingsEntry NAMELESS_TYPES_AS_OBJECT = new SettingsEntry("uto", "Consider nameless types as java.lang.Object", "true");
163-
SettingsEntry RECOVER_VARIABLE_NAMES = new SettingsEntry("udv", "Recover variable names", "true");
164-
SettingsEntry REMOVE_EMPTY_EXCEPTIONS = new SettingsEntry("rer", "Remove empty exceptions", "true");
165-
SettingsEntry DEINLINE_FINALLY = new SettingsEntry("fdi", "De-inline finally", "true");
166-
SettingsEntry TIME_LIMIT = new SettingsEntry("mpm", "Maximum processing time", "0", Setting.SettingType.INT); // this is a numeric setting!
167-
SettingsEntry RENAME_AMBIGIOUS_MEMBERS = new SettingsEntry("ren", "Rename ambigious members", "false");
168-
// urc: IIDentifierRenamer
169-
SettingsEntry REMOVE_INTELLIJ_NOTNULL = new SettingsEntry("inn", "Remove IntelliJ @NotNull", "true");
170-
SettingsEntry DECOMPILE_LAMBDA_TO_ANONYMOUS = new SettingsEntry("lac", "Decompile lambdas to anonymous classes", "false");
171-
// NEWLINE_TYPE = new SettingsEntry("nls", "Newline character"); // this is an optional argument!
172-
SettingsEntry INDENTATION = new SettingsEntry("ind", "Indentation string", " ", Setting.SettingType.STRING);
173-
174-
settings.add(HIDE_BRIDGE_METHODS);
175-
settings.add(HIDE_SYNTHETIC_CLASS_MEMBERS);
176-
settings.add(DECOMPILE_INNER_CLASSES);
177-
settings.add(COLLAPSE_14_CLASS_REFERENCES);
178-
settings.add(DECOMPILE_ASSERTIONS);
179-
settings.add(HIDE_EMPTY_SUPER_INVOCATION);
180-
settings.add(HIDE_EMPTY_DEFAULT_CONSTRUCTOR);
181-
settings.add(DECOMPILE_GENERIC_SIGNATURES);
182-
settings.add(ASSUME_RETURN_NOT_THROWING_EXCEPTIONS);
183-
settings.add(DECOMPILE_ENUMS);
184-
settings.add(REMOVE_GETCLASS);
185-
settings.add(OUTPUT_NUMBERIC_LITERALS);
186-
settings.add(ENCODE_UNICODE);
187-
settings.add(INT_1_AS_BOOLEAN_TRUE);
188-
settings.add(ALLOW_NOT_SET_SYNTHETIC);
189-
settings.add(NAMELESS_TYPES_AS_OBJECT);
190-
settings.add(RECOVER_VARIABLE_NAMES);
191-
settings.add(REMOVE_EMPTY_EXCEPTIONS);
192-
settings.add(DEINLINE_FINALLY);
193-
settings.add(TIME_LIMIT);
194-
settings.add(RENAME_AMBIGIOUS_MEMBERS);
195-
settings.add(REMOVE_INTELLIJ_NOTNULL);
196-
settings.add(DECOMPILE_LAMBDA_TO_ANONYMOUS);
197-
settings.add(INDENTATION);
198-
}
199166
}
167+

src/main/java/the/bytecode/club/jda/decompilers/bytecode/ClassNodeDecompiler.java

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@
2121
public class ClassNodeDecompiler extends Decompiler {
2222

2323
public ClassNodeDecompiler() {
24+
settings.registerSetting(new SettingsEntry("debug-helpers", "Debug Helpers", true));
25+
settings.registerSetting(new SettingsEntry("append-brackets-to-labels", "Append Brackets to Labels", true));
26+
settings.registerSetting(new SettingsEntry("show-method-descriptors", "Show Method Descriptors", true));
27+
settings.registerSetting(new SettingsEntry("decompile-inner-classes", "Decompile Inner Classes", true));
2428
}
2529

2630
@Override
@@ -72,7 +76,7 @@ protected PrefixedStringBuilder decompile(PrefixedStringBuilder sb, ArrayList<St
7276
sb.append(JDA.nl);
7377
}
7478

75-
if (DECOMPILE_INNER_CLASSES.getBool())
79+
if (settings.getEntry("Decompile Inner Classes").getBool())
7680
for (InnerClassNode innerClassNode : cn.innerClasses) {
7781
String innerClassName = innerClassNode.name;
7882
if ((innerClassName != null) && !decompiledClasses.contains(innerClassName)) {
@@ -151,21 +155,6 @@ public static String getAccessString(int access) {
151155

152156
@Override
153157
public void decompileToZip(String zipName) {
154-
}
155-
156-
private static List<SettingsEntry> settings = new ArrayList<>();
157-
158-
static SettingsEntry DEBUG_HELPERS = new SettingsEntry("debug-helpers", "Debug Helpers", "true");
159-
static SettingsEntry APPEND_BRACKETS_TO_LABELS = new SettingsEntry("append-brackets-to-labels", "Append Brackets to Labels", "true");
160-
static SettingsEntry SHOW_METHOD_DESCRIPTORS = new SettingsEntry("show-method-descriptors", "Show Method Descriptors", "true");
161-
static SettingsEntry DECOMPILE_INNER_CLASSES = new SettingsEntry("decompile-inner-classes", "Decompile Inner Classes", "true");
162-
163-
// TODO: Refactor!
164-
static
165-
{
166-
settings.add(DEBUG_HELPERS);
167-
settings.add(APPEND_BRACKETS_TO_LABELS);
168-
settings.add(SHOW_METHOD_DESCRIPTORS);
169-
settings.add(DECOMPILE_INNER_CLASSES);
158+
throw new UnsupportedOperationException();
170159
}
171160
}

src/main/java/the/bytecode/club/jda/decompilers/bytecode/MethodNodeDecompiler.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -255,14 +255,14 @@ protected static String getAccessString(int access) {
255255
}
256256

257257
boolean createComments() {
258-
return ClassNodeDecompiler.DEBUG_HELPERS.getBool();
258+
return parent.getSettings().getEntry("Debug Helpers").getBool();
259259
}
260260

261261
boolean createLabelBrackets() {
262-
return ClassNodeDecompiler.APPEND_BRACKETS_TO_LABELS.getBool();
262+
return parent.getSettings().getEntry("Append Brackets to Labels").getBool();
263263
}
264264

265265
boolean createDescriptors() {
266-
return ClassNodeDecompiler.SHOW_METHOD_DESCRIPTORS.getBool();
266+
return parent.getSettings().getEntry("Show Method Descriptors").getBool();
267267
}
268268
}

0 commit comments

Comments
 (0)