summaryrefslogtreecommitdiffstats
path: root/sonar-core/src/main
diff options
context:
space:
mode:
authorSimon Brandhof <simon.brandhof@sonarsource.com>2019-05-04 09:43:24 +0200
committersonartech <sonartech@sonarsource.com>2019-05-06 11:01:16 +0200
commitbaf8ce1ddc8136eaf3dac8424830b8960991ee21 (patch)
treed89907876a91f446fcba3e101526c54cff22e09f /sonar-core/src/main
parent18054cb90101629237e6876e7e5334badd54084f (diff)
downloadsonarqube-baf8ce1ddc8136eaf3dac8424830b8960991ee21.tar.gz
sonarqube-baf8ce1ddc8136eaf3dac8424830b8960991ee21.zip
SONAR-12078 out of memory in CE if file has too many issues
Diffstat (limited to 'sonar-core/src/main')
-rw-r--r--sonar-core/src/main/java/org/sonar/core/issue/tracking/BlockRecognizer.java6
1 files changed, 5 insertions, 1 deletions
diff --git a/sonar-core/src/main/java/org/sonar/core/issue/tracking/BlockRecognizer.java b/sonar-core/src/main/java/org/sonar/core/issue/tracking/BlockRecognizer.java
index 652b27c07e2..20b78655d1c 100644
--- a/sonar-core/src/main/java/org/sonar/core/issue/tracking/BlockRecognizer.java
+++ b/sonar-core/src/main/java/org/sonar/core/issue/tracking/BlockRecognizer.java
@@ -77,7 +77,7 @@ class BlockRecognizer<RAW extends Trackable, BASE extends Trackable> {
}
// Check if remaining number of lines exceeds threshold. It avoids processing too many combinations.
- if (basesByLine.keySet().size() * rawsByLine.keySet().size() >= 250_000) {
+ if (isOverLimit(basesByLine.keySet().size(), rawsByLine.keySet().size())) {
return;
}
@@ -97,6 +97,10 @@ class BlockRecognizer<RAW extends Trackable, BASE extends Trackable> {
}
}
+ static boolean isOverLimit(long a, long b) {
+ return Math.multiplyExact(a, b) >= 250_000;
+ }
+
/**
* @param startLineA number of line from first version of text (numbering starts from 1)
* @param startLineB number of line from second version of text (numbering starts from 1)