[jboss-cvs] JBossAS SVN: r97470 - in projects/jboss-mdr/trunk: src/main/java/org/jboss/metadata/plugins/context and 15 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Dec 4 11:56:15 EST 2009


Author: kabir.khan at jboss.com
Date: 2009-12-04 11:56:15 -0500 (Fri, 04 Dec 2009)
New Revision: 97470

Added:
   projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/plugins/loader/AnnotationsAnnotatedWithCache.java
   projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/spi/retrieval/cummulative/CummulativeAnnotationsFilter.java
   projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/shared/support/MetaAnnotation1.java
   projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/shared/support/MetaAnnotation2.java
Modified:
   projects/jboss-mdr/trunk/.classpath
   projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/plugins/context/AbstractMetaDataContext.java
   projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/plugins/loader/AbstractMetaDataLoader.java
   projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/plugins/loader/memory/MemoryMetaDataLoader.java
   projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/plugins/loader/thread/ThreadLocalMetaDataLoader.java
   projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/spi/MetaData.java
   projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/spi/retrieval/MetaDataRetrieval.java
   projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/spi/retrieval/MetaDataRetrievalToMetaDataBridge.java
   projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/spi/retrieval/cummulative/CummulativeAnnotationsItem.java
   projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/AbstractMetaDataTest.java
   projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/context/MetaDataContextAnnotationTest.java
   projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/loader/MutableAnnotationsTest.java
   projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/loader/MutableMetaDataLoaderAnnotationsInvalidationTest.java
   projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/loader/reflection/support/TestAnnotationWithValue.java
   projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/loader/reflection/test/AnnotatedElementLoaderDeclaredMethodSignatureUnitTestCase.java
   projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/loader/reflection/test/AnnotatedElementLoaderNotPublicUnitTestCase.java
   projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/retrieval/support/TestMetaDataRetrieval.java
   projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/retrieval/test/HelpersUnitTestCase.java
   projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/shared/BasicAnnotationsTest.java
   projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/shared/ComponentBasicAnnotationsTest.java
   projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/shared/support/MetaDataAndMutableMetaDataImpl.java
   projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/shared/support/TestAnnotation.java
   projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/shared/support/TestAnnotation1.java
Log:
[JBREFLECT-82] Add and support MetaData.getAnnotationsWith(Annotation meta) and MetaDataRetrieval.retrieveAnnotationsWith(Annotation meta).

Extend the existing tests to also test this functionality

Modified: projects/jboss-mdr/trunk/.classpath
===================================================================
--- projects/jboss-mdr/trunk/.classpath	2009-12-04 16:39:11 UTC (rev 97469)
+++ projects/jboss-mdr/trunk/.classpath	2009-12-04 16:56:15 UTC (rev 97470)
@@ -1,19 +1,19 @@
 <classpath>
-  <classpathentry kind="src" path="src/main/java"/>
-  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
+  <classpathentry kind="src" path="src/test/java" output="target/test-classes" including="**/*.java"/>
+  <classpathentry kind="src" path="src/main/java" including="**/*.java"/>
   <classpathentry kind="output" path="target/classes"/>
-  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
   <classpathentry kind="var" path="M2_REPO/org/apache/ant/ant/1.7.0/ant-1.7.0.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/apache/ant/ant-junit/1.7.0/ant-junit-1.7.0.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/apache/ant/ant-launcher/1.7.0/ant-launcher-1.7.0.jar"/>
-  <classpathentry kind="var" path="M2_REPO/javassist/javassist/3.8.1.GA/javassist-3.8.1.GA.jar" sourcepath="M2_REPO/javassist/javassist/3.8.1.GA/javassist-3.8.1.GA-sources.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/jboss-common-core/2.2.9.GA/jboss-common-core-2.2.9.GA.jar"/>
+  <classpathentry kind="var" path="M2_REPO/javassist/javassist/3.11.0.GA/javassist-3.11.0.GA.jar" sourcepath="M2_REPO/javassist/javassist/3.11.0.GA/javassist-3.11.0.GA-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/jboss/jboss-common-core/2.2.16.GA/jboss-common-core-2.2.16.GA.jar" sourcepath="M2_REPO/org/jboss/jboss-common-core/2.2.16.GA/jboss-common-core-2.2.16.GA-sources.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/jboss/logging/jboss-logging-log4j/2.0.5.GA/jboss-logging-log4j-2.0.5.GA.jar" sourcepath="M2_REPO/org/jboss/logging/jboss-logging-log4j/2.0.5.GA/jboss-logging-log4j-2.0.5.GA-sources.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/jboss/logging/jboss-logging-spi/2.0.5.GA/jboss-logging-spi-2.0.5.GA.jar" sourcepath="M2_REPO/org/jboss/logging/jboss-logging-spi/2.0.5.GA/jboss-logging-spi-2.0.5.GA-sources.jar"/>
   <classpathentry kind="var" path="M2_REPO/jboss/profiler/jvmti/jboss-profiler-jvmti/1.0.0.CR5/jboss-profiler-jvmti-1.0.0.CR5.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jboss/jboss-reflect/2.0.0.CR1/jboss-reflect-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/jboss-reflect/2.0.0.CR1/jboss-reflect-2.0.0.CR1-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/jboss/jboss-reflect/2.0.2.GA/jboss-reflect-2.0.2.GA.jar" sourcepath="M2_REPO/org/jboss/jboss-reflect/2.0.2.GA/jboss-reflect-2.0.2.GA-sources.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-server-manager/0.1.1.GA/jboss-server-manager-0.1.1.GA.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-server-manager/0.1.1.GA/jboss-server-manager-0.1.1.GA-sources.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/jboss/test/jboss-test/1.1.1.GA/jboss-test-1.1.1.GA.jar" sourcepath="M2_REPO/org/jboss/test/jboss-test/1.1.1.GA/jboss-test-1.1.1.GA-sources.jar"/>
   <classpathentry kind="var" path="M2_REPO/junit/junit/4.4/junit-4.4.jar" sourcepath="M2_REPO/junit/junit/4.4/junit-4.4-sources.jar"/>
   <classpathentry kind="var" path="M2_REPO/apache-log4j/log4j/1.2.14/log4j-1.2.14.jar" sourcepath="M2_REPO/apache-log4j/log4j/1.2.14/log4j-1.2.14-sources.jar"/>
+  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 </classpath>
\ No newline at end of file

Modified: projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/plugins/context/AbstractMetaDataContext.java
===================================================================
--- projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/plugins/context/AbstractMetaDataContext.java	2009-12-04 16:39:11 UTC (rev 97469)
+++ projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/plugins/context/AbstractMetaDataContext.java	2009-12-04 16:56:15 UTC (rev 97470)
@@ -35,6 +35,7 @@
 import org.jboss.metadata.spi.retrieval.MetaDataRetrieval;
 import org.jboss.metadata.spi.retrieval.MetaDatasItem;
 import org.jboss.metadata.spi.retrieval.ValidTime;
+import org.jboss.metadata.spi.retrieval.cummulative.CummulativeAnnotationsFilter;
 import org.jboss.metadata.spi.retrieval.cummulative.CummulativeAnnotationsItem;
 import org.jboss.metadata.spi.retrieval.cummulative.CummulativeMetaDatasItem;
 import org.jboss.metadata.spi.scope.Scope;
@@ -224,6 +225,11 @@
       
       return null;
    }
+   
+   public AnnotationsItem retrieveAnnotationsAnnotatedWith(Class<? extends Annotation> meta)
+   {
+      return new CummulativeAnnotationsItem(this, true, new AnnotationsAnnotatedWithFilter(meta));
+   }
 
    public MetaDatasItem retrieveMetaData()
    {
@@ -323,4 +329,19 @@
 
       return null;
    }
+   
+   private static class AnnotationsAnnotatedWithFilter implements CummulativeAnnotationsFilter
+   {
+      Class<? extends Annotation> meta;
+      
+      public AnnotationsAnnotatedWithFilter(Class<? extends Annotation> meta)
+      {
+         this.meta = meta;
+      }
+
+      public AnnotationsItem getAnnotations(MetaDataRetrieval retrieval)
+      {
+         return retrieval.retrieveAnnotationsAnnotatedWith(meta);
+      }
+   }
 }

Modified: projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/plugins/loader/AbstractMetaDataLoader.java
===================================================================
--- projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/plugins/loader/AbstractMetaDataLoader.java	2009-12-04 16:39:11 UTC (rev 97469)
+++ projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/plugins/loader/AbstractMetaDataLoader.java	2009-12-04 16:56:15 UTC (rev 97470)
@@ -22,6 +22,8 @@
 package org.jboss.metadata.plugins.loader;
 
 import java.lang.annotation.Annotation;
+import java.util.ArrayList;
+import java.util.List;
 
 import org.jboss.metadata.spi.loader.MetaDataLoader;
 import org.jboss.metadata.spi.retrieval.AnnotationItem;
@@ -31,6 +33,7 @@
 import org.jboss.metadata.spi.retrieval.MetaDataRetrieval;
 import org.jboss.metadata.spi.retrieval.MetaDatasItem;
 import org.jboss.metadata.spi.retrieval.ValidTime;
+import org.jboss.metadata.spi.retrieval.basic.BasicAnnotationsItem;
 import org.jboss.metadata.spi.retrieval.helper.AnnotationToMetaDataBridge;
 import org.jboss.metadata.spi.retrieval.helper.AnnotationsToMetaDatasBridge;
 import org.jboss.metadata.spi.scope.ScopeKey;
@@ -54,6 +57,8 @@
    /** The scope key */
    private ScopeKey scopeKey;
    
+   private volatile AnnotationsAnnotatedWithCache cache;
+   
    /**
     * Create a new AbstractMetaDataLoader.
     */
@@ -92,7 +97,47 @@
    {
       return retrieveAnnotations();
    }
+   
+   protected AnnotationsAnnotatedWithCache getAnnotationsAnnotatedWithCache()
+   {
+      if (cache == null)
+      {
+         synchronized (this)
+         {
+            if (cache == null)
+            {
+               cache = new AnnotationsAnnotatedWithCache();
+            }
+         }
+      }
+      return cache;
+   }
 
+   public AnnotationsItem retrieveAnnotationsAnnotatedWith(Class<? extends Annotation> meta)
+   {
+      AnnotationsItem item = getAnnotationsAnnotatedWithCache().getAnnotationsAnnotatedWith(meta);
+      if (item == null)
+      {
+         AnnotationsItem annotations = retrieveAnnotations();
+         List<AnnotationItem<? extends Annotation>> values = new ArrayList<AnnotationItem<? extends Annotation>>(annotations.getAnnotations().length);
+         for (AnnotationItem<? extends Annotation> current : annotations.getAnnotations())
+         {
+            for (Annotation ann : current.getAnnotation().annotationType().getAnnotations())
+            {
+               if (meta == ann.annotationType())
+               {
+                  values.add(current);
+                  break;
+               }
+            }
+         }
+         item = new BasicAnnotationsItem(this, values.toArray(new AnnotationItem[values.size()]));
+         cache.addAnnotationsAnnotatedWith(meta, item);
+      }
+      return item;
+   }
+
+
    @SuppressWarnings("unchecked")
    public <T> MetaDataItem<T> retrieveMetaData(Class<T> type)
    {
@@ -141,5 +186,12 @@
    public void invalidate()
    {
       validTime.invalidate();
+      invalidateAnnotationsAnnotatedWithCache();
    }
+   
+   protected void invalidateAnnotationsAnnotatedWithCache()
+   {
+      if (cache != null)
+         cache.invalidate();
+   }
 }

Added: projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/plugins/loader/AnnotationsAnnotatedWithCache.java
===================================================================
--- projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/plugins/loader/AnnotationsAnnotatedWithCache.java	                        (rev 0)
+++ projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/plugins/loader/AnnotationsAnnotatedWithCache.java	2009-12-04 16:56:15 UTC (rev 97470)
@@ -0,0 +1,56 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors. 
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/ 
+package org.jboss.metadata.plugins.loader;
+
+import java.lang.annotation.Annotation;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+import org.jboss.metadata.spi.retrieval.AnnotationsItem;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class AnnotationsAnnotatedWithCache
+{
+   private ConcurrentMap<Class<? extends Annotation>, AnnotationsItem> annotationsByMetaAnnotation = new ConcurrentHashMap<Class<? extends Annotation>, AnnotationsItem>();
+   
+   public AnnotationsItem getAnnotationsAnnotatedWith(Class<? extends Annotation> meta)
+   {
+       AnnotationsItem annotationsItem = annotationsByMetaAnnotation.get(meta);
+       if (annotationsItem != null)
+          return annotationsItem;
+       return null;
+   }
+   
+   public void addAnnotationsAnnotatedWith(Class<? extends Annotation> meta, AnnotationsItem item)
+   {
+      annotationsByMetaAnnotation.putIfAbsent(meta, item);
+   }
+   
+   public void invalidate()
+   {
+      annotationsByMetaAnnotation.clear();
+   }
+}

Modified: projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/plugins/loader/memory/MemoryMetaDataLoader.java
===================================================================
--- projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/plugins/loader/memory/MemoryMetaDataLoader.java	2009-12-04 16:39:11 UTC (rev 97469)
+++ projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/plugins/loader/memory/MemoryMetaDataLoader.java	2009-12-04 16:56:15 UTC (rev 97470)
@@ -186,6 +186,7 @@
       annotation.invalidate();
       invalidateAnnotationsItem();
       invalidateMetaDatasItem();
+      invalidateAnnotationsAnnotatedWithCache();
       return annotation.getAnnotation();
    }
 

Modified: projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/plugins/loader/thread/ThreadLocalMetaDataLoader.java
===================================================================
--- projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/plugins/loader/thread/ThreadLocalMetaDataLoader.java	2009-12-04 16:39:11 UTC (rev 97469)
+++ projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/plugins/loader/thread/ThreadLocalMetaDataLoader.java	2009-12-04 16:56:15 UTC (rev 97470)
@@ -156,6 +156,15 @@
       return delegate.removeAnnotation(annotationType);
    }
 
+   @Override
+   public AnnotationsItem retrieveAnnotationsAnnotatedWith(Class<? extends Annotation> meta)
+   {
+      MemoryMetaDataLoader delegate = threadLocal.get();
+      if (delegate == null)
+         return NO_ANNOTATIONS;
+      return delegate.retrieveAnnotationsAnnotatedWith(meta);
+   }
+
    public MetaDatasItem retrieveMetaData()
    {
       MemoryMetaDataLoader delegate = threadLocal.get();

Modified: projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/spi/MetaData.java
===================================================================
--- projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/spi/MetaData.java	2009-12-04 16:39:11 UTC (rev 97469)
+++ projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/spi/MetaData.java	2009-12-04 16:56:15 UTC (rev 97470)
@@ -77,6 +77,14 @@
     * @return true when present
     */
    boolean isAnnotationPresent(Class<? extends Annotation> annotationType);
+   
+   /**
+    * Get all the annotations annotated with the given meta annotation
+    * 
+    * @param the meta annotation
+    * @return the annotations annotated with the meta annotation
+    */
+   Annotation[] getAnnotationsAnnotatedWith(Class<? extends Annotation> meta);
 
    /**
     * Get metadata

Modified: projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/spi/retrieval/MetaDataRetrieval.java
===================================================================
--- projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/spi/retrieval/MetaDataRetrieval.java	2009-12-04 16:39:11 UTC (rev 97469)
+++ projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/spi/retrieval/MetaDataRetrieval.java	2009-12-04 16:56:15 UTC (rev 97470)
@@ -62,6 +62,15 @@
     * @return the annotations
     */
    AnnotationsItem retrieveLocalAnnotations();
+   
+   
+   /**
+    * Get all the annotations annotated with the given meta annotation
+    * 
+    * @param the meta annotation
+    * @return the annotations annotated with the meta annotation
+    */
+   AnnotationsItem retrieveAnnotationsAnnotatedWith(Class<? extends Annotation> meta);
 
    /**
     * Get annotation

Modified: projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/spi/retrieval/MetaDataRetrievalToMetaDataBridge.java
===================================================================
--- projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/spi/retrieval/MetaDataRetrievalToMetaDataBridge.java	2009-12-04 16:39:11 UTC (rev 97469)
+++ projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/spi/retrieval/MetaDataRetrievalToMetaDataBridge.java	2009-12-04 16:56:15 UTC (rev 97470)
@@ -82,6 +82,14 @@
       return item.getValue();
    }
 
+   public Annotation[] getAnnotationsAnnotatedWith(Class<? extends Annotation> meta)
+   {
+      AnnotationsItem item = retrieval.retrieveAnnotationsAnnotatedWith(meta);
+      if (item == null)
+         return NO_ANNOTATIONS;
+      return item.getValue();
+   }
+
    public Object[] getMetaData()
    {
       MetaDatasItem item = retrieval.retrieveMetaData();

Added: projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/spi/retrieval/cummulative/CummulativeAnnotationsFilter.java
===================================================================
--- projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/spi/retrieval/cummulative/CummulativeAnnotationsFilter.java	                        (rev 0)
+++ projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/spi/retrieval/cummulative/CummulativeAnnotationsFilter.java	2009-12-04 16:56:15 UTC (rev 97470)
@@ -0,0 +1,35 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors. 
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/ 
+package org.jboss.metadata.spi.retrieval.cummulative;
+
+import org.jboss.metadata.spi.retrieval.AnnotationsItem;
+import org.jboss.metadata.spi.retrieval.MetaDataRetrieval;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public interface CummulativeAnnotationsFilter
+{
+   AnnotationsItem getAnnotations(MetaDataRetrieval retrieval);
+}

Modified: projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/spi/retrieval/cummulative/CummulativeAnnotationsItem.java
===================================================================
--- projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/spi/retrieval/cummulative/CummulativeAnnotationsItem.java	2009-12-04 16:39:11 UTC (rev 97469)
+++ projects/jboss-mdr/trunk/src/main/java/org/jboss/metadata/spi/retrieval/cummulative/CummulativeAnnotationsItem.java	2009-12-04 16:56:15 UTC (rev 97470)
@@ -49,6 +49,8 @@
    /** The valid time */
    private long validTime;
    
+   private CummulativeAnnotationsFilter filter = AllAnnotationsFilter.INSTANCE;
+   
    /**
     * Create a new CummulativeAnnotationsItem.
     * 
@@ -57,11 +59,25 @@
     */
    public CummulativeAnnotationsItem(MetaDataContext context, boolean includeParent)
    {
+      this(context, includeParent, null);
+   }
+   
+   /**
+    * Create a new CummulativeAnnotationsItem.
+    * 
+    * @param context the context
+    * @param includeParent whether to include the parent
+    */
+   public CummulativeAnnotationsItem(MetaDataContext context, boolean includeParent, CummulativeAnnotationsFilter filter)
+   {
       if (context == null)
          throw new IllegalArgumentException("Null context");
 
       this.context = context;
       this.includeParent = includeParent;
+      if (filter != null)
+         this.filter = filter;
+
       init(context.getValidTime().getValidTime());
    }
 
@@ -131,7 +147,7 @@
       
       for (MetaDataRetrieval retrieval : retrievals)
       {
-         AnnotationsItem item = retrieval.retrieveAnnotations();
+         AnnotationsItem item = filter.getAnnotations(retrieval);
          if (item != null)
          {
             AnnotationItem<? extends Annotation>[] items = item.getAnnotations();
@@ -150,4 +166,14 @@
       setAnnotationItems(items);
       this.validTime = validTime;
    }
+   
+   private static class AllAnnotationsFilter implements CummulativeAnnotationsFilter
+   {
+      private static final CummulativeAnnotationsFilter INSTANCE = new AllAnnotationsFilter();
+      
+      public AnnotationsItem getAnnotations(MetaDataRetrieval retrieval)
+      {
+         return retrieval.retrieveAnnotations();
+      }
+   }
 }

Modified: projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/AbstractMetaDataTest.java
===================================================================
--- projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/AbstractMetaDataTest.java	2009-12-04 16:39:11 UTC (rev 97469)
+++ projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/AbstractMetaDataTest.java	2009-12-04 16:56:15 UTC (rev 97470)
@@ -1565,6 +1565,20 @@
    {
       return new ExpectedMetaData();
    }
+   
+   /**
+    * Create an expected annotations with the annotation types
+    * 
+    * @param types the annotation types
+    * @return the expected annotations
+    */
+   protected ExpectedAnnotations expectedAnnotations(Class<? extends Annotation>...types)
+   {
+      ExpectedAnnotations expected = new ExpectedAnnotations();
+      for (Class<? extends Annotation> type : types)
+         expected.add(type);
+      return expected;
+   }
 
    /**
     * Check the annotations from all retrieval methods
@@ -1597,6 +1611,102 @@
    }
    
    /**
+    * Check the annotations annotated with a meta annotation 
+    * 
+    * @param metaData the meta data
+    * @param metaAnnotation the meya annotation 
+    * @param expected the expected annotation classes
+    * @param local whether to test the local annotations
+    * @return the annotations found
+    * @throws Exception for any error
+    */
+   protected Annotation[] assertAnnotationsAnnotatedWith(MetaData metaData, Class<? extends Annotation> metaAnnotation, ExpectedAnnotations expected) throws Exception
+   {
+      assertNotNull(metaData);
+      assertNotNull(expected);
+      
+      Annotation[] result = metaData.getAnnotationsAnnotatedWith(metaAnnotation);
+      assertNotNull("Null result", result);
+      ExpectedAnnotations actual = emptyExpectedAnnotations();
+      for (Annotation annotation : result)
+      {
+         assertNotNull("Null annotation " + Arrays.asList(result), annotation);
+         actual.add(annotation.annotationType());
+      }
+      
+      assertExpectedAnnotations("Annotations", expected, actual);
+      return result;
+   }
+   
+   /**
+    * Check the annotations annotated with a meta annotation 
+    * 
+    * @param metaData the meta data retrieval
+    * @param metaAnnotation the meya annotation 
+    * @param expected the expected annotation classes
+    * @param local whether to test the local annotations
+    * @return the annotations found
+    * @throws Exception for any error
+    */
+   protected void assertAnnotationsAnnotatedWith(MetaDataRetrieval metaData, Class<? extends Annotation> metaAnnotation, ExpectedAnnotations expected) throws Exception
+   {
+      assertNotNull(metaData);
+      assertNotNull(expected);
+      
+      AnnotationsItem result = metaData.retrieveAnnotationsAnnotatedWith(metaAnnotation);
+      assertNotNull("Null result", result);
+      AnnotationItem<? extends Annotation>[] items = result.getAnnotations();
+      assertNotNull("Null items", items);
+      ExpectedAnnotations actual = emptyExpectedAnnotations();
+      for (AnnotationItem<? extends Annotation> item : items)
+      {
+         assertNotNull("Null annotation item " + Arrays.asList(items), item);
+         Annotation annotation = item.getAnnotation();
+         assertNotNull("Null annotation " + Arrays.asList(items), annotation);
+         actual.add(annotation.annotationType());
+      }
+      
+      assertExpectedAnnotations("Annotations", expected, actual);
+   }
+   
+   /**
+    * Check the annotations annotated with a meta annotation is not present
+    * 
+    * @param metaData the meta data
+    * @param metaAnnotation the meya annotation 
+    * @param expected the expected annotation classes
+    * @param local whether to test the local annotations
+    * @throws Exception for any error
+    */
+   protected void assertNoAnnotationsAnnotatedWith(MetaData metaData, Class<? extends Annotation> metaAnnotation) throws Exception
+   {
+      assertNotNull(metaData);
+      
+      Annotation[] result = metaData.getAnnotationsAnnotatedWith(metaAnnotation);
+      assertNotNull("Null result", result);
+      assertEmpty(result);
+   }
+   
+   /**
+    * Check the annotations annotated with a meta annotation is not present
+    * 
+    * @param metaData the meta data retrieval
+    * @param metaAnnotation the meya annotation 
+    * @param expected the expected annotation classes
+    * @param local whether to test the local annotations
+    * @throws Exception for any error
+    */
+   protected void assertNoAnnotationsAnnotatedWith(MetaDataRetrieval metaData, Class<? extends Annotation> metaAnnotation) throws Exception
+   {
+      assertNotNull(metaData);
+      
+      AnnotationsItem result = metaData.retrieveAnnotationsAnnotatedWith(metaAnnotation);
+      assertNotNull("Null result", result);
+      AnnotationItem<?>[] items = result.getAnnotations();
+      assertNotNull("Null items", items);
+      assertEmpty(items);
+   }
+   /**
     * Check the annotations
     * 
     * @param metaData the meta data

Modified: projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/context/MetaDataContextAnnotationTest.java
===================================================================
--- projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/context/MetaDataContextAnnotationTest.java	2009-12-04 16:39:11 UTC (rev 97469)
+++ projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/context/MetaDataContextAnnotationTest.java	2009-12-04 16:56:15 UTC (rev 97470)
@@ -24,6 +24,8 @@
 import org.jboss.metadata.spi.MetaData;
 import org.jboss.metadata.spi.loader.MutableMetaDataLoader;
 import org.jboss.test.metadata.shared.support.ExpectedAnnotations;
+import org.jboss.test.metadata.shared.support.MetaAnnotation1;
+import org.jboss.test.metadata.shared.support.MetaAnnotation2;
 import org.jboss.test.metadata.shared.support.TestAnnotation;
 import org.jboss.test.metadata.shared.support.TestAnnotation1;
 import org.jboss.test.metadata.shared.support.TestAnnotation1Impl;
@@ -49,15 +51,21 @@
       ExpectedAnnotations expected = emptyExpectedAnnotations();
       long last = metaData.getValidTime();
       assertNoAnnotation(metaData, TestAnnotation.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);
 
       TestAnnotation annotation = new TestAnnotationImpl();
       last = assertAddAnnotationNoPrevious(metaData, loader, annotation, expected, last);
       assertAnnotation(metaData, TestAnnotation.class);
+      assertAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class, expected);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);
       
       assertAllAnnotations(metaData, expected, local);
       
       assertRemoveAnnotation(metaData, loader, TestAnnotation.class, expected, last, false);
       assertNoAnnotation(metaData, TestAnnotation.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);
       
       assertAllAnnotations(metaData, expected, local);
    }
@@ -92,11 +100,15 @@
       long last = metaData.getValidTime();
       assertNoAnnotation(metaData, TestAnnotation1.class);
       assertNoAnnotation(metaData, TestAnnotation2.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);
 
       TestAnnotation1 annotation1 = new TestAnnotation1Impl();
       last = assertAddAnnotationNoPrevious(metaData, loader1, annotation1, expected, last);
       assertAnnotation(metaData, TestAnnotation1.class);
       assertNoAnnotation(metaData, TestAnnotation2.class);
+      assertAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class, expected);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);
       
       assertAllAnnotations(metaData, expected, local);
 
@@ -104,18 +116,25 @@
       last = assertAddAnnotationNoPrevious(metaData, loader2, annotation2, expected, last);
       assertAnnotation(metaData, TestAnnotation1.class);
       assertAnnotation(metaData, TestAnnotation2.class);
+      assertAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class, expectedAnnotations(TestAnnotation1.class));
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);
       
+      
       assertAllAnnotations(metaData, expected, local);
       
       assertRemoveAnnotation(metaData, loader1, TestAnnotation1.class, expected, last, false);
       assertNoAnnotation(metaData, TestAnnotation1.class);
       assertAnnotation(metaData, TestAnnotation2.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);
       
       assertAllAnnotations(metaData, expected, local);
       
       assertRemoveAnnotation(metaData, loader2, TestAnnotation2.class, expected, last, false);
       assertNoAnnotation(metaData, TestAnnotation1.class);
       assertNoAnnotation(metaData, TestAnnotation2.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);
       
       assertAllAnnotations(metaData, expected, local);
    }
@@ -221,26 +240,35 @@
       ExpectedAnnotations expected = emptyExpectedAnnotations();
       long last = metaData.getValidTime();
       assertNoAnnotation(metaData, TestAnnotation.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);
 
       TestAnnotation annotation1 = new TestAnnotationImpl();
       last = assertAddAnnotationNoPrevious(metaData, loader1, annotation1, expected, last);
       assertAnnotation(metaData, TestAnnotation.class);
+      assertAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class, expected);
       
       assertAllAnnotations(metaData, expected, local);
 
       TestAnnotation annotation2 = new TestAnnotationImpl();
       last = assertAddAnnotationWithPrevious(metaData, loader2, annotation2, last);
       assertAnnotation(metaData, TestAnnotation.class);
+      assertAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class, expected);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);
       
       assertAllAnnotations(metaData, expected, local);
       
       assertRemoveAnnotation(metaData, loader1, TestAnnotation.class, expected, last, true);
       assertAnnotation(metaData, TestAnnotation.class);
+      assertAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class, expected);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);
       
       assertAllAnnotations(metaData, expected, local);
       
       assertRemoveAnnotation(metaData, loader2, TestAnnotation.class, expected, last, false);
       assertNoAnnotation(metaData, TestAnnotation.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);
       
       assertAllAnnotations(metaData, expected, local);
    }

Modified: projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/loader/MutableAnnotationsTest.java
===================================================================
--- projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/loader/MutableAnnotationsTest.java	2009-12-04 16:39:11 UTC (rev 97469)
+++ projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/loader/MutableAnnotationsTest.java	2009-12-04 16:56:15 UTC (rev 97470)
@@ -23,6 +23,8 @@
 
 import org.jboss.test.metadata.AbstractMetaDataTest;
 import org.jboss.test.metadata.shared.support.ExpectedAnnotations;
+import org.jboss.test.metadata.shared.support.MetaAnnotation1;
+import org.jboss.test.metadata.shared.support.MetaAnnotation2;
 import org.jboss.test.metadata.shared.support.MetaDataAndMutableMetaData;
 import org.jboss.test.metadata.shared.support.NotPresentAnnotation;
 import org.jboss.test.metadata.shared.support.TestAnnotation;
@@ -65,16 +67,22 @@
       
       assertNoAnnotation(metaData, TestAnnotation.class);
       assertNoAnnotation(metaData, NotPresentAnnotation.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);
       assertAllAnnotations(metaData, expectedAnnotations);
       
       last = assertAddAnnotationNoPrevious(metaData, new TestAnnotationImpl(), expectedAnnotations, last);
       assertAnnotation(metaData, TestAnnotation.class);
       assertNoAnnotation(metaData, NotPresentAnnotation.class);
+      assertAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class, expectedAnnotations(TestAnnotation.class));
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);
       assertAllAnnotations(metaData, expectedAnnotations);
       
       assertRemoveAnnotation(metaData, TestAnnotation.class, expectedAnnotations, last);
       assertNoAnnotation(metaData, TestAnnotation.class);
       assertNoAnnotation(metaData, NotPresentAnnotation.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);
       assertAllAnnotations(metaData, expectedAnnotations);
    }
    
@@ -87,30 +95,40 @@
       assertNoAnnotation(metaData, TestAnnotation1.class);
       assertNoAnnotation(metaData, TestAnnotation2.class);
       assertNoAnnotation(metaData, NotPresentAnnotation.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);
       assertAllAnnotations(metaData, expectedAnnotations);
       
       last = assertAddAnnotationNoPrevious(metaData, new TestAnnotation1Impl(), expectedAnnotations, last);
       assertAnnotation(metaData, TestAnnotation1.class);
       assertNoAnnotation(metaData, TestAnnotation2.class);
       assertNoAnnotation(metaData, NotPresentAnnotation.class);
+      assertAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class, expectedAnnotations(TestAnnotation1.class));
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);
       assertAllAnnotations(metaData, expectedAnnotations);
 
       last = assertAddAnnotationNoPrevious(metaData, new TestAnnotation2Impl(), expectedAnnotations, last);
       assertAnnotation(metaData, TestAnnotation1.class);
       assertAnnotation(metaData, TestAnnotation2.class);
       assertNoAnnotation(metaData, NotPresentAnnotation.class);
+      assertAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class, expectedAnnotations(TestAnnotation1.class));
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);
       assertAllAnnotations(metaData, expectedAnnotations);
       
       assertRemoveAnnotation(metaData, TestAnnotation1.class, expectedAnnotations, last);
       assertNoAnnotation(metaData, TestAnnotation1.class);
       assertAnnotation(metaData, TestAnnotation2.class);
       assertNoAnnotation(metaData, NotPresentAnnotation.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);
       assertAllAnnotations(metaData, expectedAnnotations);
 
       assertRemoveAnnotation(metaData, TestAnnotation2.class, expectedAnnotations, last);
       assertNoAnnotation(metaData, TestAnnotation1.class);
       assertNoAnnotation(metaData, TestAnnotation2.class);
       assertNoAnnotation(metaData, NotPresentAnnotation.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);
       assertAllAnnotations(metaData, expectedAnnotations);
    }
    
@@ -122,16 +140,22 @@
       
       assertNoAnnotation(metaData, TestAnnotation.class);
       assertNoAnnotation(metaData, NotPresentAnnotation.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);
       assertAllAnnotations(metaData, expectedAnnotations);
       
       last = assertAddAnnotationNoPrevious(metaData, new TestAnnotationImpl(), expectedAnnotations, last);
       assertAnnotation(metaData, TestAnnotation.class);
       assertNoAnnotation(metaData, NotPresentAnnotation.class);
+      assertAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class, expectedAnnotations(TestAnnotation.class));
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);
       assertAllAnnotations(metaData, expectedAnnotations);
       
       last = assertAddAnnotationWithPrevious(metaData, new TestAnnotationImpl(), last);
       assertAnnotation(metaData, TestAnnotation.class);
       assertNoAnnotation(metaData, NotPresentAnnotation.class);
+      assertAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class, expectedAnnotations(TestAnnotation.class));
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);
       assertAllAnnotations(metaData, expectedAnnotations);
    }
    
@@ -143,17 +167,23 @@
       
       assertNoAnnotation(metaData, TestAnnotation.class);
       assertNoAnnotation(metaData, NotPresentAnnotation.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);
       assertAllAnnotations(metaData, expectedAnnotations);
       
       TestAnnotation annotation = new TestAnnotationImpl();
       last = assertAddAnnotationNoPrevious(metaData, annotation, expectedAnnotations, last);
       assertAnnotation(metaData, TestAnnotation.class);
       assertNoAnnotation(metaData, NotPresentAnnotation.class);
+      assertAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class, expectedAnnotations(TestAnnotation.class));
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);
       assertAllAnnotations(metaData, expectedAnnotations);
       
       assertAddAnnotationWithPreviousSameObject(metaData, annotation, last);
       assertAnnotation(metaData, TestAnnotation.class);
       assertNoAnnotation(metaData, NotPresentAnnotation.class);
+      assertAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class, expectedAnnotations(TestAnnotation.class));
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);
       assertAllAnnotations(metaData, expectedAnnotations);
    }
 

Modified: projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/loader/MutableMetaDataLoaderAnnotationsInvalidationTest.java
===================================================================
--- projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/loader/MutableMetaDataLoaderAnnotationsInvalidationTest.java	2009-12-04 16:39:11 UTC (rev 97469)
+++ projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/loader/MutableMetaDataLoaderAnnotationsInvalidationTest.java	2009-12-04 16:56:15 UTC (rev 97470)
@@ -24,6 +24,8 @@
 import org.jboss.metadata.spi.loader.MutableMetaDataLoader;
 import org.jboss.test.metadata.AbstractMetaDataTest;
 import org.jboss.test.metadata.shared.support.ExpectedAnnotations;
+import org.jboss.test.metadata.shared.support.MetaAnnotation1;
+import org.jboss.test.metadata.shared.support.MetaAnnotation2;
 import org.jboss.test.metadata.shared.support.NotPresentAnnotation;
 import org.jboss.test.metadata.shared.support.TestAnnotation;
 import org.jboss.test.metadata.shared.support.TestAnnotation1;
@@ -52,6 +54,8 @@
       ExpectedAnnotations expectedAnnotations = emptyExpectedAnnotations();
       
       assertNoAnnotation(metaData, NotPresentAnnotation.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);
       assertAllAnnotations(metaData, expectedAnnotations);
 
       assertValidTimeUnchanged(metaData, last);
@@ -65,16 +69,22 @@
       
       assertNoAnnotation(metaData, TestAnnotation.class);
       assertNoAnnotation(metaData, NotPresentAnnotation.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);
       assertAllAnnotations(metaData, expectedAnnotations);
       
       last = assertAddAnnotationNoPrevious(metaData, new TestAnnotationImpl(), expectedAnnotations, last);
       assertAnnotation(metaData, TestAnnotation.class);
       assertNoAnnotation(metaData, NotPresentAnnotation.class);
+      assertAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class, expectedAnnotations);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);
       assertAllAnnotations(metaData, expectedAnnotations);
       
       assertRemoveAnnotation(metaData, TestAnnotation.class, expectedAnnotations, last);
       assertNoAnnotation(metaData, TestAnnotation.class);
       assertNoAnnotation(metaData, NotPresentAnnotation.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);
       assertAllAnnotations(metaData, expectedAnnotations);
    }
    
@@ -87,30 +97,40 @@
       assertNoAnnotation(metaData, TestAnnotation1.class);
       assertNoAnnotation(metaData, TestAnnotation2.class);
       assertNoAnnotation(metaData, NotPresentAnnotation.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);
       assertAllAnnotations(metaData, expectedAnnotations);
       
       last = assertAddAnnotationNoPrevious(metaData, new TestAnnotation1Impl(), expectedAnnotations, last);
       assertAnnotation(metaData, TestAnnotation1.class);
       assertNoAnnotation(metaData, TestAnnotation2.class);
       assertNoAnnotation(metaData, NotPresentAnnotation.class);
+      assertAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class, expectedAnnotations);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);
       assertAllAnnotations(metaData, expectedAnnotations);
 
       last = assertAddAnnotationNoPrevious(metaData, new TestAnnotation2Impl(), expectedAnnotations, last);
       assertAnnotation(metaData, TestAnnotation1.class);
       assertAnnotation(metaData, TestAnnotation2.class);
       assertNoAnnotation(metaData, NotPresentAnnotation.class);
+      assertAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class, expectedAnnotations(TestAnnotation1.class));
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);
       assertAllAnnotations(metaData, expectedAnnotations);
       
       assertRemoveAnnotation(metaData, TestAnnotation1.class, expectedAnnotations, last);
       assertNoAnnotation(metaData, TestAnnotation1.class);
       assertAnnotation(metaData, TestAnnotation2.class);
       assertNoAnnotation(metaData, NotPresentAnnotation.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);
       assertAllAnnotations(metaData, expectedAnnotations);
 
       assertRemoveAnnotation(metaData, TestAnnotation2.class, expectedAnnotations, last);
       assertNoAnnotation(metaData, TestAnnotation1.class);
       assertNoAnnotation(metaData, TestAnnotation2.class);
       assertNoAnnotation(metaData, NotPresentAnnotation.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);
       assertAllAnnotations(metaData, expectedAnnotations);
    }
    

Modified: projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/loader/reflection/support/TestAnnotationWithValue.java
===================================================================
--- projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/loader/reflection/support/TestAnnotationWithValue.java	2009-12-04 16:39:11 UTC (rev 97469)
+++ projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/loader/reflection/support/TestAnnotationWithValue.java	2009-12-04 16:56:15 UTC (rev 97470)
@@ -24,7 +24,10 @@
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 
+import org.jboss.test.metadata.shared.support.MetaAnnotation1;
+
 @Retention(RetentionPolicy.RUNTIME)
+ at MetaAnnotation1
 public @interface TestAnnotationWithValue
 {
    String value();

Modified: projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/loader/reflection/test/AnnotatedElementLoaderDeclaredMethodSignatureUnitTestCase.java
===================================================================
--- projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/loader/reflection/test/AnnotatedElementLoaderDeclaredMethodSignatureUnitTestCase.java	2009-12-04 16:39:11 UTC (rev 97469)
+++ projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/loader/reflection/test/AnnotatedElementLoaderDeclaredMethodSignatureUnitTestCase.java	2009-12-04 16:56:15 UTC (rev 97470)
@@ -31,6 +31,7 @@
 import org.jboss.test.metadata.loader.reflection.support.TestAnnotationWithValue;
 import org.jboss.test.metadata.loader.reflection.support.TestSub;
 import org.jboss.test.metadata.loader.reflection.support.TestSuper;
+import org.jboss.test.metadata.shared.support.MetaAnnotation1;
 
 /**
  * AnnotatedElementLoaderNotPublicUnitTestCase.
@@ -78,6 +79,7 @@
       TestAnnotationWithValue annotation = metaData.getAnnotation(TestAnnotationWithValue.class);
       assertNotNull(annotation);
       assertEquals(expected, annotation.value());
+      assertAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class, expectedAnnotations(TestAnnotationWithValue.class));
    }
 
    protected MetaData createMetaData()

Modified: projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/loader/reflection/test/AnnotatedElementLoaderNotPublicUnitTestCase.java
===================================================================
--- projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/loader/reflection/test/AnnotatedElementLoaderNotPublicUnitTestCase.java	2009-12-04 16:39:11 UTC (rev 97469)
+++ projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/loader/reflection/test/AnnotatedElementLoaderNotPublicUnitTestCase.java	2009-12-04 16:56:15 UTC (rev 97470)
@@ -34,6 +34,8 @@
 import org.jboss.test.metadata.loader.reflection.support.NotPublic;
 import org.jboss.test.metadata.loader.reflection.support.SuperClassOfNotPublic;
 import org.jboss.test.metadata.shared.support.ExpectedAnnotations;
+import org.jboss.test.metadata.shared.support.MetaAnnotation1;
+import org.jboss.test.metadata.shared.support.MetaAnnotation2;
 import org.jboss.test.metadata.shared.support.NotPresentAnnotation;
 import org.jboss.test.metadata.shared.support.TestAnnotation;
 
@@ -103,8 +105,11 @@
       
       expectedAnnotations.add(TestAnnotation.class);
       assertAllAnnotations(metaData, expectedAnnotations, false);
-   }
 
+      assertAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class, expectedAnnotations);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);
+}
+
    protected MetaData createMetaData()
    {
       AnnotatedElementMetaDataLoader loader = new AnnotatedElementMetaDataLoader(NotPublic.class);

Modified: projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/retrieval/support/TestMetaDataRetrieval.java
===================================================================
--- projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/retrieval/support/TestMetaDataRetrieval.java	2009-12-04 16:39:11 UTC (rev 97469)
+++ projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/retrieval/support/TestMetaDataRetrieval.java	2009-12-04 16:56:15 UTC (rev 97470)
@@ -75,6 +75,12 @@
       lastMethod = "retrieveLocalAnnotations";
       return null;
    }
+   
+   public AnnotationsItem retrieveAnnotationsAnnotatedWith(Class<? extends Annotation> meta)
+   {
+      lastMethod = "retrieveAnnotationsAnnotatedWith";
+      return null;
+   }
 
    public MetaDatasItem retrieveMetaData()
    {

Modified: projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/retrieval/test/HelpersUnitTestCase.java
===================================================================
--- projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/retrieval/test/HelpersUnitTestCase.java	2009-12-04 16:39:11 UTC (rev 97469)
+++ projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/retrieval/test/HelpersUnitTestCase.java	2009-12-04 16:56:15 UTC (rev 97470)
@@ -35,6 +35,7 @@
 import org.jboss.metadata.spi.retrieval.simple.SimpleMetaDataItem;
 import org.jboss.test.metadata.AbstractMetaDataTest;
 import org.jboss.test.metadata.retrieval.support.TestMetaDataRetrieval;
+import org.jboss.test.metadata.shared.support.MetaAnnotation1;
 import org.jboss.test.metadata.shared.support.TestAnnotation;
 import org.jboss.test.metadata.shared.support.TestAnnotation1;
 import org.jboss.test.metadata.shared.support.TestAnnotation1Impl;
@@ -115,6 +116,9 @@
 
       metaData.isMetaDataPresent("Hello", Object.class);
       assertEquals("retrieveMetaData(String)", test.lastMethod);
+      
+      metaData.getAnnotationsAnnotatedWith(MetaAnnotation1.class);
+      assertEquals("retrieveAnnotationsAnnotatedWith", test.lastMethod);
    }
 
    public void testAnnotationsToMetaDatasBridge() throws Exception

Modified: projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/shared/BasicAnnotationsTest.java
===================================================================
--- projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/shared/BasicAnnotationsTest.java	2009-12-04 16:39:11 UTC (rev 97469)
+++ projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/shared/BasicAnnotationsTest.java	2009-12-04 16:56:15 UTC (rev 97470)
@@ -24,6 +24,8 @@
 import org.jboss.metadata.spi.MetaData;
 import org.jboss.test.metadata.AbstractMetaDataTest;
 import org.jboss.test.metadata.shared.support.ExpectedAnnotations;
+import org.jboss.test.metadata.shared.support.MetaAnnotation1;
+import org.jboss.test.metadata.shared.support.MetaAnnotation2;
 import org.jboss.test.metadata.shared.support.NotPresentAnnotation;
 import org.jboss.test.metadata.shared.support.TestAnnotation;
 import org.jboss.test.metadata.shared.support.TestAnnotation1;
@@ -53,6 +55,9 @@
       assertNoAnnotation(metaData, NotPresentAnnotation.class);
       
       assertAllAnnotations(metaData, expectedAnnotations, local);
+      
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);
    }
    
    protected abstract MetaData setupEmpty();
@@ -67,6 +72,9 @@
       
       expectedAnnotations.add(TestAnnotation.class);
       assertAllAnnotations(metaData, expectedAnnotations, local);
+      
+      assertAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class, expectedAnnotations);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);
    }
    
    protected abstract MetaData setupTestAnnotation();
@@ -83,6 +91,10 @@
       expectedAnnotations.add(TestAnnotation1.class);
       expectedAnnotations.add(TestAnnotation2.class);
       assertAllAnnotations(metaData, expectedAnnotations, local);
+      
+      expectedAnnotations.remove(TestAnnotation2.class);
+      assertAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class, expectedAnnotations);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);
    }
    
    protected abstract MetaData setupTestAnnotation12();

Modified: projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/shared/ComponentBasicAnnotationsTest.java
===================================================================
--- projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/shared/ComponentBasicAnnotationsTest.java	2009-12-04 16:39:11 UTC (rev 97469)
+++ projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/shared/ComponentBasicAnnotationsTest.java	2009-12-04 16:56:15 UTC (rev 97470)
@@ -29,6 +29,8 @@
 import org.jboss.metadata.spi.signature.MethodSignature;
 import org.jboss.test.metadata.AbstractMetaDataTest;
 import org.jboss.test.metadata.shared.support.ExpectedAnnotations;
+import org.jboss.test.metadata.shared.support.MetaAnnotation1;
+import org.jboss.test.metadata.shared.support.MetaAnnotation2;
 import org.jboss.test.metadata.shared.support.NotPresentAnnotation;
 import org.jboss.test.metadata.shared.support.TestAnnotation;
 import org.jboss.test.metadata.shared.support.TestAnnotation1;
@@ -103,6 +105,9 @@
       assertNoAnnotation(metaData, NotPresentAnnotation.class);
       
       assertAllAnnotations(metaData, expectedAnnotations, local);
+      
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);
    }
    
    public void testFieldTestAnnotation() throws Exception
@@ -151,6 +156,9 @@
       
       expectedAnnotations.add(TestAnnotation.class);
       assertAllAnnotations(metaData, expectedAnnotations, local);
+      
+      assertAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class, expectedAnnotations);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);      
    }
    
    public void testFieldTestAnnotation12() throws Exception
@@ -199,6 +207,9 @@
       assertNoAnnotation(metaData, NotPresentAnnotation.class);
       
       expectedAnnotations.add(TestAnnotation1.class);
+      assertAnnotationsAnnotatedWith(metaData, MetaAnnotation1.class, expectedAnnotations);
+      assertNoAnnotationsAnnotatedWith(metaData, MetaAnnotation2.class);
+
       expectedAnnotations.add(TestAnnotation2.class);
       assertAllAnnotations(metaData, expectedAnnotations, local);
    }

Added: projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/shared/support/MetaAnnotation1.java
===================================================================
--- projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/shared/support/MetaAnnotation1.java	                        (rev 0)
+++ projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/shared/support/MetaAnnotation1.java	2009-12-04 16:56:15 UTC (rev 97470)
@@ -0,0 +1,38 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors. 
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/ 
+package org.jboss.test.metadata.shared.support;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.ANNOTATION_TYPE)
+public @interface MetaAnnotation1 {
+
+}

Added: projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/shared/support/MetaAnnotation2.java
===================================================================
--- projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/shared/support/MetaAnnotation2.java	                        (rev 0)
+++ projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/shared/support/MetaAnnotation2.java	2009-12-04 16:56:15 UTC (rev 97470)
@@ -0,0 +1,38 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors. 
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/ 
+package org.jboss.test.metadata.shared.support;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target(ElementType.ANNOTATION_TYPE)
+public @interface MetaAnnotation2 {
+
+}

Modified: projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/shared/support/MetaDataAndMutableMetaDataImpl.java
===================================================================
--- projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/shared/support/MetaDataAndMutableMetaDataImpl.java	2009-12-04 16:39:11 UTC (rev 97469)
+++ projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/shared/support/MetaDataAndMutableMetaDataImpl.java	2009-12-04 16:56:15 UTC (rev 97470)
@@ -55,6 +55,11 @@
       return metaData.getAnnotations();
    }
 
+   public Annotation[] getAnnotationsAnnotatedWith(Class<? extends Annotation> meta)
+   {
+      return metaData.getAnnotationsAnnotatedWith(meta);
+   }
+   
    public Annotation[] getLocalAnnotations()
    {
       return metaData.getLocalAnnotations();

Modified: projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/shared/support/TestAnnotation.java
===================================================================
--- projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/shared/support/TestAnnotation.java	2009-12-04 16:39:11 UTC (rev 97469)
+++ projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/shared/support/TestAnnotation.java	2009-12-04 16:56:15 UTC (rev 97470)
@@ -31,6 +31,7 @@
  * @version $Revision$
  */
 @Retention(RetentionPolicy.RUNTIME)
+ at MetaAnnotation1
 public @interface TestAnnotation
 {
 }

Modified: projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/shared/support/TestAnnotation1.java
===================================================================
--- projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/shared/support/TestAnnotation1.java	2009-12-04 16:39:11 UTC (rev 97469)
+++ projects/jboss-mdr/trunk/src/test/java/org/jboss/test/metadata/shared/support/TestAnnotation1.java	2009-12-04 16:56:15 UTC (rev 97470)
@@ -31,6 +31,7 @@
  * @version $Revision$
  */
 @Retention(RetentionPolicy.RUNTIME)
+ at MetaAnnotation1
 public @interface TestAnnotation1
 {
 }




More information about the jboss-cvs-commits mailing list