Fix tabbing.... Please fix your editors so they do tabbing correctly!!! (Spaces...
[IRC.git] / Robust / src / Analysis / TaskStateAnalysis / GarbageAnalysis.java
1 package Analysis.TaskStateAnalysis;
2 import IR.*;
3 import Util.Namer;
4 import java.util.*;
5 import Util.GraphNode;
6 import Util.Edge;
7
8 public class GarbageAnalysis extends Namer {
9   State state;
10   TaskAnalysis taskanalysis;
11   HashSet garbagestates;
12   HashSet possiblegarbagestates;
13
14
15   public GarbageAnalysis(State state, TaskAnalysis taskanalysis) {
16     this.state=state;
17     this.taskanalysis=taskanalysis;
18     this.garbagestates=new HashSet();
19     this.possiblegarbagestates=new HashSet();
20     doAnalysis();
21   }
22
23   public void doAnalysis() {
24     for(Iterator it=state.getClassSymbolTable().getDescriptorsIterator(); it.hasNext(); ) {
25       ClassDescriptor cd=(ClassDescriptor) it.next();
26       if (taskanalysis.getFlagStates(cd)==null)
27         continue;
28       analyzeClass(cd);
29     }
30   }
31
32   public void analyzeClass(ClassDescriptor cd) {
33     Set flagstatenodes=taskanalysis.getFlagStates(cd);
34     HashSet garbage=new HashSet();
35     HashSet possiblegarbage=new HashSet();
36
37     for(Iterator fsit=flagstatenodes.iterator(); fsit.hasNext(); ) {
38       FlagState fs=(FlagState)fsit.next();
39       if (fs.numedges()==0)
40         garbage.add(fs);
41     }
42
43     Stack tovisit=new Stack();
44     tovisit.addAll(garbage);
45     possiblegarbage.addAll(garbage);
46     while(!tovisit.isEmpty()) {
47       FlagState fs=(FlagState)tovisit.pop();
48       for(int i=0; i<fs.numinedges(); i++) {
49         Edge e=fs.getinedge(i);
50         FlagState fsnew=(FlagState) e.getSource();
51         if (!possiblegarbage.contains(fsnew)) {
52           possiblegarbage.add(fsnew);
53           tovisit.push(fsnew);
54         }
55       }
56     }
57     garbagestates.addAll(garbage);
58     possiblegarbagestates.addAll(possiblegarbage);
59   }
60
61   public String nodeLabel(GraphNode gn) {
62     return "";
63   }
64
65   public String nodeOption(GraphNode gn) {
66     if (garbagestates.contains(gn)) {
67       return "color=green";
68     } else if (possiblegarbagestates.contains(gn)) {
69       return "color=blue";
70     } else
71       return "color=red";
72   }
73
74   public String edgeLabel(Edge e) {
75     return "";
76   }
77
78   public String edgeOption(Edge e) {
79     return "";
80   }
81 }