Skip to content

Commit dc37f1d

Browse files
author
Markus Ritter
committed
fixed implementation and added test case
1 parent ef21e0b commit dc37f1d

File tree

6 files changed

+61
-4
lines changed

6 files changed

+61
-4
lines changed

inject-generator/src/main/java/io/avaje/inject/generator/BeanReader.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import javax.lang.model.element.Element;
88
import javax.lang.model.element.TypeElement;
99
import java.util.*;
10+
import java.util.stream.Collectors;
1011

1112
class BeanReader {
1213

@@ -187,6 +188,9 @@ private Set<String> importTypes() {
187188
importTypes.add(type);
188189
}
189190
typeReader.extraImports(importTypes);
191+
factoryMethods.forEach(methodReader -> {
192+
methodReader.factoryImports(importTypes);
193+
});
190194
requestParams.addImports(importTypes);
191195
aspects.extraImports(importTypes);
192196
return importTypes;

inject-generator/src/main/java/io/avaje/inject/generator/MethodReader.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,11 @@
66
import javax.lang.model.element.*;
77
import javax.lang.model.type.TypeMirror;
88
import java.util.ArrayList;
9+
import java.util.Collections;
910
import java.util.List;
1011
import java.util.Set;
12+
import java.util.stream.Collectors;
13+
import java.util.stream.Stream;
1114

1215
class MethodReader {
1316

@@ -178,7 +181,21 @@ void addImports(Set<String> importTypes) {
178181
}
179182

180183
Set<GenericType> getGenericTypes() {
181-
return typeReader.getGenericTypes();
184+
return typeReader != null ? typeReader.getGenericTypes() : Collections.emptySet();
185+
}
186+
187+
void factoryImports(Set<String> importTypes) {
188+
Set<GenericType> genericTypes = getGenericTypes();
189+
if (!genericTypes.isEmpty()) {
190+
importTypes.add(Constants.TYPE);
191+
importTypes.add(Constants.GENERICTYPE);
192+
importTypes.addAll(genericTypes
193+
.stream()
194+
.flatMap(g-> Stream.concat(
195+
Stream.of(g.getMainType()),
196+
g.getParams().stream().map(GenericType::getMainType)))
197+
.collect(Collectors.toSet()));
198+
}
182199
}
183200

184201
void buildAddFor(Append writer) {
@@ -268,6 +285,7 @@ void writeAspectAround(Append writer, String targetName) {
268285
writer.eol();
269286
}
270287

288+
271289
static class MethodParam {
272290

273291
private final String named;

inject-generator/src/main/java/io/avaje/inject/generator/SimpleBeanWriter.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,11 +77,13 @@ private void writeGenericProviders() {
7777
private void writeGenericTypeFields() {
7878
// collect all types to prevent duplicates
7979
Set<GenericType> genericTypes = new HashSet<>();
80-
if (beanReader.getGenericTypes()!=null) {
80+
if (beanReader.getGenericTypes() != null) {
8181
genericTypes.addAll(beanReader.getGenericTypes());
8282
}
83-
for (MethodReader factoryMethod : beanReader.getFactoryMethods()) {
84-
genericTypes.addAll(factoryMethod.getGenericTypes());
83+
if (beanReader.getFactoryMethods() != null) {
84+
for (MethodReader factoryMethod : beanReader.getFactoryMethods()) {
85+
genericTypes.addAll(factoryMethod.getGenericTypes());
86+
}
8587
}
8688
if (!genericTypes.isEmpty()) {
8789
for (GenericType type : genericTypes) {

inject-test/src/test/java/org/example/coffee/FactoryTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import io.avaje.inject.BeanScope;
44
import org.example.coffee.factory.BFact;
5+
import org.example.coffee.factory.BeanWithGenericInterface;
56
import org.junit.jupiter.api.Test;
67

78
import static org.assertj.core.api.Assertions.assertThat;
@@ -17,4 +18,13 @@ void test() {
1718
}
1819

1920
}
21+
22+
@Test
23+
void testBeanWithGenericInterface() {
24+
try (BeanScope context = BeanScope.newBuilder().build()) {
25+
BeanWithGenericInterface bean = context.get(BeanWithGenericInterface.class);
26+
assertThat(bean).isNotNull();
27+
}
28+
29+
}
2030
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package org.example.coffee.factory;
2+
3+
import java.io.File;
4+
import java.util.function.Consumer;
5+
6+
public class BeanWithGenericInterface implements Consumer<File> {
7+
@Override
8+
public void accept(File o) {
9+
// do nothing
10+
}
11+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package org.example.coffee.factory;
2+
3+
import io.avaje.inject.Bean;
4+
import io.avaje.inject.Factory;
5+
6+
@Factory
7+
public class FactoryForBeanWithGenericInterface {
8+
@Bean
9+
public BeanWithGenericInterface create() {
10+
return new BeanWithGenericInterface();
11+
}
12+
}

0 commit comments

Comments
 (0)