Skip to content

Commit d52ecee

Browse files
committed
Move everything into session
1 parent f7580ff commit d52ecee

File tree

2 files changed

+54
-32
lines changed

2 files changed

+54
-32
lines changed

maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/filter/GroupIdRemoteRepositoryFilterSource.java

Lines changed: 36 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import java.util.Set;
3434
import java.util.TreeSet;
3535
import java.util.concurrent.ConcurrentHashMap;
36+
import java.util.concurrent.ConcurrentMap;
3637
import java.util.concurrent.atomic.AtomicBoolean;
3738
import java.util.stream.Collectors;
3839
import java.util.stream.Stream;
@@ -154,23 +155,34 @@ public final class GroupIdRemoteRepositoryFilterSource extends RemoteRepositoryF
154155

155156
private final PathProcessor pathProcessor;
156157

157-
private final ConcurrentHashMap<RemoteRepository, GroupTree> rules;
158-
159-
private final ConcurrentHashMap<RemoteRepository, Path> ruleFiles;
160-
161-
private final ConcurrentHashMap<RemoteRepository, Set<String>> recordedRules;
162-
163-
private final AtomicBoolean onShutdownHandlerRegistered;
164-
165158
@Inject
166159
public GroupIdRemoteRepositoryFilterSource(
167160
RepositorySystemLifecycle repositorySystemLifecycle, PathProcessor pathProcessor) {
168161
this.repositorySystemLifecycle = requireNonNull(repositorySystemLifecycle);
169162
this.pathProcessor = requireNonNull(pathProcessor);
170-
this.rules = new ConcurrentHashMap<>();
171-
this.ruleFiles = new ConcurrentHashMap<>();
172-
this.recordedRules = new ConcurrentHashMap<>();
173-
this.onShutdownHandlerRegistered = new AtomicBoolean(false);
163+
}
164+
165+
@SuppressWarnings("unchecked")
166+
private ConcurrentMap<RemoteRepository, GroupTree> rules(RepositorySystemSession session) {
167+
return (ConcurrentMap<RemoteRepository, GroupTree>)
168+
session.getData().computeIfAbsent(getClass().getName() + ".rules", ConcurrentHashMap::new);
169+
}
170+
171+
@SuppressWarnings("unchecked")
172+
private ConcurrentMap<RemoteRepository, Path> ruleFiles(RepositorySystemSession session) {
173+
return (ConcurrentMap<RemoteRepository, Path>)
174+
session.getData().computeIfAbsent(getClass().getName() + ".ruleFiles", ConcurrentHashMap::new);
175+
}
176+
177+
@SuppressWarnings("unchecked")
178+
private ConcurrentMap<RemoteRepository, Set<String>> recordedRules(RepositorySystemSession session) {
179+
return (ConcurrentMap<RemoteRepository, Set<String>>)
180+
session.getData().computeIfAbsent(getClass().getName() + ".recordedRules", ConcurrentHashMap::new);
181+
}
182+
183+
private AtomicBoolean onShutdownHandlerRegistered(RepositorySystemSession session) {
184+
return (AtomicBoolean) session.getData()
185+
.computeIfAbsent(getClass().getName() + ".onShutdownHandlerRegistered", AtomicBoolean::new);
174186
}
175187

176188
@Override
@@ -206,8 +218,8 @@ public RemoteRepositoryFilter getRemoteRepositoryFilter(RepositorySystemSession
206218
@Override
207219
public void postProcess(RepositorySystemSession session, List<ArtifactResult> artifactResults) {
208220
if (isEnabled(session) && isRecord(session)) {
209-
if (onShutdownHandlerRegistered.compareAndSet(false, true)) {
210-
repositorySystemLifecycle.addOnSystemEndedHandler(this::saveRecordedLines);
221+
if (onShutdownHandlerRegistered(session).compareAndSet(false, true)) {
222+
repositorySystemLifecycle.addOnSystemEndedHandler(() -> saveRecordedLines(session));
211223
}
212224
for (ArtifactResult artifactResult : artifactResults) {
213225
if (artifactResult.isResolved() && artifactResult.getRepository() instanceof RemoteRepository) {
@@ -216,10 +228,11 @@ public void postProcess(RepositorySystemSession session, List<ArtifactResult> ar
216228
ruleFile(session, remoteRepository); // populate it; needed for save
217229
String line = "=" + artifactResult.getArtifact().getGroupId();
218230
RemoteRepository normalized = normalizeRemoteRepository(session, remoteRepository);
219-
recordedRules
231+
recordedRules(session)
220232
.computeIfAbsent(normalized, k -> new TreeSet<>())
221233
.add(line);
222-
rules.compute(normalized, (k, v) -> {
234+
rules(session)
235+
.compute(normalized, (k, v) -> {
223236
if (v == null || v == GroupTree.SENTINEL) {
224237
v = new GroupTree("");
225238
}
@@ -233,16 +246,17 @@ public void postProcess(RepositorySystemSession session, List<ArtifactResult> ar
233246
}
234247

235248
private Path ruleFile(RepositorySystemSession session, RemoteRepository remoteRepository) {
236-
return ruleFiles.computeIfAbsent(normalizeRemoteRepository(session, remoteRepository), r -> getBasedir(
249+
return ruleFiles(session).computeIfAbsent(normalizeRemoteRepository(session, remoteRepository), r -> getBasedir(
237250
session, LOCAL_REPO_PREFIX_DIR, CONFIG_PROP_BASEDIR, false)
238251
.resolve(GROUP_ID_FILE_PREFIX
239252
+ RepositoryIdHelper.cachedIdToPathSegment(session).apply(remoteRepository)
240253
+ GROUP_ID_FILE_SUFFIX));
241254
}
242255

243256
private GroupTree cacheRules(RepositorySystemSession session, RemoteRepository remoteRepository) {
244-
return rules.computeIfAbsent(
245-
normalizeRemoteRepository(session, remoteRepository), r -> loadRepositoryRules(session, r));
257+
return rules(session)
258+
.computeIfAbsent(
259+
normalizeRemoteRepository(session, remoteRepository), r -> loadRepositoryRules(session, r));
246260
}
247261

248262
private GroupTree loadRepositoryRules(RepositorySystemSession session, RemoteRepository remoteRepository) {
@@ -315,10 +329,10 @@ private boolean isRecord(RepositorySystemSession session) {
315329
/**
316330
* On-close handler that saves recorded rules, if any.
317331
*/
318-
private void saveRecordedLines() {
332+
private void saveRecordedLines(RepositorySystemSession session) {
319333
ArrayList<Exception> exceptions = new ArrayList<>();
320-
for (Map.Entry<RemoteRepository, Path> entry : ruleFiles.entrySet()) {
321-
Set<String> recorded = recordedRules.get(entry.getKey());
334+
for (Map.Entry<RemoteRepository, Path> entry : ruleFiles(session).entrySet()) {
335+
Set<String> recorded = recordedRules(session).get(entry.getKey());
322336
if (recorded != null && !recorded.isEmpty()) {
323337
try {
324338
ArrayList<String> result = new ArrayList<>();

maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/filter/PrefixesRemoteRepositoryFilterSource.java

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import java.nio.file.Path;
2727
import java.util.Collections;
2828
import java.util.concurrent.ConcurrentHashMap;
29+
import java.util.concurrent.ConcurrentMap;
2930
import java.util.function.Supplier;
3031

3132
import org.eclipse.aether.DefaultRepositorySystemSession;
@@ -191,10 +192,6 @@ public final class PrefixesRemoteRepositoryFilterSource extends RemoteRepository
191192

192193
private final RepositoryLayoutProvider repositoryLayoutProvider;
193194

194-
private final ConcurrentHashMap<RemoteRepository, PrefixTree> prefixes;
195-
196-
private final ConcurrentHashMap<RemoteRepository, RepositoryLayout> layouts;
197-
198195
@Inject
199196
public PrefixesRemoteRepositoryFilterSource(
200197
Supplier<MetadataResolver> metadataResolver,
@@ -203,8 +200,18 @@ public PrefixesRemoteRepositoryFilterSource(
203200
this.metadataResolver = requireNonNull(metadataResolver);
204201
this.remoteRepositoryManager = requireNonNull(remoteRepositoryManager);
205202
this.repositoryLayoutProvider = requireNonNull(repositoryLayoutProvider);
206-
this.prefixes = new ConcurrentHashMap<>();
207-
this.layouts = new ConcurrentHashMap<>();
203+
}
204+
205+
@SuppressWarnings("unchecked")
206+
private ConcurrentMap<RemoteRepository, PrefixTree> prefixes(RepositorySystemSession session) {
207+
return (ConcurrentMap<RemoteRepository, PrefixTree>)
208+
session.getData().computeIfAbsent(getClass().getName() + ".prefixes", ConcurrentHashMap::new);
209+
}
210+
211+
@SuppressWarnings("unchecked")
212+
private ConcurrentMap<RemoteRepository, RepositoryLayout> layouts(RepositorySystemSession session) {
213+
return (ConcurrentMap<RemoteRepository, RepositoryLayout>)
214+
session.getData().computeIfAbsent(getClass().getName() + ".layouts", ConcurrentHashMap::new);
208215
}
209216

210217
@Override
@@ -243,7 +250,7 @@ public RemoteRepositoryFilter getRemoteRepositoryFilter(RepositorySystemSession
243250
* @return the layout instance of {@code null} if layout not supported.
244251
*/
245252
private RepositoryLayout cacheLayout(RepositorySystemSession session, RemoteRepository remoteRepository) {
246-
return layouts.computeIfAbsent(normalizeRemoteRepository(session, remoteRepository), r -> {
253+
return layouts(session).computeIfAbsent(normalizeRemoteRepository(session, remoteRepository), r -> {
247254
try {
248255
return repositoryLayoutProvider.newRepositoryLayout(session, remoteRepository);
249256
} catch (NoRepositoryLayoutException e) {
@@ -254,9 +261,10 @@ private RepositoryLayout cacheLayout(RepositorySystemSession session, RemoteRepo
254261

255262
private PrefixTree cachePrefixTree(
256263
RepositorySystemSession session, Path basedir, RemoteRepository remoteRepository) {
257-
return prefixes.computeIfAbsent(
258-
normalizeRemoteRepository(session, remoteRepository),
259-
r -> loadPrefixTree(session, basedir, remoteRepository));
264+
return prefixes(session)
265+
.computeIfAbsent(
266+
normalizeRemoteRepository(session, remoteRepository),
267+
r -> loadPrefixTree(session, basedir, remoteRepository));
260268
}
261269

262270
private PrefixTree loadPrefixTree(

0 commit comments

Comments
 (0)