Skip to content

Commit 319d8a5

Browse files
committed
refactor: use more functional approach for provisioning
1 parent 62eea61 commit 319d8a5

1 file changed

Lines changed: 61 additions & 49 deletions

File tree

provisioner/src/main/java/com/diffplug/spotless/cli/provisioner/SpotlessCliMavenProvisioner.java

Lines changed: 61 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import java.util.LinkedHashSet;
2222
import java.util.List;
2323
import java.util.Set;
24+
import java.util.stream.Collectors;
2425

2526
import org.eclipse.aether.RepositorySystem;
2627
import org.eclipse.aether.RepositorySystemSession;
@@ -39,6 +40,7 @@
3940
import org.eclipse.aether.util.filter.DependencyFilterUtils;
4041

4142
import com.diffplug.spotless.Provisioner;
43+
import com.diffplug.spotless.ThrowingEx;
4244

4345
public class SpotlessCliMavenProvisioner implements Provisioner {
4446

@@ -78,60 +80,70 @@ private RepositorySystemSession newSession(RepositorySystem system) {
7880
.get()
7981
.withLocalRepositoryBaseDirectories(localMavenRepo)
8082
.build();
81-
// DefaultRepositorySystemSession session = MavenRepositorySystemUtils.newSession();
82-
// LocalRepository localRepo = new LocalRepository(localMavenRepo.toFile());
83-
// session.setLocalRepositoryManager(system.newLocalRepositoryManager(session, localRepo));
84-
// return session;
8583
}
8684

8785
@Override
8886
public Set<File> provisionWithTransitives(boolean withTransitives, Collection<String> mavenCoordinates) {
89-
RepositorySystem repositorySystem = newRepositorySystem();
90-
RepositorySystemSession repositorySystemSession = newSession(repositorySystem);
91-
92-
// Let the resolver apply mirrors / proxies / repo managers etc. (like Maven)
93-
List<RemoteRepository> resolutionRepos =
94-
repositorySystem.newResolutionRepositories(repositorySystemSession, remoteRepositories);
95-
96-
Set<File> jarFiles = new LinkedHashSet<>();
97-
98-
for (String coord : mavenCoordinates) {
99-
Artifact artifact = new DefaultArtifact(coord);
100-
101-
try {
102-
if (withTransitives) {
103-
// Resolve full dependency graph
104-
CollectRequest collectRequest = new CollectRequest();
105-
collectRequest.setRoot(new Dependency(artifact, JavaScopes.RUNTIME));
106-
collectRequest.setRepositories(resolutionRepos);
107-
108-
DependencyRequest dependencyRequest = new DependencyRequest(
109-
collectRequest, DependencyFilterUtils.classpathFilter(JavaScopes.RUNTIME));
110-
111-
DependencyResult result =
112-
repositorySystem.resolveDependencies(repositorySystemSession, dependencyRequest);
113-
114-
System.out.println(result.getRoot());
115-
result.getArtifactResults().forEach(r -> {
116-
File f = r.getArtifact().getFile();
117-
if (f != null) jarFiles.add(f);
118-
});
119-
120-
} else {
121-
// Resolve just the main artifact
122-
ArtifactRequest request = new ArtifactRequest();
123-
request.setArtifact(artifact);
124-
remoteRepositories.forEach(request::addRepository);
125-
126-
ArtifactResult result = repositorySystem.resolveArtifact(repositorySystemSession, request);
127-
jarFiles.add(result.getArtifact().getFile());
128-
}
129-
130-
} catch (Exception e) {
131-
throw new RuntimeException("Failed to resolve: " + coord, e);
132-
}
133-
}
87+
88+
final ArtifactResolverFunc artifactResolverFunc =
89+
withTransitives ? new DependencyGraphResolverFunc() : new SingleArtifactResolverFunc();
90+
91+
Set<File> jarFiles = mavenCoordinates.stream()
92+
.map(DefaultArtifact::new)
93+
.flatMap(ThrowingEx.wrap(artifact -> artifactResolverFunc.apply(artifact).stream()))
94+
.map(ArtifactResult::getArtifact)
95+
.map(Artifact::getPath)
96+
.map(Path::toFile)
97+
.collect(Collectors.toCollection(LinkedHashSet::new));
13498

13599
return jarFiles;
136100
}
101+
102+
private interface ArtifactResolverFunc {
103+
List<ArtifactResult> apply(Artifact artifact) throws Exception;
104+
}
105+
106+
private abstract class BaseArtifactResolverFunc implements ArtifactResolverFunc {
107+
protected final RepositorySystem repositorySystem;
108+
protected final RepositorySystemSession repositorySystemSession;
109+
protected final List<RemoteRepository> resolutionRepos;
110+
111+
protected BaseArtifactResolverFunc() {
112+
this.repositorySystem = newRepositorySystem();
113+
this.repositorySystemSession = newSession(repositorySystem);
114+
this.resolutionRepos =
115+
repositorySystem.newResolutionRepositories(repositorySystemSession, remoteRepositories);
116+
}
117+
}
118+
119+
private class DependencyGraphResolverFunc extends BaseArtifactResolverFunc {
120+
121+
@Override
122+
public List<ArtifactResult> apply(Artifact artifact) throws Exception {
123+
124+
CollectRequest collectRequest = new CollectRequest();
125+
collectRequest.setRoot(new Dependency(artifact, JavaScopes.RUNTIME));
126+
collectRequest.setRepositories(remoteRepositories);
127+
128+
DependencyRequest dependencyRequest =
129+
new DependencyRequest(collectRequest, DependencyFilterUtils.classpathFilter(JavaScopes.RUNTIME));
130+
131+
DependencyResult result = repositorySystem.resolveDependencies(repositorySystemSession, dependencyRequest);
132+
133+
return result.getArtifactResults();
134+
}
135+
}
136+
137+
private class SingleArtifactResolverFunc extends BaseArtifactResolverFunc {
138+
139+
@Override
140+
public List<ArtifactResult> apply(Artifact artifact) throws Exception {
141+
ArtifactRequest request = new ArtifactRequest();
142+
request.setArtifact(artifact);
143+
remoteRepositories.forEach(request::addRepository);
144+
145+
ArtifactResult result = repositorySystem.resolveArtifact(repositorySystemSession, request);
146+
return List.of(result);
147+
}
148+
}
137149
}

0 commit comments

Comments
 (0)