Skip to content

Commit

Permalink
Arc - support static producer methods.
Browse files Browse the repository at this point in the history
  • Loading branch information
manovotn committed Nov 15, 2019
1 parent 3d5bbbd commit d58323e
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1173,8 +1173,15 @@ protected void implementCreate(ClassOutput classOutput, ClassCreator beanCreator
paramTypesArray,
declaringProviderInstanceHandle, argsArray));
} else {
create.assign(instanceHandle, create.invokeVirtualMethod(MethodDescriptor.of(producerMethod),
declaringProviderInstanceHandle, referenceHandles));
ResultHandle invokeMethodHandle;
if (Modifier.isStatic(producerMethod.flags())) {
invokeMethodHandle = create.invokeStaticMethod(MethodDescriptor.of(producerMethod),
referenceHandles);
} else {
invokeMethodHandle = create.invokeVirtualMethod(MethodDescriptor.of(producerMethod),
declaringProviderInstanceHandle, referenceHandles);
}
create.assign(instanceHandle, invokeMethodHandle);
}

if (bean.getScope().isNormal()) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package io.quarkus.arc.test.producer.staticMethod;

import io.quarkus.arc.Arc;
import io.quarkus.arc.InstanceHandle;
import io.quarkus.arc.test.ArcTestContainer;
import javax.enterprise.inject.Produces;
import javax.inject.Singleton;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

/**
* Tests static method producers
*/
public class StaticMethodProducerTest {

@RegisterExtension
public ArcTestContainer container = new ArcTestContainer(StaticMethodProducerTest.class, SomeProducer.class);

@Test
public void testStaticProducer() {
InstanceHandle<String> stringInstance = Arc.container().instance(String.class);
Assertions.assertTrue(stringInstance.isAvailable());
Assertions.assertEquals("foo", stringInstance.get());
InstanceHandle<Long> longInstance = Arc.container().instance(Long.class);
Assertions.assertTrue(longInstance.isAvailable());
Assertions.assertEquals(2L, longInstance.get());
InstanceHandle<Double> instance = Arc.container().instance(Double.class);
Assertions.assertTrue(instance.isAvailable());
Assertions.assertEquals(2.1, instance.get());
}

@Singleton
static class SomeProducer {

@Produces
private static Long produceLong() {
return 2L;
}

@Produces
static String produceString() {
return "foo";
}

@Produces
public static Double produceDouble() {
return 2.1;
}
}
}

0 comments on commit d58323e

Please sign in to comment.