Polished code
Project: http://git-wip-us.apache.org/repos/asf/maven-aether/repo Commit: http://git-wip-us.apache.org/repos/asf/maven-aether/commit/ed23cf80 Tree: http://git-wip-us.apache.org/repos/asf/maven-aether/tree/ed23cf80 Diff: http://git-wip-us.apache.org/repos/asf/maven-aether/diff/ed23cf80 Branch: refs/heads/master Commit: ed23cf809cb2afb3f3e04863ff0d8050250b7126 Parents: 6ef4a91 Author: Benjamin Bentmann <bentm...@sonatype.com> Authored: Sat Nov 1 17:02:39 2014 +0100 Committer: Benjamin Bentmann <bentm...@sonatype.com> Committed: Sat Nov 1 17:02:39 2014 +0100 ---------------------------------------------------------------------- .../impl/DefaultRemoteRepositoryManager.java | 50 ++++++++++++++------ 1 file changed, 36 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/maven-aether/blob/ed23cf80/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRemoteRepositoryManager.java ---------------------------------------------------------------------- diff --git a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRemoteRepositoryManager.java b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRemoteRepositoryManager.java index fa560a9..8a54d62 100644 --- a/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRemoteRepositoryManager.java +++ b/aether-impl/src/main/java/org/eclipse/aether/internal/impl/DefaultRemoteRepositoryManager.java @@ -11,10 +11,9 @@ package org.eclipse.aether.internal.impl; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.ListIterator; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; import javax.inject.Inject; import javax.inject.Named; @@ -45,8 +44,38 @@ public class DefaultRemoteRepositoryManager implements RemoteRepositoryManager, Service { - private static final String CACHE_KEY_LOGGED_MIRRORS = DefaultRemoteRepositoryManager.class.getName() - + "$LoggedMirrors"; + private static final class LoggedMirror + { + + private final Object[] keys; + + public LoggedMirror( RemoteRepository original, RemoteRepository mirror ) + { + keys = new Object[] { mirror.getId(), mirror.getUrl(), original.getId(), original.getUrl() }; + } + + @Override + public boolean equals( Object obj ) + { + if ( this == obj ) + { + return true; + } + else if ( !( obj instanceof LoggedMirror ) ) + { + return false; + } + LoggedMirror that = (LoggedMirror) obj; + return Arrays.equals( keys, that.keys ); + } + + @Override + public int hashCode() + { + return Arrays.hashCode( keys ); + } + + } private Logger logger = NullLoggerFactory.LOGGER; @@ -193,19 +222,12 @@ public class DefaultRemoteRepositoryManager RepositoryCache cache = session.getCache(); if ( cache != null ) { - Object logged = cache.get( session, CACHE_KEY_LOGGED_MIRRORS ); - if ( !( logged instanceof ConcurrentMap ) ) - { - logged = new ConcurrentHashMap<Object, Object>(); - cache.put( session, CACHE_KEY_LOGGED_MIRRORS, logged ); - } - @SuppressWarnings( "unchecked" ) - ConcurrentMap<Object, Object> map = (ConcurrentMap<Object, Object>) logged; - String key = mirror.getId() + '\t' + mirror.getUrl() + '\t' + original.getId() + '\t' + original.getUrl(); - if ( map.put( key, Boolean.TRUE ) != null ) + Object key = new LoggedMirror( original, mirror ); + if ( cache.get( session, key ) != null ) { return; } + cache.put( session, key, Boolean.TRUE ); } logger.debug( "Using mirror " + mirror.getId() + " (" + mirror.getUrl() + ") for " + original.getId() + " (" + original.getUrl() + ")." );