]> git.uio.no Git - ifi-stolz-refaktor.git/blob - software/no.uio.ifi.refaktor/src/no/uio/ifi/refaktor/utils/CompilationUnitCacheManager.java
Making the ExtractAndMoveMethodAnalysisResult lightweight enough for it
[ifi-stolz-refaktor.git] / software / no.uio.ifi.refaktor / src / no / uio / ifi / refaktor / utils / CompilationUnitCacheManager.java
1 package no.uio.ifi.refaktor.utils;
2
3 import org.eclipse.jdt.core.ICompilationUnit;
4 import org.eclipse.jdt.core.dom.ASTParser;
5 import org.eclipse.jdt.core.dom.CompilationUnit;
6
7 public enum CompilationUnitCacheManager {
8         INSTANCE;
9
10         private CompilationUnitCache cache = new CompilationUnitNullCache();
11
12         public static CompilationUnit getParsedCompilationUnitFor(ICompilationUnit unit) {
13                 return INSTANCE.getCompilationUnitFor(unit);
14         }
15
16         private CompilationUnit getCompilationUnitFor(ICompilationUnit unit) {
17                 if (cache.contains(unit))
18                         return cache.get(unit);
19
20                 return parse(unit);
21         }
22
23         private CompilationUnit parse(ICompilationUnit unit) {
24                 ASTParser parser = ParseUtils.createParser();
25                 parser.setSource(unit);
26                 CompilationUnit concreteCompilationUnit = (CompilationUnit) parser.createAST(null);
27                 cache.add(unit, concreteCompilationUnit);
28                 return concreteCompilationUnit;
29         }
30
31         public static void activateHashCaching() {
32                 INSTANCE.cache = new CompilationUnitHashCache();
33         }
34         
35         public static void activateRecentlyUsedCaching() {
36                 INSTANCE.cache = new CompilationUnitRecentlyUsedCache();
37         }
38
39         public static void deactivateCaching() {
40                 INSTANCE.cache = new CompilationUnitNullCache();
41         }
42 }