Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] Ok, I have another crazy scenario:

Sure.

Try the following:

B around( String string ) : createB( string )
{
       B b = proceed(string);
 
       return new C( string );
}

-Ramnivas

--- "Anagnost, Ted (MED, GEMS-IT)" <Theodore.Anagnost@xxxxxxxxxx>
wrote:
> This is a long but simple question, please bear with me:
> 
> public class A
> {
> 	private B m_b;
> 	
> 	public void method()
> 	{
> 		m_b = new B( "Test" );
> 		m_b.method();
> 	}
> }
> 
> public class B extends D
> {
> 	public B(String string)
> 	{
> 	}
> 
> 	public void method()
> 	{
> 	}
> }
> 
> public class C extends D
> {
> 	public C(String string)
> 	{
> 	}
> 
> 	public void method()
> 	{
> 	}
> }
> 
> My original question was:
> Is it possible to change A so that when it tries to do this:
> 
> 		m_b = new B( "Test" );
> 		m_b.method();		
> 		
> it actually effectively does this:
> 
> 		m_b = new C( "Test" );
> 		m_b.method(); // calls C's method()		
> 
> David Vollbracht (thanks!) gave this solution, which works:
> 
> aspect BToC
> {
>    declare parents: C extends B;
> 
>    /**
>     * No-arg constructor for class B so Class C doesn't
>     * need to be changed
>     */
>    public B.new()
>    {
>       this( "Dummy String" );
>    }
> 
>    pointcut createB( String string ) :
>       call( B.new( String ) ) && args( string );
> 
>    B around( String string ) : createB( string )
>    {
>       return new C( string );
>    }
> }
> 
> Here's the question (finally!).  Is there a way within the 'around'
> part
> to still allow the 
> creation of 'B' (see example above) and get access to that instance?
> Something like this:
> 
>    B around( String string ) : createB( string )
>    {
> 	B b = ...some way to get access to the originally intended
> object instance B...
> 
>       return new C( string );
>    }
> 
> 
> Thanks for any help!
> 
> Ted
> 
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> http://dev.eclipse.org/mailman/listinfo/aspectj-users


__________________________________
Do you Yahoo!?
SBC Yahoo! DSL - Now only $29.95 per month!
http://sbc.yahoo.com


Back to the top