From 2848c22903a5def7578c0e8650c396f205de4df1 Mon Sep 17 00:00:00 2001
From: Frank Viernau <frank_viernau@epam.com>
Date: Wed, 10 Apr 2024 16:10:50 +0200
Subject: [PATCH] refactor(model): Add `minSeverity` as param to `getIssues()`

Signed-off-by: Frank Viernau <frank_viernau@epam.com>
---
 model/src/main/kotlin/OrtResult.kt | 27 ++++++++++++++++-----------
 1 file changed, 16 insertions(+), 11 deletions(-)

diff --git a/model/src/main/kotlin/OrtResult.kt b/model/src/main/kotlin/OrtResult.kt
index 7abc2526cfaf1..107aeec2b6933 100644
--- a/model/src/main/kotlin/OrtResult.kt
+++ b/model/src/main/kotlin/OrtResult.kt
@@ -246,21 +246,29 @@ data class OrtResult(
     /**
      * Return a map of all de-duplicated [Issue]s associated by [Identifier]. If [omitExcluded] is set to true, excluded
      * issues are omitted from the result. If [omitResolved] is set to true, resolved issues are omitted from the
-     * result.
+     * result. Issues with [severity][Issue.severity] below [minSeverity] are omitted from the result.
      */
     @JsonIgnore
-    fun getIssues(omitExcluded: Boolean = false, omitResolved: Boolean = false): Map<Identifier, Set<Issue>> {
+    fun getIssues(
+        omitExcluded: Boolean = false,
+        omitResolved: Boolean = false,
+        minSeverity: Severity = Severity.entries.min()
+    ): Map<Identifier, Set<Issue>> {
         val analyzerIssues = analyzer?.result?.getAllIssues().orEmpty()
         val scannerIssues = scanner?.getAllIssues().orEmpty()
         val advisorIssues = advisor?.results?.getIssues().orEmpty()
 
         val allIssues = analyzerIssues.zipWithCollections(scannerIssues).zipWithCollections(advisorIssues)
 
-        return allIssues.mapValues { (_, issues) ->
-            issues.filterTo(mutableSetOf()) { !omitResolved || !isResolved(it) }
-        }.filter { (id, issues) ->
-            issues.isNotEmpty() && (!omitExcluded || !isExcluded(id))
-        }
+        return allIssues.mapNotNull { (id, issues) ->
+            if (omitExcluded && isExcluded(id)) return@mapNotNull null
+
+            val filteredIssues = issues.filterTo(mutableSetOf()) {
+                (!omitResolved || !isResolved(it)) && it.severity >= minSeverity
+            }
+
+            filteredIssues.takeUnless { it.isEmpty() }?.let { id to it }
+        }.toMap()
     }
 
     /**
@@ -285,10 +293,7 @@ data class OrtResult(
      */
     @JsonIgnore
     fun getOpenIssues(minSeverity: Severity = Severity.WARNING) =
-        getIssues(omitExcluded = true, omitResolved = true)
-            .values
-            .flatten()
-            .filter { it.severity >= minSeverity }
+        getIssues(omitExcluded = true, omitResolved = true, minSeverity = minSeverity).values.flatten()
 
     /**
      * Return a list of [PackageConfiguration]s for the given [packageId] and [provenance].