Skip to content

Commit 3e82ecd

Browse files
SONARKT-286 Add issue suppression mappings for S6619 (#394)
1 parent 54506e1 commit 3e82ecd

File tree

3 files changed

+45
-4
lines changed

3 files changed

+45
-4
lines changed

kotlin-checks-test-sources/src/main/kotlin/sample/IssueSuppressionSample.kt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,3 +80,19 @@ private fun S1479(values: List<Int>): List<String> {
8080
}
8181
}
8282
}
83+
84+
private fun UselessNullChecks(foo: String) {
85+
@Suppress("kotlin:S6619")
86+
foo ?: "bar"
87+
88+
@Suppress("UNNECESSARY_SAFE_CALL")
89+
foo?.plus("bar")
90+
91+
@Suppress("UNNECESSARY_NOT_NULL_ASSERTION")
92+
foo != null
93+
94+
@Suppress("USELESS_ELVIS")
95+
foo ?: "bar"
96+
97+
foo ?: "bar" // Noncompliant
98+
}

sonar-kotlin-metrics/src/main/java/org/sonarsource/kotlin/metrics/IssueSuppressionVisitor.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ private val COMPILER_KEY_TO_SONAR_KEYS = mapOf(
4949
"ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE" to sequenceOf("kotlin:S6615"),
5050
"UNUSED_VALUE" to sequenceOf("kotlin:S6615"),
5151
"UNUSED_CHANGED_VALUE" to sequenceOf("kotlin:S6615"),
52+
"UNNECESSARY_SAFE_CALL" to sequenceOf("kotlin:S6619"),
53+
"UNNECESSARY_NOT_NULL_ASSERTION" to sequenceOf("kotlin:S6619"),
54+
"USELESS_ELVIS" to sequenceOf("kotlin:S6619"),
55+
"USELESS_NULLABLE_CHECK" to sequenceOf("kotlin:S6619"),
5256
)
5357

5458
class IssueSuppressionVisitor : KotlinFileVisitor() {

sonar-kotlin-metrics/src/test/java/org/sonarsource/kotlin/metrics/IssueSuppressionVisitorTest.kt

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import org.sonarsource.kotlin.checks.BadFunctionNameCheck
3333
import org.sonarsource.kotlin.checks.DeprecatedCodeUsedCheck
3434
import org.sonarsource.kotlin.checks.TooManyCasesCheck
3535
import org.sonarsource.kotlin.checks.UnusedLocalVariableCheck
36+
import org.sonarsource.kotlin.checks.UselessNullCheckCheck
3637
import org.sonarsource.kotlin.checks.VariableAndParameterNameCheck
3738
import org.sonarsource.kotlin.testapi.DEFAULT_KOTLIN_CLASSPATH
3839
import org.sonarsource.kotlin.testapi.KOTLIN_BASE_DIR
@@ -54,16 +55,36 @@ class IssueSuppressionVisitorTest {
5455
}
5556

5657
private fun scanWithSuppression(path: Path) =
57-
scanFile(path, true, BadClassNameCheck(), BadFunctionNameCheck(), VariableAndParameterNameCheck(), UnusedLocalVariableCheck(), TooManyCasesCheck(), DeprecatedCodeUsedCheck())
58+
scanFile(
59+
path,
60+
true,
61+
BadClassNameCheck(),
62+
BadFunctionNameCheck(),
63+
VariableAndParameterNameCheck(),
64+
UnusedLocalVariableCheck(),
65+
TooManyCasesCheck(),
66+
DeprecatedCodeUsedCheck(),
67+
UselessNullCheckCheck(),
68+
)
5869

5970
private fun scanWithoutSuppression(path: Path) =
60-
scanFile(path, false, BadClassNameCheck(), BadFunctionNameCheck(), VariableAndParameterNameCheck(), UnusedLocalVariableCheck(), TooManyCasesCheck(), DeprecatedCodeUsedCheck())
71+
scanFile(
72+
path,
73+
false,
74+
BadClassNameCheck(),
75+
BadFunctionNameCheck(),
76+
VariableAndParameterNameCheck(),
77+
UnusedLocalVariableCheck(),
78+
TooManyCasesCheck(),
79+
DeprecatedCodeUsedCheck(),
80+
UselessNullCheckCheck(),
81+
)
6182

6283
private fun scanFile(path: Path, suppress: Boolean, check: AbstractCheck, vararg checks: AbstractCheck): SingleFileVerifier {
63-
val env = Environment(DEFAULT_KOTLIN_CLASSPATH, LanguageVersion.LATEST_STABLE)
84+
val env = Environment(System.getProperty("java.class.path").split(System.getProperty("path.separator")) + DEFAULT_KOTLIN_CLASSPATH, LanguageVersion.LATEST_STABLE)
6485
val verifier = SingleFileVerifier.create(path, StandardCharsets.UTF_8)
6586
val testFileContent = String(Files.readAllBytes(path), StandardCharsets.UTF_8)
66-
val inputFile = TestInputFileBuilder("moduleKey", "src/org/foo/kotlin.kt")
87+
val inputFile = TestInputFileBuilder("moduleKey", "src/org/foo/kotlin.kt")
6788
.setCharset(StandardCharsets.UTF_8)
6889
.initMetadata(testFileContent)
6990
.build()

0 commit comments

Comments
 (0)