Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /* Soot - a J*va Optimization Framework
   * Copyright (C) 2003 Ondrej Lhotak
   *
   * This library is free software; you can redistribute it and/or
   * modify it under the terms of the GNU Lesser General Public
   * License as published by the Free Software Foundation; either
   * version 2.1 of the License, or (at your option) any later version.
   *
   * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the
  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  * Boston, MA 02111-1307, USA.
  */
 
 package soot.jimple.toolkits.pointer;
 
 import soot.*;
 import soot.jimple.*;
 import java.util.*;
 
 //  ArrayRef, 
 //  CaughtExceptionRef, 
 //  FieldRef, 
 //  IdentityRef, 
 //  InstanceFieldRef, 
 //  InstanceInvokeExpr, 
 //  Local,  
 //  StaticFieldRef
 
 public class PASideEffectTester implements SideEffectTester
 {
     PointsToAnalysis pa = Scene.v().getPointsToAnalysis();
 
     public PASideEffectTester() {
 	if( G.v(). == null ) {
 	    G.v(). = new UnionFactory() {
 		public Union newUnion() { return FullObjectSet.v(); }
 	    };
 	}
     }

    
Call this when starting to analyze a new method to setup the cache.
 
     public void newMethodSootMethod m ) {
 	 = new HashMap<UnitRWSet>();
 	 = new HashMap<UnitRWSet>();
 	 = m;
     }
 
     protected RWSet readSetUnit u ) {
 	RWSet ret = .getu );
 	ifret == null ) {
 	    .puturet = .readSet, (Stmtu ) );
 	}
 	return ret;
     }
 
     protected RWSet writeSetUnit u ) {
 	RWSet ret = .getu );
 	ifret == null ) {
 	    .puturet = .writeSet, (Stmtu ) );
 	}
 	return ret;
     }
     
     protected PointsToSet reachingObjectsLocal l ) {
 	ifret == null ) {
 	    .putl
 		    ret = .reachingObjectsl ) );
 	}
 	return ret;
     }

    
Returns true if the unit can read from v. Does not deal with expressions; deals with Refs.
 
     public boolean unitCanReadFrom(Unit uValue v)
     {
 	return valueTouchesRWSetreadSetu ), vu.getUseBoxes() );
     }

    
Returns true if the unit can read from v. Does not deal with expressions; deals with Refs.
 
     public boolean unitCanWriteTo(Unit uValue v)
     {
 	return valueTouchesRWSetwriteSetu ), vu.getDefBoxes() );
     }
 
    protected boolean valueTouchesRWSet(RWSet sValue vList boxes)
    {
        forIterator useIt = v.getUseBoxes().iterator(); useIt.hasNext(); ) {
            final ValueBox use = (ValueBoxuseIt.next();
            ifvalueTouchesRWSetsuse.getValue(), boxes ) ) return true;
        }
        // This doesn't really make any sense, but we need to return something.
        if (v instanceof Constant)
            return false;
        if (v instanceof Expr)
            throw new RuntimeException("can't deal with expr");
	forIterator boxIt = boxes.iterator(); boxIt.hasNext(); ) {
	    final ValueBox box = (ValueBoxboxIt.next();
	    Value boxed = box.getValue();
	    ifboxed.equivTov ) ) return true;
	}
	if (v instanceof Local) {
	    return false;
	}
	ifv instanceof InstanceFieldRef ) {
	    InstanceFieldRef ifr = (InstanceFieldRefv;
	    ifs == null ) return false;
	    PointsToSet o1 = s.getBaseForFieldifr.getField() );
	    ifo1 == null ) return false;
	    PointsToSet o2 = reachingObjects( (Localifr.getBase() );
	    ifo2 == null ) return false;
	    return o1.hasNonEmptyIntersectiono2 );
	}
	ifv instanceof ArrayRef ) {
	    ArrayRef ar = (ArrayRefv;
	    ifs == null ) return false;
	    ifo1 == null ) return false;
	    PointsToSet o2 = reachingObjects( (Localar.getBase() );
	    ifo2 == null ) return false;
	    return o1.hasNonEmptyIntersectiono2 );
	}
	ifv instanceof StaticFieldRef ) {
	    StaticFieldRef sfr = (StaticFieldRefv;
	    ifs == null ) return false;
	    return s.getGlobals().containssfr.getField() );
	}
	throw new RuntimeException"Forgot to handle value "+v );
    }
New to GrepCode? Check out our FAQ X