1 package Analysis.Disjoint;
7 public class HeapRegionNode extends RefSrcNode {
11 protected boolean isSingleObject;
12 protected boolean isFlagged;
13 protected boolean isNewSummary;
15 protected HashSet<RefEdge> referencers;
17 protected TypeDescriptor type;
19 protected AllocSite allocSite;
21 protected ReachSet alpha;
22 protected ReachSet alphaNew;
24 protected String description;
27 public HeapRegionNode( Integer id,
28 boolean isSingleObject,
37 this.isSingleObject = isSingleObject;
38 this.isFlagged = isFlagged;
39 this.isNewSummary = isNewSummary;
41 this.allocSite = allocSite;
43 this.description = description;
45 referencers = new HashSet<RefEdge>();
46 alphaNew = new ReachSet().makeCanonical();
49 public HeapRegionNode copy() {
50 return new HeapRegionNode( id,
61 public Integer getID() {
66 public boolean equalsIncludingAlpha( HeapRegionNode hrn ) {
67 return equals( hrn ) && alpha.equals( hrn.alpha );
71 public boolean equals( Object o ) {
76 if( !(o instanceof HeapRegionNode) ) {
80 HeapRegionNode hrn = (HeapRegionNode) o;
82 if( !id.equals( hrn.getID() ) ) {
86 assert isSingleObject == hrn.isSingleObject();
87 assert isFlagged == hrn.isFlagged();
88 assert isNewSummary == hrn.isNewSummary();
89 assert description.equals( hrn.getDescription() );
94 public int hashCode() {
95 return id.intValue()*17;
99 public boolean isSingleObject() {
100 return isSingleObject;
103 public boolean isFlagged() {
107 public boolean isNewSummary() {
112 public Iterator<RefEdge> iteratorToReferencers() {
113 return referencers.iterator();
116 public Iterator<RefEdge> iteratorToReferencersClone() {
117 HashSet<RefEdge> clone = (HashSet<RefEdge>)referencers.clone();
118 return clone.iterator();
121 public int getNumReferencers() {
122 return referencers.size();
125 public void addReferencer( RefEdge edge ) {
128 referencers.add( edge );
131 public void removeReferencer( RefEdge edge ) {
133 assert referencers.contains( edge );
135 referencers.remove( edge );
138 public RefEdge getReferenceFrom( RefSrcNode rsn,
144 Iterator<RefEdge> itrEdge = referencers.iterator();
145 while( itrEdge.hasNext() ) {
146 RefEdge edge = itrEdge.next();
148 if( edge.getSrc().equals( rsn ) &&
149 edge.typeEquals( type ) &&
150 edge.fieldEquals( field )
160 public TypeDescriptor getType() {
164 public AllocSite getAllocSite() {
168 public ReachSet getAlpha() {
172 public void setAlpha( ReachSet alpha ) {
176 public ReachSet getAlphaNew() {
180 public void setAlphaNew( ReachSet alpha ) {
181 this.alphaNew = alpha;
184 public void applyAlphaNew() {
185 assert alphaNew != null;
187 alphaNew = new ReachSet().makeCanonical();
191 public String getIDString() {
195 s = "minus" + new Integer(-id).toString();
203 public String getAlphaString( boolean hideSubsetReachability ) {
204 return alpha.toStringEscapeNewline( hideSubsetReachability );
207 public String toString() {
208 return "HRN"+getIDString();
211 public String getDescription() {
212 //return new String(description);