// int values must sync with KINDS order below
Kind WEAVEINFO = new Kind("weaveinfo", 5);
Kind INFO = new Kind("info", 10);
+ Kind USAGE = new Kind("usage", 15);
Kind DEBUG = new Kind("debug", 20);
- Kind TASKTAG = new Kind("task", 25); // represents a 'TODO' from eclipse - producted by the compiler and
+ Kind TASKTAG = new Kind("task", 25); // represents a 'TODO' from eclipse - produced by the compiler and
// consumed by AJDT
Kind WARNING = new Kind("warning", 30);
Kind ERROR = new Kind("error", 40);
/**
* list of Kind in precedence order. 0 is less than IMessage.Kind#COMPARATOR.compareTo(KINDS.get(i), KINDS.get(i + 1))
*/
- List<Kind> KINDS = Collections.unmodifiableList(Arrays.asList(new Kind[] { WEAVEINFO, INFO, DEBUG, TASKTAG,
+ List<Kind> KINDS = Collections.unmodifiableList(Arrays.asList(new Kind[] { WEAVEINFO, INFO, USAGE, DEBUG, TASKTAG,
WARNING, ERROR, FAIL, ABORT }));
/** @return non-null String with simple message */
/** @return true if this is an internal debug message */
boolean isDebug();
+ /** @return true if this is a compiler usage message */
+ boolean isUsage();
+
/** @return true if this is information for the user */
boolean isInfo();
buildManager = new AjBuildManager(handler);
savedArgs = new String[args.length];
System.arraycopy(args, 0, savedArgs, 0, savedArgs.length);
- for (String arg : args) {
-// AMC - PR58681. No need to abort on -help as the Eclipse compiler does the right thing.
-// if ("-help".equals(args[i])) {
-// // should be info, but handler usually suppresses
-// MessageUtil.abort(handler, BuildArgParser.getUsage());
-// return true;
-// } else
- if ("-X".equals(arg)) {
- // should be info, but handler usually suppresses
- MessageUtil.abort(handler, BuildArgParser.getXOptionUsage());
- return true;
- }
- }
return doCommand(handler, false);
}
if (!config.hasSources()) {
MessageUtil.error(counter, "no sources specified");
}
- if (counter.hasErrors()) { // print usage for config errors
- String usage = BuildArgParser.getUsage();
- MessageUtil.abort(handler, usage);
+ if (counter.hasErrors()) {
+ // Do *not* print usage for config errors (just like ECJ does it). Otherwise the user would have to
+ // scroll up several screens in order to actually see the error messages.
+ // String usage = BuildArgParser.getUsage();
+ // MessageUtil.abort(handler, usage);
return false;
}
//System.err.println("errs: " + counter.hasErrors());
return config;
}
- /** @return IMessage.WARNING unless message contains error or info */
+ /**
+ * Heuristically infer the type of output message logged by the AspectJ compiler. This is a simple keyword matcher
+ * looking for substrings like "[error]", "[warning]", "AspectJ-specific options:", "AspectJ-specific non-standard
+ * options:"
+ *
+ * @param message AspectJ compiler message
+ * @return inferred message kind, either of ERROR, WARNING, USAGE, INFO
+ */
protected static IMessage.Kind inferKind(String message) { // XXX dubious
- if (message.contains("error")) {
+ if (message.contains("[error]")) {
return IMessage.ERROR;
- } else if (message.contains("info")) {
- return IMessage.INFO;
- } else {
+ } else if (message.contains("[warning]")) {
return IMessage.WARNING;
+ } else if (message.contains("AspectJ-specific options:") || message.contains("AspectJ-specific non-standard options:")) {
+ return IMessage.USAGE;
+ } else {
+ return IMessage.INFO;
}
}
}