]> git.uio.no Git - ifi-stolz-refaktor.git/blob - case-study/refaktor-after/src/no/uio/ifi/refaktor/analyze/CollectorManager.java
Case Study: adding data and statistics
[ifi-stolz-refaktor.git] / case-study / refaktor-after / src / no / uio / ifi / refaktor / analyze / CollectorManager.java
1 package no.uio.ifi.refaktor.analyze;
2
3 import no.uio.ifi.refaktor.analyze.collectors.PropertyCollector;
4 import no.uio.ifi.refaktor.textselection.CompilationUnitTextSelection;
5
6 import org.eclipse.jdt.core.dom.ASTNode;
7 import org.eclipse.jdt.core.dom.MethodDeclaration;
8 import org.eclipse.jdt.internal.corext.dom.ASTNodes;
9
10 @SuppressWarnings("restriction")
11 public class CollectorManager {
12         
13         private final PropertyCollector[] collectors;
14         private final ASTNode startNode;
15         
16         private CollectorManager(ASTNode startNode, PropertyCollector ... collectors) {
17                 this.startNode = startNode;
18                 this.collectors = collectors;
19         }
20
21         public static void collectProperties(CompilationUnitTextSelection selection, PropertyCollector ... collectors) {
22                 new CollectorManager(selection.getCoveringNode(), collectors).collectProperties();
23         }
24
25         public static void collectPropertiesFromEnclosingMethod(CompilationUnitTextSelection selection, PropertyCollector ... collectors) {
26                 ASTNode startNode = ASTNodes.getParent(selection.getCoveredNode(), MethodDeclaration.class);
27                 assert startNode instanceof MethodDeclaration;
28                 new CollectorManager(startNode, collectors).collectProperties();
29         }
30
31         private void collectProperties() {
32                 clearCollectorsData();
33                 runCollectors();
34         }
35
36         private void clearCollectorsData() {
37                 for (PropertyCollector collector: collectors)
38                         collector.clearData();
39         }
40
41         private void runCollectors() {
42                 for (PropertyCollector collector: collectors)
43                         startNode.accept(collector);
44         }
45 }