KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > sourceforge > pmd > dfa > Structure


1 /*
2  * Created on 11.07.2004
3  */

4 package net.sourceforge.pmd.dfa;
5
6 import net.sourceforge.pmd.ast.SimpleNode;
7
8 import java.util.LinkedList JavaDoc;
9 import java.util.List JavaDoc;
10 import java.util.Stack JavaDoc;
11
12
13 /**
14  * @author raik
15  * <p/>
16  * Structure contains only raw data. A set of nodes wich represent a data flow
17  * and 2 stacks to link the nodes to each other.
18  */

19 public class Structure {
20
21     private LinkedList JavaDoc dataFlow = new LinkedList JavaDoc();
22     private Stack JavaDoc braceStack = new Stack JavaDoc();
23     private Stack JavaDoc continueBreakReturnStack = new Stack JavaDoc();
24
25     /**
26      * This class encapsulates the access to the DataFlowNode class. Is this worthwhile?
27      * TODO I think it's too confusing to have the DataFlowNode constructor
28      * add the created instance to the LinkedList. I think it'd be clearer if we did
29      * that more "procedurally", i.e., create the object, then add it to the list.
30      */

31     public IDataFlowNode createNewNode(SimpleNode node) {
32         return new DataFlowNode(node, this.dataFlow);
33     }
34
35     public IDataFlowNode createStartNode(int line) {
36         return new StartOrEndDataFlowNode(this.dataFlow, line, true);
37     }
38
39     public IDataFlowNode createEndNode(int line) {
40         return new StartOrEndDataFlowNode(this.dataFlow, line, false);
41     }
42
43     public IDataFlowNode getLast() {
44         return (IDataFlowNode) this.dataFlow.getLast();
45     }
46
47     public IDataFlowNode getFirst() {
48         return (IDataFlowNode) this.dataFlow.getFirst();
49     }
50
51 // ----------------------------------------------------------------------------
52
// STACK FUNCTIONS
53

54     /**
55      * The braceStack contains all nodes which are important to link the data
56      * flow nodes. The cbrStack contains continue, break, and return nodes.
57      * There are 2 Stacks because the have to process differently.
58      */

59     protected void pushOnStack(int type, IDataFlowNode node) {
60         StackObject obj = new StackObject(type, node);
61         if (type == NodeType.RETURN_STATEMENT || type == NodeType.BREAK_STATEMENT || type == NodeType.CONTINUE_STATEMENT) {
62             // ugly solution - stores the type information in two ways
63
continueBreakReturnStack.push(obj);
64         } else {
65             braceStack.push(obj);
66         }
67         ((DataFlowNode) node).setType(type);
68     }
69
70     public List JavaDoc getBraceStack() {
71         return braceStack;
72     }
73
74     public List JavaDoc getContinueBreakReturnStack() {
75         return continueBreakReturnStack;
76     }
77
78 }
79
Popular Tags