aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/IssuePublisher.java5
-rw-r--r--sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/IssuePublisherTest.java13
2 files changed, 12 insertions, 6 deletions
diff --git a/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/IssuePublisher.java b/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/IssuePublisher.java
index 1e37a715066..6ce7afc41c8 100644
--- a/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/IssuePublisher.java
+++ b/sonar-scanner-engine/src/main/java/org/sonar/scanner/issue/IssuePublisher.java
@@ -25,6 +25,7 @@ import java.util.EnumMap;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
+import java.util.regex.Pattern;
import javax.annotation.Nullable;
import javax.annotation.concurrent.ThreadSafe;
import org.apache.commons.lang3.StringUtils;
@@ -54,6 +55,8 @@ import org.sonar.scanner.report.ReportPublisher;
@ThreadSafe
public class IssuePublisher {
+ private static final String[] noSonarKeyContains = new String[] {"nosonar", "S1291"};
+ private static final Pattern noSonarPattern = Pattern.compile(".*(" + String.join("|", noSonarKeyContains) + ").*", Pattern.CASE_INSENSITIVE);
private final ActiveRules activeRules;
private final IssueFilters filters;
private final ReportPublisher reportPublisher;
@@ -91,7 +94,7 @@ public class IssuePublisher {
return inputComponent.isFile()
&& textRange != null
&& ((DefaultInputFile) inputComponent).hasNoSonarAt(textRange.start().line())
- && !StringUtils.containsIgnoreCase(issue.ruleKey().rule(), "nosonar");
+ && !noSonarPattern.matcher(issue.ruleKey().rule()).matches();
}
public void initAndAddExternalIssue(ExternalIssue issue) {
diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/IssuePublisherTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/IssuePublisherTest.java
index 5a124b74214..de4a41c519b 100644
--- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/IssuePublisherTest.java
+++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/issue/IssuePublisherTest.java
@@ -26,6 +26,8 @@ import java.util.List;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
import org.junit.rules.TemporaryFolder;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
@@ -67,7 +69,6 @@ import static org.sonar.api.issue.impact.SoftwareQuality.RELIABILITY;
@RunWith(MockitoJUnitRunner.class)
public class IssuePublisherTest {
private static final RuleKey JAVA_RULE_KEY = RuleKey.of("java", "AvoidCycle");
- private static final RuleKey NOSONAR_RULE_KEY = RuleKey.of("java", "NoSonarCheck");
private DefaultInputProject project;
@@ -279,11 +280,13 @@ public class IssuePublisherTest {
verifyNoInteractions(reportPublisher);
}
- @Test
- public void should_accept_issues_on_no_sonar_rules() {
+ @ParameterizedTest
+ @ValueSource(strings = {"NoSonarCheck", "S1291", "S1291Check"})
+ public void should_accept_issues_on_no_sonar_rules(String noSonarRule) {
+ RuleKey noSonarRuleKey = RuleKey.of("java", noSonarRule);
// The "No Sonar" rule logs violations on the lines that are flagged with "NOSONAR" !!
activeRulesBuilder.addRule(new NewActiveRule.Builder()
- .setRuleKey(NOSONAR_RULE_KEY)
+ .setRuleKey(noSonarRuleKey)
.setSeverity(Severity.INFO)
.setQProfileKey("qp-1")
.build());
@@ -293,7 +296,7 @@ public class IssuePublisherTest {
DefaultIssue issue = new DefaultIssue(project)
.at(new DefaultIssueLocation().on(file).at(file.selectLine(3)).message(""))
- .forRule(NOSONAR_RULE_KEY);
+ .forRule(noSonarRuleKey);
when(filters.accept(any(InputComponent.class), any(ScannerReport.Issue.class), anyString())).thenReturn(true);