edu.umd.cs.findbugs
Class SelfCalls

java.lang.Object
  extended by edu.umd.cs.findbugs.SelfCalls

public class SelfCalls
extends java.lang.Object

Build a call graph of the self calls in a class.


Field Summary
private  java.util.HashSet<org.apache.bcel.classfile.Method> calledMethodSet
           
private  CallGraph callGraph
           
private  ClassContext classContext
           
private static boolean DEBUG
           
private  boolean hasSynchronization
           
 
Constructor Summary
SelfCalls(ClassContext classContext)
          Constructor.
 
Method Summary
 java.util.Iterator<org.apache.bcel.classfile.Method> calledMethodIterator()
          Get an Iterator over self-called methods.
 java.util.Iterator<CallSite> callSiteIterator()
          Get an Iterator over all self call sites.
 void execute()
          Find the self calls.
 CallGraph getCallGraph()
          Get the self call graph for the class.
 boolean hasSynchronization()
          Does this class contain any explicit synchronization?
private  org.apache.bcel.classfile.Method isSelfCall(org.apache.bcel.generic.InvokeInstruction inv)
          Is the given instruction a self-call?
private  void scan(CallGraphNode node)
          Scan a method for self call sites.
 boolean wantCallsFor(org.apache.bcel.classfile.Method method)
          Determine whether we are interested in calls for the given method.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DEBUG

private static final boolean DEBUG

classContext

private ClassContext classContext

callGraph

private CallGraph callGraph

calledMethodSet

private java.util.HashSet<org.apache.bcel.classfile.Method> calledMethodSet

hasSynchronization

private boolean hasSynchronization
Constructor Detail

SelfCalls

public SelfCalls(ClassContext classContext)
Constructor.

Parameters:
classContext - the ClassContext for the class
Method Detail

execute

public void execute()
             throws CFGBuilderException
Find the self calls.

Throws:
CFGBuilderException

getCallGraph

public CallGraph getCallGraph()
Get the self call graph for the class.


calledMethodIterator

public java.util.Iterator<org.apache.bcel.classfile.Method> calledMethodIterator()
Get an Iterator over self-called methods.


wantCallsFor

public boolean wantCallsFor(org.apache.bcel.classfile.Method method)
Determine whether we are interested in calls for the given method. Subclasses may override. The default version returns true for every method.

Parameters:
method - the method
Returns:
true if we want call sites for the method, false if not

callSiteIterator

public java.util.Iterator<CallSite> callSiteIterator()
Get an Iterator over all self call sites.


hasSynchronization

public boolean hasSynchronization()
Does this class contain any explicit synchronization?


scan

private void scan(CallGraphNode node)
           throws CFGBuilderException
Scan a method for self call sites.

Parameters:
node - the CallGraphNode for the method to be scanned
Throws:
CFGBuilderException

isSelfCall

private org.apache.bcel.classfile.Method isSelfCall(org.apache.bcel.generic.InvokeInstruction inv)
Is the given instruction a self-call?