From ecfb76ec939875ac0a30fa36fe395e21fc9069be Mon Sep 17 00:00:00 2001 From: wisberg Date: Tue, 29 Apr 2003 00:24:32 +0000 Subject: [PATCH] - detecting unflagged directories - !! changed warnings to errors, so now not compiling after command-line mistakes --- .../org/aspectj/ajdt/ajc/BuildArgParser.java | 92 ++++++++++++------- 1 file changed, 61 insertions(+), 31 deletions(-) diff --git a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/ajc/BuildArgParser.java b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/ajc/BuildArgParser.java index 33cae8143..8d387a99d 100644 --- a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/ajc/BuildArgParser.java +++ b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/ajc/BuildArgParser.java @@ -37,8 +37,9 @@ import org.aspectj.util.FileUtil; import org.aspectj.util.LangUtil; import org.eclipse.jdt.core.compiler.InvalidInputException; import org.eclipse.jdt.internal.compiler.impl.CompilerOptions; +import org.eclipse.jdt.internal.compiler.batch.Main; -public class BuildArgParser extends org.eclipse.jdt.internal.compiler.batch.Main { +public class BuildArgParser extends Main { private static final String BUNDLE_NAME = "org.aspectj.ajdt.ajc.messages"; @@ -50,6 +51,11 @@ public class BuildArgParser extends org.eclipse.jdt.internal.compiler.batch.Main this.stringWriter = sw; } } + + /** @return multi-line String usage for the compiler */ + public static String getUsage() { + return Main.bind("misc.usage", Main.bind("compiler.version")); + } /** * StringWriter sink for some errors. @@ -78,6 +84,14 @@ public class BuildArgParser extends org.eclipse.jdt.internal.compiler.batch.Main this(new StringPrintWriter(new StringWriter())); } + /** + * Generate build configuration for the input args, + * passing to handler any error messages. + * @param args the String[] arguments for the build configuration + * @param handler the IMessageHandler handler for any errors + * @return AjBuildConfig per args, + * which will be invalid unless there are no handler errors. + */ public AjBuildConfig genBuildConfig(String[] args, IMessageHandler handler) { AjBuildConfig buildConfig = new AjBuildConfig(); try { @@ -129,7 +143,6 @@ public class BuildArgParser extends org.eclipse.jdt.internal.compiler.batch.Main buildConfig.setJavaOptions(options); } catch (InvalidInputException iie) { MessageUtil.error(handler, iie.getMessage()); - printUsage(); // XXX extract usage as String, add to message } return buildConfig; } @@ -252,9 +265,12 @@ public class BuildArgParser extends org.eclipse.jdt.internal.compiler.batch.Main * incremental mode. * Signals warnings or errors through handler set in constructor. */ - public void parseOption(String arg, LinkedList args) { - int nextArgIndex = args.indexOf(arg)+1; - if (arg.equals("-injars")) {; + public void parseOption(String arg, LinkedList args) { // XXX use ListIterator.remove() + int nextArgIndex = args.indexOf(arg)+1; // XXX assumes unique + // trim arg? + if (LangUtil.isEmpty(arg)) { + showWarning("empty arg found"); + } else if (arg.equals("-injars")) {; if (args.size() > nextArgIndex) { buildConfig.getAjOptions().put(AjCompilerOptions.OPTION_InJARs, CompilerOptions.PRESERVE); @@ -267,7 +283,7 @@ public class BuildArgParser extends org.eclipse.jdt.internal.compiler.batch.Main if (jarFile.exists() && FileUtil.hasZipSuffix(filename)) { buildConfig.getInJars().add(jarFile); } else { - showWarning("ignoring bad injar: " + filename); + showError("bad injar: " + filename); } } @@ -284,7 +300,7 @@ public class BuildArgParser extends org.eclipse.jdt.internal.compiler.batch.Main if (jarFile.exists() && FileUtil.hasZipSuffix(filename)) { buildConfig.getAspectpath().add(jarFile); } else { - showWarning("ignoring bad aspectpath: " + filename); + showError("bad aspectpath: " + filename); } } @@ -301,7 +317,7 @@ public class BuildArgParser extends org.eclipse.jdt.internal.compiler.batch.Main if (f.isDirectory() && f.canRead()) { sourceRoots.add(f); } else { - showWarning("ignoring bad sourceroot: " + f); + showError("bad sourceroot: " + f); } } if (0 < sourceRoots.size()) { @@ -309,7 +325,7 @@ public class BuildArgParser extends org.eclipse.jdt.internal.compiler.batch.Main } args.remove(args.get(nextArgIndex)); } else { - showWarning("-sourceroots requires list of directories"); + showError("-sourceroots requires list of directories"); } } else if (arg.equals("-outjar")) { if (args.size() > nextArgIndex) { @@ -322,15 +338,14 @@ public class BuildArgParser extends org.eclipse.jdt.internal.compiler.batch.Main } buildConfig.setOutputJar(jarFile); } catch (IOException ioe) { - showWarning("unable to created outjar file: " + jarFile); + showError("unable to create outjar file: " + jarFile); } } else { - showWarning("ignoring invalid -outjar file: " + jarFile); - buildConfig.setLintSpecFile(null); + showError("invalid -outjar file: " + jarFile); } args.remove(args.get(nextArgIndex)); } else { - showWarning("-outjar requires jar path argument"); + showError("-outjar requires jar path argument"); } } else if (arg.equals("-incremental")) { buildConfig.setIncrementalMode(true); @@ -339,12 +354,12 @@ public class BuildArgParser extends org.eclipse.jdt.internal.compiler.batch.Main File file = makeFile(((ConfigParser.Arg)args.get(nextArgIndex)).getValue()); buildConfig.setIncrementalFile(file); if (!file.canRead()) { - showWarning("unreadable -XincrementalFile : " + file); + showError("bad -XincrementalFile : " + file); // if not created before recompile test, stop after first compile } args.remove(args.get(nextArgIndex)); } else { - showWarning("-XincrementalFile requires file argument"); + showError("-XincrementalFile requires file argument"); } } else if (arg.equals("-emacssym")) { buildConfig.setEmacsSymMode(true); @@ -362,14 +377,14 @@ public class BuildArgParser extends org.eclipse.jdt.internal.compiler.batch.Main if (lintSpecFile.canRead() && lintSpecFile.getName().endsWith(".properties")) { buildConfig.setLintSpecFile(lintSpecFile); } else { - showWarning("ignoring as unreadable -Xlintfile file: " + lintSpecFile); + showError("bad -Xlintfile file: " + lintSpecFile); buildConfig.setLintSpecFile(null); } args.remove(args.get(nextArgIndex)); } else { - showWarning("-Xlintfile requires .properties file argument"); + showError("-Xlintfile requires .properties file argument"); } - } else if (arg.equals("-Xlint")) { // XXX two Xlint handlers? + } else if (arg.equals("-Xlint")) { buildConfig.getAjOptions().put( AjCompilerOptions.OPTION_Xlint, CompilerOptions.GENERATE); @@ -378,32 +393,35 @@ public class BuildArgParser extends org.eclipse.jdt.internal.compiler.batch.Main if (7 < arg.length()) { buildConfig.setLintMode(arg.substring(7)); } else { - showWarning("ignoring invalid option " + arg); + showError("invalid lint option " + arg); } - } else if (arg.equals("-bootclasspath")) { // XXX unsupportedIn1.1 + } else if (arg.equals("-bootclasspath")) { if (args.size() > nextArgIndex) { bootclasspath = ((ConfigParser.Arg)args.get(nextArgIndex)).getValue(); args.remove(args.get(nextArgIndex)); } else { - showWarning("-bootclasspath requires classpath entries"); + showError("-bootclasspath requires classpath entries"); } - } else if (arg.equals("-extdirs")) { // XXX unsupportedIn1.1 + } else if (arg.equals("-extdirs")) { if (args.size() > nextArgIndex) { extdirs = ((ConfigParser.Arg)args.get(nextArgIndex)).getValue(); args.remove(args.get(nextArgIndex)); } else { - showWarning("-extdirs requires list of external directories"); + showError("-extdirs requires list of external directories"); } + // error on directory unless -d, -{boot}classpath, or -extdirs } else if (arg.equals("-d")) { - if (args.size() > nextArgIndex) { - unparsedArgs.add(arg); // XXX hmm -// ConfigParser.Arg path = (ConfigParser.Arg)args.get(nextArgIndex); -// path.setValue(makeFile(path.getValue()).getPath()); - } else { - showWarning("-d requires output directory"); - } + dirLookahead(arg, args, nextArgIndex); + } else if (arg.equals("-classpath")) { + dirLookahead(arg, args, nextArgIndex); + } else if (arg.equals("-bootclasspath")) { + dirLookahead(arg, args, nextArgIndex); + } else if (arg.equals("-extdirs")) { + dirLookahead(arg, args, nextArgIndex); + } else if (new File(arg).isDirectory()) { + showError("dir arg not permitted: " + arg); } else { - // XXX unparsed aspectJ options: argfile, @file + // argfile, @file parsed by superclass // no eclipse options parsed: // -d args, -help (handled), // -classpath, -target, -1.3, -1.4, -source [1.3|1.4] @@ -414,6 +432,18 @@ public class BuildArgParser extends org.eclipse.jdt.internal.compiler.batch.Main unparsedArgs.add(arg); } } + protected void dirLookahead(String arg, LinkedList argList, int nextArgIndex) { + unparsedArgs.add(arg); + ConfigParser.Arg next = (ConfigParser.Arg) argList.get(nextArgIndex); + String value = next.getValue(); + if (!LangUtil.isEmpty(value)) { + if (new File(value).isDirectory()) { + unparsedArgs.add(value); + argList.remove(next); + return; + } + } + } public void showError(String message) { MessageUtil.error(handler, message); -- 2.39.5