From 5f491f1da607931f35e8d48cc6f91c7ebda63b6e Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Sat, 21 May 2022 18:43:18 +0900 Subject: [PATCH] ExplicitCollectionElementAccessMethod: fix false positive for get operators with type parameters (#4803) --- .../style/ExplicitCollectionElementAccessMethod.kt | 7 +++++-- .../ExplicitCollectionElementAccessMethodSpec.kt | 13 +++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/ExplicitCollectionElementAccessMethod.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/ExplicitCollectionElementAccessMethod.kt index b82842b6a61..9f8393b1c4b 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/ExplicitCollectionElementAccessMethod.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/ExplicitCollectionElementAccessMethod.kt @@ -57,8 +57,11 @@ class ExplicitCollectionElementAccessMethod(config: Config = Config.empty) : Rul } } - private fun isIndexableGetter(expression: KtCallExpression): Boolean = - expression.calleeExpression?.text == "get" && expression.getFunctionDescriptor()?.isOperator == true + private fun isIndexableGetter(expression: KtCallExpression): Boolean { + if (expression.calleeExpression?.text != "get") return false + val descriptor = expression.getFunctionDescriptor() ?: return false + return descriptor.isOperator && descriptor.typeParameters.isEmpty() + } private fun isIndexableSetter(expression: KtCallExpression): Boolean = when (expression.calleeExpression?.text) { diff --git a/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/ExplicitCollectionElementAccessMethodSpec.kt b/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/ExplicitCollectionElementAccessMethodSpec.kt index ec19d779b21..b43e45f2c96 100644 --- a/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/ExplicitCollectionElementAccessMethodSpec.kt +++ b/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/ExplicitCollectionElementAccessMethodSpec.kt @@ -347,6 +347,19 @@ class ExplicitCollectionElementAccessMethodSpec(val env: KotlinCoreEnvironment) """ assertThat(subject.compileAndLintWithContext(env, code)).isEmpty() } + + @Test + fun `does not report custom get operator with type parameters`() { + val code = """ + class C { + operator fun get(key: String): List? = null + } + fun test(c: C) { + c.get("key") + } + """ + assertThat(subject.compileAndLintWithContext(env, code)).isEmpty() + } } @Nested