blob: db9ff875e9bf8f89d2779f66c1588e75042c2535 [file] [log] [blame]
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;
}
};
}