diff --git a/src/main/java/hudson/plugins/warnings/GroovyParser.java b/src/main/java/hudson/plugins/warnings/GroovyParser.java index 0f03afa9c..486f6f316 100644 --- a/src/main/java/hudson/plugins/warnings/GroovyParser.java +++ b/src/main/java/hudson/plugins/warnings/GroovyParser.java @@ -10,11 +10,13 @@ import hudson.plugins.warnings.parser.DynamicParser; import hudson.plugins.warnings.parser.Warning; import hudson.util.FormValidation; +import hudson.util.FormValidation.Kind; import java.util.Locale; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; + import javax.annotation.CheckForNull; import org.apache.commons.lang.StringUtils; @@ -38,7 +40,8 @@ public class GroovyParser extends AbstractDescribableImpl { private String linkName; /** Trend report name. @since 4.0 */ private String trendName; - private transient @CheckForNull AbstractWarningsParser parser; + @CheckForNull + private transient AbstractWarningsParser parser; /** * Creates a new instance of {@link GroovyParser}. @@ -107,6 +110,10 @@ private Object readResolve() { * otherwise */ public boolean isValid() { + return parser != null; + } + + private boolean canCreateParser() { DescriptorImpl d = new DescriptorImpl(); return d.doCheckScript(script).kind == FormValidation.Kind.OK && d.doCheckRegexp(regexp).kind == FormValidation.Kind.OK @@ -174,7 +181,7 @@ public String getExample() { * @return true if the parser can scan messages spanning * multiple lines */ - public boolean hasMultiLineSupport() { + public final boolean hasMultiLineSupport() { return containsNewline(regexp); } @@ -182,19 +189,28 @@ private static boolean containsNewline(final String expression) { return StringUtils.contains(expression, "\\n"); } - private @CheckForNull AbstractWarningsParser createParser() { - if (isValid()) { + @CheckForNull + private AbstractWarningsParser createParser() { + if (canCreateParser()) { if (hasMultiLineSupport()) { return new DynamicDocumentParser(name, regexp, script, linkName, trendName); - } else { + } + else { return new DynamicParser(name, regexp, script, linkName, trendName); } - } else { + } + else { return null; } } - - public @CheckForNull AbstractWarningsParser getParser() { + + /** + * Returns a valid parser instance. If this parsers configuration is not valid, then null is returned. + * + * @return a valid parser instance or null if this parsers configuration is not valid. + */ + @CheckForNull + public AbstractWarningsParser getParser() { return parser; } diff --git a/src/main/java/hudson/plugins/warnings/parser/ParserRegistry.java b/src/main/java/hudson/plugins/warnings/parser/ParserRegistry.java index 333688dee..6dbd4bb3f 100644 --- a/src/main/java/hudson/plugins/warnings/parser/ParserRegistry.java +++ b/src/main/java/hudson/plugins/warnings/parser/ParserRegistry.java @@ -224,9 +224,8 @@ private static Iterable getDynamicParserDescriptions() { static List getDynamicParsers(final Iterable parserDescriptions) { List parsers = Lists.newArrayList(); for (GroovyParser description : parserDescriptions) { - AbstractWarningsParser parser = description.getParser(); - if (parser != null) { - parsers.add(parser); + if (description.isValid()) { + parsers.add(description.getParser()); } } return parsers;