I now have a working version based on 2) above, by adding a boolean field to the 
class, which is set during the instantiation of the embedded Metaobject (this is an 
instance field and is instantiated straight after the super(...) constructor runs and 
prior to the execution of the remainder of the constructor).  The field determines 
whether the full constructor (after any explicit or implicit call to super(...)) 
should be intercepted (effectively stopped).

The constructor is enhanced through the following code in Reflection:

CtConstructor c;
  | ...
  | c.insertBeforeBody("if (" + interceptConstructorField + ") {return;}");

... where interceptConstructorField contains the name of the new boolean field added 
to the class.  This field is set in the constructor of the Metaobject based on an 
equivalent new (static) boolean field in Metaobject.  So, if:

Metaobject.setInterceptConstructor(true)

... is called, when the next instance of the reflected class is instantiated, only its 
superclass constructor will run, as the inserted return will be reached.  Set it back 
to false, and the full constructor will run for the next instance.

The design uses static fields and methods in Metaobject (should these live instead in 
ClassMetaobject?), as the instance of Metaobject is not instantiated until during the 
instantiation of the reflected object.  This made me realise that the additional field 
within the reflected class is probably not needed, rather:

c.insertBeforeBody("if (" + metaobjectGetter + "().isInterceptConstructor()) 
{return;}");

... is just as effective, with the slight disadvantage being that there is no way down 
the track to tell whether a particular reflective object's constructor was 
intercepted.  So maybe the field should stay.

I have a full set of jUnit tests.  Could someone please advise me on how best to 
contribute this enhancement?

Brett Randall


View the original post : 
http://www.jboss.org/index.html?module=bb&op=viewtopic&p=3841442#3841442

Reply to the post : 
http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=3841442


-------------------------------------------------------
This SF.Net email sponsored by Black Hat Briefings & Training.
Attend Black Hat Briefings & Training, Las Vegas July 24-29 - 
digital self defense, top technical experts, no vendor pitches, 
unmatched networking opportunities. Visit www.blackhat.com
_______________________________________________
JBoss-Development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to