diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/gnu/classpath/tools/getopt/Parser.java | 27 | ||||
-rw-r--r-- | tools/gnu/classpath/tools/jar/Action.java | 4 | ||||
-rw-r--r-- | tools/gnu/classpath/tools/jar/Creator.java | 4 | ||||
-rw-r--r-- | tools/gnu/classpath/tools/jar/Indexer.java | 12 | ||||
-rw-r--r-- | tools/gnu/classpath/tools/jar/Main.java | 47 | ||||
-rw-r--r-- | tools/gnu/classpath/tools/jar/Updater.java | 4 |
6 files changed, 59 insertions, 39 deletions
diff --git a/tools/gnu/classpath/tools/getopt/Parser.java b/tools/gnu/classpath/tools/getopt/Parser.java index f819fb745..0ef815d45 100644 --- a/tools/gnu/classpath/tools/getopt/Parser.java +++ b/tools/gnu/classpath/tools/getopt/Parser.java @@ -250,7 +250,7 @@ public class Parser this.printHelp(System.out); } - protected void printHelp(PrintStream out) + void printHelp(PrintStream out) { if (headerText != null) { @@ -275,6 +275,26 @@ public class Parser formatText(out, footerText); } + /** + * This method can be overridden by subclassses to provide some option + * validation. It is called by the parser after all options have been + * parsed. If an option validation problem is encountered, this should + * throw an {@link OptionException} whose message should be shown to + * the user. + * <p> + * It is better to do validation here than after {@link #parse(String[])} + * returns, because the parser will print a message referring the + * user to the <code>--help</code> option. + * <p> + * The base implementation does nothing. + * + * @throws OptionException the error encountered + */ + protected void validate() throws OptionException + { + // Base implementation does nothing. + } + private String getArgument(String request) throws OptionException { ++currentIndex; @@ -380,12 +400,15 @@ public class Parser // Add remaining arguments to leftovers. for (++currentIndex; currentIndex < args.length; ++currentIndex) files.notifyFile(args[currentIndex]); + // See if something went wrong. + validate(); } catch (OptionException err) { System.err.println(programName + ": " + err.getMessage()); System.err.println(programName + ": Try '" + programName - + " --help' for more information."); + + " " + (longOnly ? "-help" : "--help") + + "' for more information."); System.exit(1); } } diff --git a/tools/gnu/classpath/tools/jar/Action.java b/tools/gnu/classpath/tools/jar/Action.java index b6398936d..6363157ae 100644 --- a/tools/gnu/classpath/tools/jar/Action.java +++ b/tools/gnu/classpath/tools/jar/Action.java @@ -38,8 +38,6 @@ package gnu.classpath.tools.jar; -import gnu.classpath.tools.getopt.OptionException; - import java.io.IOException; public abstract class Action @@ -49,5 +47,5 @@ public abstract class Action } public abstract void run(Main parameters) - throws IOException, OptionException; + throws IOException; } diff --git a/tools/gnu/classpath/tools/jar/Creator.java b/tools/gnu/classpath/tools/jar/Creator.java index caf093b77..e10addd5b 100644 --- a/tools/gnu/classpath/tools/jar/Creator.java +++ b/tools/gnu/classpath/tools/jar/Creator.java @@ -38,8 +38,6 @@ package gnu.classpath.tools.jar; -import gnu.classpath.tools.getopt.OptionException; - import java.io.BufferedOutputStream; import java.io.ByteArrayOutputStream; import java.io.File; @@ -222,7 +220,7 @@ public class Creator outputStream.close(); } - public void run(Main parameters) throws IOException, OptionException + public void run(Main parameters) throws IOException { if (parameters.archiveFile == null || parameters.archiveFile.equals("-")) writeCommandLineEntries(parameters, System.out); diff --git a/tools/gnu/classpath/tools/jar/Indexer.java b/tools/gnu/classpath/tools/jar/Indexer.java index 8182d9098..3fff8e1af 100644 --- a/tools/gnu/classpath/tools/jar/Indexer.java +++ b/tools/gnu/classpath/tools/jar/Indexer.java @@ -38,7 +38,6 @@ exception statement from your version. */ package gnu.classpath.tools.jar; -import gnu.classpath.tools.getopt.OptionException; import gnu.java.net.IndexListParser; import java.io.ByteArrayInputStream; @@ -135,15 +134,4 @@ public class Indexer writeFile(false, in, IndexListParser.JAR_INDEX_FILE, parameters.verbose); } } - - public void run(Main parameters) throws IOException, OptionException - { - if (! parameters.entries.isEmpty()) - throw new OptionException("can't specify file arguments when using -i"); - if (! parameters.wantManifest) - throw new OptionException("can't specify -M with -i"); - if (parameters.manifestFile != null) - throw new OptionException("can't specify -m with -i"); - super.run(parameters); - } } diff --git a/tools/gnu/classpath/tools/jar/Main.java b/tools/gnu/classpath/tools/jar/Main.java index 4bb55deae..ae802d0c7 100644 --- a/tools/gnu/classpath/tools/jar/Main.java +++ b/tools/gnu/classpath/tools/jar/Main.java @@ -138,9 +138,37 @@ public class Main } } + private class JarParser extends ClasspathToolParser + { + public JarParser(String name) + { + super(name); + } + + protected void validate() throws OptionException + { + if (operationMode == null) + throw new OptionException("must specify one of -t, -c, -u, -x, or -i"); + if (changedDirectory != null) + throw new OptionException("-C argument requires both directory and filename"); + if (! wantManifest && manifestFile != null) + throw new OptionException("can't specify both -m and -M"); + if (operationMode == Indexer.class) + { + // Some extra validation for -i. + if (! entries.isEmpty()) + throw new OptionException("can't specify file arguments when using -i"); + if (! wantManifest) + throw new OptionException("can't specify -M with -i"); + if (manifestFile != null) + throw new OptionException("can't specify -m with -i"); + } + } + } + private Parser initializeParser() { - Parser p = new ClasspathToolParser("jar"); + Parser p = new JarParser("jar"); p.setHeader("Usage: jar -ctxui [OPTIONS] jar-file [-C DIR FILE] FILE..."); OptionGroup grp = new OptionGroup("Operation mode"); @@ -205,20 +233,14 @@ public class Main return p; } - private void run(String[] args) throws OptionException, - InstantiationException, IllegalAccessException, IOException + private void run(String[] args) + throws InstantiationException, IllegalAccessException, IOException { Parser p = initializeParser(); // Special hack to emulate old tar-style commands. if (args.length > 0 && args[0].charAt(0) != '-') args[0] = '-' + args[0]; p.parse(args, new HandleFile()); - if (operationMode == null) - throw new OptionException("must specify one of -t, -c, -u, -x, or -i"); - if (changedDirectory != null) - throw new OptionException("-C argument requires both directory and filename"); - if (! wantManifest && manifestFile != null) - throw new OptionException("can't specify both -m and -M"); Action t = (Action) operationMode.newInstance(); t.run(this); } @@ -230,13 +252,6 @@ public class Main { jarprogram.run(args); } - catch (OptionException arg) - { - System.err.println("jar: " + arg.getMessage()); - // FIXME: this should be pushed into the parser somehow. - System.err.println("Try 'jar --help' for more information"); - System.exit(1); - } catch (Exception e) { System.err.println("jar: internal error:"); diff --git a/tools/gnu/classpath/tools/jar/Updater.java b/tools/gnu/classpath/tools/jar/Updater.java index b717507a8..29586befd 100644 --- a/tools/gnu/classpath/tools/jar/Updater.java +++ b/tools/gnu/classpath/tools/jar/Updater.java @@ -38,8 +38,6 @@ package gnu.classpath.tools.jar; -import gnu.classpath.tools.getopt.OptionException; - import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; @@ -66,7 +64,7 @@ public class Updater return result; } - public void run(Main parameters) throws IOException, OptionException + public void run(Main parameters) throws IOException { // Set this early so that createManifest can use it. inputJar = new JarFile(parameters.archiveFile); |