Skip to content

Commit 78e233f

Browse files
author
Markus Ritter
committed
Merge branch 'factory-types-bugfix'
# Conflicts: # inject-generator/src/main/java/io/avaje/inject/generator/MethodReader.java
2 parents d529af8 + dc37f1d commit 78e233f

File tree

6 files changed

+60
-4
lines changed

6 files changed

+60
-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

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

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
import java.util.Collections;
1010
import java.util.List;
1111
import java.util.Set;
12+
import java.util.stream.Collectors;
13+
import java.util.stream.Stream;
1214

1315
class MethodReader {
1416

@@ -179,7 +181,21 @@ void addImports(Set<String> importTypes) {
179181
}
180182

181183
Set<GenericType> getGenericTypes() {
182-
return typeReader == null ? Collections.emptySet() : 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+
}
183199
}
184200

185201
void buildAddFor(Append writer) {
@@ -269,6 +285,7 @@ void writeAspectAround(Append writer, String targetName) {
269285
writer.eol();
270286
}
271287

288+
272289
static class MethodParam {
273290

274291
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)