]> git.uio.no Git - ifi-stolz-refaktor.git/blob - software/no.uio.ifi.refaktor/src/no/uio/ifi/refaktor/utils/CompilationUnitSoftReferencesCache.java
Software: deleting unused classes
[ifi-stolz-refaktor.git] / software / no.uio.ifi.refaktor / src / no / uio / ifi / refaktor / utils / CompilationUnitSoftReferencesCache.java
1 package no.uio.ifi.refaktor.utils;
2
3 import java.lang.ref.SoftReference;
4 import java.util.HashMap;
5 import java.util.Map;
6
7 import org.eclipse.jdt.core.ICompilationUnit;
8 import org.eclipse.jdt.core.dom.CompilationUnit;
9
10 public class CompilationUnitSoftReferencesCache implements CompilationUnitCache {
11         private final Map<ICompilationUnit, SoftReference<CompilationUnit>> cache = new HashMap<ICompilationUnit, SoftReference<CompilationUnit>>();
12         private final Map<ICompilationUnit, Long> modificationStamps = new HashMap<ICompilationUnit, Long>();
13         private CompilationUnit tmpStrongCURef;
14
15         @Override
16         public boolean contains(ICompilationUnit unit) {
17                 SoftReference<CompilationUnit> softRef = cache.get(unit);
18
19                 if (softRef == null)
20                         return false;
21
22                 tmpStrongCURef = softRef.get();
23                 if (tmpStrongCURef != null) {
24                         Long modificationStamp = modificationStamps.get(unit);
25                         assert modificationStamp != null;
26                         boolean modificationStampMatches = CacheCompilationUnitUtils.hasMatchingModificationStamp(unit, modificationStamp);
27                         if (!modificationStampMatches)
28                                 cleanCache(unit);
29                         return modificationStampMatches;
30                 }
31
32                 return false;
33         }
34
35         private void cleanCache(ICompilationUnit unit) {
36                 cache.remove(unit);
37                 modificationStamps.remove(unit);
38         }
39
40         @Override
41         public CompilationUnit get(ICompilationUnit unit) {
42                 try {
43                         SoftReference<CompilationUnit> cachedRef = cache.get(unit);
44                         CompilationUnit cachedCU = cachedRef.get();
45                         assert cachedCU != null;
46                         return cachedCU;
47                 } finally {
48                         tmpStrongCURef = null;
49                 }
50         }
51
52         @Override
53         public void add(ICompilationUnit unit, CompilationUnit concreteCompilationUnit) {
54                 cache.put(unit, new SoftReference<CompilationUnit>(concreteCompilationUnit));
55                 modificationStamps.put(unit, CacheCompilationUnitUtils.getModificationStampOf(unit));
56         }
57
58 }