package hudson.plugins.warnings.parser;
import java.util.regex.Matcher;
import org.apache.commons.lang.StringUtils;
/**
* A parser for the ant javac compiler warnings.
*
* @author Ulli Hafner
*/
public class AntJavacParser extends RegexpLineParser {
/** Warning type of this parser. */
static final String WARNING_TYPE = "Java Compiler";
/** Pattern of javac compiler warnings.
*/
private static final String ANT_JAVAC_WARNING_PATTERN = "^\\s*(?:\\[.*\\])?\\s*(.*java):(\\d*):\\s*(?:warning|\u8b66\u544a)\\s*:\\s*(?:\\[(\\w*)\\])?\\s*(.*)$"
+ "|^\\s*\\[.*\\]\\s*warning.*\\]\\s*(.*\"(.*)\".*)$";
// \u8b66\u544a is Japanese l10n
/**
* Creates a new instance of <code>AntJavacParser</code>.
*/
public AntJavacParser() {
super(ANT_JAVAC_WARNING_PATTERN, WARNING_TYPE, true);
}
/** {@inheritDoc} */
@Override
protected boolean isLineInteresting(final String line) {
return line.contains("warning") || line.contains("\u8b66\u544a");
}
/**
* Creates a new annotation for the specified pattern.
*
* @param matcher the regular expression matcher
* @return a new annotation for the specified pattern
*/
@Override
protected Warning createWarning(final Matcher matcher) {
if (StringUtils.isBlank(matcher.group(5))) {
String message = matcher.group(4);
String category = classifyIfEmpty(matcher.group(3), message);
return new Warning(matcher.group(1), getLineNumber(matcher.group(2)), WARNING_TYPE, category, message);
}
else {
return new Warning(matcher.group(6), 0, WARNING_TYPE, "Path", matcher.group(5));
}
}
}