Yes I can.  I was busy searching for something way more complicated than it
had to be!

Thanks for pointing out the obvious, but was too blind to see! :)

Eric



On Tue, Jul 8, 2014 at 11:49 AM, Archie Cobbs <arc...@dellroad.org> wrote:

> Can't you just use field.getType() to get the field's type?
>
> -Archie
>
>
> On Tue, Jul 8, 2014 at 10:35 AM, Eric B <ebenza...@gmail.com> wrote:
>
>> Thanks Andy,
>>
>> That's what I was thinking as well.  However, one thing that I haven't
>> been able to find is how to get the type of obj that needs to be
>> instantiated.
>> Currently, it is a Validity object.  However, if I wanted to do this more
>> generically, I would want to do something like:
>>
>> value = thisJoinPoint.getSignature().fieldType.newInstance()
>>
>> However, I can't seem to find any way to get "fieldType".
>>
>> Is that information not accessible anywhere?  If not, is there a way to
>> get the expected return type of the get() pointcut?
>>
>> Tx,
>>
>> Eric
>>
>>
>> On Tue, Jul 8, 2014 at 5:26 AM, Andy Clement <andrew.clem...@gmail.com>
>> wrote:
>>
>>> I only had a couple of mins to play but if you went with around advice
>>> you could make the reflection only run if initialization is required:
>>>
>>>  Object *around*(): embeddedGetter() {
>>>
>>> Object value = *proceed*();
>>>
>>> *if* (value == *null*) {
>>>
>>> String fieldName = *thisJoinPoint*.getSignature().getName();
>>>
>>> Object obj = *thisJoinPoint*.getThis();
>>>
>>>  *try*{
>>>
>>> Field field = obj.getClass().getDeclaredField(fieldName);
>>>
>>> field.setAccessible(*true*);
>>>
>>> field.set(obj, value = *new* Validity() );
>>>
>>> }
>>>
>>> *catch*( IllegalAccessException | NoSuchFieldException
>>> e){e.printStackTrace();}
>>>
>>> }
>>>
>>> *return* value;
>>>
>>> }
>>>
>>>
>>> Andy
>>>
>>>
>>> On 8 July 2014 04:34, Eric B <ebenza...@gmail.com> wrote:
>>>
>>>> I've got the following issue that I am trying to solve with AspectJ.
>>>>
>>>> Given an entity class with a null @Embedded field, when trying to
>>>> access it with a getter, instantiate it first if it is null.
>>>>
>>>> For example:
>>>>
>>>> @Entity
>>>> public class MyClass {
>>>>
>>>>         @Id
>>>> private long id;
>>>>
>>>> @Embedded
>>>> private Validity validity;
>>>> }
>>>>
>>>>
>>>> And Validity:
>>>>
>>>> @Embeddable
>>>> public class Validity{
>>>>     private long from;
>>>>     private long to;
>>>> }
>>>>
>>>> I'm having trouble figuring out how to best write the before() advice
>>>> however.  Ideally, I'm trying to avoid using reflection for fear of slowing
>>>> things down, but so far, the best I have been able to come up with is the
>>>> following:
>>>>
>>>> // define a pointcut for any getter method of a field with @Embedded of
>>>> type Validity with any name in com.ia.domain package
>>>> pointcut embeddedGetter() : get( @javax.persistence.Embedded
>>>> com.ia.domain.Validity com.ia.domain..* );
>>>>  before() : embeddedGetter(){
>>>> String fieldName = thisJoinPoint.getSignature().getName();
>>>>  Object obj = thisJoinPoint.getThis();
>>>>  // check to see if the obj has the field already defined or is null
>>>>  try{
>>>> Field field = obj.getClass().getDeclaredField(fieldName);
>>>> field.setAccessible(true);
>>>>  if( field.get(obj) == null )
>>>> field.set(obj, new com.ia.domain.Validity() );
>>>> }
>>>>  catch( IllegalAccessException | NoSuchFieldException e){}
>>>> }
>>>>
>>>>
>>>> Is there a better way?
>>>>
>>>> Thanks,
>>>>
>>>> Eric
>>>>
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> aspectj-users mailing list
>>>> aspectj-users@eclipse.org
>>>> To change your delivery options, retrieve your password, or unsubscribe
>>>> from this list, visit
>>>> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>>>>
>>>
>>>
>>> _______________________________________________
>>> aspectj-users mailing list
>>> aspectj-users@eclipse.org
>>> To change your delivery options, retrieve your password, or unsubscribe
>>> from this list, visit
>>> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>>>
>>
>>
>> _______________________________________________
>> aspectj-users mailing list
>> aspectj-users@eclipse.org
>> To change your delivery options, retrieve your password, or unsubscribe
>> from this list, visit
>> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>>
>
>
>
> --
> Archie L. Cobbs
>
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@eclipse.org
> To change your delivery options, retrieve your password, or unsubscribe
> from this list, visit
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>
_______________________________________________
aspectj-users mailing list
aspectj-users@eclipse.org
To change your delivery options, retrieve your password, or unsubscribe from 
this list, visit
https://dev.eclipse.org/mailman/listinfo/aspectj-users

Reply via email to