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