4
4
import static io .avaje .inject .generator .APContext .typeElement ;
5
5
import static io .avaje .inject .generator .ProcessingContext .allScopes ;
6
6
import static io .avaje .inject .generator .ProcessingContext .createMetaInfWriterFor ;
7
+ import static java .util .stream .Collectors .toList ;
7
8
import static java .util .stream .Collectors .toSet ;
8
9
9
10
import java .io .IOException ;
12
13
import java .util .HashSet ;
13
14
import java .util .LinkedHashMap ;
14
15
import java .util .LinkedHashSet ;
15
- import java .util .List ;
16
16
import java .util .Map ;
17
17
import java .util .Objects ;
18
18
import java .util .Set ;
@@ -106,25 +106,28 @@ void write() throws IOException {
106
106
private void writeRequiredModules () {
107
107
108
108
ProcessingContext .modules ();
109
- List <String > requiredModules = new ArrayList <>();
110
-
111
- scopeInfo .requires ().stream ()
112
- .map (APContext ::typeElement )
113
- .filter (InjectModulePrism ::isPresent )
114
- .filter (e -> e .getKind () == ElementKind .CLASS )
115
- .map (TypeElement ::getQualifiedName )
116
- .map (Object ::toString )
117
- .forEach (requiredModules ::add );
118
-
119
- scopeInfo .requires ().stream ()
120
- .map (APContext ::typeElement )
121
- .filter (ScopePrism ::isPresent )
122
- .filter (e -> e .getKind () == ElementKind .ANNOTATION_TYPE )
123
- .map (TypeElement ::getQualifiedName )
124
- .map (Object ::toString )
125
- .map (allScopes ()::get )
126
- .filter (Objects ::nonNull )
127
- .flatMap (scope -> scope .dependentScopes ().stream ())
109
+ Set <String > requiredModules = new HashSet <>();
110
+
111
+ var dependentScopes =
112
+ scopeInfo .requires ().stream ()
113
+ .map (APContext ::typeElement )
114
+ .filter (ScopePrism ::isPresent )
115
+ .filter (e -> e .getKind () == ElementKind .ANNOTATION_TYPE )
116
+ .map (TypeElement ::getQualifiedName )
117
+ .map (Object ::toString )
118
+ .map (allScopes ()::get )
119
+ .filter (Objects ::nonNull )
120
+ .flatMap (scope -> scope .dependentScopes ().stream ())
121
+ .collect (toList ());
122
+
123
+ // don't write if dependent scopes have constructor params
124
+ for (var scope : dependentScopes ) {
125
+ if (scope .requires ().stream ().map (allScopes ()::get ).anyMatch (Objects ::isNull )) {
126
+ return ;
127
+ }
128
+ }
129
+
130
+ dependentScopes .stream ()
128
131
.map (ScopeInfo ::moduleFullName )
129
132
.filter (Objects ::nonNull )
130
133
.filter (Predicate .not (String ::isBlank ))
@@ -133,13 +136,6 @@ private void writeRequiredModules() {
133
136
final Map <String , String > dependencies =
134
137
new LinkedHashMap <>(scopeInfo .constructorDependencies ());
135
138
136
- var scopes = ProcessingContext .allScopes ();
137
-
138
- requiredModules .stream ()
139
- .forEach (module -> {
140
- // Look up module dependencies (how?)
141
- });
142
-
143
139
writer .append (" public static AvajeModule[] allRequiredModules(" );
144
140
145
141
boolean comma = false ;
@@ -157,20 +153,11 @@ private void writeRequiredModules() {
157
153
writer .append (" return new AvajeModule[] {" ).eol ();
158
154
159
155
for (String rawType : requiredModules ) {
160
- writer .append (" new %s(" , rawType ).eol ();
161
-
162
- var scope = scopes .get (rawType );
163
- if (Objects .nonNull (scope )) {
164
- writer .append (String .join (", " , scope .constructorDependencies ().values ()));
165
- } else {
166
- // Look up module dependencies (how?)
167
- }
168
-
169
- writer .append (")," , rawType ).eol ();
156
+ writer .append (" new %s()," , rawType ).eol ();
170
157
}
171
158
writer .append (" new %s(" , shortName );
172
159
writer .append (String .join (", " , scopeInfo .constructorDependencies ().values ()));
173
- writer .append ("), " ).eol ();
160
+ writer .append (")" ).eol ();
174
161
writer .append (" };" ).eol ();
175
162
writer .append (" }" ).eol ().eol ();
176
163
}
0 commit comments