]> git.uio.no Git - ifi-stolz-refaktor.git/blame - software/no.uio.ifi.refaktor.benchmark/src/no/uio/ifi/refaktor/benchmark/ProjectWideSearchBasedExtractAndMoveMethodAnalyzer.java
Making the ExtractAndMoveMethodAnalysisResult lightweight enough for it
[ifi-stolz-refaktor.git] / software / no.uio.ifi.refaktor.benchmark / src / no / uio / ifi / refaktor / benchmark / ProjectWideSearchBasedExtractAndMoveMethodAnalyzer.java
CommitLineData
36a99b48
EK
1package no.uio.ifi.refaktor.benchmark;
2
46cc235b
EK
3import java.util.LinkedList;
4import java.util.List;
5
4f577e24 6import no.uio.ifi.refaktor.analyze.ExtractAndMoveMethodAnalysisResult;
36a99b48
EK
7import no.uio.ifi.refaktor.analyze.FavorNoUnfixesAnalysisResultComparator;
8import no.uio.ifi.refaktor.analyze.NoTargetFoundException;
9import no.uio.ifi.refaktor.analyze.SearchBasedExtractAndMoveMethodAnalyzer;
99928b93 10import no.uio.ifi.refaktor.utils.CompilationUnitCacheManager;
4f577e24 11import no.uio.ifi.refaktor.utils.RefaktorDebug;
36a99b48
EK
12import no.uio.ifi.refaktor.utils.RefaktorHandleUtils;
13
14import org.eclipse.core.resources.IProject;
15import org.eclipse.jdt.core.ICompilationUnit;
16import org.eclipse.jdt.core.IJavaProject;
17import org.eclipse.jdt.core.IMethod;
18import org.eclipse.jdt.core.IPackageFragment;
19import org.eclipse.jdt.core.IType;
20import org.eclipse.jdt.core.JavaModelException;
21
22public class ProjectWideSearchBasedExtractAndMoveMethodAnalyzer {
23
24 private final IProject project;
46cc235b 25 private final List<ExtractAndMoveMethodAnalysisResult> results;
36a99b48 26 private int methodCount;
4ce48189 27 private long analysisStart;
36a99b48
EK
28
29 public ProjectWideSearchBasedExtractAndMoveMethodAnalyzer(IProject project) {
30 this.project = project;
46cc235b 31 results = new LinkedList<ExtractAndMoveMethodAnalysisResult>();
36a99b48
EK
32 methodCount = 0;
33 }
34
35 public void analyze() {
99928b93 36 try {
4d4fb6d7 37 CompilationUnitCacheManager.activateRecentlyUsedCaching();
99928b93
EK
38 analyzeProject();
39 } finally {
40 CompilationUnitCacheManager.deactivateCaching();
41 }
36a99b48
EK
42 }
43
44 private void analyzeProject() {
45 IJavaProject javaProject = RefaktorHandleUtils.createJavaProjectFrom(project);
4ce48189 46 analysisStart = System.currentTimeMillis();
36a99b48
EK
47 try {
48 for (IPackageFragment packageFragment: javaProject.getPackageFragments())
49 analyzeMethodsInPackage(packageFragment);
50 } catch (JavaModelException e) {
51 throw new RuntimeException(e);
49c93a6c 52 } finally {
46cc235b 53 debugPrintFinalStatistics();
36a99b48
EK
54 }
55 }
56
46cc235b
EK
57 private void debugPrintFinalStatistics() {
58 for (ExtractAndMoveMethodAnalysisResult result: results)
59 RefaktorDebug.println(result);
60
61 RefaktorDebug.println("Number of results: " + results.size());
62 RefaktorDebug.println("Time used on analysis: " + timeSinceAnalysisStart());
63 RefaktorDebug.println(methodCount + " methods analyzed");
64 }
65
36a99b48
EK
66 private void analyzeMethodsInPackage(IPackageFragment packageFragment) throws JavaModelException {
67 for (ICompilationUnit compilationUnit: packageFragment.getCompilationUnits())
68 analyzeMethodsInCompilationUnit(compilationUnit);
69 }
70
71 private void analyzeMethodsInCompilationUnit(ICompilationUnit compilationUnit) throws JavaModelException {
72 for (IType type: compilationUnit.getAllTypes())
73 analyzeMethodsInType(type);
74 }
75
76 private void analyzeMethodsInType(IType type) throws JavaModelException {
77 for (IMethod method: type.getMethods()) {
78 analyze(method);
79 }
80 }
81
82 private void analyze(IMethod method) {
4d4fb6d7 83 SearchBasedExtractAndMoveMethodAnalyzer analyzer = null;
36a99b48 84 try {
4d4fb6d7
EK
85 methodCount++;
86 try {
4f577e24 87 RefaktorDebug.println("#" + methodCount + " (" + timeSinceAnalysisStart() + "): " + method.getDeclaringType().getElementName() + "." + method.getElementName() + " (" + "offset: "
4d4fb6d7
EK
88 + method.getSourceRange().getOffset() + ", length: " + method.getSourceRange().getLength() + ")");
89 } catch (JavaModelException e) {
4f577e24 90 RefaktorDebug.println("No info about " + method.getElementName());
4d4fb6d7
EK
91 }
92 analyzer = new SearchBasedExtractAndMoveMethodAnalyzer(method, new FavorNoUnfixesAnalysisResultComparator());
93 analyzer.analyze();
46cc235b 94 results.add(analyzer.getResult());
36a99b48 95 } catch (NoTargetFoundException e) {
46cc235b 96// RefaktorDebug.println("No target found for " + method + "\n(" + analyzer.getNumberOfStatementsAnalyzed() + " statements analyzed)");
36a99b48
EK
97 }
98 }
99
4d4fb6d7
EK
100 private String timeSinceAnalysisStart() {
101 long secondsSinceAnalysisStart = secondsSinceAnalysisStart();
102 return secondsSinceAnalysisStart/60 + "m" + secondsSinceAnalysisStart % 60 + "s";
36a99b48
EK
103 }
104
4ce48189
EK
105 private long secondsSinceAnalysisStart() {
106 return (System.currentTimeMillis() - analysisStart)/1000;
107 }
36a99b48 108}