Constructor Instrumentation : super()

"Nikhil C. Khedkar" <[email protected]>
Newsgroups gmane.comp.jakarta.bcel.devel
Message-ID <20040218095804.81605.qmail__12288.210905581$1077098303@web13606.mail.yahoo.com>
Hi,
	I have a query regarding the instrumentation of the
constructor. I have read all the archived mail in this
regard, but none of them served useful. I have the
same requirement i.e. put a method call at each method
start and method end. Have already put a try catch for
that. Now the task is to skip super() call before I
put my method call in the constructor.
	
	I have a code that works for 99% of the cases. 
	
	for(int j = 1; j < ihs.length; j++)
	{
		if(ihs[j].getInstruction() instanceof INVOKESPECIAL)
		{
			il.append(ihs[j], instrumentedPatchList);
			break;
		}
	}
	
	It works for 
	
	1)public ABCD(XYZ obj)
	{
		super(obj);
	}
	
	Now a more complicated case
	
	2)public RuleTree(int type, AppCodeAnalyzerMainPanel
mainPanel)
	{
		super(new DefaultTreeModel(new RuleNode("Rules")));
		method1();
		method2();
	}
	
	The above code fails because the Special Instruction
is not at first position. Hence A refined approach
will be to get the first instruction handle of the
second line in the constructor (first instruction
handle for method1()). Now I scan all the instructions
of the first line (super(new DefaultTreeModel(new
RuleNode("Rules")))). If there is any INVOKESPECIAL in
this list I put my code at the end of first line. This
thing works fine.
	
	A bit more complex case
	
	3)private XYZHandler(EventHandler commandHandler)
	{
		super(
			ABCD.getInstance(),
			Helper.getInstance(),
			commandHandler,
			100);
		method1();
	}
	
	Now the above mentioned approach doesn't work and I
end up putting my method call before super() and get
VerifyError. Has anyone (especially the ones who have
posted those questions on constructor instrumentation
previously) been able to build a fullproof code?
	
Thanks,
	Nikhil Khedkar

__________________________________
Do you Yahoo!?
Yahoo! Mail SpamGuard - Read only the mail you want.
http://antispam.yahoo.com/tools
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.