@@ -26,9 +26,11 @@ import kotlinx.coroutines.async
2626import kotlinx.coroutines.awaitAll
2727
2828import org.ossreviewtoolkit.analyzer.PackageManagerFactory
29+ import org.ossreviewtoolkit.model.Issue
2930import org.ossreviewtoolkit.model.ProjectAnalyzerResult
3031import org.ossreviewtoolkit.model.config.AnalyzerConfiguration
3132import org.ossreviewtoolkit.model.config.Excludes
33+ import org.ossreviewtoolkit.model.createAndLogIssue
3234import org.ossreviewtoolkit.model.utils.DependencyGraphBuilder
3335import org.ossreviewtoolkit.plugins.api.OrtPlugin
3436import org.ossreviewtoolkit.plugins.api.OrtPluginOption
@@ -42,6 +44,7 @@ import org.ossreviewtoolkit.plugins.packagemanagers.node.getInstalledModulesDirs
4244import org.ossreviewtoolkit.plugins.packagemanagers.node.getNames
4345import org.ossreviewtoolkit.plugins.packagemanagers.node.parsePackageJson
4446import org.ossreviewtoolkit.plugins.packagemanagers.node.parsePackageJsons
47+ import org.ossreviewtoolkit.utils.common.collectMessages
4548import org.ossreviewtoolkit.utils.common.div
4649import org.ossreviewtoolkit.utils.common.realFile
4750import org.ossreviewtoolkit.utils.common.withoutPrefix
@@ -82,9 +85,11 @@ class Yarn2(override val descriptor: PluginDescriptor = Yarn2Factory.descriptor,
8285 NodePackageManager (NodePackageManagerType .YARN2 ) {
8386 override val globsForDefinitionFiles = listOf (NodePackageManagerType .DEFINITION_FILE )
8487 internal val yarn2Command = Yarn2Command (config.corepackEnabled)
88+
89+ private val issues = mutableListOf<Issue >()
8590 private val moduleInfoResolver = ModuleInfoResolver { workingDir, moduleIds ->
8691 runBlocking(Dispatchers .IO .limitedParallelism(20 )) {
87- moduleIds.chunked(YARN_NPM_INFO_CHUNK_SIZE ).map { chunk ->
92+ val resultChunks = moduleIds.chunked(YARN_NPM_INFO_CHUNK_SIZE ).map { chunk ->
8893 async {
8994 val process = yarn2Command.run (
9095 " npm" ,
@@ -99,7 +104,13 @@ class Yarn2(override val descriptor: PluginDescriptor = Yarn2Factory.descriptor,
99104
100105 parsePackageJsons(process.stdout)
101106 }
102- }.awaitAll().flatten().toSet()
107+ }.awaitAll()
108+
109+ resultChunks.flatten().mapNotNullTo(mutableSetOf ()) { result ->
110+ result.onFailure {
111+ issues + = createAndLogIssue(it.collectMessages())
112+ }.getOrNull()
113+ }
103114 }
104115 }
105116
@@ -155,7 +166,8 @@ class Yarn2(override val descriptor: PluginDescriptor = Yarn2Factory.descriptor,
155166
156167 ProjectAnalyzerResult (
157168 project = project.copy(scopeNames = scopes.getNames()),
158- packages = emptySet()
169+ packages = emptySet(),
170+ issues = issues
159171 )
160172 }
161173 }
0 commit comments