A handy class for tracking repeated calls to methods that should not be
called repeatedly. git-svn-id: https://samskivert.googlecode.com/svn/trunk@1484 6335cc39-0255-0410-8fd6-9bcaacd3b74c
This commit is contained in:
@@ -0,0 +1,51 @@
|
|||||||
|
//
|
||||||
|
// $Id$
|
||||||
|
|
||||||
|
package com.samskivert.util;
|
||||||
|
|
||||||
|
import com.samskivert.Log;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A class used to debug situations where a method that should be called
|
||||||
|
* once and only once is being called again later and one wishes to report
|
||||||
|
* the stack trace of the first and current calling on any repeat
|
||||||
|
* callings. <em>Note:</em> this object is not thread safe. If the
|
||||||
|
* multiple callings may take place on different threads, you must
|
||||||
|
* synchronize the calls to {@link #checkCall} yourself.
|
||||||
|
*/
|
||||||
|
public class RepeatCallTracker
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* This method should be called when the code passes through the code
|
||||||
|
* path that should be called only once. The first time through this
|
||||||
|
* path, the method will return false and record the stack trace.
|
||||||
|
* Subsquent calls will log an error and report the current and
|
||||||
|
* first-time-through stack traces.
|
||||||
|
*
|
||||||
|
* @param warning the warning message to issue prior to logging the
|
||||||
|
* two stack traces.
|
||||||
|
*/
|
||||||
|
public boolean checkCall (String warning)
|
||||||
|
{
|
||||||
|
if (_firstCall == null) {
|
||||||
|
_firstCall = new Exception("---- First call ----");
|
||||||
|
_firstCall.fillInStackTrace();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Log.logStackTrace(new Exception(warning));
|
||||||
|
Log.logStackTrace(_firstCall);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resets this repeat call tracker.
|
||||||
|
*/
|
||||||
|
public void clear ()
|
||||||
|
{
|
||||||
|
_firstCall = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Used to keep the stack trace around from the first call. */
|
||||||
|
protected Exception _firstCall;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user