IDEADEV-39951
[fedora-idea.git] / source / com / intellij / slicer / DuplicateMap.java
blob8beda653bf1d0a117abcd5d9dc5c60cff06da727
1 package com.intellij.slicer;
3 import gnu.trove.THashMap;
4 import gnu.trove.TObjectHashingStrategy;
6 import java.util.Map;
8 /**
9 * @author cdr
10 */ // rehash map on each PSI modification since SmartPsiPointer's hashCode() and equals() are changed
11 class DuplicateMap {
12 private final Map<SliceUsage, SliceNode> myDuplicates = new THashMap<SliceUsage, SliceNode>(USAGEINFO_EQUALITY);
13 private static final TObjectHashingStrategy<SliceUsage> USAGEINFO_EQUALITY = new TObjectHashingStrategy<SliceUsage>() {
14 public int computeHashCode(SliceUsage object) {
15 return object.getUsageInfo().hashCode();
18 public boolean equals(SliceUsage o1, SliceUsage o2) {
19 return o1.getUsageInfo().equals(o2.getUsageInfo());
22 private static final TObjectHashingStrategy<SliceNode> SLICE_NODE_EQUALITY = new TObjectHashingStrategy<SliceNode>() {
23 public int computeHashCode(SliceNode object) {
24 return object.getValue().getUsageInfo().hashCode();
27 public boolean equals(SliceNode o1, SliceNode o2) {
28 return o1.getValue().getUsageInfo().equals(o2.getValue().getUsageInfo());
32 public SliceNode putNodeCheckDupe(SliceNode node) {
33 SliceUsage usage = node.getValue();
34 SliceNode eq = myDuplicates.get(usage);
35 if (eq == null) {
36 myDuplicates.put(usage, node);
38 return eq;
41 public void clear() {
42 myDuplicates.clear();