[jboss-cvs] JBossAS SVN: r102083 - in projects/kernel/trunk/weld-int/src: test/java/org/jboss/test/kernel/weld/annotated/support and 1 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Mar 8 15:04:20 EST 2010


Author: kabir.khan at jboss.com
Date: 2010-03-08 15:04:19 -0500 (Mon, 08 Mar 2010)
New Revision: 102083

Added:
   projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/annotated/support/InjectAnnotatedIgnoreInjectMoreAnnotationsBean.java
Modified:
   projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/annotated/MDRAnnotatedMember.java
   projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/annotated/test/AnnotatedTypeTestCase.java
Log:
[JBKERNEL-111] Fix concurrentmodification exception removing @Inject annotation when @Weld is not present, but other annotations are

Modified: projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/annotated/MDRAnnotatedMember.java
===================================================================
--- projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/annotated/MDRAnnotatedMember.java	2010-03-08 20:02:59 UTC (rev 102082)
+++ projects/kernel/trunk/weld-int/src/main/java/org/jboss/kernel/weld/plugins/annotated/MDRAnnotatedMember.java	2010-03-08 20:04:19 UTC (rev 102083)
@@ -22,6 +22,8 @@
 package org.jboss.kernel.weld.plugins.annotated;
 
 import java.lang.annotation.Annotation;
+import java.util.Collections;
+import java.util.HashSet;
 import java.util.Set;
 
 import javax.enterprise.inject.spi.Annotated;
@@ -44,6 +46,8 @@
    private MDRAnnotatedType<X> owner;
    private volatile AnnotatedType<X> declaringOwner;
    
+   private static final Set<Annotation> EMPTY_ANNOTATIONS = Collections.unmodifiableSet(Collections.<Annotation>emptySet());
+   
    /**
     * Constructor
     *
@@ -105,11 +109,18 @@
    {
       if (!super.isAnnotationPresent(Weld.class) && super.isAnnotationPresent(Inject.class))
       {
+         if (annotations.size() == 1)
+            return EMPTY_ANNOTATIONS;
+            
+         Set<Annotation> result = new HashSet<Annotation>();
          for (Annotation ann : annotations)
          {
-            if (ann.annotationType() == Inject.class)
-               annotations.remove(ann);
+            if (ann.annotationType() != Inject.class)
+            {
+               result.add(ann);
+            }
          }
+         return result;
       }
       return annotations;
    }

Added: projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/annotated/support/InjectAnnotatedIgnoreInjectMoreAnnotationsBean.java
===================================================================
--- projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/annotated/support/InjectAnnotatedIgnoreInjectMoreAnnotationsBean.java	                        (rev 0)
+++ projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/annotated/support/InjectAnnotatedIgnoreInjectMoreAnnotationsBean.java	2010-03-08 20:04:19 UTC (rev 102083)
@@ -0,0 +1,45 @@
+/*
+* 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.kernel.weld.annotated.support;
+
+import javax.inject.Inject;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class InjectAnnotatedIgnoreInjectMoreAnnotationsBean
+{
+   @Inject @Test2
+   public int hidden;
+   
+   @Inject @Test2
+   public InjectAnnotatedIgnoreInjectMoreAnnotationsBean()
+   {
+   }
+
+   @Inject @Test2
+   public void hidden()
+   {
+   }
+}

Modified: projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/annotated/test/AnnotatedTypeTestCase.java
===================================================================
--- projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/annotated/test/AnnotatedTypeTestCase.java	2010-03-08 20:02:59 UTC (rev 102082)
+++ projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/annotated/test/AnnotatedTypeTestCase.java	2010-03-08 20:04:19 UTC (rev 102083)
@@ -52,6 +52,7 @@
 import org.jboss.test.kernel.weld.AbstractWeldMcTest;
 import org.jboss.test.kernel.weld.annotated.support.AnnotatedBean;
 import org.jboss.test.kernel.weld.annotated.support.InjectAnnotatedIgnoreInjectBean;
+import org.jboss.test.kernel.weld.annotated.support.InjectAnnotatedIgnoreInjectMoreAnnotationsBean;
 import org.jboss.test.kernel.weld.annotated.support.NotAnnotatedIgnoreInjectBean;
 import org.jboss.test.kernel.weld.annotated.support.WeldAndInjectAnnotatedIgnoreInjectBean;
 import org.jboss.test.kernel.weld.annotated.support.Child;
@@ -335,6 +336,30 @@
       checkNonWeldInjectIgnored(type);
    }
    
+   public void testNonWeldInjectIgnoredMoreAnnotationsAllAnnotations() throws Exception
+   {
+      AnnotatedType<InjectAnnotatedIgnoreInjectMoreAnnotationsBean> type = createAnnotatedType(InjectAnnotatedIgnoreInjectMoreAnnotationsBean.class, null);
+      assertMDRAnnotated(type);
+      
+      Set<AnnotatedField<? super InjectAnnotatedIgnoreInjectMoreAnnotationsBean>> fields = type.getFields();
+      assertEquals(1, fields.size());
+      AnnotatedField<? super InjectAnnotatedIgnoreInjectMoreAnnotationsBean> field = fields.iterator().next();
+      assertFalse(field.isAnnotationPresent(Inject.class));
+      assertAnnotations(field, null, Test2.class);
+      
+      Set<AnnotatedConstructor<InjectAnnotatedIgnoreInjectMoreAnnotationsBean>> constructors = type.getConstructors();
+      assertEquals(1, constructors.size());
+      AnnotatedConstructor<InjectAnnotatedIgnoreInjectMoreAnnotationsBean> constructor = constructors.iterator().next();
+      assertFalse(constructor.isAnnotationPresent(Inject.class));
+      assertAnnotations(constructor, null, Test2.class);
+      
+      Set<AnnotatedMethod<? super InjectAnnotatedIgnoreInjectMoreAnnotationsBean>> methods = type.getMethods();
+      assertEquals(1, methods.size());
+      AnnotatedMethod<? super InjectAnnotatedIgnoreInjectMoreAnnotationsBean> method = methods.iterator().next();
+      assertFalse(method.isAnnotationPresent(Inject.class));
+      assertAnnotations(method, null, Test2.class);
+   }
+   
    public void testNonWeldInjectIgnoredWeldFromAnnotations() throws Exception
    {
       MemoryMetaDataLoader loader = new MemoryMetaDataLoader();




More information about the jboss-cvs-commits mailing list