summaryrefslogtreecommitdiff
path: root/platform/duplicates-analysis/src/com/intellij/dupLocator/DuplicatesProfileCache.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/duplicates-analysis/src/com/intellij/dupLocator/DuplicatesProfileCache.java')
-rw-r--r--platform/duplicates-analysis/src/com/intellij/dupLocator/DuplicatesProfileCache.java76
1 files changed, 76 insertions, 0 deletions
diff --git a/platform/duplicates-analysis/src/com/intellij/dupLocator/DuplicatesProfileCache.java b/platform/duplicates-analysis/src/com/intellij/dupLocator/DuplicatesProfileCache.java
new file mode 100644
index 000000000000..db9ff875e9bf
--- /dev/null
+++ b/platform/duplicates-analysis/src/com/intellij/dupLocator/DuplicatesProfileCache.java
@@ -0,0 +1,76 @@
+package com.intellij.dupLocator;
+
+import com.intellij.dupLocator.treeHash.FragmentsCollector;
+import com.intellij.lang.Language;
+import com.intellij.openapi.extensions.Extensions;
+import gnu.trove.TIntObjectHashMap;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: Eugene.Kudelevsky
+ * Date: May 18, 2009
+ * Time: 7:39:35 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public class DuplicatesProfileCache {
+ private static final Map<DupInfo, TIntObjectHashMap<DuplicatesProfile>> ourProfileCache = new HashMap<DupInfo, TIntObjectHashMap<DuplicatesProfile>>();
+
+ private DuplicatesProfileCache() {
+ }
+
+ public static void clear(@NotNull DupInfo info) {
+ ourProfileCache.remove(info);
+ }
+
+ @Nullable
+ public static DuplicatesProfile getProfile(@NotNull DupInfo dupInfo, int index) {
+ TIntObjectHashMap<DuplicatesProfile> patternCache = ourProfileCache.get(dupInfo);
+ if (patternCache == null) {
+ patternCache = new TIntObjectHashMap<DuplicatesProfile>();
+ ourProfileCache.put(dupInfo, patternCache);
+ }
+ DuplicatesProfile result = patternCache.get(index);
+ if (result == null) {
+ DuplicatesProfile[] profiles = Extensions.getExtensions(DuplicatesProfile.EP_NAME);
+ DuplicatesProfile theProfile = null;
+ for (DuplicatesProfile profile : profiles) {
+ if (profile.isMyDuplicate(dupInfo, index)) {
+ theProfile = profile;
+ break;
+ }
+ }
+ result = theProfile == null ? NULL_PROFILE : theProfile;
+ patternCache.put(index, result);
+ }
+ return result == NULL_PROFILE ? null : result;
+ }
+
+ private static final DuplicatesProfile NULL_PROFILE = new DuplicatesProfile() {
+ @NotNull
+ @Override
+ public DuplocateVisitor createVisitor(@NotNull FragmentsCollector collector) {
+ return null;
+ }
+
+ @Override
+ public boolean isMyLanguage(@NotNull Language language) {
+ return false;
+ }
+
+ @NotNull
+ @Override
+ public DuplocatorState getDuplocatorState(@NotNull Language language) {
+ return null;
+ }
+
+ @Override
+ public boolean isMyDuplicate(@NotNull DupInfo info, int index) {
+ return false;
+ }
+ };
+}