fix bug when mapping callee edges into caller, gotta look at super classes for possib...
authorjjenista <jjenista>
Tue, 24 Mar 2009 02:30:07 +0000 (02:30 +0000)
committerjjenista <jjenista>
Tue, 24 Mar 2009 02:30:07 +0000 (02:30 +0000)
Robust/src/Analysis/OwnershipAnalysis/OwnershipAnalysis.java
Robust/src/Analysis/OwnershipAnalysis/OwnershipGraph.java

index a7a9010281db23aef86e876fae5c7441160793b8..3605309b4c366e50aabf8a015c364b910af04b9f 100644 (file)
@@ -1229,7 +1229,7 @@ public class OwnershipAnalysis {
   // insert a call to debugSnapshot() somewhere in the analysis 
   // to get successive captures of the analysis state
   boolean takeDebugSnapshots = false;
-  String mcDescSymbolDebug = "setFlightPlan";
+  String mcDescSymbolDebug = "StandardEngine";
   boolean stopAfterCapture = true;
 
   // increments every visit to debugSnapshot, don't fiddle with it
@@ -1246,7 +1246,7 @@ public class OwnershipAnalysis {
   int iterStartCapture = 0;
 
   // the number of snapshots to take
-  int numIterToCapture = 10;
+  int numIterToCapture = 100;
 
   void debugSnapshot(OwnershipGraph og, FlatNode fn) {
     if( debugCounter > iterStartCapture + numIterToCapture ) {
index 04a54d04bedfa94fd9a594e02099278c0a057bb9..dca6db518b136796c426edf04414f62be60c9289 100644 (file)
@@ -1841,7 +1841,6 @@ public class OwnershipGraph {
     String debugCaller = "foo";
     String debugCallee = "bar";
 
-
     if( mc.getDescriptor().getSymbol().equals( debugCaller ) &&
        fm.getMethod().getSymbol().equals( debugCallee ) ) {
 
@@ -2952,15 +2951,22 @@ public class OwnershipGraph {
       return false;
     }
 
-    Iterator fieldsSrcItr = tdSrc.getClassDesc().getFields();
-    while( fieldsSrcItr.hasNext() ) {
-      FieldDescriptor fd = (FieldDescriptor) fieldsSrcItr.next();
-      if( fd.getType().equals( edge.getType() ) &&
-         fd.getSymbol().equals( edge.getField() ) ) {
-       return true;
+    ClassDescriptor cd = tdSrc.getClassDesc();
+    while( cd != null ) {      
+      Iterator fieldItr = cd.getFields();
+
+      while( fieldItr.hasNext() ) {    
+       FieldDescriptor fd = (FieldDescriptor) fieldItr.next();
+
+       if( fd.getType().equals( edge.getType() ) &&
+           fd.getSymbol().equals( edge.getField() ) ) {
+         return true;
+       }
       }
+      
+      cd = cd.getSuperDesc();
     }
-
+    
     // otherwise it is a class with fields
     // but we didn't find a match
     return false;