public void printUsage() { JCommander jc = new JCommander(this); // print usage in not sorted fields order (by default its sorted by description) PrintStream out = System.out; out.println(); out.println("jadx - dex to java decompiler, version: " + JadxDecompiler.getVersion()); out.println(); out.println("usage: jadx [options] " + jc.getMainParameterDescription()); out.println("options:"); List<ParameterDescription> params = jc.getParameters(); Map<String, ParameterDescription> paramsMap = new LinkedHashMap<String, ParameterDescription>(params.size()); int maxNamesLen = 0; for (ParameterDescription p : params) { paramsMap.put(p.getParameterized().getName(), p); int len = p.getNames().length(); if (len > maxNamesLen) { maxNamesLen = len; } } Field[] fields = JadxCLIArgs.class.getDeclaredFields(); for (Field f : fields) { String name = f.getName(); ParameterDescription p = paramsMap.get(name); if (p == null) { continue; } StringBuilder opt = new StringBuilder(); opt.append(' ').append(p.getNames()); addSpaces(opt, maxNamesLen - opt.length() + 2); opt.append("- ").append(p.getDescription()); out.println(opt); } out.println("Example:"); out.println(" jadx -d out classes.dex"); }