From fe81325db3466627c77bd7fa11b1006e6bb8873b Mon Sep 17 00:00:00 2001 From: Dave Borowitz Date: Fri, 10 Oct 2014 10:41:04 -0700 Subject: [PATCH] SubmitRuleEvaluator: Check state in getSubmitRule() Change-Id: I849fe43db2619a2c503c24705f2479947b8ad058 --- .../server/project/SubmitRuleEvaluator.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/project/SubmitRuleEvaluator.java b/gerrit-server/src/main/java/com/google/gerrit/server/project/SubmitRuleEvaluator.java index abebbd3b51..3b901cb516 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/project/SubmitRuleEvaluator.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/project/SubmitRuleEvaluator.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.project; import static com.google.common.base.Preconditions.checkArgument; +import static com.google.common.base.Preconditions.checkState; import static java.nio.charset.StandardCharsets.UTF_8; import com.google.common.collect.Lists; @@ -125,19 +126,19 @@ public class SubmitRuleEvaluator { String filterRuleWrapperName) throws RuleEvalException { PrologEnvironment env = getPrologEnvironment(); try { - submitRule = env.once("gerrit", userRuleLocatorName, new VariableTerm()); + Term sr = env.once("gerrit", userRuleLocatorName, new VariableTerm()); if (fastEvalLabels) { env.once("gerrit", "assume_range_from_label"); } List results = new ArrayList<>(); try { - for (Term[] template : env.all("gerrit", userRuleWrapperName, - submitRule, new VariableTerm())) { + for (Term[] template : env.all("gerrit", userRuleWrapperName, sr, + new VariableTerm())) { results.add(template[1]); } } catch (RuntimeException err) { - throw new RuleEvalException("Exception calling " + submitRule + throw new RuleEvalException("Exception calling " + sr + " on change " + cd.getId() + " of " + getProjectName(), err); } @@ -147,16 +148,19 @@ public class SubmitRuleEvaluator { resultsTerm = runSubmitFilters( resultsTerm, env, filterRuleLocatorName, filterRuleWrapperName); } + List r; if (resultsTerm.isList()) { - List r = Lists.newArrayList(); + r = Lists.newArrayList(); for (Term t = resultsTerm; t.isList();) { ListTerm l = (ListTerm) t; r.add(l.car().dereference()); t = l.cdr().dereference(); } - return r; + } else { + r = Collections.emptyList(); } - return Collections.emptyList(); + submitRule = sr; + return r; } finally { env.close(); } @@ -241,6 +245,7 @@ public class SubmitRuleEvaluator { } public Term getSubmitRule() { + checkState(submitRule != null, "getSubmitRule() invalid before evaluation"); return submitRule; }