21
21
import javax .inject .Named ;
22
22
import javax .inject .Provider ;
23
23
24
+ import java .io .BufferedReader ;
24
25
import java .io .IOException ;
25
26
import java .io .InputStream ;
27
+ import java .io .InputStreamReader ;
28
+ import java .lang .annotation .Annotation ;
26
29
import java .net .URL ;
30
+ import java .nio .charset .StandardCharsets ;
27
31
import java .util .ArrayList ;
28
32
import java .util .Comparator ;
29
33
import java .util .HashSet ;
33
37
import java .util .Set ;
34
38
import java .util .function .Supplier ;
35
39
import java .util .stream .Collectors ;
36
- import java .util .stream .Stream ;
37
40
38
41
import com .google .inject .AbstractModule ;
42
+ import com .google .inject .binder .AnnotatedBindingBuilder ;
43
+ import com .google .inject .name .Names ;
39
44
import org .apache .maven .api .services .MavenException ;
40
- import org .apache .maven .api .services .model .ProfileActivator ;
41
- import org .apache .maven .api .spi .LanguageProvider ;
42
- import org .apache .maven .api .spi .LifecycleProvider ;
43
- import org .apache .maven .api .spi .ModelParser ;
44
- import org .apache .maven .api .spi .PackagingProvider ;
45
45
import org .apache .maven .di .Injector ;
46
46
import org .apache .maven .di .Key ;
47
47
import org .apache .maven .di .impl .Binding ;
48
48
import org .apache .maven .di .impl .DIException ;
49
49
import org .apache .maven .di .impl .InjectorImpl ;
50
- import org .apache .maven .internal .aether .DefaultRepositorySystemSessionFactory ;
51
- import org .apache .maven .internal .aether .LegacyRepositorySystemSessionExtender ;
52
- import org .apache .maven .internal .impl .model .BuildModelTransformer ;
53
- import org .apache .maven .internal .impl .model .DefaultDependencyManagementImporter ;
54
- import org .apache .maven .internal .impl .model .DefaultDependencyManagementInjector ;
55
- import org .apache .maven .internal .impl .model .DefaultInheritanceAssembler ;
56
- import org .apache .maven .internal .impl .model .DefaultLifecycleBindingsInjector ;
57
- import org .apache .maven .internal .impl .model .DefaultModelBuilder ;
58
- import org .apache .maven .internal .impl .model .DefaultModelInterpolator ;
59
- import org .apache .maven .internal .impl .model .DefaultModelNormalizer ;
60
- import org .apache .maven .internal .impl .model .DefaultModelPathTranslator ;
61
- import org .apache .maven .internal .impl .model .DefaultModelProcessor ;
62
- import org .apache .maven .internal .impl .model .DefaultModelValidator ;
63
- import org .apache .maven .internal .impl .model .DefaultModelVersionProcessor ;
64
- import org .apache .maven .internal .impl .model .DefaultPathTranslator ;
65
- import org .apache .maven .internal .impl .model .DefaultPluginManagementInjector ;
66
- import org .apache .maven .internal .impl .model .DefaultProfileInjector ;
67
- import org .apache .maven .internal .impl .model .DefaultProfileSelector ;
68
- import org .apache .maven .internal .impl .model .DefaultRootLocator ;
69
- import org .apache .maven .internal .impl .model .ProfileActivationFilePathInterpolator ;
70
- import org .apache .maven .internal .impl .model .profile .FileProfileActivator ;
71
- import org .apache .maven .internal .impl .model .profile .JdkVersionProfileActivator ;
72
- import org .apache .maven .internal .impl .model .profile .OperatingSystemProfileActivator ;
73
- import org .apache .maven .internal .impl .model .profile .PackagingProfileActivator ;
74
- import org .apache .maven .internal .impl .model .profile .PropertyProfileActivator ;
75
- import org .apache .maven .internal .impl .resolver .DefaultArtifactDescriptorReader ;
76
- import org .apache .maven .internal .impl .resolver .DefaultVersionSchemeProvider ;
77
- import org .apache .maven .internal .impl .resolver .relocation .DistributionManagementArtifactRelocationSource ;
78
- import org .apache .maven .internal .impl .resolver .relocation .UserPropertiesArtifactRelocationSource ;
79
50
import org .codehaus .plexus .PlexusContainer ;
80
- import org .eclipse .aether .version .VersionScheme ;
81
51
82
52
@ Named
83
53
class SisuDiBridgeModule extends AbstractModule {
@@ -86,7 +56,7 @@ class SisuDiBridgeModule extends AbstractModule {
86
56
protected void configure () {
87
57
Provider <PlexusContainer > containerProvider = getProvider (PlexusContainer .class );
88
58
89
- Injector injector = new InjectorImpl () {
59
+ InjectorImpl injector = new InjectorImpl () {
90
60
@ Override
91
61
public <Q > Supplier <Q > getCompiledBinding (Key <Q > key ) {
92
62
Set <Binding <Q >> res = getBindings (key );
@@ -163,102 +133,45 @@ public <Q> Supplier<Q> getCompiledBinding(Key<Q> key) {
163
133
.asIterator ();
164
134
it .hasNext (); ) {
165
135
URL url = it .next ();
166
- try (InputStream is = url .openStream ()) {
167
- String [] lines = new String (is .readAllBytes ()).split ("\n " );
168
- for (String className : lines ) {
169
- try {
170
- Class <?> clazz = classLoader .loadClass (className );
171
- injector .bindImplicit (clazz );
172
- Class <Object > itf = (Class )
173
- (clazz .isInterface ()
174
- ? clazz
175
- : clazz .getInterfaces ().length > 0 ? clazz .getInterfaces ()[0 ] : null );
176
- if (itf != null ) {
177
- bind (itf ).toProvider (() -> injector .getInstance (clazz ));
178
- }
179
- } catch (ClassNotFoundException e ) {
180
- // ignore
181
- e .printStackTrace ();
182
- }
136
+ List <String > lines ;
137
+ try (InputStream is = url .openStream ();
138
+ BufferedReader reader = new BufferedReader (new InputStreamReader (is , StandardCharsets .UTF_8 ))) {
139
+ lines = reader .lines ()
140
+ .map (String ::trim )
141
+ .filter (s -> !s .isEmpty () && !s .startsWith ("#" ))
142
+ .toList ();
143
+ }
144
+ for (String className : lines ) {
145
+ try {
146
+ Class <?> clazz = classLoader .loadClass (className );
147
+ injector .bindImplicit (clazz );
148
+ } catch (ClassNotFoundException e ) {
149
+ // ignore
150
+ e .printStackTrace ();
183
151
}
184
152
}
185
153
}
186
154
187
155
} catch (IOException e ) {
188
156
throw new MavenException (e );
189
157
}
190
- Stream .of (
191
- LanguageProvider .class ,
192
- LifecycleProvider .class ,
193
- PackagingProvider .class ,
194
- DefaultArtifactCoordinateFactory .class ,
195
- DefaultArtifactDeployer .class ,
196
- DefaultArtifactFactory .class ,
197
- DefaultArtifactInstaller .class ,
198
- DefaultArtifactResolver .class ,
199
- DefaultChecksumAlgorithmService .class ,
200
- DefaultDependencyCollector .class ,
201
- DefaultDependencyCoordinateFactory .class ,
202
- DefaultLocalRepositoryManager .class ,
203
- DefaultMessageBuilderFactory .class ,
204
- DefaultModelXmlFactory .class ,
205
- DefaultRepositoryFactory .class ,
206
- DefaultSettingsBuilder .class ,
207
- DefaultSettingsXmlFactory .class ,
208
- DefaultToolchainsBuilder .class ,
209
- DefaultToolchainsXmlFactory .class ,
210
- DefaultTransportProvider .class ,
211
- DefaultVersionParser .class ,
212
- DefaultVersionRangeResolver .class ,
213
- DefaultVersionResolver .class ,
214
- DefaultVersionSchemeProvider .class ,
215
- VersionScheme .class ,
216
- DefaultModelVersionParser .class ,
217
- DefaultRepositorySystemSessionFactory .class ,
218
- LegacyRepositorySystemSessionExtender .class ,
219
- ExtensibleEnumRegistries .DefaultLanguageRegistry .class ,
220
- ExtensibleEnumRegistries .DefaultPathScopeRegistry .class ,
221
- ExtensibleEnumRegistries .DefaultProjectScopeRegistry .class ,
222
- DefaultModelBuilder .class ,
223
- DefaultModelProcessor .class ,
224
- ModelParser .class ,
225
- DefaultModelValidator .class ,
226
- DefaultModelVersionProcessor .class ,
227
- DefaultModelNormalizer .class ,
228
- DefaultModelInterpolator .class ,
229
- DefaultPathTranslator .class ,
230
- DefaultUrlNormalizer .class ,
231
- DefaultRootLocator .class ,
232
- DefaultModelPathTranslator .class ,
233
- DefaultModelUrlNormalizer .class ,
234
- DefaultSuperPomProvider .class ,
235
- DefaultInheritanceAssembler .class ,
236
- DefaultProfileSelector .class ,
237
- ProfileActivator .class ,
238
- DefaultProfileInjector .class ,
239
- DefaultPluginManagementInjector .class ,
240
- DefaultDependencyManagementInjector .class ,
241
- DefaultDependencyManagementImporter .class ,
242
- DefaultLifecycleBindingsInjector .class ,
243
- DefaultPluginConfigurationExpander .class ,
244
- ProfileActivationFilePathInterpolator .class ,
245
- BuildModelTransformer .class ,
246
- DefaultArtifactDescriptorReader .class ,
247
- DistributionManagementArtifactRelocationSource .class ,
248
- UserPropertiesArtifactRelocationSource .class ,
249
- FileProfileActivator .class ,
250
- JdkVersionProfileActivator .class ,
251
- OperatingSystemProfileActivator .class ,
252
- PackagingProfileActivator .class ,
253
- PropertyProfileActivator .class )
254
- .forEach ((Class <?> clazz ) -> {
255
- injector .bindImplicit (clazz );
256
- Class <Object > itf = (Class )
257
- (clazz .isInterface ()
258
- ? null
259
- : clazz .getInterfaces ().length > 0 ? clazz .getInterfaces ()[0 ] : null );
158
+ injector .getBindings ().keySet ().stream ()
159
+ .filter (k -> k .getQualifier () != null )
160
+ .sorted (Comparator .comparing (k -> k .getRawType ().getName ()))
161
+ .distinct ()
162
+ .forEach (key -> {
163
+ Class <?> clazz = key .getRawType ();
164
+ Class <Object > itf = (clazz .isInterface ()
165
+ ? null
166
+ : (Class <Object >) (clazz .getInterfaces ().length > 0 ? clazz .getInterfaces ()[0 ] : clazz ));
260
167
if (itf != null ) {
261
- bind (itf ).toProvider (() -> injector .getInstance (clazz ));
168
+ AnnotatedBindingBuilder <Object > binder = bind (itf );
169
+ if (key .getQualifier () instanceof String s ) {
170
+ binder .annotatedWith (Names .named (s ));
171
+ } else if (key .getQualifier () instanceof Annotation a ) {
172
+ binder .annotatedWith (a );
173
+ }
174
+ binder .toProvider (() -> injector .getInstance (clazz ));
262
175
}
263
176
});
264
177
}
0 commit comments