]>
Commit | Line | Data |
---|---|---|
36a99b48 EK |
1 | package no.uio.ifi.refaktor.benchmark; |
2 | ||
46cc235b EK |
3 | import java.util.LinkedList; |
4 | import java.util.List; | |
5 | ||
4f577e24 | 6 | import no.uio.ifi.refaktor.analyze.ExtractAndMoveMethodAnalysisResult; |
36a99b48 EK |
7 | import no.uio.ifi.refaktor.analyze.FavorNoUnfixesAnalysisResultComparator; |
8 | import no.uio.ifi.refaktor.analyze.NoTargetFoundException; | |
9 | import no.uio.ifi.refaktor.analyze.SearchBasedExtractAndMoveMethodAnalyzer; | |
99928b93 | 10 | import no.uio.ifi.refaktor.utils.CompilationUnitCacheManager; |
4f577e24 | 11 | import no.uio.ifi.refaktor.utils.RefaktorDebug; |
36a99b48 EK |
12 | import no.uio.ifi.refaktor.utils.RefaktorHandleUtils; |
13 | ||
14 | import org.eclipse.core.resources.IProject; | |
15 | import org.eclipse.jdt.core.ICompilationUnit; | |
16 | import org.eclipse.jdt.core.IJavaProject; | |
17 | import org.eclipse.jdt.core.IMethod; | |
18 | import org.eclipse.jdt.core.IPackageFragment; | |
19 | import org.eclipse.jdt.core.IType; | |
20 | import org.eclipse.jdt.core.JavaModelException; | |
21 | ||
22 | public 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 | } |