Skip to content

Commit

Permalink
TestProvisioner now memoizes its calculations, saves about ~1s per ca…
Browse files Browse the repository at this point in the history
…ll once a result has been memoized.
  • Loading branch information
nedtwigg committed Dec 13, 2016
1 parent fb5fee4 commit 24e93f6
Showing 1 changed file with 25 additions and 2 deletions.
27 changes: 25 additions & 2 deletions testlib/src/main/java/com/diffplug/spotless/TestProvisioner.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,10 @@
package com.diffplug.spotless;

import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Consumer;
import java.util.function.Supplier;

import org.gradle.api.Project;
import org.gradle.api.artifacts.Configuration;
Expand All @@ -25,6 +28,8 @@
import org.gradle.testfixtures.ProjectBuilder;

import com.diffplug.common.base.StandardSystemProperty;
import com.diffplug.common.base.Suppliers;
import com.diffplug.common.collect.ImmutableSet;

public class TestProvisioner {
/**
Expand Down Expand Up @@ -54,13 +59,31 @@ private static Provisioner createWithRepositories(Consumer<RepositoryHandler> re
};
}

/** Creates a Provisioner which will cache the result of previous calls. */
private static Provisioner caching(Provisioner input) {
Map<ImmutableSet<String>, ImmutableSet<File>> cached = new HashMap<>();
return mavenCoords -> {
return cached.computeIfAbsent(ImmutableSet.copyOf(mavenCoords), coords -> {
return ImmutableSet.copyOf(input.provisionWithDependencies(coords));
});
};
}

/** Creates a Provisioner for the jcenter repo. */
public static Provisioner jcenter() {
return createWithRepositories(repo -> repo.jcenter());
return jcenter.get();
}

private static final Supplier<Provisioner> jcenter = Suppliers.memoize(() -> {
return caching(createWithRepositories(repo -> repo.jcenter()));
});

/** Creates a Provisioner for the mavenCentral repo. */
public static Provisioner mavenCentral() {
return createWithRepositories(repo -> repo.mavenCentral());
return mavenCentral.get();
}

private static final Supplier<Provisioner> mavenCentral = Suppliers.memoize(() -> {
return caching(createWithRepositories(repo -> repo.mavenCentral()));
});
}

0 comments on commit 24e93f6

Please sign in to comment.