fix(gui): apply log level as early as possible
This commit is contained in:
@@ -27,7 +27,7 @@ import jadx.core.plugins.PluginContext;
|
||||
import jadx.core.utils.Utils;
|
||||
import jadx.plugins.tools.JadxExternalPluginsLoader;
|
||||
|
||||
public class JCommanderWrapper<T> {
|
||||
public class JCommanderWrapper {
|
||||
private final JCommander jc;
|
||||
private final JadxCLIArgs argsObj;
|
||||
|
||||
@@ -42,6 +42,7 @@ public class JCommanderWrapper<T> {
|
||||
public boolean parse(String[] args) {
|
||||
try {
|
||||
jc.parse(args);
|
||||
applyFiles(argsObj);
|
||||
return true;
|
||||
} catch (ParameterException e) {
|
||||
System.err.println("Arguments parse error: " + e.getMessage());
|
||||
@@ -50,6 +51,15 @@ public class JCommanderWrapper<T> {
|
||||
}
|
||||
}
|
||||
|
||||
public void overrideProvided(JadxCLIArgs obj) {
|
||||
applyFiles(obj);
|
||||
for (ParameterDescription parameter : jc.getParameters()) {
|
||||
if (parameter.isAssigned()) {
|
||||
overrideProperty(obj, parameter);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public boolean processCommands() {
|
||||
String parsedCommand = jc.getParsedCommand();
|
||||
if (parsedCommand == null) {
|
||||
@@ -58,20 +68,21 @@ public class JCommanderWrapper<T> {
|
||||
return JadxCLICommands.process(this, jc, parsedCommand);
|
||||
}
|
||||
|
||||
public void overrideProvided(JadxCLIArgs obj) {
|
||||
List<ParameterDescription> fieldsParams = jc.getParameters();
|
||||
List<ParameterDescription> parameters = new ArrayList<>(1 + fieldsParams.size());
|
||||
parameters.add(jc.getMainParameterValue());
|
||||
parameters.addAll(fieldsParams);
|
||||
for (ParameterDescription parameter : parameters) {
|
||||
if (parameter.isAssigned()) {
|
||||
// copy assigned field value to obj
|
||||
Parameterized parameterized = parameter.getParameterized();
|
||||
Object providedValue = parameterized.get(parameter.getObject());
|
||||
Object newValue = mergeValues(parameterized.getType(), providedValue, () -> parameterized.get(obj));
|
||||
parameterized.set(obj, newValue);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* The main parameter parsing doesn't work if accepting unknown options
|
||||
*/
|
||||
private void applyFiles(JadxCLIArgs argsObj) {
|
||||
argsObj.setFiles(jc.getUnknownOptions());
|
||||
}
|
||||
|
||||
/**
|
||||
* Override assigned field value to obj
|
||||
*/
|
||||
private static void overrideProperty(JadxCLIArgs obj, ParameterDescription parameter) {
|
||||
Parameterized parameterized = parameter.getParameterized();
|
||||
Object providedValue = parameterized.get(parameter.getObject());
|
||||
Object newValue = mergeValues(parameterized.getType(), providedValue, () -> parameterized.get(obj));
|
||||
parameterized.set(obj, newValue);
|
||||
}
|
||||
|
||||
@SuppressWarnings({ "rawtypes", "unchecked" })
|
||||
@@ -85,10 +96,6 @@ public class JCommanderWrapper<T> {
|
||||
return value;
|
||||
}
|
||||
|
||||
public List<String> getUnknownOptions() {
|
||||
return jc.getUnknownOptions();
|
||||
}
|
||||
|
||||
public void printUsage() {
|
||||
LogHelper.setLogLevel(LogHelper.LogLevelEnum.ERROR); // mute logger while printing help
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package jadx.cli;
|
||||
|
||||
import java.nio.file.Path;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.EnumSet;
|
||||
import java.util.HashMap;
|
||||
@@ -36,7 +35,7 @@ import jadx.core.utils.files.FileUtils;
|
||||
public class JadxCLIArgs {
|
||||
|
||||
@Parameter(description = "<input files> (.apk, .dex, .jar, .class, .smali, .zip, .aar, .arsc, .aab, .xapk, .apkm, .jadx.kts)")
|
||||
protected List<String> files = new ArrayList<>(1);
|
||||
protected List<String> files;
|
||||
|
||||
@Parameter(names = { "-d", "--output-dir" }, description = "output directory")
|
||||
protected String outDir;
|
||||
@@ -283,29 +282,11 @@ public class JadxCLIArgs {
|
||||
protected Map<String, String> pluginOptions = new HashMap<>();
|
||||
|
||||
public boolean processArgs(String[] args) {
|
||||
JCommanderWrapper<JadxCLIArgs> jcw = new JCommanderWrapper<>(this);
|
||||
JCommanderWrapper jcw = new JCommanderWrapper(this);
|
||||
return jcw.parse(args) && process(jcw);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set values only for options provided in cmd.
|
||||
* Used to merge saved options and options passed in command line.
|
||||
*/
|
||||
public boolean overrideProvided(String[] args) {
|
||||
JCommanderWrapper<JadxCLIArgs> jcw = new JCommanderWrapper<>(newInstance());
|
||||
if (!jcw.parse(args)) {
|
||||
return false;
|
||||
}
|
||||
jcw.overrideProvided(this);
|
||||
return process(jcw);
|
||||
}
|
||||
|
||||
protected JadxCLIArgs newInstance() {
|
||||
return new JadxCLIArgs();
|
||||
}
|
||||
|
||||
private boolean process(JCommanderWrapper<JadxCLIArgs> jcw) {
|
||||
files.addAll(jcw.getUnknownOptions());
|
||||
public boolean process(JCommanderWrapper jcw) {
|
||||
if (jcw.processCommands()) {
|
||||
return false;
|
||||
}
|
||||
@@ -388,6 +369,10 @@ public class JadxCLIArgs {
|
||||
return files;
|
||||
}
|
||||
|
||||
public void setFiles(List<String> files) {
|
||||
this.files = files;
|
||||
}
|
||||
|
||||
public String getOutDir() {
|
||||
return outDir;
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ public class JadxCLICommands {
|
||||
COMMANDS_MAP.forEach(builder::addCommand);
|
||||
}
|
||||
|
||||
public static boolean process(JCommanderWrapper<?> jcw, JCommander jc, String parsedCommand) {
|
||||
public static boolean process(JCommanderWrapper jcw, JCommander jc, String parsedCommand) {
|
||||
ICommand command = COMMANDS_MAP.get(parsedCommand);
|
||||
if (command == null) {
|
||||
throw new JadxArgsValidateException("Unknown command: " + parsedCommand
|
||||
|
||||
@@ -65,7 +65,7 @@ public class CommandPlugins implements ICommand {
|
||||
|
||||
@SuppressWarnings("UnnecessaryReturnStatement")
|
||||
@Override
|
||||
public void process(JCommanderWrapper<?> jcw, JCommander subCommander) {
|
||||
public void process(JCommanderWrapper jcw, JCommander subCommander) {
|
||||
if (printHelp) {
|
||||
jcw.printUsage(subCommander);
|
||||
return;
|
||||
|
||||
@@ -7,5 +7,5 @@ import jadx.cli.JCommanderWrapper;
|
||||
public interface ICommand {
|
||||
String name();
|
||||
|
||||
void process(JCommanderWrapper<?> jcw, JCommander subCommander);
|
||||
void process(JCommanderWrapper jcw, JCommander subCommander);
|
||||
}
|
||||
|
||||
@@ -93,7 +93,16 @@ public class JadxCLIArgsTest {
|
||||
}
|
||||
|
||||
private JadxCLIArgs override(JadxCLIArgs jadxArgs, String... args) {
|
||||
return check(jadxArgs, jadxArgs.overrideProvided(args));
|
||||
return check(jadxArgs, overrideProvided(jadxArgs, args));
|
||||
}
|
||||
|
||||
private static boolean overrideProvided(JadxCLIArgs jadxArgs, String[] args) {
|
||||
JCommanderWrapper jcw = new JCommanderWrapper(new JadxCLIArgs());
|
||||
if (!jcw.parse(args)) {
|
||||
return false;
|
||||
}
|
||||
jcw.overrideProvided(jadxArgs);
|
||||
return jadxArgs.process(jcw);
|
||||
}
|
||||
|
||||
private static JadxCLIArgs check(JadxCLIArgs jadxArgs, boolean res) {
|
||||
|
||||
Reference in New Issue
Block a user