Skip to content

Commit 6d87659

Browse files
committed
Add more detections to BeanReader#shouldDelay
Should resolve #804
1 parent 3c20acc commit 6d87659

File tree

2 files changed

+32
-7
lines changed

2 files changed

+32
-7
lines changed

.vscode/settings.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"java.configuration.updateBuildConfiguration": "automatic",
3+
"java.autobuild.enabled": false
4+
}

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

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import javax.lang.model.element.Element;
1313
import javax.lang.model.element.TypeElement;
1414
import javax.lang.model.type.TypeKind;
15+
import javax.lang.model.type.TypeMirror;
1516

1617
import io.avaje.inject.generator.MethodReader.MethodParam;
1718

@@ -104,18 +105,38 @@ private boolean shouldDelay() {
104105
var construct = Optional.ofNullable(constructor)
105106
.map(MethodReader::params).stream()
106107
.flatMap(List::stream)
107-
.map(MethodParam::element);
108+
.map(MethodParam::element)
109+
.map(Element::getKind);
108110

109-
var fields = injectFields.stream().map(FieldReader::element);
110-
var constructFields = Stream.concat(construct, fields);
111+
var fields = injectFields.stream()
112+
.map(FieldReader::element)
113+
.map(Element::getKind);
111114
var methods = injectMethods.stream()
112115
.map(MethodReader::params)
113116
.flatMap(List::stream)
114-
.map(MethodParam::element);
117+
.map(MethodParam::element)
118+
.map(Element::getKind);
119+
120+
var interfaces = Optional.ofNullable(beanType.getInterfaces())
121+
.orElse(List.of())
122+
.stream()
123+
.map(TypeMirror::getKind);
124+
125+
var superClass = Optional.ofNullable(beanType.getSuperclass())
126+
.stream()
127+
.map(TypeMirror::getKind);
128+
129+
var beanTypes = BeanTypesPrism.getOptionalOn(beanType)
130+
.map(BeanTypesPrism::value)
131+
.stream()
132+
.flatMap(List::stream)
133+
.map(TypeMirror::getKind);
115134

116-
return Stream.concat(constructFields, methods)
117-
.map(Element::asType)
118-
.anyMatch(t -> t.getKind() == TypeKind.ERROR);
135+
var constructorField = Stream.concat(construct, fields);
136+
var methodInterfaces = Stream.concat(methods, interfaces);
137+
var superclassBeanTypes = Stream.concat(superClass, beanTypes);
138+
return Stream.concat(constructorField, Stream.concat(methodInterfaces, superclassBeanTypes))
139+
.anyMatch(TypeKind.ERROR::equals);
119140
}
120141

121142
@Override

0 commit comments

Comments
 (0)