diff --git a/java/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/BlockingMetadataBootstrappingGuard.java b/java/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/BlockingMetadataBootstrappingGuard.java index a3ff68248..d621e0cf5 100644 --- a/java/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/BlockingMetadataBootstrappingGuard.java +++ b/java/libphonenumber/src/com/google/i18n/phonenumbers/metadata/source/BlockingMetadataBootstrappingGuard.java @@ -21,8 +21,8 @@ import com.google.i18n.phonenumbers.Phonemetadata.PhoneMetadata; import com.google.i18n.phonenumbers.metadata.init.MetadataParser; import java.io.InputStream; import java.util.Collection; -import java.util.HashSet; -import java.util.Set; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; /** * A blocking implementation of {@link MetadataBootstrappingGuard}. Can be used for both single-file @@ -36,19 +36,19 @@ final class BlockingMetadataBootstrappingGuard private final MetadataLoader metadataLoader; private final MetadataParser metadataParser; private final T metadataContainer; - private final Set loadedFiles; + private final Map loadedFiles; // identity map BlockingMetadataBootstrappingGuard( MetadataLoader metadataLoader, MetadataParser metadataParser, T metadataContainer) { this.metadataLoader = metadataLoader; this.metadataParser = metadataParser; this.metadataContainer = metadataContainer; - this.loadedFiles = new HashSet<>(); + this.loadedFiles = new ConcurrentHashMap<>(); } @Override public T getOrBootstrap(String phoneMetadataFile) { - if (!loadedFiles.contains(phoneMetadataFile)) { + if (!loadedFiles.containsKey(phoneMetadataFile)) { bootstrapMetadata(phoneMetadataFile); } return metadataContainer; @@ -57,14 +57,14 @@ final class BlockingMetadataBootstrappingGuard private synchronized void bootstrapMetadata(String phoneMetadataFile) { // Additional check is needed because multiple threads could pass the first check when calling // getOrBootstrap() at the same time for unloaded metadata file - if (loadedFiles.contains(phoneMetadataFile)) { + if (loadedFiles.containsKey(phoneMetadataFile)) { return; } Collection phoneMetadata = read(phoneMetadataFile); for (PhoneMetadata metadata : phoneMetadata) { metadataContainer.accept(metadata); } - loadedFiles.add(phoneMetadataFile); + loadedFiles.put(phoneMetadataFile, phoneMetadataFile); } private Collection read(String phoneMetadataFile) {