27
27
import jadx .core .utils .Utils ;
28
28
import jadx .plugins .tools .JadxExternalPluginsLoader ;
29
29
30
- public class JCommanderWrapper < T > {
30
+ public class JCommanderWrapper {
31
31
private final JCommander jc ;
32
32
private final JadxCLIArgs argsObj ;
33
33
@@ -42,6 +42,7 @@ public JCommanderWrapper(JadxCLIArgs argsObj) {
42
42
public boolean parse (String [] args ) {
43
43
try {
44
44
jc .parse (args );
45
+ applyFiles (argsObj );
45
46
return true ;
46
47
} catch (ParameterException e ) {
47
48
System .err .println ("Arguments parse error: " + e .getMessage ());
@@ -50,6 +51,15 @@ public boolean parse(String[] args) {
50
51
}
51
52
}
52
53
54
+ public void overrideProvided (JadxCLIArgs obj ) {
55
+ applyFiles (obj );
56
+ for (ParameterDescription parameter : jc .getParameters ()) {
57
+ if (parameter .isAssigned ()) {
58
+ overrideProperty (obj , parameter );
59
+ }
60
+ }
61
+ }
62
+
53
63
public boolean processCommands () {
54
64
String parsedCommand = jc .getParsedCommand ();
55
65
if (parsedCommand == null ) {
@@ -58,20 +68,21 @@ public boolean processCommands() {
58
68
return JadxCLICommands .process (this , jc , parsedCommand );
59
69
}
60
70
61
- public void overrideProvided (JadxCLIArgs obj ) {
62
- List <ParameterDescription > fieldsParams = jc .getParameters ();
63
- List <ParameterDescription > parameters = new ArrayList <>(1 + fieldsParams .size ());
64
- parameters .add (jc .getMainParameterValue ());
65
- parameters .addAll (fieldsParams );
66
- for (ParameterDescription parameter : parameters ) {
67
- if (parameter .isAssigned ()) {
68
- // copy assigned field value to obj
69
- Parameterized parameterized = parameter .getParameterized ();
70
- Object providedValue = parameterized .get (parameter .getObject ());
71
- Object newValue = mergeValues (parameterized .getType (), providedValue , () -> parameterized .get (obj ));
72
- parameterized .set (obj , newValue );
73
- }
74
- }
71
+ /**
72
+ * The main parameter parsing doesn't work if accepting unknown options
73
+ */
74
+ private void applyFiles (JadxCLIArgs argsObj ) {
75
+ argsObj .setFiles (jc .getUnknownOptions ());
76
+ }
77
+
78
+ /**
79
+ * Override assigned field value to obj
80
+ */
81
+ private static void overrideProperty (JadxCLIArgs obj , ParameterDescription parameter ) {
82
+ Parameterized parameterized = parameter .getParameterized ();
83
+ Object providedValue = parameterized .get (parameter .getObject ());
84
+ Object newValue = mergeValues (parameterized .getType (), providedValue , () -> parameterized .get (obj ));
85
+ parameterized .set (obj , newValue );
75
86
}
76
87
77
88
@ SuppressWarnings ({ "rawtypes" , "unchecked" })
@@ -85,10 +96,6 @@ private static Object mergeValues(Class<?> type, Object value, Supplier<Object>
85
96
return value ;
86
97
}
87
98
88
- public List <String > getUnknownOptions () {
89
- return jc .getUnknownOptions ();
90
- }
91
-
92
99
public void printUsage () {
93
100
LogHelper .setLogLevel (LogHelper .LogLevelEnum .ERROR ); // mute logger while printing help
94
101
0 commit comments