]> git.uio.no Git - ifi-stolz-refaktor.git/blob - software/no.uio.ifi.refaktor/src/no/uio/ifi/refaktor/utils/CompilationUnitRecentlyUsedCache.java
CompilationUnitTextSelection: can now find local declaring types
[ifi-stolz-refaktor.git] / software / no.uio.ifi.refaktor / src / no / uio / ifi / refaktor / utils / CompilationUnitRecentlyUsedCache.java
1 package no.uio.ifi.refaktor.utils;
2
3 import org.eclipse.jdt.core.ICompilationUnit;
4 import org.eclipse.jdt.core.dom.CompilationUnit;
5
6 public class CompilationUnitRecentlyUsedCache implements CompilationUnitCache {
7
8         private ICompilationUnit unit;
9         private Long modificationStamp;
10         private CompilationUnit concreteCompilationUnit;
11
12         @Override
13         public boolean contains(ICompilationUnit unit) {
14                 if (!hasMatchingCompilationUnit(unit))
15                         return false;
16
17                 if (CacheCompilationUnitUtils.hasMatchingModificationStamp(unit, modificationStamp)) {
18                         return true;
19                 }
20
21                 cleanCache();
22                 return false;
23         }
24
25         @Override
26         public CompilationUnit get(ICompilationUnit unit) {
27                 return hasMatchingCompilationUnit(unit) ? concreteCompilationUnit : null;
28         }
29
30         private boolean hasMatchingCompilationUnit(ICompilationUnit unit) {
31                 return this.unit != null && this.unit.equals(unit);
32         }
33
34         private void cleanCache() {
35                 unit = null;
36                 modificationStamp = null;
37                 concreteCompilationUnit = null;
38         }
39
40         @Override
41         public void add(ICompilationUnit unit, CompilationUnit concreteCompilationUnit) {
42                 this.unit = unit;
43                 this.concreteCompilationUnit = concreteCompilationUnit;
44                 modificationStamp = CacheCompilationUnitUtils.getModificationStampOf(unit);
45         }
46
47 }