Skip to content

Commit f2ea641

Browse files
committed
fix(cli): don't print stacktrace for incorrect options (#2140)
1 parent bc70f8e commit f2ea641

5 files changed

Lines changed: 19 additions & 22 deletions

File tree

jadx-cli/src/main/java/jadx/cli/JadxCLIArgs.java

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
import jadx.api.args.ResourceNameSource;
3030
import jadx.api.args.UserRenamesMappingsMode;
3131
import jadx.core.deobf.conditions.DeobfWhitelist;
32-
import jadx.core.utils.exceptions.JadxException;
32+
import jadx.core.utils.exceptions.JadxArgsValidateException;
3333
import jadx.core.utils.files.FileUtils;
3434

3535
public class JadxCLIArgs {
@@ -287,14 +287,13 @@ private boolean process(JCommanderWrapper<JadxCLIArgs> jcw) {
287287
System.out.println(JadxDecompiler.getVersion());
288288
return false;
289289
}
290-
try {
291-
if (threadsCount <= 0) {
292-
throw new JadxException("Threads count must be positive, got: " + threadsCount);
290+
if (threadsCount <= 0) {
291+
throw new JadxArgsValidateException("Threads count must be positive, got: " + threadsCount);
292+
}
293+
for (String fileName : files) {
294+
if (fileName.startsWith("-")) {
295+
throw new JadxArgsValidateException("Unknown option: " + fileName);
293296
}
294-
} catch (JadxException e) {
295-
System.err.println("ERROR: " + e.getMessage());
296-
jcw.printUsage();
297-
return false;
298297
}
299298
return true;
300299
}
@@ -559,8 +558,8 @@ public Set<RenameEnum> convert(String value) {
559558
for (String s : value.split(",")) {
560559
try {
561560
set.add(RenameEnum.valueOf(s.trim().toUpperCase(Locale.ROOT)));
562-
} catch (IllegalArgumentException e) {
563-
throw new IllegalArgumentException(
561+
} catch (Exception e) {
562+
throw new JadxArgsValidateException(
564563
'\'' + s + "' is unknown for parameter " + paramName
565564
+ ", possible values are " + enumValuesString(RenameEnum.values()));
566565
}
@@ -625,7 +624,7 @@ public E convert(String value) {
625624
try {
626625
return parse.apply(stringAsEnumName(value));
627626
} catch (Exception e) {
628-
throw new IllegalArgumentException(
627+
throw new JadxArgsValidateException(
629628
'\'' + value + "' is unknown, possible values are: " + enumValuesString(values.get()));
630629
}
631630
}

jadx-cli/src/main/java/jadx/cli/JadxCLICommands.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import jadx.cli.commands.CommandPlugins;
99
import jadx.cli.commands.ICommand;
10+
import jadx.core.utils.exceptions.JadxArgsValidateException;
1011

1112
public class JadxCLICommands {
1213
private static final Map<String, ICommand> COMMANDS_MAP = new TreeMap<>();
@@ -26,7 +27,8 @@ public static void append(JCommander.Builder builder) {
2627
public static boolean process(JCommanderWrapper<?> jcw, JCommander jc, String parsedCommand) {
2728
ICommand command = COMMANDS_MAP.get(parsedCommand);
2829
if (command == null) {
29-
throw new IllegalArgumentException("Unknown command: " + parsedCommand);
30+
throw new JadxArgsValidateException("Unknown command: " + parsedCommand
31+
+ ". Expected one of: " + COMMANDS_MAP.keySet());
3032
}
3133
JCommander subCommander = jc.getCommands().get(parsedCommand);
3234
command.process(jcw, subCommander);

jadx-cli/src/main/java/jadx/cli/SingleClassMode.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import jadx.core.dex.attributes.AFlag;
1313
import jadx.core.dex.nodes.ClassNode;
1414
import jadx.core.dex.visitors.SaveCode;
15+
import jadx.core.utils.exceptions.JadxArgsValidateException;
1516
import jadx.core.utils.exceptions.JadxRuntimeException;
1617
import jadx.core.utils.files.FileUtils;
1718

@@ -33,10 +34,10 @@ public static boolean process(JadxDecompiler jadx, JadxCLIArgs cliArgs) {
3334
.findFirst().orElse(null);
3435
}
3536
if (clsForProcess == null) {
36-
throw new JadxRuntimeException("Input class not found: " + singleClass);
37+
throw new JadxArgsValidateException("Input class not found: " + singleClass);
3738
}
3839
if (clsForProcess.contains(AFlag.DONT_GENERATE)) {
39-
throw new JadxRuntimeException("Input class can't be saved by current jadx settings (marked as DONT_GENERATE)");
40+
throw new JadxArgsValidateException("Input class can't be saved by current jadx settings (marked as DONT_GENERATE)");
4041
}
4142
if (clsForProcess.isInner()) {
4243
clsForProcess = clsForProcess.getTopParentClass();
@@ -52,7 +53,7 @@ public static boolean process(JadxDecompiler jadx, JadxCLIArgs cliArgs) {
5253
if (size == 1) {
5354
clsForProcess = classes.get(0);
5455
} else {
55-
throw new JadxRuntimeException("Found " + size + " classes, single class output can't be used");
56+
throw new JadxArgsValidateException("Found " + size + " classes, single class output can't be used");
5657
}
5758
}
5859
ICodeInfo codeInfo;

jadx-cli/src/test/java/jadx/cli/RenameConverterTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import jadx.api.JadxArgs.RenameEnum;
99
import jadx.cli.JadxCLIArgs.RenameConverter;
10+
import jadx.core.utils.exceptions.JadxArgsValidateException;
1011

1112
import static org.junit.jupiter.api.Assertions.assertEquals;
1213
import static org.junit.jupiter.api.Assertions.assertThrows;
@@ -38,7 +39,7 @@ public void none() {
3839

3940
@Test
4041
public void wrong() {
41-
IllegalArgumentException thrown = assertThrows(IllegalArgumentException.class,
42+
JadxArgsValidateException thrown = assertThrows(JadxArgsValidateException.class,
4243
() -> converter.convert("wrong"),
4344
"Expected convert() to throw, but it didn't");
4445

jadx-core/src/main/java/jadx/api/JadxArgsValidator.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,6 @@ private static void checkInputFiles(JadxDecompiler jadx, JadxArgs args) {
2828
if (inputFiles.isEmpty() && jadx.getCustomCodeLoaders().isEmpty()) {
2929
throw new JadxArgsValidateException("Please specify input file");
3030
}
31-
for (File inputFile : inputFiles) {
32-
String fileName = inputFile.getName();
33-
if (fileName.startsWith("--")) {
34-
throw new JadxArgsValidateException("Unknown argument: " + fileName);
35-
}
36-
}
3731
for (File file : inputFiles) {
3832
checkFile(file);
3933
}

0 commit comments

Comments
 (0)