Skip to content
This repository has been archived by the owner on Apr 6, 2022. It is now read-only.

Commit

Permalink
Browse files Browse the repository at this point in the history
[FIXED JENKINS-16526] Excessive work done in rendering.
Fixed by caching GroovyParser → AbstractWarningsParser.
  • Loading branch information
jglick committed Jan 29, 2013
1 parent 6a770de commit 33eae66
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 12 deletions.
25 changes: 23 additions & 2 deletions src/main/java/hudson/plugins/warnings/GroovyParser.java
Expand Up @@ -5,14 +5,17 @@
import hudson.Extension;
import hudson.model.AbstractDescribableImpl;
import hudson.model.Descriptor;
import hudson.plugins.warnings.parser.AbstractWarningsParser;
import hudson.plugins.warnings.parser.DynamicDocumentParser;
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;
import org.codehaus.groovy.control.CompilationFailedException;
Expand All @@ -35,6 +38,7 @@ public class GroovyParser extends AbstractDescribableImpl<GroovyParser> {
private String linkName;
/** Trend report name. @since 4.0 */
private String trendName;
private transient @CheckForNull AbstractWarningsParser parser;

/**
* Creates a new instance of {@link GroovyParser}.
Expand Down Expand Up @@ -63,6 +67,7 @@ public GroovyParser(final String name, final String regexp, final String script,
this.example = example;
this.linkName = linkName;
this.trendName = trendName;
parser = createParser();
}

/**
Expand Down Expand Up @@ -91,7 +96,7 @@ private Object readResolve() {
if (trendName == null) {
trendName = Messages._Warnings_Trend_Name().toString(Locale.ENGLISH);
}

parser = createParser();
return this;
}

Expand Down Expand Up @@ -177,6 +182,22 @@ private static boolean containsNewline(final String expression) {
return StringUtils.contains(expression, "\\n");
}

private @CheckForNull AbstractWarningsParser createParser() {
if (isValid()) {
if (hasMultiLineSupport()) {
return new DynamicDocumentParser(name, regexp, script, linkName, trendName);
} else {
return new DynamicParser(name, regexp, script, linkName, trendName);
}
} else {
return null;
}
}

public @CheckForNull AbstractWarningsParser getParser() {
return parser;
}

/**
* Descriptor to validate {@link GroovyParser}.
*
Expand Down
12 changes: 2 additions & 10 deletions src/main/java/hudson/plugins/warnings/parser/ParserRegistry.java
Expand Up @@ -224,16 +224,8 @@ private static Iterable<GroovyParser> getDynamicParserDescriptions() {
static List<AbstractWarningsParser> getDynamicParsers(final Iterable<GroovyParser> parserDescriptions) {
List<AbstractWarningsParser> parsers = Lists.newArrayList();
for (GroovyParser description : parserDescriptions) {
if (description.isValid()) {
AbstractWarningsParser parser;
if (description.hasMultiLineSupport()) {
parser = new DynamicDocumentParser(description.getName(), description.getRegexp(), description.getScript(),
description.getLinkName(), description.getTrendName());
}
else {
parser = new DynamicParser(description.getName(), description.getRegexp(), description.getScript(),
description.getLinkName(), description.getTrendName());
}
AbstractWarningsParser parser = description.getParser();
if (parser != null) {
parsers.add(parser);
}
}
Expand Down

0 comments on commit 33eae66

Please sign in to comment.