View Javadoc

1   package org.sourceforge.jemm.client;
2   
3   import org.sourceforge.jemm.client.events.LockTracer;
4   import org.sourceforge.jemm.client.events.StackTracer;
5   import org.sourceforge.jemm.lifecycle.LockEvent;
6   import org.sourceforge.jemm.lifecycle.MethodEvent;
7   import org.sourceforge.jemm.lifecycle.MethodListener;
8   
9   /**
10   * A MethodListener which converts the calls into more context aware calls.
11   * 
12   * Specifically this takes account of when entities are entered and exited
13   * by all threads, such that the logic can differ for entry and exit depending
14   * on whether a method or entity is currently in use.
15   * 
16   * @author Paul
17   *
18   */
19  public class MethodContextTracker implements MethodListener {
20  	StackTracer stackTracer;
21  	LockTracer lockTracer;
22  	
23  	public MethodContextTracker(StackTracer tracer,LockTracer lockTracer) {
24  		this.stackTracer = tracer;
25  		this.lockTracer = lockTracer;
26  	}
27  	
28  	@Override
29  	public void entityEntered(MethodEvent e) {
30  		stackTracer.enterMethod(e.getOrigin(), new Descriptor(e.getDescriptor()));
31  	}
32  
33  	@Override
34  	public void entityExited(MethodEvent e) {
35  		stackTracer.exitMethod(e.getOrigin(), new Descriptor(e.getDescriptor()));
36  	}
37  
38  	@Override
39  	public void beginLock(LockEvent e) {
40  		lockTracer.beginLock(e.getOrigin(),e.getLock());
41  	}
42  
43  	@Override
44  	public void endLock(LockEvent e) {
45  		lockTracer.endLock(e.getOrigin(),e.getLock());
46  	}
47  }