You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2008/06/26 19:22:45 UTC
svn commit: r671956 - in /tapestry/tapestry5/trunk/tapestry-core/src:
main/java/org/apache/tapestry5/internal/services/InternalClassTransformationImpl.java
test/java/org/apache/tapestry5/internal/services/InternalClassTransformationImplTest.java
Author: hlship
Date: Thu Jun 26 10:22:44 2008
New Revision: 671956
URL: http://svn.apache.org/viewvc?rev=671956&view=rev
Log:
TAPESTRY-2481: ClassTransformation acts as if all type-level annotations are inherited; it should filter out non-inherited annotations
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/InternalClassTransformationImpl.java
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/InternalClassTransformationImplTest.java
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/InternalClassTransformationImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/InternalClassTransformationImpl.java?rev=671956&r1=671955&r2=671956&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/InternalClassTransformationImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/InternalClassTransformationImpl.java Thu Jun 26 10:22:44 2008
@@ -36,6 +36,7 @@
import org.slf4j.Logger;
import java.lang.annotation.Annotation;
+import java.lang.annotation.Inherited;
import java.lang.reflect.Modifier;
import java.util.*;
@@ -387,7 +388,7 @@
{
List<Annotation> result = CollectionFactory.newList();
- addAnnotationsToList(result, member.getAnnotations());
+ addAnnotationsToList(result, member.getAnnotations(), false);
return result;
}
@@ -397,11 +398,24 @@
}
}
- private void addAnnotationsToList(List<Annotation> list, Object[] annotations)
+ private void addAnnotationsToList(List<Annotation> list, Object[] annotations, boolean filterNonInherited)
{
for (Object o : annotations)
{
Annotation a = (Annotation) o;
+
+ // When assembling class annotations from a base class, you want to ignore any
+ // that are not @Inherited.
+
+ if (filterNonInherited)
+ {
+ Class<? extends Annotation> annotationType = a.annotationType();
+
+ Inherited inherited = annotationType.getAnnotation(Inherited.class);
+
+ if (inherited == null) continue;
+ }
+
list.add(a);
}
}
@@ -1498,11 +1512,17 @@
{
classAnnotations = CollectionFactory.newList();
+ boolean filter = false;
+
try
{
for (CtClass current = ctClass; current != null; current = current.getSuperclass())
{
- addAnnotationsToList(classAnnotations, current.getAnnotations());
+ addAnnotationsToList(classAnnotations, current.getAnnotations(), filter);
+
+ // Super-class annotations are filtered
+
+ filter = true;
}
}
catch (NotFoundException ex)
Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/InternalClassTransformationImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/InternalClassTransformationImplTest.java?rev=671956&r1=671955&r2=671956&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/InternalClassTransformationImplTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/InternalClassTransformationImplTest.java Thu Jun 26 10:22:44 2008
@@ -416,6 +416,23 @@
verify();
}
+ // TAPESTRY-2481
+ @Test
+ public void ensure_only_inherited_annotations_from_parent_class_are_visible() throws Exception
+ {
+ Logger logger = mockLogger();
+
+ replay();
+
+ ClassTransformation ct = createClassTransformation(ChildClassInheritsAnnotation.class, logger);
+
+ Meta meta = ct.getAnnotation(Meta.class);
+
+ assertNull(meta);
+
+ verify();
+ }
+
/**
* These tests are really to assert my understanding of Javassist's API. I guess we should keep them around to make
* sure that future versions of Javassist work the same as our expectations.