From 6d8f7768380b6d08a255d0893e28c6019d9ff7cc Mon Sep 17 00:00:00 2001 From: "JesusFreke@JesusFreke.com" Date: Mon, 22 Feb 2010 07:02:22 +0000 Subject: [PATCH] Refactor the smali parameters so that the debug options aren't shown unless -? is specified twice (-??) git-svn-id: https://smali.googlecode.com/svn/trunk@643 55b6fa8a-2a1e-11de-a435-ffa8d773f76a --- smali/src/main/java/org/jf/smali/main.java | 135 +++++++++++------- .../java/org/jf/smali/smaliHelpFormatter.java | 14 ++ 2 files changed, 98 insertions(+), 51 deletions(-) create mode 100644 smali/src/main/java/org/jf/smali/smaliHelpFormatter.java diff --git a/smali/src/main/java/org/jf/smali/main.java b/smali/src/main/java/org/jf/smali/main.java index cef8fcab..c7f6a734 100644 --- a/smali/src/main/java/org/jf/smali/main.java +++ b/smali/src/main/java/org/jf/smali/main.java @@ -44,9 +44,13 @@ public class main { public static final String VERSION; + private final static Options basicOptions; + private final static Options debugOptions; private final static Options options; static { + basicOptions = new Options(); + debugOptions = new Options(); options = new Options(); buildOptions(); @@ -91,14 +95,43 @@ public class main { String[] remainingArgs = commandLine.getArgs(); - if (commandLine.hasOption("v")) { - version(); - return; - } + Option[] options = commandLine.getOptions(); - if (commandLine.hasOption("?")) { - usage(); - return; + for (int i=0; i filesToProcess = new LinkedHashSet(); for (String arg: remainingArgs) { @@ -263,10 +274,25 @@ public class main { /** * Prints the usage message. */ - private static void usage() { - HelpFormatter formatter = new HelpFormatter(); + private static void usage(boolean printDebugOptions) { + smaliHelpFormatter formatter = new smaliHelpFormatter(); + formatter.setWidth(100); + formatter.printHelp("java -jar smali.jar [options] [--] [|folder]*", - "assembles a set of smali files into a dex file, and optionally generats an annotated dump of the output file", options, ""); + "assembles a set of smali files into a dex file", basicOptions, ""); + + if (printDebugOptions) { + System.out.println(); + System.out.println("Debug Options:"); + + StringBuffer sb = new StringBuffer(); + formatter.renderOptions(sb, debugOptions); + System.out.println(sb.toString()); + } + } + + private static void usage() { + usage(false); } /** @@ -279,47 +305,54 @@ public class main { System.exit(0); } - - private static void buildOptions() { Option versionOption = OptionBuilder.withLongOpt("version") .withDescription("prints the version then exits") .create("v"); Option helpOption = OptionBuilder.withLongOpt("help") - .withDescription("prints the help message then exits") + .withDescription("prints the help message then exits. Specify twice for debug options") .create("?"); - Option dumpOption = OptionBuilder.withLongOpt("dump-to") - .withDescription("additionally writes a dump of written dex file to FILE (.dump by default)") - .hasOptionalArg() - .withArgName("FILE") - .create("d"); - Option outputOption = OptionBuilder.withLongOpt("output") .withDescription("the name of the dex file that will be written. The default is out.dex") .hasArg() .withArgName("FILE") .create("o"); + Option dumpOption = OptionBuilder.withLongOpt("dump-to") + .withDescription("additionally writes a dump of written dex file to FILE (.dump by default)") + .hasOptionalArg() + .withArgName("FILE") + .create("D"); + Option sortOption = OptionBuilder.withLongOpt("sort") .withDescription("sort the items in the dex file into a canonical order before writing") - .create("s"); + .create("S"); Option noFixStringConstOption = OptionBuilder.withLongOpt("no-fix-string-const") .withDescription("Don't replace string-const instructions with string-const/jumbo where appropriate") - .create("c"); + .create("C"); Option noFixGotoOption = OptionBuilder.withLongOpt("no-fix-goto") .withDescription("Don't replace goto type instructions with a larger version where appropriate") - .create("g"); + .create("G"); - options.addOption(versionOption); - options.addOption(helpOption); - options.addOption(dumpOption); - options.addOption(outputOption); - options.addOption(sortOption); - options.addOption(noFixStringConstOption); - options.addOption(noFixGotoOption); + basicOptions.addOption(versionOption); + basicOptions.addOption(helpOption); + basicOptions.addOption(outputOption); + + debugOptions.addOption(dumpOption); + debugOptions.addOption(sortOption); + debugOptions.addOption(noFixStringConstOption); + debugOptions.addOption(noFixGotoOption); + + for (Object option: basicOptions.getOptions()) { + options.addOption((Option)option); + } + + for (Object option: debugOptions.getOptions()) { + options.addOption((Option)option); + } } } \ No newline at end of file diff --git a/smali/src/main/java/org/jf/smali/smaliHelpFormatter.java b/smali/src/main/java/org/jf/smali/smaliHelpFormatter.java new file mode 100644 index 00000000..da6aba3b --- /dev/null +++ b/smali/src/main/java/org/jf/smali/smaliHelpFormatter.java @@ -0,0 +1,14 @@ +package org.jf.smali; + +import org.apache.commons.cli.HelpFormatter; +import org.apache.commons.cli.Options; + +public class smaliHelpFormatter extends HelpFormatter { + + public void smaliHelpFormatter() { + } + + public void renderOptions(StringBuffer sb, Options options) { + super.renderOptions(sb, getWidth(), options, getLeftPadding(), this.getDescPadding()); + } +}