From 65f60eb9011bb2c549a6d83ae31257480368ddc5 Mon Sep 17 00:00:00 2001 From: Tor Norbye Date: Wed, 16 Jul 2014 18:07:37 -0700 Subject: Snapshot idea/138.1029 from git://git.jetbrains.org/idea/community.git Update from idea/138.538 to idea/138.1029 Change-Id: I828f829a968439a99ec67640990c18ff7c9b58ce --- .../dupLocator/DuplicatesProfileCache.java | 76 ++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 platform/duplicates-analysis/src/com/intellij/dupLocator/DuplicatesProfileCache.java (limited to 'platform/duplicates-analysis/src/com/intellij/dupLocator/DuplicatesProfileCache.java') 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> ourProfileCache = new HashMap>(); + + private DuplicatesProfileCache() { + } + + public static void clear(@NotNull DupInfo info) { + ourProfileCache.remove(info); + } + + @Nullable + public static DuplicatesProfile getProfile(@NotNull DupInfo dupInfo, int index) { + TIntObjectHashMap patternCache = ourProfileCache.get(dupInfo); + if (patternCache == null) { + patternCache = new TIntObjectHashMap(); + 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; + } + }; +} -- cgit v1.2.3