Skip to content

Commit 002b177

Browse files
committed
Use ConcurrentReferenceHashMap
1 parent badaafa commit 002b177

10 files changed

Lines changed: 1684 additions & 298 deletions

File tree

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
# 1.1.1
2+
* Improve performance by using `ConcurrentReferenceHashMap` instead of `synchronized`
3+
14
# 1.1.0
25
* Update PMD to 7.24.0
36
* Dropped support for IntelliJ IDEA < 261 to fix deprecations

src/main/java/net/sourceforge/pmd/cache/internal/ZipFileFingerprinter.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import java.nio.ByteBuffer;
1313
import java.nio.file.NoSuchFileException;
1414
import java.util.ArrayList;
15-
import java.util.Collections;
1615
import java.util.Comparator;
1716
import java.util.Enumeration;
1817
import java.util.List;
@@ -25,7 +24,7 @@
2524
import org.slf4j.Logger;
2625
import org.slf4j.LoggerFactory;
2726

28-
import software.xdev.pmd.external.org.apache.shiro.lang.util.SoftHashMap;
27+
import software.xdev.pmd.external.org.springframework.util.ConcurrentReferenceHashMap;
2928

3029

3130
/**
@@ -37,9 +36,7 @@
3736
public class ZipFileFingerprinter implements ClasspathEntryFingerprinter
3837
{
3938
// IMPROVED
40-
private static final Map<String, UrlCachedPayload> FILE_CRC_CHECKSUMS_CACHE =
41-
Collections.synchronizedMap(new SoftHashMap<>());
42-
39+
private static final Map<String, UrlCachedPayload> FILE_CRC_CHECKSUMS_CACHE = new ConcurrentReferenceHashMap<>();
4340

4441
record UrlCachedPayload(
4542
long length,

src/main/java/net/sourceforge/pmd/lang/rule/xpath/internal/SaxonXPathRuleQuery.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,12 @@
55
package net.sourceforge.pmd.lang.rule.xpath.internal;
66

77
import java.util.ArrayList;
8-
import java.util.Collections;
98
import java.util.HashMap;
109
import java.util.LinkedHashMap;
1110
import java.util.LinkedHashSet;
1211
import java.util.List;
1312
import java.util.Map;
1413
import java.util.Set;
15-
import java.util.WeakHashMap;
1614

1715
import org.apache.commons.lang3.exception.ContextedRuntimeException;
1816
import org.slf4j.Logger;
@@ -45,6 +43,7 @@
4543
import net.sourceforge.pmd.properties.PropertyDescriptor;
4644
import net.sourceforge.pmd.util.DataMap;
4745
import net.sourceforge.pmd.util.DataMap.SimpleDataKey;
46+
import software.xdev.pmd.external.org.springframework.util.ConcurrentReferenceHashMap;
4847

4948

5049
/**
@@ -57,8 +56,8 @@ public class SaxonXPathRuleQuery
5756
{
5857
// IMPROVED
5958
// Different XPathHandlers have different extensions (e.g. pmd-java) that are registered with configuration
60-
private static Map<XPathHandler, CachedInitData> cachedInitData = Collections.synchronizedMap(new WeakHashMap<>());
61-
59+
private static Map<XPathHandler, CachedInitData> cachedInitData = new ConcurrentReferenceHashMap<>(
60+
ConcurrentReferenceHashMap.ReferenceType.WEAK);
6261

6362
record CachedInitData(
6463
Configuration configuration,

src/main/java/software/xdev/pmd/analysis/PMDAnalyzer.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,13 @@
66
import java.nio.file.Files;
77
import java.nio.file.Path;
88
import java.util.Collection;
9-
import java.util.Collections;
10-
import java.util.HashMap;
119
import java.util.List;
1210
import java.util.Map;
1311
import java.util.Objects;
1412
import java.util.Optional;
1513
import java.util.Set;
1614
import java.util.concurrent.CompletableFuture;
15+
import java.util.concurrent.ConcurrentHashMap;
1716
import java.util.concurrent.ExecutorService;
1817
import java.util.concurrent.Executors;
1918
import java.util.concurrent.atomic.AtomicInteger;
@@ -46,7 +45,7 @@
4645
import net.sourceforge.pmd.reporting.Report;
4746
import software.xdev.pmd.config.PluginConfiguration;
4847
import software.xdev.pmd.config.PluginConfigurationManager;
49-
import software.xdev.pmd.external.org.apache.shiro.lang.util.SoftHashMap;
48+
import software.xdev.pmd.external.org.springframework.util.ConcurrentReferenceHashMap;
5049
import software.xdev.pmd.langversion.ManagedLanguageVersionResolver;
5150
import software.xdev.pmd.model.config.ConfigurationLocation;
5251

@@ -61,11 +60,11 @@ public class PMDAnalyzer implements Disposable
6160

6261
private final Project project;
6362

64-
private final Map<Optional<Module>, ReentrantLock> locks = Collections.synchronizedMap(new HashMap<>());
65-
private final Map<Optional<Module>, CacheFile> cacheFiles = Collections.synchronizedMap(new HashMap<>());
63+
private final Map<Optional<Module>, ReentrantLock> locks = new ConcurrentHashMap<>();
64+
private final Map<Optional<Module>, CacheFile> cacheFiles = new ConcurrentHashMap<>();
6665
// Reuse classloader when path is the same
6766
private final Map<Set<String>, ClassLoader> cachedSdkLibAuxClassLoader =
68-
Collections.synchronizedMap(new SoftHashMap<>());
67+
new ConcurrentReferenceHashMap<>();
6968

7069
public PMDAnalyzer(final Project project)
7170
{

src/main/java/software/xdev/pmd/currentfile/CurrentFileAnalysisManager.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

33
import java.util.ArrayList;
44
import java.util.Collections;
5-
import java.util.HashMap;
65
import java.util.LinkedHashMap;
76
import java.util.List;
87
import java.util.Map;
98
import java.util.Optional;
9+
import java.util.concurrent.ConcurrentHashMap;
1010
import java.util.concurrent.atomic.AtomicReference;
1111

1212
import org.jetbrains.annotations.NotNull;
@@ -40,7 +40,7 @@ public class CurrentFileAnalysisManager implements FileEditorManagerListener, Di
4040
@NotNull
4141
private final AtomicReference<PsiFile> currentlySelectedFile = new AtomicReference<>();
4242
private final Map<PsiFile, Map<ExternalAnnotator<?, ?>, PMDAnalysisResult>> fileAnalysisResults =
43-
Collections.synchronizedMap(new HashMap<>());
43+
new ConcurrentHashMap<>();
4444

4545
public CurrentFileAnalysisManager(@NotNull final Project project)
4646
{

0 commit comments

Comments
 (0)