Skip to content

Commit 838968d

Browse files
cbarlinrbygraveSentryMan
authored
Add more detections to BeanReader#shouldDelay (#805)
* Add more detections to BeanReader#shouldDelay Should resolve #804 * Use Streams<TypeKind> ... and Stream.of().flapMap() * Use flapMap(List::stream) for consistency * simplify --------- Co-authored-by: Conrad <[email protected]> Co-authored-by: Rob Bygrave <[email protected]> Co-authored-by: Josiah Noel <[email protected]>
1 parent 3c20acc commit 838968d

File tree

1 file changed

+26
-14
lines changed

1 file changed

+26
-14
lines changed

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

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,14 @@
11
package io.avaje.inject.generator;
22

33
import static io.avaje.inject.generator.APContext.logError;
4-
import java.util.ArrayList;
5-
import java.util.Collections;
6-
import java.util.LinkedHashSet;
7-
import java.util.List;
8-
import java.util.Optional;
9-
import java.util.Set;
4+
5+
import java.util.*;
106
import java.util.stream.Stream;
117

128
import javax.lang.model.element.Element;
139
import javax.lang.model.element.TypeElement;
1410
import javax.lang.model.type.TypeKind;
11+
import javax.lang.model.type.TypeMirror;
1512

1613
import io.avaje.inject.generator.MethodReader.MethodParam;
1714

@@ -101,21 +98,36 @@ final class BeanReader {
10198
* delay until next round if types cannot be resolved
10299
*/
103100
private boolean shouldDelay() {
104-
var construct = Optional.ofNullable(constructor)
101+
var constructors = Optional.ofNullable(constructor)
105102
.map(MethodReader::params).stream()
106103
.flatMap(List::stream)
107-
.map(MethodParam::element);
104+
.map(MethodParam::element)
105+
.map(Element::asType);
106+
107+
var fields = injectFields.stream()
108+
.map(FieldReader::element)
109+
.map(Element::asType);
108110

109-
var fields = injectFields.stream().map(FieldReader::element);
110-
var constructFields = Stream.concat(construct, fields);
111111
var methods = injectMethods.stream()
112112
.map(MethodReader::params)
113113
.flatMap(List::stream)
114-
.map(MethodParam::element);
114+
.map(MethodParam::element)
115+
.map(Element::asType);
116+
117+
var interfaces = beanType.getInterfaces()
118+
.stream();
119+
120+
var superClass = Stream.of(beanType.getSuperclass());
121+
122+
var beanTypes = BeanTypesPrism.getOptionalOn(beanType)
123+
.map(BeanTypesPrism::value)
124+
.stream()
125+
.flatMap(List::stream);
115126

116-
return Stream.concat(constructFields, methods)
117-
.map(Element::asType)
118-
.anyMatch(t -> t.getKind() == TypeKind.ERROR);
127+
return Stream.of(constructors, fields, methods, interfaces, superClass, beanTypes)
128+
.flatMap(s -> s)
129+
.map(TypeMirror::getKind)
130+
.anyMatch(TypeKind.ERROR::equals);
119131
}
120132

121133
@Override

0 commit comments

Comments
 (0)