Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
3.5.0-alpha-1, 3.5.0-beta-1
-
None
Description
In DefaultArtifactDescriptorReader.java, the constructor annotated with @Inject differs in the parameters it takes from its initService() method.
This discrepancy means among other things that its versionRangeResolver field is never initialized when a DI container is doing injection.
Here is the relevant code, starting at line 112, with a comment where the problem is:
@Inject DefaultArtifactDescriptorReader( RemoteRepositoryManager remoteRepositoryManager, VersionResolver versionResolver, ArtifactResolver artifactResolver, ModelBuilder modelBuilder, RepositoryEventDispatcher repositoryEventDispatcher, LoggerFactory loggerFactory ) { setRemoteRepositoryManager( remoteRepositoryManager ); setVersionResolver( versionResolver ); // XXX <-- Note: no versionRangeResolver setArtifactResolver( artifactResolver ); setModelBuilder( modelBuilder ); setLoggerFactory( loggerFactory ); setRepositoryEventDispatcher( repositoryEventDispatcher ); } public void initService( ServiceLocator locator ) { setLoggerFactory( locator.getService( LoggerFactory.class ) ); setRemoteRepositoryManager( locator.getService( RemoteRepositoryManager.class ) ); setVersionResolver( locator.getService( VersionResolver.class ) ); setVersionRangeResolver( locator.getService( VersionRangeResolver.class ) ); setArtifactResolver( locator.getService( ArtifactResolver.class ) ); setRepositoryEventDispatcher( locator.getService( RepositoryEventDispatcher.class ) ); modelBuilder = locator.getService( ModelBuilder.class ); if ( modelBuilder == null ) { setModelBuilder( new DefaultModelBuilderFactory().newInstance() ); } }