]> source.dussan.org Git - aspectj.git/commitdiff
- detecting unflagged directories
authorwisberg <wisberg>
Tue, 29 Apr 2003 00:24:32 +0000 (00:24 +0000)
committerwisberg <wisberg>
Tue, 29 Apr 2003 00:24:32 +0000 (00:24 +0000)
- !! changed warnings to errors, so now
  not compiling after command-line mistakes

org.aspectj.ajdt.core/src/org/aspectj/ajdt/ajc/BuildArgParser.java

index 33cae8143559180c2f74572bacb553ddf1c18258..8d387a99db3fe6f3bdd782d6378a21f12b64cdee 100644 (file)
@@ -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);