chord.program.reflect
Class StaticReflectResolver

java.lang.Object
  extended by chord.program.reflect.StaticReflectResolver
Direct Known Subclasses:
CastBasedStaticReflect

public class StaticReflectResolver
extends java.lang.Object

Static analysis for resolving reflection.

Author:
Mayur Naik (mhn@cs.stanford.edu)

Field Summary
protected  java.util.Set<joeq.Compiler.Quad.RegisterFactory.Register> abortedVars
           
protected  joeq.Compiler.Quad.ControlFlowGraph cfg
           
protected  boolean changed
           
protected static boolean DEBUG
           
protected  java.util.Set<joeq.Compiler.Quad.Quad> forNameSites
           
protected  java.util.Set<joeq.Compiler.Quad.Quad> newInstSites
           
protected  int numArgs
           
protected  java.util.Set<Pair<joeq.Compiler.Quad.RegisterFactory.Register,joeq.Class.jq_Reference>> resolutions
           
protected  java.util.Set<Pair<joeq.Compiler.Quad.Quad,joeq.Class.jq_Reference>> resolvedClsForNameSites
           
protected  java.util.Set<Pair<joeq.Compiler.Quad.Quad,joeq.Class.jq_Reference>> resolvedObjNewInstSites
           
protected  java.util.Set<joeq.Compiler.Quad.RegisterFactory.Register> trackedVars
           
 
Constructor Summary
StaticReflectResolver()
           
 
Method Summary
 java.util.Set<Pair<joeq.Compiler.Quad.Quad,joeq.Class.jq_Reference>> getResolvedClsForNameSites()
           
 java.util.Set<Pair<joeq.Compiler.Quad.Quad,joeq.Class.jq_Reference>> getResolvedObjNewInstSites()
           
protected  void initAbortedVars(boolean isNewInst)
           
protected  void initForNameAndNewInstSites()
           
 boolean needNewIter()
          Used to cue RTA to do a new iteration
protected  void processCheckCast(joeq.Compiler.Quad.RegisterFactory.Register l, joeq.Compiler.Quad.RegisterFactory.Register r, joeq.Compiler.Quad.Quad q)
           
protected  void processCopy(joeq.Compiler.Quad.RegisterFactory.Register l, joeq.Compiler.Quad.RegisterFactory.Register r)
           
protected  void processInvoke(joeq.Compiler.Quad.Quad q)
           
protected  void processPhi(joeq.Compiler.Quad.Quad q)
           
protected  void processReturn(joeq.Compiler.Quad.Quad q)
           
protected  void resolveForNameSites()
           
protected  void resolveNewInstSites()
           
 void run(joeq.Class.jq_Method m)
           
 void startedNewIter()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DEBUG

protected static final boolean DEBUG
See Also:
Constant Field Values

cfg

protected joeq.Compiler.Quad.ControlFlowGraph cfg

numArgs

protected int numArgs

forNameSites

protected final java.util.Set<joeq.Compiler.Quad.Quad> forNameSites

newInstSites

protected final java.util.Set<joeq.Compiler.Quad.Quad> newInstSites

abortedVars

protected final java.util.Set<joeq.Compiler.Quad.RegisterFactory.Register> abortedVars

trackedVars

protected final java.util.Set<joeq.Compiler.Quad.RegisterFactory.Register> trackedVars

resolutions

protected final java.util.Set<Pair<joeq.Compiler.Quad.RegisterFactory.Register,joeq.Class.jq_Reference>> resolutions

resolvedClsForNameSites

protected final java.util.Set<Pair<joeq.Compiler.Quad.Quad,joeq.Class.jq_Reference>> resolvedClsForNameSites

resolvedObjNewInstSites

protected final java.util.Set<Pair<joeq.Compiler.Quad.Quad,joeq.Class.jq_Reference>> resolvedObjNewInstSites

changed

protected boolean changed
Constructor Detail

StaticReflectResolver

public StaticReflectResolver()
Method Detail

getResolvedClsForNameSites

public java.util.Set<Pair<joeq.Compiler.Quad.Quad,joeq.Class.jq_Reference>> getResolvedClsForNameSites()

getResolvedObjNewInstSites

public java.util.Set<Pair<joeq.Compiler.Quad.Quad,joeq.Class.jq_Reference>> getResolvedObjNewInstSites()

run

public void run(joeq.Class.jq_Method m)

initForNameAndNewInstSites

protected void initForNameAndNewInstSites()

resolveForNameSites

protected void resolveForNameSites()

resolveNewInstSites

protected void resolveNewInstSites()

processInvoke

protected void processInvoke(joeq.Compiler.Quad.Quad q)

processReturn

protected void processReturn(joeq.Compiler.Quad.Quad q)

processCheckCast

protected void processCheckCast(joeq.Compiler.Quad.RegisterFactory.Register l,
                                joeq.Compiler.Quad.RegisterFactory.Register r,
                                joeq.Compiler.Quad.Quad q)

initAbortedVars

protected void initAbortedVars(boolean isNewInst)

processCopy

protected void processCopy(joeq.Compiler.Quad.RegisterFactory.Register l,
                           joeq.Compiler.Quad.RegisterFactory.Register r)

processPhi

protected void processPhi(joeq.Compiler.Quad.Quad q)

needNewIter

public boolean needNewIter()
Used to cue RTA to do a new iteration


startedNewIter

public void startedNewIter()