diff options
Diffstat (limited to 'platform/duplicates-analysis/src/com/intellij/dupLocator/DuplicatesProfileCache.java')
-rw-r--r-- | platform/duplicates-analysis/src/com/intellij/dupLocator/DuplicatesProfileCache.java | 76 |
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; + } + }; +} |