1 package Analysis.TaskStateAnalysis;
8 public class GarbageAnalysis extends Namer {
10 TaskAnalysis taskanalysis;
11 HashSet garbagestates;
12 HashSet possiblegarbagestates;
15 public GarbageAnalysis(State state, TaskAnalysis taskanalysis) {
17 this.taskanalysis=taskanalysis;
18 this.garbagestates=new HashSet();
19 this.possiblegarbagestates=new HashSet();
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)
32 public void analyzeClass(ClassDescriptor cd) {
33 Set flagstatenodes=taskanalysis.getFlagStates(cd);
34 HashSet garbage=new HashSet();
35 HashSet possiblegarbage=new HashSet();
37 for(Iterator fsit=flagstatenodes.iterator(); fsit.hasNext(); ) {
38 FlagState fs=(FlagState)fsit.next();
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);
57 garbagestates.addAll(garbage);
58 possiblegarbagestates.addAll(possiblegarbage);
61 public String nodeLabel(GraphNode gn) {
65 public String nodeOption(GraphNode gn) {
66 if (garbagestates.contains(gn)) {
68 } else if (possiblegarbagestates.contains(gn)) {
74 public String edgeLabel(Edge e) {
78 public String edgeOption(Edge e) {