Please also fix the build ;) Uli
On 02.11.2012 03:28, kao...@apache.org wrote: > Updated Branches: > refs/heads/master 015816ed4 -> b108e06f4 > > > FIXED - TAP5-2022: Add PropertyAccess.getAnnotation > - implement convenience for > PropertyAccess.getAdapter().getPropertyAdapter().getAnnotation() > > > Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo > Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/b108e06f > Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/b108e06f > Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/b108e06f > > Branch: refs/heads/master > Commit: b108e06f4b633d77461dda220a07016ee806c0c7 > Parents: 015816e > Author: Kalle Korhonen <kao...@apache.org> > Authored: Thu Nov 1 19:28:25 2012 -0700 > Committer: Kalle Korhonen <kao...@apache.org> > Committed: Thu Nov 1 19:28:25 2012 -0700 > > ---------------------------------------------------------------------- > .../services/ClassPropertyAdapterImpl.java | 15 ++++++--- > .../ioc/internal/services/PropertyAccessImpl.java | 14 ++++++-- > .../ioc/services/ClassPropertyAdapter.java | 14 ++++++++ > .../tapestry5/ioc/services/PropertyAccess.java | 20 +++++++++++- > .../groovy/ioc/specs/PropertyAccessImplSpec.groovy | 24 +++++++++++---- > 5 files changed, 70 insertions(+), 17 deletions(-) > ---------------------------------------------------------------------- > > > http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/b108e06f/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/ClassPropertyAdapterImpl.java > ---------------------------------------------------------------------- > diff --git > a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/ClassPropertyAdapterImpl.java > > b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/ClassPropertyAdapterImpl.java > index b96a0c2..7da0728 100644 > --- > a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/ClassPropertyAdapterImpl.java > +++ > b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/ClassPropertyAdapterImpl.java > @@ -14,18 +14,19 @@ > > package org.apache.tapestry5.ioc.internal.services; > > -import org.apache.tapestry5.ioc.internal.util.GenericsUtils; > -import org.apache.tapestry5.ioc.internal.util.InternalUtils; > -import org.apache.tapestry5.ioc.services.ClassPropertyAdapter; > -import org.apache.tapestry5.ioc.services.PropertyAdapter; > +import static > org.apache.tapestry5.ioc.internal.util.CollectionFactory.newCaseInsensitiveMap; > > import java.beans.PropertyDescriptor; > +import java.lang.annotation.Annotation; > import java.lang.reflect.Field; > import java.lang.reflect.Method; > import java.util.List; > import java.util.Map; > > -import static > org.apache.tapestry5.ioc.internal.util.CollectionFactory.newCaseInsensitiveMap; > +import org.apache.tapestry5.ioc.internal.util.GenericsUtils; > +import org.apache.tapestry5.ioc.internal.util.InternalUtils; > +import org.apache.tapestry5.ioc.services.ClassPropertyAdapter; > +import org.apache.tapestry5.ioc.services.PropertyAdapter; > > public class ClassPropertyAdapterImpl implements ClassPropertyAdapter > { > @@ -105,6 +106,10 @@ public class ClassPropertyAdapterImpl implements > ClassPropertyAdapter > adaptorFor(propertyName).set(instance, value); > } > > + public Annotation getAnnotation(Object instance, String propertyName, > Class<? extends Annotation> annotationClass) { > + return adaptorFor(propertyName).getAnnotation(annotationClass); > + } > + > private PropertyAdapter adaptorFor(String name) > { > PropertyAdapter pa = adapters.get(name); > > http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/b108e06f/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PropertyAccessImpl.java > ---------------------------------------------------------------------- > diff --git > a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PropertyAccessImpl.java > > b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PropertyAccessImpl.java > index e37158b..5eb1b3c 100644 > --- > a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PropertyAccessImpl.java > +++ > b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PropertyAccessImpl.java > @@ -14,14 +14,11 @@ > > package org.apache.tapestry5.ioc.internal.services; > > -import org.apache.tapestry5.ioc.internal.util.CollectionFactory; > -import org.apache.tapestry5.ioc.services.ClassPropertyAdapter; > -import org.apache.tapestry5.ioc.services.PropertyAccess; > - > import java.beans.BeanInfo; > import java.beans.IntrospectionException; > import java.beans.Introspector; > import java.beans.PropertyDescriptor; > +import java.lang.annotation.Annotation; > import java.lang.reflect.Method; > import java.lang.reflect.Modifier; > import java.util.Arrays; > @@ -29,6 +26,10 @@ import java.util.LinkedList; > import java.util.List; > import java.util.Map; > > +import org.apache.tapestry5.ioc.internal.util.CollectionFactory; > +import org.apache.tapestry5.ioc.services.ClassPropertyAdapter; > +import org.apache.tapestry5.ioc.services.PropertyAccess; > + > @SuppressWarnings("unchecked") > public class PropertyAccessImpl implements PropertyAccess > { > @@ -44,6 +45,11 @@ public class PropertyAccessImpl implements PropertyAccess > getAdapter(instance).set(instance, propertyName, value); > } > > + public Annotation getAnnotation(Object instance, String propertyName, > Class<? extends Annotation> annotationClass) { > + return getAdapter(instance).getAnnotation(instance, propertyName, > annotationClass); > + } > + > + > /** > * Clears the cache of adapters and asks the {@link Introspector} to > clear its cache. > */ > > http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/b108e06f/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/ClassPropertyAdapter.java > ---------------------------------------------------------------------- > diff --git > a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/ClassPropertyAdapter.java > > b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/ClassPropertyAdapter.java > index 409a950..6159ed3 100644 > --- > a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/ClassPropertyAdapter.java > +++ > b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/ClassPropertyAdapter.java > @@ -14,6 +14,7 @@ > > package org.apache.tapestry5.ioc.services; > > +import java.lang.annotation.Annotation; > import java.util.List; > > /** > @@ -62,4 +63,17 @@ public interface ClassPropertyAdapter > * @throws IllegalArgumentException if property does not exist > */ > void set(Object instance, String propertyName, Object value); > + > + /** > + * Returns the annotation of a given property for the specified type if > such an annotation is present, else null. > + * > + * @param instance the object to read a value from > + * @param propertyName the name of the property to read (case is ignored) > + * @param annotationClass the type of annotation to return > + * > + * @throws IllegalArgumentException if property does not exist > + * > + * @since 5.4 > + */ > + Annotation getAnnotation(Object instance, String propertyName, Class<? > extends Annotation> annotationClass); > } > > http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/b108e06f/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/PropertyAccess.java > ---------------------------------------------------------------------- > diff --git > a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/PropertyAccess.java > > b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/PropertyAccess.java > index a7422d0..1a02a96 100644 > --- > a/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/PropertyAccess.java > +++ > b/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/PropertyAccess.java > @@ -14,6 +14,8 @@ > > package org.apache.tapestry5.ioc.services; > > +import java.lang.annotation.Annotation; > + > /** > * A wrapper around the JavaBean Introspector that allows more manageable > access to JavaBean properties of objects. > * <p/> > @@ -26,7 +28,7 @@ public interface PropertyAccess > { > /** > * Reads the value of a property. > - * > + * > * @throws UnsupportedOperationException > * if the property is write only > * @throws IllegalArgumentException > @@ -36,7 +38,7 @@ public interface PropertyAccess > > /** > * Updates the value of a property. > - * > + * > * @throws UnsupportedOperationException > * if the property is read only > * @throws IllegalArgumentException > @@ -45,6 +47,20 @@ public interface PropertyAccess > void set(Object instance, String propertyName, Object value); > > /** > + * Returns the annotation of a given property for the specified type if > such an annotation is present, else null. > + * A convenience over invoking {@link #getAdapter(Object)}.{@link > #ClassPropertyAdapter.getPropertyAdapter(String)}.{@link > #PropertyAdapter.getAnnotation(Class)} > + * > + * @param instance the object to read a value from > + * @param propertyName the name of the property to read (case is ignored) > + * @param annotationClass the type of annotation to return > + * @throws IllegalArgumentException > + * if property does not exist > + * > + * @since 5.4 > + */ > + Annotation getAnnotation(Object instance, String propertyName, Class<? > extends Annotation> annotationClass); > + > + /** > * Returns the adapter for a particular object instance. A convienience > over invoking {@link #getAdapter(Class)}. > */ > ClassPropertyAdapter getAdapter(Object instance); > > http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/b108e06f/tapestry-ioc/src/test/groovy/ioc/specs/PropertyAccessImplSpec.groovy > ---------------------------------------------------------------------- > diff --git > a/tapestry-ioc/src/test/groovy/ioc/specs/PropertyAccessImplSpec.groovy > b/tapestry-ioc/src/test/groovy/ioc/specs/PropertyAccessImplSpec.groovy > index 93a1459..f0ac187 100644 > --- a/tapestry-ioc/src/test/groovy/ioc/specs/PropertyAccessImplSpec.groovy > +++ b/tapestry-ioc/src/test/groovy/ioc/specs/PropertyAccessImplSpec.groovy > @@ -1,21 +1,20 @@ > package ioc.specs > > +import java.awt.Image > +import java.beans.* > +import java.lang.reflect.Method > + > import org.apache.tapestry5.beaneditor.DataType > import org.apache.tapestry5.beaneditor.Validate > import org.apache.tapestry5.ioc.annotations.Scope > +import org.apache.tapestry5.ioc.internal.services.* > import org.apache.tapestry5.ioc.internal.util.Pair > import org.apache.tapestry5.ioc.internal.util.StringLongPair > import org.apache.tapestry5.ioc.services.ClassPropertyAdapter > import org.apache.tapestry5.ioc.services.PropertyAccess > > -import java.awt.Image > -import java.lang.reflect.Method > - > -import org.apache.tapestry5.ioc.internal.services.* > import spock.lang.* > > -import java.beans.* > - > class ExceptionBean { > > boolean getFailure() { > @@ -438,6 +437,19 @@ class PropertyAccessImplSpec extends Specification { > cpa.propertyNames == ["class", "primitiveProperty"] > } > > + def "getAnnotation from a bean property"() { > + AnnotatedBean b = new AnnotatedBean() > + > + when: > + > + def annotation = access.getAnnotation(b, "annotationOnRead", Scope) > + > + then: > + > + annotation.value() == "onread" > + } > + > + > def "getAnnotation() when annotation is not present is null"() { > > when: > --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tapestry.apache.org For additional commands, e-mail: dev-h...@tapestry.apache.org