[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