1 package Analysis.OwnershipAnalysis;
3 public class ReferenceEdgeProperties {
5 protected boolean isUnique;
6 protected boolean isInitialParamReflexive;
8 protected ReachabilitySet beta;
9 protected ReachabilitySet betaNew;
11 protected OwnershipNode src;
12 protected HeapRegionNode dst;
14 public ReferenceEdgeProperties() {
15 this( false, false, null );
18 public ReferenceEdgeProperties( boolean isUnique ) {
19 this( isUnique, false, null );
22 public ReferenceEdgeProperties( boolean isUnique,
23 boolean isInitialParamReflexive ) {
24 this( isUnique, isInitialParamReflexive, null );
27 public ReferenceEdgeProperties( boolean isUnique,
28 boolean isInitialParamReflexive,
29 ReachabilitySet beta) {
30 this.isUnique = isUnique;
31 this.isInitialParamReflexive = isInitialParamReflexive;
33 // these members are set by higher-level code
34 // when this ReferenceEdgeProperties object is
42 this.beta = new ReachabilitySet();
43 this.beta = this.beta.makeCanonical();
46 betaNew = new ReachabilitySet();
47 betaNew = betaNew.makeCanonical();
51 public OwnershipNode getSrc() {
55 public void setSrc( OwnershipNode on ) {
60 public HeapRegionNode getDst() {
64 public void setDst( HeapRegionNode hrn ) {
70 // copying does not copy source and destination members!
71 public ReferenceEdgeProperties copy() {
72 return new ReferenceEdgeProperties( isUnique,
73 isInitialParamReflexive,
79 public boolean isUnique() {
82 public void setIsUnique( boolean isUnique ) {
83 this.isUnique = isUnique;
88 public boolean isInitialParamReflexive() {
89 return isInitialParamReflexive;
91 public void setIsInitialParamReflexive( boolean isInitialParamReflexive ) {
92 this.isInitialParamReflexive = isInitialParamReflexive;
97 public ReachabilitySet getBeta() {
101 public void setBeta( ReachabilitySet beta ) {
106 public ReachabilitySet getBetaNew() {
110 public void setBetaNew( ReachabilitySet beta ) {
115 public void applyBetaNew() {
116 assert betaNew != null;
120 betaNew = new ReachabilitySet();
121 betaNew = betaNew.makeCanonical();
125 public boolean equals( ReferenceEdgeProperties rep ) {
128 return isUnique == rep.isUnique() &&
129 isInitialParamReflexive == rep.isInitialParamReflexive();
132 public String getBetaString() {
133 return beta.toStringEscapeNewline();
136 public String toEdgeLabelString() {
137 String edgeLabel = "";
139 if( rep.isUnique() ) {
143 if( isInitialParamReflexive ) {
144 edgeLabel += "Rflx\\n";
146 edgeLabel += getBetaString();