1 package no.uio.ifi.refaktor.utils;
3 import java.lang.ref.SoftReference;
4 import java.util.HashMap;
7 import org.eclipse.jdt.core.ICompilationUnit;
8 import org.eclipse.jdt.core.dom.CompilationUnit;
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;
16 public boolean contains(ICompilationUnit unit) {
17 SoftReference<CompilationUnit> softRef = cache.get(unit);
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)
29 return modificationStampMatches;
35 private void cleanCache(ICompilationUnit unit) {
37 modificationStamps.remove(unit);
41 public CompilationUnit get(ICompilationUnit unit) {
43 SoftReference<CompilationUnit> cachedRef = cache.get(unit);
44 CompilationUnit cachedCU = cachedRef.get();
45 assert cachedCU != null;
48 tmpStrongCURef = null;
53 public void add(ICompilationUnit unit, CompilationUnit concreteCompilationUnit) {
54 cache.put(unit, new SoftReference<CompilationUnit>(concreteCompilationUnit));
55 modificationStamps.put(unit, CacheCompilationUnitUtils.getModificationStampOf(unit));