From 8919deaab89842783837785cd85de71792797274 Mon Sep 17 00:00:00 2001 From: Pete Muir Date: Tue, 27 Jul 2010 00:48:07 +0100 Subject: [PATCH] WELDX-120 --- .../bean/generic/GenericProducerMethod.java | 9 ++-- .../test/bean/generic/field/Baz.java | 6 +++ .../field/ProducersOnGenericBeanTest.java | 14 ++++++ .../test/bean/generic/field/Wibble.java | 43 +++++++++++++++++++ .../test/bean/generic/field/Wobble.java | 33 ++++++++++++++ 5 files changed, 100 insertions(+), 5 deletions(-) create mode 100644 impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/field/Wibble.java create mode 100644 impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/field/Wobble.java diff --git a/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericProducerMethod.java b/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericProducerMethod.java index 1b922bc..6fbbff9 100644 --- a/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericProducerMethod.java +++ b/impl/src/main/java/org/jboss/weld/extensions/bean/generic/GenericProducerMethod.java @@ -1,7 +1,5 @@ package org.jboss.weld.extensions.bean.generic; -import static org.jboss.weld.extensions.util.Reflections.invokeMethod; - import java.lang.annotation.Annotation; import java.lang.reflect.Type; import java.util.Set; @@ -11,20 +9,21 @@ import javax.enterprise.inject.spi.Bean; import javax.enterprise.inject.spi.BeanManager; +import org.jboss.weld.extensions.bean.InjectableMethod; import org.jboss.weld.extensions.util.Synthetic; // TODO Make this passivation capable class GenericProducerMethod extends AbstactGenericBean { - private final AnnotatedMethod method; + private final InjectableMethod method; private final Type declaringBeanType; private final Annotation declaringBeanQualifier; GenericProducerMethod(Bean originalBean, Annotation genericConfiguration, AnnotatedMethod method, Set qualifiers, Synthetic.Provider syntheticProvider, BeanManager beanManager) { super(originalBean, qualifiers, beanManager); - this.method = method; + this.method = new InjectableMethod(method, this, beanManager); this.declaringBeanType = originalBean.getBeanClass(); this.declaringBeanQualifier = syntheticProvider.get(genericConfiguration); } @@ -36,7 +35,7 @@ public T create(CreationalContext creationalContext) { Bean declaringBean = getBeanManager().resolve(getBeanManager().getBeans(declaringBeanType, declaringBeanQualifier)); Object receiver = getBeanManager().getReference(declaringBean, declaringBean.getBeanClass(), creationalContext); - return (T) invokeMethod(method.getJavaMember(), receiver); + return method.invoke(receiver, creationalContext); } finally { diff --git a/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/field/Baz.java b/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/field/Baz.java index 49428a3..9c2318f 100644 --- a/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/field/Baz.java +++ b/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/field/Baz.java @@ -57,4 +57,10 @@ public Message getMessage() { return message; } + + @Produces @Wibble + public String getCorge(Wobble wobble) + { + return wobble.getName() + message.value(); + } } diff --git a/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/field/ProducersOnGenericBeanTest.java b/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/field/ProducersOnGenericBeanTest.java index d955331..1df5cc6 100644 --- a/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/field/ProducersOnGenericBeanTest.java +++ b/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/field/ProducersOnGenericBeanTest.java @@ -56,6 +56,15 @@ public static Archive deploy() @Foo(2) private Message baz2Message; + @Inject + @Foo(1) @Wibble + private String wibble1; + + @Inject + @Foo(2) @Wibble + private String wibble2; + + @Test public void testGeneric() { @@ -70,5 +79,10 @@ public void testGeneric() assertEquals("hello1", baz1Message.value()); assertNotNull(baz2Message); assertEquals( "hello2", baz2Message.value()); + + assertNotNull(wibble1); + assertEquals("billhello1", wibble1); + assertNotNull(wibble2); + assertEquals("billhello2", wibble2); } } diff --git a/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/field/Wibble.java b/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/field/Wibble.java new file mode 100644 index 0000000..9d1f54c --- /dev/null +++ b/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/field/Wibble.java @@ -0,0 +1,43 @@ +/* + * JBoss, Home of Professional Open Source + * Copyright 2010, Red Hat, Inc., and individual contributors + * by the @authors tag. See the copyright.txt in the distribution for a + * full listing of individual contributors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jboss.weld.extensions.test.bean.generic.field; + +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.PARAMETER; +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import javax.inject.Qualifier; + +/** + * A qualifier + * + * @author pmuir + * + */ + +@Retention(RUNTIME) +@Target({METHOD, FIELD, PARAMETER, TYPE}) +@Qualifier +public @interface Wibble +{ + +} diff --git a/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/field/Wobble.java b/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/field/Wobble.java new file mode 100644 index 0000000..3490afd --- /dev/null +++ b/impl/src/test/java/org/jboss/weld/extensions/test/bean/generic/field/Wobble.java @@ -0,0 +1,33 @@ +/* + * JBoss, Home of Professional Open Source + * Copyright 2010, Red Hat, Inc., and individual contributors + * by the @authors tag. See the copyright.txt in the distribution for a + * full listing of individual contributors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jboss.weld.extensions.test.bean.generic.field; + +/** + * A normal bean + * + * @author pmuir + * + */ +public class Wobble +{ + + public String getName() + { + return "bill"; + } + +}