3333import java .util .Set ;
3434import java .util .TreeSet ;
3535import java .util .concurrent .ConcurrentHashMap ;
36+ import java .util .concurrent .ConcurrentMap ;
3637import java .util .concurrent .atomic .AtomicBoolean ;
3738import java .util .stream .Collectors ;
3839import 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 <>();
0 commit comments