[jboss-cvs] JBossAS SVN: r101388 - in projects/kernel/branches/jsr330: weld-int/src/main/java/org/jboss/kernel/weld/metadata/api/annotations and 4 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Wed Feb 24 07:13:16 EST 2010
Author: kabir.khan at jboss.com
Date: 2010-02-24 07:13:13 -0500 (Wed, 24 Feb 2010)
New Revision: 101388
Added:
projects/kernel/branches/jsr330/kernel/src/main/java/org/jboss/kernel/plugins/annotations/Jsr330InjectAnnotationPlugin.java
projects/kernel/branches/jsr330/kernel/src/main/java/org/jboss/kernel/plugins/annotations/Jsr330InjectConstructorAnnotationPlugin.java
projects/kernel/branches/jsr330/kernel/src/main/java/org/jboss/kernel/plugins/annotations/Jsr330InjectFieldAnnotationPlugin.java
projects/kernel/branches/jsr330/kernel/src/main/java/org/jboss/kernel/plugins/annotations/Jsr330InjectMethodAnnotationPlugin.java
projects/kernel/branches/jsr330/weld-int/src/main/java/org/jboss/kernel/weld/metadata/api/annotations/Weld.java
projects/kernel/branches/jsr330/weld-int/src/test/java/org/jboss/test/kernel/weld/annotated/support/InjectAnnotatedIgnoreInjectBean.java
projects/kernel/branches/jsr330/weld-int/src/test/java/org/jboss/test/kernel/weld/annotated/support/NotAnnotatedIgnoreInjectBean.java
projects/kernel/branches/jsr330/weld-int/src/test/java/org/jboss/test/kernel/weld/annotated/support/WeldAndInjectAnnotatedIgnoreInjectBean.java
projects/kernel/branches/jsr330/weld-int/src/test/java/org/jboss/test/kernel/weld/annotated/support/WeldAnnotatedIgnoreInjectBean.java
Modified:
projects/kernel/branches/jsr330/weld-int/src/main/java/org/jboss/kernel/weld/plugins/annotated/MDRAnnotated.java
projects/kernel/branches/jsr330/weld-int/src/main/java/org/jboss/kernel/weld/plugins/annotated/MDRAnnotatedMember.java
projects/kernel/branches/jsr330/weld-int/src/main/java/org/jboss/kernel/weld/plugins/annotated/MDRAnnotatedType.java
projects/kernel/branches/jsr330/weld-int/src/test/java/org/jboss/test/kernel/weld/annotated/test/AnnotatedTypeTestCase.java
projects/kernel/branches/jsr330/weld-int/src/test/java/org/jboss/test/kernel/weld/wbtomc/support/McBeanInitializerMethod.java
Log:
Only inject from Weld if annotations have a @Weld annotation
Added: projects/kernel/branches/jsr330/kernel/src/main/java/org/jboss/kernel/plugins/annotations/Jsr330InjectAnnotationPlugin.java
===================================================================
--- projects/kernel/branches/jsr330/kernel/src/main/java/org/jboss/kernel/plugins/annotations/Jsr330InjectAnnotationPlugin.java (rev 0)
+++ projects/kernel/branches/jsr330/kernel/src/main/java/org/jboss/kernel/plugins/annotations/Jsr330InjectAnnotationPlugin.java 2010-02-24 12:13:13 UTC (rev 101388)
@@ -0,0 +1,48 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt 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.kernel.plugins.annotations;
+
+import javax.inject.Inject;
+
+import org.jboss.beans.metadata.plugins.AbstractInjectionValueMetaData;
+import org.jboss.beans.metadata.spi.ValueMetaData;
+
+/**
+ * Inject value annotation plugin.
+ *
+ * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
+ */
+public class Jsr330InjectAnnotationPlugin extends PropertyAnnotationPlugin<Inject>
+{
+ public final static Jsr330InjectAnnotationPlugin INSTANCE = new Jsr330InjectAnnotationPlugin();
+
+ protected Jsr330InjectAnnotationPlugin()
+ {
+ super(Inject.class);
+ }
+
+ @Override
+ public ValueMetaData createValueMetaData(Inject annotation)
+ {
+ return new AbstractInjectionValueMetaData();
+ }
+}
Added: projects/kernel/branches/jsr330/kernel/src/main/java/org/jboss/kernel/plugins/annotations/Jsr330InjectConstructorAnnotationPlugin.java
===================================================================
--- projects/kernel/branches/jsr330/kernel/src/main/java/org/jboss/kernel/plugins/annotations/Jsr330InjectConstructorAnnotationPlugin.java (rev 0)
+++ projects/kernel/branches/jsr330/kernel/src/main/java/org/jboss/kernel/plugins/annotations/Jsr330InjectConstructorAnnotationPlugin.java 2010-02-24 12:13:13 UTC (rev 101388)
@@ -0,0 +1,129 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt 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.kernel.plugins.annotations;
+
+import java.lang.annotation.Annotation;
+import java.lang.annotation.ElementType;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+import javax.inject.Inject;
+
+import org.jboss.annotation.factory.AnnotationCreator;
+import org.jboss.beans.metadata.api.annotations.Constructor;
+import org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
+import org.jboss.beans.metadata.plugins.AbstractConstructorMetaData;
+import org.jboss.beans.metadata.plugins.AbstractInjectionValueMetaData;
+import org.jboss.beans.metadata.plugins.AbstractParameterMetaData;
+import org.jboss.beans.metadata.spi.BeanMetaData;
+import org.jboss.beans.metadata.spi.MetaDataVisitorNode;
+import org.jboss.beans.metadata.spi.ParameterMetaData;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.metadata.spi.MetaData;
+import org.jboss.reflect.spi.ConstructorInfo;
+import org.jboss.reflect.spi.ParameterInfo;
+
+/**
+ * Constructor annotation plugin.
+ *
+ * @author <a href="mailto:kabir.khan at jboss.com">Kabir Khan</a>
+ */
+public class Jsr330InjectConstructorAnnotationPlugin extends AbstractConstructorParameterAnnotationPlugin<Inject, AbstractConstructorMetaData>
+{
+ public Jsr330InjectConstructorAnnotationPlugin(Map<Class<? extends Annotation>, Annotation2ValueMetaDataAdapter<? extends Annotation>> adapters)
+ {
+ super(Inject.class, adapters);
+ }
+
+ protected boolean checkAnnotatedInfo(ElementType type)
+ {
+ return ElementType.CONSTRUCTOR == type;
+ }
+
+ protected boolean isMetaDataAlreadyPresent(ConstructorInfo info, Constructor annotation, BeanMetaData beanMetaData)
+ {
+ return beanMetaData.getConstructor() != null;
+ }
+
+ protected ParameterInfo[] getParameters(ConstructorInfo info)
+ {
+ return info.getParameters();
+ }
+
+ protected List<MetaDataVisitorNode> handleParameterlessInfo(ConstructorInfo info, Inject annotation, BeanMetaData beanMetaData)
+ {
+ // do nothing, default will be used
+ return null;
+ }
+
+ @Override
+ protected List<? extends MetaDataVisitorNode> internalApplyAnnotation(ConstructorInfo info, MetaData retrieval, Inject annotation, KernelControllerContext context) throws Throwable
+ {
+ //Add the standard MC @Inject annotation to each parameter so that the AbstractInjectionValueMetaData gets created
+ ParameterInfo[] params = info.getParameters();
+ if (params.length == 0)
+ return null;
+
+ if (context.getBeanMetaData() instanceof AbstractBeanMetaData == false)
+ throw new IllegalStateException("Bean meta data is not AbstractBeanMetaData");
+
+ AbstractBeanMetaData beanMetaData = (AbstractBeanMetaData)context.getBeanMetaData();
+
+ AbstractConstructorMetaData cmd = null;
+ if (beanMetaData.getConstructor() == null)
+ {
+ cmd = new AbstractConstructorMetaData();
+ beanMetaData.setConstructor(cmd);
+ }
+ else
+ {
+ if (beanMetaData.getConstructor() instanceof AbstractConstructorMetaData == false)
+ throw new IllegalStateException("Constructor is not AbstractConstructorMetaData");
+ else
+ cmd = (AbstractConstructorMetaData)beanMetaData.getConstructor();
+ }
+
+
+ List<ParameterMetaData> parameters = cmd.getParameters();
+ if (parameters == null)
+ {
+ parameters = new ArrayList<ParameterMetaData>();
+ cmd.setParameters(parameters);
+ }
+
+ for (int i = 0 ; i < params.length ; i++)
+ {
+ AbstractInjectionValueMetaData inject = new AbstractInjectionValueMetaData();
+ AbstractParameterMetaData param = new AbstractParameterMetaData(params[i].getParameterType().getName(), inject);
+ parameters.add(param);
+ }
+
+ return Collections.singletonList(cmd);
+ }
+
+ protected void setParameterizedMetaData(AbstractConstructorMetaData parameterizedMetaData, BeanMetaData beanMetaData)
+ {
+ //Just override to satisfy the interface requirements
+ }
+}
Added: projects/kernel/branches/jsr330/kernel/src/main/java/org/jboss/kernel/plugins/annotations/Jsr330InjectFieldAnnotationPlugin.java
===================================================================
--- projects/kernel/branches/jsr330/kernel/src/main/java/org/jboss/kernel/plugins/annotations/Jsr330InjectFieldAnnotationPlugin.java (rev 0)
+++ projects/kernel/branches/jsr330/kernel/src/main/java/org/jboss/kernel/plugins/annotations/Jsr330InjectFieldAnnotationPlugin.java 2010-02-24 12:13:13 UTC (rev 101388)
@@ -0,0 +1,48 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt 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.kernel.plugins.annotations;
+
+import javax.inject.Inject;
+
+import org.jboss.beans.metadata.plugins.AbstractInjectionValueMetaData;
+import org.jboss.beans.metadata.spi.ValueMetaData;
+
+/**
+ * Value factory field annotation plugin.
+ *
+ * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
+ */
+public class Jsr330InjectFieldAnnotationPlugin extends FieldAnnotationPlugin<Inject>
+{
+ public static final Jsr330InjectFieldAnnotationPlugin INSTANCE = new Jsr330InjectFieldAnnotationPlugin();
+
+ protected Jsr330InjectFieldAnnotationPlugin()
+ {
+ super(Inject.class);
+ }
+
+ @Override
+ public ValueMetaData createValueMetaData(Inject annotation)
+ {
+ return new AbstractInjectionValueMetaData();
+ }
+}
Added: projects/kernel/branches/jsr330/kernel/src/main/java/org/jboss/kernel/plugins/annotations/Jsr330InjectMethodAnnotationPlugin.java
===================================================================
--- projects/kernel/branches/jsr330/kernel/src/main/java/org/jboss/kernel/plugins/annotations/Jsr330InjectMethodAnnotationPlugin.java (rev 0)
+++ projects/kernel/branches/jsr330/kernel/src/main/java/org/jboss/kernel/plugins/annotations/Jsr330InjectMethodAnnotationPlugin.java 2010-02-24 12:13:13 UTC (rev 101388)
@@ -0,0 +1,121 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt 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.kernel.plugins.annotations;
+
+import java.lang.annotation.Annotation;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+import javax.inject.Inject;
+
+import org.jboss.beans.metadata.plugins.AbstractBeanMetaData;
+import org.jboss.beans.metadata.plugins.AbstractConstructorMetaData;
+import org.jboss.beans.metadata.plugins.AbstractInjectionValueMetaData;
+import org.jboss.beans.metadata.plugins.AbstractInstallMetaData;
+import org.jboss.beans.metadata.plugins.AbstractParameterMetaData;
+import org.jboss.beans.metadata.spi.BeanMetaData;
+import org.jboss.beans.metadata.spi.InstallMetaData;
+import org.jboss.beans.metadata.spi.MetaDataVisitorNode;
+import org.jboss.beans.metadata.spi.ParameterMetaData;
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
+import org.jboss.metadata.spi.MetaData;
+import org.jboss.reflect.spi.ConstructorInfo;
+import org.jboss.reflect.spi.MethodInfo;
+import org.jboss.reflect.spi.ParameterInfo;
+
+/**
+ * Install method annotation plugin.
+ *
+ * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
+ */
+public class Jsr330InjectMethodAnnotationPlugin extends InstallationParameterAnnotationPlugin<Inject>
+{
+ public Jsr330InjectMethodAnnotationPlugin(Map<Class<? extends Annotation>, Annotation2ValueMetaDataAdapter<? extends Annotation>> adapters)
+ {
+ super(Inject.class, adapters);
+ }
+
+ protected List<InstallMetaData> getInstalls(BeanMetaData beanMetaData)
+ {
+ return beanMetaData.getInstalls();
+ }
+
+// protected AbstractInstallMetaData createParametrizedMetaData(MethodInfo info, Inject annotation)
+// {
+// AbstractInstallMetaData install = new AbstractInstallMetaData();
+// install.setMethodName(info.getName());
+// install.setState(ControllerState.CONFIGURED);
+// install.setDependentState(ControllerState.INSTALLED);
+// return install;
+// }
+
+ @Override
+ protected List<? extends MetaDataVisitorNode> internalApplyAnnotation(MethodInfo info, MetaData retrieval, Inject annotation, KernelControllerContext context) throws Throwable
+ {
+ //Add the standard MC @Inject annotation to each parameter so that the AbstractInjectionValueMetaData gets created
+ ParameterInfo[] params = info.getParameters();
+ if (params.length == 0)
+ return null;
+
+ if (context.getBeanMetaData() instanceof AbstractBeanMetaData == false)
+ throw new IllegalStateException("Bean meta data is not AbstractBeanMetaData");
+
+ AbstractBeanMetaData beanMetaData = (AbstractBeanMetaData)context.getBeanMetaData();
+
+ List<InstallMetaData> installs = beanMetaData.getInstalls();
+ if (installs == null)
+ {
+ installs = new ArrayList<InstallMetaData>();
+ beanMetaData.setInstalls(installs);
+ }
+ AbstractInstallMetaData install = new AbstractInstallMetaData();
+ install.setMethodName(info.getName());
+ install.setState(ControllerState.CONFIGURED);
+ install.setDependentState(ControllerState.INSTALLED);
+ installs.add(install);
+
+
+ List<ParameterMetaData> parameters = install.getParameters();
+ if (parameters == null)
+ {
+ parameters = new ArrayList<ParameterMetaData>();
+ install.setParameters(parameters);
+ }
+
+ for (int i = 0 ; i < params.length ; i++)
+ {
+ AbstractInjectionValueMetaData inject = new AbstractInjectionValueMetaData();
+ AbstractParameterMetaData param = new AbstractParameterMetaData(params[i].getParameterType().getName(), inject);
+ parameters.add(param);
+ }
+
+ return Collections.singletonList(install);
+ }
+
+ protected void setParameterizedMetaData(AbstractInstallMetaData parameterizedMetaData, BeanMetaData beanMetaData)
+ {
+ //Just override to satisfy the interface requirements
+ }
+}
Added: projects/kernel/branches/jsr330/weld-int/src/main/java/org/jboss/kernel/weld/metadata/api/annotations/Weld.java
===================================================================
--- projects/kernel/branches/jsr330/weld-int/src/main/java/org/jboss/kernel/weld/metadata/api/annotations/Weld.java (rev 0)
+++ projects/kernel/branches/jsr330/weld-int/src/main/java/org/jboss/kernel/weld/metadata/api/annotations/Weld.java 2010-02-24 12:13:13 UTC (rev 101388)
@@ -0,0 +1,51 @@
+/*
+* 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.kernel.weld.metadata.api.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.inject.Inject;
+
+/**
+ * MC supports JSR 330 annotations (i.e. {@link Inject}). Use this
+ * annotation to select if a particular injected value should come from Weld.
+ *
+ * <pre>
+ * public class Bean{
+ * @Inject Thing t;
+ * @Weld @Inject Other o;
+ * }
+ * </pre>
+ *
+ * Here the MC kernel will try to inject <code>t</code> from the MC, and <code>o</code> from Weld.
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+ at Retention(RetentionPolicy.RUNTIME)
+ at Target({ElementType.FIELD, ElementType.CONSTRUCTOR, ElementType.METHOD})
+public @interface Weld {
+
+}
Modified: projects/kernel/branches/jsr330/weld-int/src/main/java/org/jboss/kernel/weld/plugins/annotated/MDRAnnotated.java
===================================================================
--- projects/kernel/branches/jsr330/weld-int/src/main/java/org/jboss/kernel/weld/plugins/annotated/MDRAnnotated.java 2010-02-24 12:04:36 UTC (rev 101387)
+++ projects/kernel/branches/jsr330/weld-int/src/main/java/org/jboss/kernel/weld/plugins/annotated/MDRAnnotated.java 2010-02-24 12:13:13 UTC (rev 101388)
@@ -29,7 +29,9 @@
import java.util.Set;
import javax.enterprise.inject.spi.Annotated;
+import javax.inject.Inject;
+import org.jboss.kernel.weld.metadata.api.annotations.Weld;
import org.jboss.metadata.spi.MetaData;
/**
@@ -126,11 +128,11 @@
{
Set<Annotation> annotations = new HashSet<Annotation>(getDelegate().getAnnotations());
if (metaData == null)
- return annotations;
+ return trimInjectIfWeldAbsent(annotations);
Annotation[] metaDataAnnotations = metaData.getAnnotations();
if (metaDataAnnotations.length == 0)
- return annotations;
+ return trimInjectIfWeldAbsent(annotations);
if (annotations.size() == 0)
{
@@ -139,7 +141,7 @@
{
metaDataAnns.add(ann);
}
- return metaDataAnns;
+ return trimInjectIfWeldAbsent(metaDataAnns);
}
Map<Class<?>, Annotation> done = new HashMap<Class<?>, Annotation>();
@@ -150,7 +152,7 @@
{
done.put(annotation.annotationType(), annotation);
}
- return new HashSet<Annotation>(done.values());
+ return trimInjectIfWeldAbsent(new HashSet<Annotation>(done.values()));
}
/**
@@ -167,4 +169,10 @@
}
return getDelegate().isAnnotationPresent(annotationType);
}
+
+ protected Set<Annotation> trimInjectIfWeldAbsent(Set<Annotation> annotations)
+ {
+ //Empty, only implement for members
+ return annotations;
+ }
}
Modified: projects/kernel/branches/jsr330/weld-int/src/main/java/org/jboss/kernel/weld/plugins/annotated/MDRAnnotatedMember.java
===================================================================
--- projects/kernel/branches/jsr330/weld-int/src/main/java/org/jboss/kernel/weld/plugins/annotated/MDRAnnotatedMember.java 2010-02-24 12:04:36 UTC (rev 101387)
+++ projects/kernel/branches/jsr330/weld-int/src/main/java/org/jboss/kernel/weld/plugins/annotated/MDRAnnotatedMember.java 2010-02-24 12:13:13 UTC (rev 101388)
@@ -21,10 +21,15 @@
*/
package org.jboss.kernel.weld.plugins.annotated;
+import java.lang.annotation.Annotation;
+import java.util.Set;
+
import javax.enterprise.inject.spi.Annotated;
import javax.enterprise.inject.spi.AnnotatedMember;
import javax.enterprise.inject.spi.AnnotatedType;
+import javax.inject.Inject;
+import org.jboss.kernel.weld.metadata.api.annotations.Weld;
import org.jboss.metadata.spi.MetaData;
/**
@@ -96,4 +101,33 @@
return getDelegate().isStatic();
}
+ protected Set<Annotation> trimInjectIfWeldAbsent(Set<Annotation> annotations)
+ {
+ if (!super.isAnnotationPresent(Weld.class) && super.isAnnotationPresent(Inject.class))
+ {
+ for (Annotation ann : annotations)
+ {
+ if (ann.annotationType() == Inject.class)
+ annotations.remove(ann);
+ }
+ }
+ return annotations;
+ }
+
+ public boolean isAnnotationPresent(Class<? extends Annotation> annotationType)
+ {
+ if (annotationType.equals(Inject.class) && !super.isAnnotationPresent(Weld.class))
+ return false;
+
+ return super.isAnnotationPresent(annotationType);
+ }
+
+ public <T extends Annotation> T getAnnotation(Class<T> annotationType)
+ {
+ if (annotationType.equals(Inject.class) && !isAnnotationPresent(Weld.class))
+ return null;
+
+ return super.getAnnotation(annotationType);
+ }
+
}
Modified: projects/kernel/branches/jsr330/weld-int/src/main/java/org/jboss/kernel/weld/plugins/annotated/MDRAnnotatedType.java
===================================================================
--- projects/kernel/branches/jsr330/weld-int/src/main/java/org/jboss/kernel/weld/plugins/annotated/MDRAnnotatedType.java 2010-02-24 12:04:36 UTC (rev 101387)
+++ projects/kernel/branches/jsr330/weld-int/src/main/java/org/jboss/kernel/weld/plugins/annotated/MDRAnnotatedType.java 2010-02-24 12:13:13 UTC (rev 101388)
@@ -66,57 +66,48 @@
}
/**
- * Decorates the fields if MDR metadata is present
+ * Decorates the fields
*
* @return the fields
*/
private Set<AnnotatedField<? super X>> initialiseAnnotatedFields()
{
- if (getMetaData() == null)
- return getDelegate().getFields();
-
Set<AnnotatedField<? super X>> fields = new HashSet<AnnotatedField<? super X>>();
for (AnnotatedField<? super X> field : getDelegate().getFields())
{
- MetaData fieldMetaData = getMetaData().getComponentMetaData(new FieldSignature(field.getJavaMember()));
+ MetaData fieldMetaData = getMetaData() == null ? null : getMetaData().getComponentMetaData(new FieldSignature(field.getJavaMember()));
fields.add(new MDRAnnotatedField<X>(this, field, fieldMetaData));
}
return fields;
}
/**
- * Decorates the constructors if MDR metadata is present
+ * Decorates the constructors
*
* @return the constructors
*/
private Set<AnnotatedConstructor<X>> initialiseConstructors()
{
- if (getMetaData() == null)
- return getDelegate().getConstructors();
-
Set<AnnotatedConstructor<X>> constructors = new HashSet<AnnotatedConstructor<X>>();
for (AnnotatedConstructor<X> constructor : getDelegate().getConstructors())
{
- MetaData constructorMetaData = getMetaData().getComponentMetaData(new ConstructorSignature(constructor.getJavaMember()));
+ MetaData constructorMetaData = getMetaData() == null ? null : getMetaData().getComponentMetaData(new ConstructorSignature(constructor.getJavaMember()));
constructors.add(new MDRAnnotatedConstructor<X>(this, constructor, constructorMetaData, getMetaData()));
}
return constructors;
}
/**
- * Decorates the methods if MDR metadata is present
+ * Decorates the methods
*
* @return the methods
*/
private Set<AnnotatedMethod<? super X>> initialiseMethods()
{
- if (getMetaData() == null)
- return getDelegate().getMethods();
-
Set<AnnotatedMethod<? super X>> methods = new HashSet<AnnotatedMethod<? super X>>();
for (AnnotatedMethod<? super X> method : getDelegate().getMethods())
{
- MetaData MethodMetaData = getMetaData().getComponentMetaData(new MethodSignature(method.getJavaMember()));
+ MetaData MethodMetaData = getMetaData() == null ? null : getMetaData().getComponentMetaData(new MethodSignature(method.getJavaMember()));
methods.add(new MDRAnnotatedMethod<X>(this, method, MethodMetaData, getMetaData()));
}
return methods;
Added: projects/kernel/branches/jsr330/weld-int/src/test/java/org/jboss/test/kernel/weld/annotated/support/InjectAnnotatedIgnoreInjectBean.java
===================================================================
--- projects/kernel/branches/jsr330/weld-int/src/test/java/org/jboss/test/kernel/weld/annotated/support/InjectAnnotatedIgnoreInjectBean.java (rev 0)
+++ projects/kernel/branches/jsr330/weld-int/src/test/java/org/jboss/test/kernel/weld/annotated/support/InjectAnnotatedIgnoreInjectBean.java 2010-02-24 12:13:13 UTC (rev 101388)
@@ -0,0 +1,61 @@
+/*
+* 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;
+
+import org.jboss.kernel.weld.metadata.api.annotations.Weld;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class InjectAnnotatedIgnoreInjectBean
+{
+ @Inject
+ public int hidden;
+
+ @Inject
+ public int weld;
+
+ @Inject
+ public InjectAnnotatedIgnoreInjectBean(@Test1("XXX") int param)
+ {
+ }
+
+ @Inject
+ public InjectAnnotatedIgnoreInjectBean(@Test1("XXX") long param)
+ {
+ }
+
+ @Inject
+ public void hidden(@Test1("XXX") int param)
+ {
+ }
+
+ @Inject
+ public void weld(@Test1("XXX") int param)
+ {
+ }
+
+}
Added: projects/kernel/branches/jsr330/weld-int/src/test/java/org/jboss/test/kernel/weld/annotated/support/NotAnnotatedIgnoreInjectBean.java
===================================================================
--- projects/kernel/branches/jsr330/weld-int/src/test/java/org/jboss/test/kernel/weld/annotated/support/NotAnnotatedIgnoreInjectBean.java (rev 0)
+++ projects/kernel/branches/jsr330/weld-int/src/test/java/org/jboss/test/kernel/weld/annotated/support/NotAnnotatedIgnoreInjectBean.java 2010-02-24 12:13:13 UTC (rev 101388)
@@ -0,0 +1,52 @@
+/*
+* 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;
+
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class NotAnnotatedIgnoreInjectBean
+{
+ public int hidden;
+
+ public int weld;
+
+ public NotAnnotatedIgnoreInjectBean(@Test1("XXX") int param)
+ {
+ }
+
+ public NotAnnotatedIgnoreInjectBean(@Test1("XXX") long param)
+ {
+ }
+
+ public void hidden(@Test1("XXX") int param)
+ {
+ }
+
+ public void weld(@Test1("XXX") int param)
+ {
+ }
+
+}
Added: projects/kernel/branches/jsr330/weld-int/src/test/java/org/jboss/test/kernel/weld/annotated/support/WeldAndInjectAnnotatedIgnoreInjectBean.java
===================================================================
--- projects/kernel/branches/jsr330/weld-int/src/test/java/org/jboss/test/kernel/weld/annotated/support/WeldAndInjectAnnotatedIgnoreInjectBean.java (rev 0)
+++ projects/kernel/branches/jsr330/weld-int/src/test/java/org/jboss/test/kernel/weld/annotated/support/WeldAndInjectAnnotatedIgnoreInjectBean.java 2010-02-24 12:13:13 UTC (rev 101388)
@@ -0,0 +1,64 @@
+/*
+* 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;
+
+import org.jboss.kernel.weld.metadata.api.annotations.Weld;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class WeldAndInjectAnnotatedIgnoreInjectBean
+{
+ @Inject
+ public int hidden;
+
+ @Weld
+ @Inject
+ public int weld;
+
+ @Inject
+ public WeldAndInjectAnnotatedIgnoreInjectBean(@Test1("XXX") int param)
+ {
+ }
+
+ @Weld
+ @Inject
+ public WeldAndInjectAnnotatedIgnoreInjectBean(@Test1("XXX") long param)
+ {
+ }
+
+ @Inject
+ public void hidden(@Test1("XXX") int param)
+ {
+ }
+
+ @Weld
+ @Inject
+ public void weld(@Test1("XXX") int param)
+ {
+ }
+
+}
Added: projects/kernel/branches/jsr330/weld-int/src/test/java/org/jboss/test/kernel/weld/annotated/support/WeldAnnotatedIgnoreInjectBean.java
===================================================================
--- projects/kernel/branches/jsr330/weld-int/src/test/java/org/jboss/test/kernel/weld/annotated/support/WeldAnnotatedIgnoreInjectBean.java (rev 0)
+++ projects/kernel/branches/jsr330/weld-int/src/test/java/org/jboss/test/kernel/weld/annotated/support/WeldAnnotatedIgnoreInjectBean.java 2010-02-24 12:13:13 UTC (rev 101388)
@@ -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.test.kernel.weld.annotated.support;
+
+import org.jboss.kernel.weld.metadata.api.annotations.Weld;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class WeldAnnotatedIgnoreInjectBean
+{
+ public int hidden;
+
+ @Weld
+ public int weld;
+
+ public WeldAnnotatedIgnoreInjectBean(@Test1("XXX") int param)
+ {
+ }
+
+ @Weld
+ public WeldAnnotatedIgnoreInjectBean(@Test1("XXX") long param)
+ {
+ }
+
+ public void hidden(@Test1("XXX") int param)
+ {
+ }
+
+ @Weld
+ public void weld(@Test1("XXX") int param)
+ {
+ }
+
+}
Modified: projects/kernel/branches/jsr330/weld-int/src/test/java/org/jboss/test/kernel/weld/annotated/test/AnnotatedTypeTestCase.java
===================================================================
--- projects/kernel/branches/jsr330/weld-int/src/test/java/org/jboss/test/kernel/weld/annotated/test/AnnotatedTypeTestCase.java 2010-02-24 12:04:36 UTC (rev 101387)
+++ projects/kernel/branches/jsr330/weld-int/src/test/java/org/jboss/test/kernel/weld/annotated/test/AnnotatedTypeTestCase.java 2010-02-24 12:13:13 UTC (rev 101388)
@@ -33,11 +33,13 @@
import javax.enterprise.inject.spi.AnnotatedMethod;
import javax.enterprise.inject.spi.AnnotatedParameter;
import javax.enterprise.inject.spi.AnnotatedType;
+import javax.inject.Inject;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.jboss.annotation.factory.AnnotationCreator;
+import org.jboss.kernel.weld.metadata.api.annotations.Weld;
import org.jboss.kernel.weld.spi.annotated.MDRAnnotatedTypeFactory;
import org.jboss.metadata.plugins.loader.memory.MemoryMetaDataLoader;
import org.jboss.metadata.spi.MetaData;
@@ -49,12 +51,16 @@
import org.jboss.metadata.spi.signature.MethodSignature;
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.NotAnnotatedIgnoreInjectBean;
+import org.jboss.test.kernel.weld.annotated.support.WeldAndInjectAnnotatedIgnoreInjectBean;
import org.jboss.test.kernel.weld.annotated.support.Child;
import org.jboss.test.kernel.weld.annotated.support.NotAnnotatedBean;
import org.jboss.test.kernel.weld.annotated.support.Parent;
import org.jboss.test.kernel.weld.annotated.support.Test1;
import org.jboss.test.kernel.weld.annotated.support.Test2;
import org.jboss.test.kernel.weld.annotated.support.Test3;
+import org.jboss.test.kernel.weld.annotated.support.WeldAnnotatedIgnoreInjectBean;
/**
*
@@ -63,6 +69,8 @@
*/
public class AnnotatedTypeTestCase extends AbstractWeldMcTest
{
+ private static final String MDR_ANNOTATED_TYPE_NAME = "org.jboss.kernel.weld.plugins.annotated.MDRAnnotatedType";
+
public AnnotatedTypeTestCase(String name)
{
super(name);
@@ -90,12 +98,14 @@
public void testNoAnnotationsOnClassNullMetaData() throws Exception
{
AnnotatedType<NotAnnotatedBean> type = createAnnotatedType(NotAnnotatedBean.class, null);
+ assertMDRAnnotated(type);
checkNotAnnotatedNoAnnotations(type);
}
public void testNoAnnotationsOnClassEmptyMetaData() throws Exception
{
AnnotatedType<NotAnnotatedBean> type = createAnnotatedType(NotAnnotatedBean.class, createEmptyMetaData());
+ assertMDRAnnotated(type);
checkNotAnnotatedNoAnnotations(type);
}
@@ -104,7 +114,8 @@
{
MetaData metaData = createMetaDataWithAnnotations(NotAnnotatedBean.class);
AnnotatedType<NotAnnotatedBean> type = createAnnotatedType(NotAnnotatedBean.class, metaData);
-
+ assertMDRAnnotated(type);
+
assertAnnotations(type, "A", Test1.class, Test2.class);
assertSize(2, type.getConstructors());
@@ -147,12 +158,14 @@
public void testAnnotationsOnClassNullMetaData() throws Exception
{
AnnotatedType<AnnotatedBean> type = createAnnotatedType(AnnotatedBean.class, null);
+ assertMDRAnnotated(type);
checkAnnotatedBeanNoMetaData(type);
}
public void testAnnotationsOnClassEmptyMetaData() throws Exception
{
AnnotatedType<AnnotatedBean> type = createAnnotatedType(AnnotatedBean.class, createEmptyMetaData());
+ assertMDRAnnotated(type);
checkAnnotatedBeanNoMetaData(type);
}
@@ -161,7 +174,8 @@
{
MetaData metaData = createMetaDataWithAnnotations(AnnotatedBean.class);
AnnotatedType<AnnotatedBean> type = createAnnotatedType(AnnotatedBean.class, metaData);
-
+ assertMDRAnnotated(type);
+
assertAnnotations(type, "A", Test1.class, Test2.class, Test3.class);
assertSize(2, type.getConstructors());
@@ -315,6 +329,185 @@
}
}
+ public void testNonWeldInjectIgnoredAllAnnotations() throws Exception
+ {
+ AnnotatedType<WeldAndInjectAnnotatedIgnoreInjectBean> type = createAnnotatedType(WeldAndInjectAnnotatedIgnoreInjectBean.class, null);
+ checkNonWeldInjectIgnored(type);
+ }
+
+ public void testNonWeldInjectIgnoredWeldFromAnnotations() throws Exception
+ {
+ MemoryMetaDataLoader loader = new MemoryMetaDataLoader();
+
+ Class<?> clazz = InjectAnnotatedIgnoreInjectBean.class;
+ Constructor<?> weldConstructor = clazz.getDeclaredConstructor(Long.TYPE);
+ MemoryMetaDataLoader component = new MemoryMetaDataLoader();
+ component.addAnnotation(createWeld());
+ loader.addComponentMetaDataRetrieval(new ConstructorSignature(weldConstructor), component);
+
+ Field weldField = clazz.getDeclaredField("weld");
+ component = new MemoryMetaDataLoader();
+ component.addAnnotation(createWeld());
+ loader.addComponentMetaDataRetrieval(new FieldSignature(weldField), component);
+
+ Method weldMethod = clazz.getDeclaredMethod("weld", Integer.TYPE);
+ component = new MemoryMetaDataLoader();
+ component.addAnnotation(createWeld());
+ loader.addComponentMetaDataRetrieval(new MethodSignature(weldMethod), component);
+
+ MetaData metaData = new MetaDataRetrievalToMetaDataBridge(loader);
+
+ AnnotatedType<InjectAnnotatedIgnoreInjectBean> type = createAnnotatedType(InjectAnnotatedIgnoreInjectBean.class, metaData);
+ checkNonWeldInjectIgnored(type);
+ }
+
+ public void testNonWeldInjectIgnoredInjectFromAnnotations() throws Exception
+ {
+ MemoryMetaDataLoader loader = new MemoryMetaDataLoader();
+
+ Class<?> clazz = InjectAnnotatedIgnoreInjectBean.class;
+ Constructor<?> weldConstructor = clazz.getDeclaredConstructor(Long.TYPE);
+ MemoryMetaDataLoader component = new MemoryMetaDataLoader();
+ component.addAnnotation(createInject());
+ loader.addComponentMetaDataRetrieval(new ConstructorSignature(weldConstructor), component);
+
+ Constructor<?> hiddenConstructor = clazz.getDeclaredConstructor(Integer.TYPE);
+ component = new MemoryMetaDataLoader();
+ component.addAnnotation(createInject());
+ loader.addComponentMetaDataRetrieval(new ConstructorSignature(hiddenConstructor), component);
+
+ Field weldField = clazz.getDeclaredField("weld");
+ component = new MemoryMetaDataLoader();
+ component.addAnnotation(createInject());
+ loader.addComponentMetaDataRetrieval(new FieldSignature(weldField), component);
+
+ Field hiddenField = clazz.getDeclaredField("hidden");
+ component = new MemoryMetaDataLoader();
+ component.addAnnotation(createInject());
+ loader.addComponentMetaDataRetrieval(new FieldSignature(hiddenField), component);
+
+ Method weldMethod = clazz.getDeclaredMethod("weld", Integer.TYPE);
+ component = new MemoryMetaDataLoader();
+ component.addAnnotation(createInject());
+ loader.addComponentMetaDataRetrieval(new MethodSignature(weldMethod), component);
+
+ Method hiddenMethod = clazz.getDeclaredMethod("hidden", Integer.TYPE);
+ component = new MemoryMetaDataLoader();
+ component.addAnnotation(createInject());
+ loader.addComponentMetaDataRetrieval(new MethodSignature(hiddenMethod), component);
+
+ MetaData metaData = new MetaDataRetrievalToMetaDataBridge(loader);
+
+ AnnotatedType<WeldAnnotatedIgnoreInjectBean> type = createAnnotatedType(WeldAnnotatedIgnoreInjectBean.class, metaData);
+ checkNonWeldInjectIgnored(type);
+ }
+
+ public void testNonWeldInjectIgnoredNoAnnotations() throws Exception
+ {
+ MemoryMetaDataLoader loader = new MemoryMetaDataLoader();
+
+ Class<?> clazz = InjectAnnotatedIgnoreInjectBean.class;
+ Constructor<?> weldConstructor = clazz.getDeclaredConstructor(Long.TYPE);
+ MemoryMetaDataLoader component = new MemoryMetaDataLoader();
+ component.addAnnotation(createInject());
+ component.addAnnotation(createWeld());
+ loader.addComponentMetaDataRetrieval(new ConstructorSignature(weldConstructor), component);
+
+ Constructor<?> hiddenConstructor = clazz.getDeclaredConstructor(Integer.TYPE);
+ component = new MemoryMetaDataLoader();
+ component.addAnnotation(createInject());
+ loader.addComponentMetaDataRetrieval(new ConstructorSignature(hiddenConstructor), component);
+
+ Field weldField = clazz.getDeclaredField("weld");
+ component = new MemoryMetaDataLoader();
+ component.addAnnotation(createInject());
+ component.addAnnotation(createWeld());
+ loader.addComponentMetaDataRetrieval(new FieldSignature(weldField), component);
+
+ Field hiddenField = clazz.getDeclaredField("hidden");
+ component = new MemoryMetaDataLoader();
+ component.addAnnotation(createInject());
+ loader.addComponentMetaDataRetrieval(new FieldSignature(hiddenField), component);
+
+ Method weldMethod = clazz.getDeclaredMethod("weld", Integer.TYPE);
+ component = new MemoryMetaDataLoader();
+ component.addAnnotation(createInject());
+ component.addAnnotation(createWeld());
+ loader.addComponentMetaDataRetrieval(new MethodSignature(weldMethod), component);
+
+ Method hiddenMethod = clazz.getDeclaredMethod("hidden", Integer.TYPE);
+ component = new MemoryMetaDataLoader();
+ component.addAnnotation(createInject());
+ loader.addComponentMetaDataRetrieval(new MethodSignature(hiddenMethod), component);
+
+ MetaData metaData = new MetaDataRetrievalToMetaDataBridge(loader);
+
+ AnnotatedType<NotAnnotatedIgnoreInjectBean> type = createAnnotatedType(NotAnnotatedIgnoreInjectBean.class, metaData);
+ checkNonWeldInjectIgnored(type);
+ }
+
+ private void checkNonWeldInjectIgnored(AnnotatedType<?> type) throws Exception
+ {
+ assertMDRAnnotated(type);
+ assertSize(2, type.getFields());
+ for (AnnotatedField<?> field : type.getFields())
+ {
+ if (field.getJavaMember().getName().equals("weld"))
+ {
+ assertAnnotations(field, null, Weld.class, Inject.class);
+ }
+ else if (field.getJavaMember().getName().equals("hidden"))
+ {
+ assertNoAnnotations(field);
+ assertNoInject(field);
+ }
+ else
+ {
+ fail("Unknown field");
+ }
+ }
+
+ assertSize(2, type.getConstructors());
+ for (AnnotatedConstructor<?> ctor : type.getConstructors())
+ {
+ if (ctor.getJavaMember().getParameterTypes().length != 1)
+ fail("Unknown constructor");
+ if (ctor.getJavaMember().getParameterTypes()[0].equals(Integer.TYPE))
+ {
+ assertNoAnnotations(ctor);
+ assertNoInject(ctor);
+ assertAnnotations(ctor.getParameters().get(0), "XXX", Test1.class);
+ }
+ else if (ctor.getJavaMember().getParameterTypes()[0].equals(Long.TYPE))
+ {
+ assertAnnotations(ctor, null, Weld.class, Inject.class);
+ assertAnnotations(ctor.getParameters().get(0), "XXX", Test1.class);
+ }
+ else
+ fail("Unknown constructor");
+ }
+
+ assertSize(2, type.getMethods());
+ for (AnnotatedMethod<?> method : type.getMethods())
+ {
+ if (method.getJavaMember().getName().equals("weld"))
+ {
+ assertAnnotations(method, null, Weld.class, Inject.class);
+ assertAnnotations(method.getParameters().get(0), "XXX", Test1.class);
+ }
+ else if (method.getJavaMember().getName().equals("hidden"))
+ {
+ assertNoAnnotations(method);
+ assertNoInject(method);
+ assertAnnotations(method.getParameters().get(0), "XXX", Test1.class);
+ }
+ else
+ fail("Unknown method");
+ }
+ }
+
+
+
@SuppressWarnings("unchecked")
private void checkAnnotationsOnParentClass(AnnotatedType<? super Child> type)
{
@@ -333,34 +526,34 @@
private void checkNotAnnotatedNoAnnotations(AnnotatedType<?> type)
{
- assertAnnotations(type);
+ assertNoAnnotations(type);
assertSize(2, type.getConstructors());
for (AnnotatedConstructor<?> ctor : type.getConstructors())
{
- assertAnnotations(ctor);
+ assertNoAnnotations(ctor);
for (AnnotatedParameter<?> param : ctor.getParameters())
{
- assertAnnotations(param);
+ assertNoAnnotations(param);
}
}
assertSize(2, type.getMethods());
for (AnnotatedMethod<?> method : type.getMethods())
{
- assertAnnotations(method);
+ assertNoAnnotations(method);
for (AnnotatedParameter<?> param : method.getParameters())
{
- assertAnnotations(param);
+ assertNoAnnotations(param);
}
}
assertSize(1, type.getFields());
for (AnnotatedField<?> field : type.getFields())
{
- assertAnnotations(field);
+ assertNoAnnotations(field);
}
}
@@ -398,15 +591,21 @@
}
}
- private void assertAnnotations(Annotated annotated)
+ private void assertNoInject(Annotated annotated)
{
+ assertNull(annotated.getAnnotation(Inject.class));
+ assertFalse(annotated.isAnnotationPresent(Inject.class));
+ }
+
+ private void assertNoAnnotations(Annotated annotated)
+ {
assertAnnotations(annotated, null);
}
private void assertAnnotations(Annotated annotated, String test1String, Class<? extends Annotation>...annotations)
{
Set<Annotation> actual = annotated.getAnnotations();
- assertEquals(actual.size(), annotations.length);
+ assertEquals(annotations.length, actual.size());
for (Class<? extends Annotation> clazz : annotations)
{
@@ -428,6 +627,7 @@
assertEquals(found, ann);
if (clazz == Test1.class && test1String != null)
assertEquals(test1String, ((Test1)ann).value());
+ assertTrue(annotated.isAnnotationPresent(clazz));
}
}
@@ -539,4 +739,20 @@
{
return (Test2)AnnotationCreator.createAnnotation("@" + Test2.class.getName(), (ClassLoader)null);
}
+
+ private Weld createWeld() throws Exception
+ {
+ return (Weld)AnnotationCreator.createAnnotation("@" + Weld.class.getName(), (ClassLoader)null);
+ }
+
+ private Inject createInject() throws Exception
+ {
+ return (Inject)AnnotationCreator.createAnnotation("@" + Inject.class.getName(), (ClassLoader)null);
+ }
+
+ private void assertMDRAnnotated(AnnotatedType<?> type)
+ {
+ assertNotNull(type);
+ assertEquals(MDR_ANNOTATED_TYPE_NAME, type.getClass().getName());
+ }
}
Modified: projects/kernel/branches/jsr330/weld-int/src/test/java/org/jboss/test/kernel/weld/wbtomc/support/McBeanInitializerMethod.java
===================================================================
--- projects/kernel/branches/jsr330/weld-int/src/test/java/org/jboss/test/kernel/weld/wbtomc/support/McBeanInitializerMethod.java 2010-02-24 12:04:36 UTC (rev 101387)
+++ projects/kernel/branches/jsr330/weld-int/src/test/java/org/jboss/test/kernel/weld/wbtomc/support/McBeanInitializerMethod.java 2010-02-24 12:13:13 UTC (rev 101388)
@@ -24,7 +24,9 @@
import javax.enterprise.inject.Default;
import javax.inject.Inject;
+import org.jboss.kernel.weld.metadata.api.annotations.Weld;
+
/**
*
* @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
@@ -36,7 +38,7 @@
WebBean nonInject;
- @Inject
+ @Weld @Inject
public void initializerMethod(@Default WebBean bean)
{
this.bean = bean;
More information about the jboss-cvs-commits
mailing list