Skip to content

Commit

Permalink
Adapt the plugin to be compatable with future versions of Guava (#196)
Browse files Browse the repository at this point in the history
* Adapt the plugin to be compatable with future versions of Guava

mostly by replacing all guava occurences with non guava as it is not
needed at all.
However the Multimap usage remains as there is no corresponding
equivallent and this API is not going to change between guava 11 and
guava 31.

* optimize lists created by CollectionUtils

* address feedback from @olamy
  • Loading branch information
jtnord authored Jun 8, 2021
1 parent ca943ac commit 76a55a0
Show file tree
Hide file tree
Showing 16 changed files with 105 additions and 94 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package hudson.plugins.parameterizedtrigger;

import com.google.common.collect.Lists;
import hudson.Extension;
import hudson.FilePath;
import hudson.model.AbstractBuild;
Expand All @@ -15,6 +14,7 @@
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;

Expand Down Expand Up @@ -53,7 +53,7 @@ public NoFilesFoundEnum getNoFilesFoundAction() {

@Override
public List<AbstractBuildParameters> getParameters(AbstractBuild<?, ?> build, TaskListener listener) throws IOException, InterruptedException, AbstractBuildParameters.DontTriggerException {
List<AbstractBuildParameters> result = Lists.newArrayList();
List<AbstractBuildParameters> result = new ArrayList<>();
FilePath workspace = build.getWorkspace();
if (workspace == null) {
throw new IOException("Failed to get workspace");
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package hudson.plugins.parameterizedtrigger;

import com.google.common.collect.ImmutableList;
import hudson.Extension;
import hudson.Launcher;
import hudson.model.AbstractBuild;
Expand All @@ -18,6 +17,7 @@
import hudson.model.queue.QueueTaskFuture;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
Expand Down Expand Up @@ -72,8 +72,9 @@ protected QueueTaskFuture schedule(AbstractBuild<?, ?> build, Job project, List<
while (true) {
// add DifferentiatingAction to make sure this doesn't get merged with something else,
// which is most likely unintended. Might make sense to do it at BuildTriggerConfig for all.
list = ImmutableList.<Action>builder().addAll(list).add(new DifferentiatingAction()).build();
list = CollectionUtils.immutableList(list, new DifferentiatingAction());


// if we fail to add the item to the queue, wait and retry.
// it also means we have to force quiet period = 0, or else it'll never leave the queue
QueueTaskFuture f = schedule(build, project, 0, list, listener);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package hudson.plugins.parameterizedtrigger;

import com.google.common.collect.ImmutableList;
import hudson.EnvVars;
import hudson.Extension;
import hudson.Launcher;
Expand All @@ -27,6 +26,7 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
Expand Down Expand Up @@ -62,7 +62,7 @@ public BuildStepMonitor getRequiredMonitorService() {

@Override
public Collection<? extends Action> getProjectActions(AbstractProject<?, ?> project) {
return ImmutableList.of(new DynamicProjectAction(configs));
return Collections.singletonList(new DynamicProjectAction(configs));
}

@Override @SuppressWarnings("deprecation")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package hudson.plugins.parameterizedtrigger;

import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ListMultimap;
import hudson.EnvVars;
import hudson.Extension;
Expand Down Expand Up @@ -394,8 +393,10 @@ public List<QueueTaskFuture<AbstractBuild>> perform(AbstractBuild<?, ?> build, L
List<QueueTaskFuture<AbstractBuild>> futures = new ArrayList<>();

for (List<AbstractBuildParameters> addConfigs : getDynamicBuildParameters(build, listener)) {
List<Action> actions = getBaseActions(
ImmutableList.<AbstractBuildParameters>builder().addAll(configs).addAll(addConfigs).build(),
List<AbstractBuildParameters> buildParams = new ArrayList<>(configs);
buildParams.addAll(addConfigs);
buildParams = Collections.unmodifiableList(buildParams);
List<Action> actions = getBaseActions(buildParams,
build, listener);
for (Job project : getJobs(build.getRootBuild().getProject().getParent(), env)) {
List<Action> list = getBuildActions(actions, project);
Expand Down Expand Up @@ -459,7 +460,7 @@ public ListMultimap<Job, QueueTaskFuture<AbstractBuild>> perform3(AbstractBuild<
ListMultimap<Job, QueueTaskFuture<AbstractBuild>> futures = ArrayListMultimap.create();

for (List<AbstractBuildParameters> addConfigs : getDynamicBuildParameters(build, listener)) {
List<Action> actions = getBaseActions(ImmutableList.<AbstractBuildParameters>builder().addAll(configs).addAll(addConfigs).build(), build, listener);
List<Action> actions = getBaseActions(CollectionUtils.immutableList(configs, addConfigs), build, listener);
for (Job project : getJobs(build.getRootBuild().getProject().getParent(), env)) {
List<Action> list = getBuildActions(actions, project);

Expand All @@ -486,7 +487,7 @@ public ListMultimap<Job, QueueTaskFuture<AbstractBuild>> perform3(AbstractBuild<
*/
private List<List<AbstractBuildParameters>> getDynamicBuildParameters(AbstractBuild<?,?> build, BuildListener listener) throws DontTriggerException, IOException, InterruptedException {
if (configFactories == null || configFactories.isEmpty()) {
return ImmutableList.of(ImmutableList.of());
return Collections.singletonList(Collections.emptyList());
} else {
// this code is building the combinations of all AbstractBuildParameters reported from all factories
List<List<AbstractBuildParameters>> dynamicBuildParameters = new ArrayList();
Expand All @@ -498,11 +499,7 @@ private List<List<AbstractBuildParameters>> getDynamicBuildParameters(AbstractBu
if(factoryParameters.size() > 0) {
for (AbstractBuildParameters config : factoryParameters) {
for (List<AbstractBuildParameters> dynamicBuildParameter : dynamicBuildParameters) {
newDynParameters.add(
ImmutableList.<AbstractBuildParameters>builder()
.addAll(dynamicBuildParameter)
.add(config)
.build());
newDynParameters.add(CollectionUtils.immutableList(dynamicBuildParameter, config));
}
}
dynamicBuildParameters = newDynParameters;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package hudson.plugins.parameterizedtrigger;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import org.kohsuke.accmod.Restricted;
import org.kohsuke.accmod.restrictions.NoExternalUse;

/**
* Internal helpers that should be replaced by Java11 equivalents when the JDK baseline moves on.
*
*/
@Restricted(NoExternalUse.class)
final class CollectionUtils {

static <T> List<T> immutableList(Collection<T> collection1, Collection<T> collection2) {
List<T> list = new ArrayList<>(collection1.size() + collection2.size());
list.addAll(collection1);
list.addAll(collection2);
return Collections.unmodifiableList(list);
}

static <T> List<T> immutableList(Collection<T> collection, @SuppressWarnings("unchecked") T... ts) {
return immutableList(collection, Arrays.asList(ts));
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package hudson.plugins.parameterizedtrigger;

import com.google.common.collect.ImmutableMap;
import hudson.EnvVars;
import hudson.Extension;
import hudson.Util;
Expand All @@ -14,6 +13,7 @@

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
Expand Down Expand Up @@ -107,7 +107,7 @@ public List<AbstractBuildParameters> getParameters(AbstractBuild<?, ?> build, Ta
}

private PredefinedBuildParameters getParameterForCount(Long i) {
String stringWithCount = Util.replaceMacro(paramExpr, ImmutableMap.of("COUNT", i.toString()));
String stringWithCount = Util.replaceMacro(paramExpr, Collections.singletonMap("COUNT", i.toString()));
return new PredefinedBuildParameters(stringWithCount);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
package hudson.plugins.parameterizedtrigger;

import com.google.common.base.Predicate;
import com.google.common.collect.Collections2;

import hudson.EnvVars;
import hudson.Extension;
import hudson.FilePath;
Expand All @@ -26,8 +23,6 @@
import org.kohsuke.stapler.DataBoundConstructor;
import org.kohsuke.stapler.QueryParameter;

import javax.annotation.Nullable;

import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.charset.IllegalCharsetNameException;
Expand All @@ -38,7 +33,8 @@
import java.util.List;
import java.util.Map;
import java.util.Properties;

import java.util.stream.Collectors;
import java.util.stream.Stream;
import jenkins.util.VirtualFile;

public class FileBuildParameters extends AbstractBuildParameters {
Expand Down Expand Up @@ -165,26 +161,23 @@ private List<ParameterValue> extractAllValues(AbstractBuild<?,?> build, TaskList

private Collection<? extends AbstractBuild<?, ?>> getTargetBuilds(AbstractBuild<?, ?> build) {
if ((build instanceof MatrixBuild) && isUseMatrixChild()) {
return Collections2.filter(
isOnlyExactRuns()?((MatrixBuild)build).getExactRuns():((MatrixBuild)build).getRuns(),
new Predicate<MatrixRun>() {
public boolean apply(@Nullable MatrixRun run) {
if (run == null) {
return false;
}
if (StringUtils.isBlank(getCombinationFilter())) {
// no combination filter stands for all children.
return true;
}
Combination c = run.getParent().getCombination();
AxisList axes = run.getParent().getParent().getAxes();

return c.evalGroovyExpression(axes, getCombinationFilter());
}
Stream<MatrixRun> buildsStream = isOnlyExactRuns() ? ((MatrixBuild) build).getExactRuns().stream() : ((MatrixBuild) build).getRuns().stream();
return buildsStream.filter(run -> {
if (run == null) {
return false;
}
);
if (StringUtils.isBlank(getCombinationFilter())) {
// no combination filter stands for all children.
return true;
}
Combination c = run.getParent().getCombination();
AxisList axes = run.getParent().getParent().getAxes();

return c.evalGroovyExpression(axes, getCombinationFilter());
}).collect(Collectors.toList());

} else {
return Arrays.<AbstractBuild<?,?>>asList(build);
return Arrays.<AbstractBuild<?, ?>>asList(build);
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
package hudson.plugins.parameterizedtrigger;

import com.google.common.collect.ImmutableList;
import hudson.model.AbstractProject;
import hudson.model.Action;

import java.util.Collections;
import java.util.List;
/**
* Action added Projects to track what projects are
Expand Down Expand Up @@ -47,7 +46,7 @@ public List<SubProjectsAction> getSubProjectActions() {
if (isFirst()) {
return project.getActions(SubProjectsAction.class);
}
return ImmutableList.of();
return Collections.emptyList();
}

public AbstractProject<?,?> getProject() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@

package hudson.plugins.parameterizedtrigger;

import com.google.common.collect.ImmutableList;
import com.google.common.collect.ListMultimap;
import hudson.*;
import hudson.console.HyperlinkNote;
Expand Down Expand Up @@ -199,7 +198,7 @@ public String getProjectListAsString(List<Job> projectList){

@Override
public Collection<? extends Action> getProjectActions(AbstractProject<?, ?> project) {
return ImmutableList.of(new SubProjectsAction(project, configs));
return Collections.singletonList(new SubProjectsAction(project, configs));
}

private boolean canDeclare(AbstractProject owner) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,6 @@
*/
package hudson.plugins.parameterizedtrigger.test;

import com.google.common.collect.ImmutableList;
import com.google.common.collect.Sets;
import hudson.EnvVars;
import hudson.model.AbstractBuild;
import hudson.model.Cause.UserIdCause;
Expand All @@ -33,7 +31,6 @@
import hudson.model.Project;
import hudson.model.Result;
import hudson.model.Run;
import hudson.plugins.parameterizedtrigger.AbstractBuildParameterFactory;
import hudson.plugins.parameterizedtrigger.AbstractBuildParameters;
import hudson.plugins.parameterizedtrigger.BlockableBuildTriggerConfig;
import hudson.plugins.parameterizedtrigger.BlockingBehaviour;
Expand All @@ -48,6 +45,8 @@
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import static org.hamcrest.MatcherAssert.*;
import static org.hamcrest.Matchers.*;
import static org.hamcrest.collection.IsMapContaining.hasEntry;
Expand All @@ -57,6 +56,7 @@

import org.junit.Rule;
import org.junit.Test;
import org.jvnet.hudson.test.BuildWatcher;
import org.jvnet.hudson.test.CaptureEnvironmentBuilder;
import org.jvnet.hudson.test.recipes.LocalData;
import org.jvnet.hudson.test.JenkinsRule;
Expand All @@ -65,6 +65,8 @@ public class BuildInfoExporterTest {

@Rule
public JenkinsRule r = new JenkinsRule();

@Rule public BuildWatcher buildWatcher = new BuildWatcher();

@Test
public void test() throws Exception {
Expand Down Expand Up @@ -175,7 +177,7 @@ public void test_multipletriggers() throws Exception {
new TriggerBuilder(
new BlockableBuildTriggerConfig(testNameResult + "," + testNameResult2,
new BlockingBehaviour(Result.FAILURE, Result.UNSTABLE, Result.FAILURE),
ImmutableList.of(new CounterBuildParameterFactory("0", Integer.toString(buildsToTest - 1), "1", "TEST=COUNT$COUNT")),
Collections.singletonList(new CounterBuildParameterFactory("0", Integer.toString(buildsToTest - 1), "1", "TEST=COUNT$COUNT")),
Collections.emptyList())));

CaptureEnvironmentBuilder builder = new CaptureEnvironmentBuilder();
Expand Down Expand Up @@ -353,14 +355,12 @@ public void testMigrateFrom221() throws Exception
// downstream1#2
// downstream2#1

assertEquals(
Sets.newHashSet(
r.jenkins.getItemByFullName("downstream1", FreeStyleProject.class).getBuildByNumber(1),
Set<Run<?,?>> expected = new HashSet<>();
expected.addAll(Arrays.asList(r.jenkins.getItemByFullName("downstream1", FreeStyleProject.class).getBuildByNumber(1),
r.jenkins.getItemByFullName("downstream1", FreeStyleProject.class).getBuildByNumber(2),
r.jenkins.getItemByFullName("downstream2", FreeStyleProject.class).getBuildByNumber(1)
),
new HashSet<AbstractBuild<?,?>>(action.getTriggeredBuilds())
);
r.jenkins.getItemByFullName("downstream2", FreeStyleProject.class).getBuildByNumber(1)));

assertEquals(expected, new HashSet<>(action.getTriggeredBuilds()));

EnvVars env = new EnvVars();
action.buildEnvVars(b, env);
Expand All @@ -383,13 +383,12 @@ public void testMigrateFrom221() throws Exception
// downstream1#2
// downstream2#1

assertEquals(
Sets.newHashSet(
r.jenkins.getItemByFullName("downstream1", FreeStyleProject.class).getBuildByNumber(1),
Set<Run<?,?>> expected = new HashSet<>();
expected.addAll(Arrays.asList(r.jenkins.getItemByFullName("downstream1", FreeStyleProject.class).getBuildByNumber(1),
r.jenkins.getItemByFullName("downstream1", FreeStyleProject.class).getBuildByNumber(2),
r.jenkins.getItemByFullName("downstream2", FreeStyleProject.class).getBuildByNumber(1)
),
new HashSet<AbstractBuild<?,?>>(action.getTriggeredBuilds())
r.jenkins.getItemByFullName("downstream2", FreeStyleProject.class).getBuildByNumber(1)));

assertEquals(expected, new HashSet<>(action.getTriggeredBuilds())
);

EnvVars env = new EnvVars();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@
import org.jenkinsci.plugins.workflow.job.WorkflowRun;
import org.junit.Rule;
import org.junit.Test;
import org.jvnet.hudson.test.BuildWatcher;
import org.jvnet.hudson.test.CaptureEnvironmentBuilder;
import org.jvnet.hudson.test.Issue;
import org.jvnet.hudson.test.JenkinsRule;
Expand All @@ -80,6 +81,9 @@ public class BuildTriggerConfigTest {

@Rule
public JenkinsRule r = new JenkinsRule();

@Rule
public BuildWatcher buildWatcher = new BuildWatcher();

private BlockableBuildTriggerConfig createConfig(String projectToTrigger){
List<AbstractBuildParameters> buildParameters = new ArrayList<AbstractBuildParameters>();
Expand Down
Loading

0 comments on commit 76a55a0

Please sign in to comment.