From c1a620468e5369194af25c5385c700287b4ee9d9 Mon Sep 17 00:00:00 2001 From: Brais Date: Wed, 3 Aug 2022 17:46:55 +0200 Subject: [PATCH 1/5] Improve tests --- .../io/gitlab/arturbosch/detekt/core/AnalyzerSpec.kt | 8 ++++---- detekt-core/src/test/resources/cases/Test.kt | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/detekt-core/src/test/kotlin/io/gitlab/arturbosch/detekt/core/AnalyzerSpec.kt b/detekt-core/src/test/kotlin/io/gitlab/arturbosch/detekt/core/AnalyzerSpec.kt index 79ba0e0c051..abc5b8668d0 100644 --- a/detekt-core/src/test/kotlin/io/gitlab/arturbosch/detekt/core/AnalyzerSpec.kt +++ b/detekt-core/src/test/kotlin/io/gitlab/arturbosch/detekt/core/AnalyzerSpec.kt @@ -63,16 +63,16 @@ class AnalyzerSpec { val settings = createProcessingSettings(testFile, yamlConfig("configs/config-value-type-correct.yml")) val analyzer = Analyzer(settings, listOf(StyleRuleSetProvider()), emptyList()) - assertThat(settings.use { analyzer.run(listOf(compileForTest(testFile))) }).isEmpty() + assertThat(settings.use { analyzer.run(listOf(compileForTest(testFile))) }.values.flatten()).isEmpty() } @Test fun `with findings`() { val testFile = path.resolve("Test.kt") val settings = createProcessingSettings(testFile, yamlConfig("configs/config-value-type-correct.yml")) - val analyzer = Analyzer(settings, listOf(StyleRuleSetProvider(18)), emptyList()) + val analyzer = Analyzer(settings, listOf(StyleRuleSetProvider(30)), emptyList()) - assertThat(settings.use { analyzer.run(listOf(compileForTest(testFile))) }).hasSize(1) + assertThat(settings.use { analyzer.run(listOf(compileForTest(testFile))) }.values.flatten()).hasSize(1) } @Test @@ -84,7 +84,7 @@ class AnalyzerSpec { ) val analyzer = Analyzer(settings, listOf(StyleRuleSetProvider(18)), emptyList()) - assertThat(settings.use { analyzer.run(listOf(compileForTest(testFile))) }).isEmpty() + assertThat(settings.use { analyzer.run(listOf(compileForTest(testFile))) }.values.flatten()).isEmpty() } @Test diff --git a/detekt-core/src/test/resources/cases/Test.kt b/detekt-core/src/test/resources/cases/Test.kt index bfc7287bc64..48ec69f835b 100644 --- a/detekt-core/src/test/resources/cases/Test.kt +++ b/detekt-core/src/test/resources/cases/Test.kt @@ -5,5 +5,5 @@ package cases @Suppress("Unused") class Test -@Target(AnnotationTarget.FILE) +@Target(AnnotationTarget.FILE, AnnotationTarget.FUNCTION) annotation class AnAnnotation From 82cfcb1e578f7198afa1354f52280fe9bf7d0283 Mon Sep 17 00:00:00 2001 From: Brais Date: Wed, 3 Aug 2022 17:55:06 +0200 Subject: [PATCH 2/5] Use reflection to disable the rules that require type solving when the BindingContext is empty --- .../api/internal/RequiresTypeResolution.kt | 2 +- detekt-core/build.gradle.kts | 1 + .../gitlab/arturbosch/detekt/core/Analyzer.kt | 9 ++++ .../arturbosch/detekt/core/AnalyzerSpec.kt | 44 +++++++++++++++++-- .../configs/config-value-type-correct.yml | 3 ++ gradle/libs.versions.toml | 3 +- 6 files changed, 57 insertions(+), 5 deletions(-) diff --git a/detekt-api/src/main/kotlin/io/gitlab/arturbosch/detekt/api/internal/RequiresTypeResolution.kt b/detekt-api/src/main/kotlin/io/gitlab/arturbosch/detekt/api/internal/RequiresTypeResolution.kt index 7edb1ab5d63..ba5037c4dfe 100644 --- a/detekt-api/src/main/kotlin/io/gitlab/arturbosch/detekt/api/internal/RequiresTypeResolution.kt +++ b/detekt-api/src/main/kotlin/io/gitlab/arturbosch/detekt/api/internal/RequiresTypeResolution.kt @@ -4,5 +4,5 @@ package io.gitlab.arturbosch.detekt.api.internal * Annotated [io.gitlab.arturbosch.detekt.api.Rule] requires type resolution to work. */ @Target(AnnotationTarget.CLASS) -@Retention(AnnotationRetention.SOURCE) +@Retention(AnnotationRetention.RUNTIME) annotation class RequiresTypeResolution diff --git a/detekt-core/build.gradle.kts b/detekt-core/build.gradle.kts index 19e1355f421..3756b7050bc 100644 --- a/detekt-core/build.gradle.kts +++ b/detekt-core/build.gradle.kts @@ -7,6 +7,7 @@ dependencies { api(projects.detektParser) api(projects.detektTooling) implementation(libs.snakeyaml) + implementation(libs.kotlin.reflection) implementation(projects.detektMetrics) implementation(projects.detektPsiUtils) implementation(projects.detektReportHtml) diff --git a/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/Analyzer.kt b/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/Analyzer.kt index 00bb5a66d6f..b6957bb5370 100644 --- a/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/Analyzer.kt +++ b/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/Analyzer.kt @@ -10,6 +10,7 @@ import io.gitlab.arturbosch.detekt.api.Rule import io.gitlab.arturbosch.detekt.api.RuleSetId import io.gitlab.arturbosch.detekt.api.RuleSetProvider import io.gitlab.arturbosch.detekt.api.internal.CompilerResources +import io.gitlab.arturbosch.detekt.api.internal.RequiresTypeResolution import io.gitlab.arturbosch.detekt.api.internal.whichDetekt import io.gitlab.arturbosch.detekt.api.internal.whichJava import io.gitlab.arturbosch.detekt.api.internal.whichOS @@ -24,6 +25,7 @@ import org.jetbrains.kotlin.config.languageVersionSettings import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValueFactoryImpl +import kotlin.reflect.full.hasAnnotation private typealias FindingsResult = List>> @@ -113,6 +115,13 @@ internal class Analyzer( val (correctableRules, otherRules) = activeRuleSetsToRuleSetConfigs .flatMap { (ruleSet, _) -> ruleSet.rules.asSequence() } + .let { sequence -> + if (bindingContext == BindingContext.EMPTY) { + sequence.filterNot { rule -> rule::class.hasAnnotation() } + } else { + sequence + } + } .partition { isCorrectable(it) } val result = HashMap>() diff --git a/detekt-core/src/test/kotlin/io/gitlab/arturbosch/detekt/core/AnalyzerSpec.kt b/detekt-core/src/test/kotlin/io/gitlab/arturbosch/detekt/core/AnalyzerSpec.kt index abc5b8668d0..184736c7293 100644 --- a/detekt-core/src/test/kotlin/io/gitlab/arturbosch/detekt/core/AnalyzerSpec.kt +++ b/detekt-core/src/test/kotlin/io/gitlab/arturbosch/detekt/core/AnalyzerSpec.kt @@ -10,15 +10,20 @@ import io.gitlab.arturbosch.detekt.api.Rule import io.gitlab.arturbosch.detekt.api.RuleSet import io.gitlab.arturbosch.detekt.api.RuleSetProvider import io.gitlab.arturbosch.detekt.api.Severity +import io.gitlab.arturbosch.detekt.api.internal.RequiresTypeResolution +import io.gitlab.arturbosch.detekt.rules.KotlinCoreEnvironmentTest +import io.gitlab.arturbosch.detekt.test.getContextForPaths import io.gitlab.arturbosch.detekt.test.yamlConfig import org.assertj.core.api.Assertions.assertThat import org.assertj.core.api.Assertions.assertThatThrownBy +import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.psi.KtFile import org.junit.jupiter.api.Nested import org.junit.jupiter.api.Test import java.util.concurrent.CompletionException -class AnalyzerSpec { +@KotlinCoreEnvironmentTest +class AnalyzerSpec(val env: KotlinCoreEnvironment) { @Nested inner class `exceptions during analyze()` { @@ -75,6 +80,17 @@ class AnalyzerSpec { assertThat(settings.use { analyzer.run(listOf(compileForTest(testFile))) }.values.flatten()).hasSize(1) } + @Test + fun `with findings and context binding`() { + val testFile = path.resolve("Test.kt") + val settings = createProcessingSettings(testFile, yamlConfig("configs/config-value-type-correct.yml")) + val analyzer = Analyzer(settings, listOf(StyleRuleSetProvider(30)), emptyList()) + val ktFile = compileForTest(testFile) + val bindingContext = env.getContextForPaths(listOf(ktFile)) + + assertThat(settings.use { analyzer.run(listOf(ktFile), bindingContext) }.values.flatten()).hasSize(2) + } + @Test fun `with findings but ignored`() { val testFile = path.resolve("Test.kt") @@ -119,7 +135,13 @@ class AnalyzerSpec { private class StyleRuleSetProvider(private val threshold: Int? = null) : RuleSetProvider { override val ruleSetId: String = "style" - override fun instance(config: Config) = RuleSet(ruleSetId, listOf(MaxLineLength(config, threshold))) + override fun instance(config: Config) = RuleSet( + ruleSetId, + listOf( + MaxLineLength(config, threshold), + RequiresTypeResolutionMaxLineLength(config, threshold), + ) + ) } private class MaxLineLength(config: Config, threshold: Int?) : Rule(config) { @@ -135,6 +157,20 @@ private class MaxLineLength(config: Config, threshold: Int?) : Rule(config) { } } +@RequiresTypeResolution +private class RequiresTypeResolutionMaxLineLength(config: Config, threshold: Int?) : Rule(config) { + override val issue = Issue(this::class.java.simpleName, Severity.Style, "", Debt.FIVE_MINS) + private val lengthThreshold: Int = threshold ?: valueOrDefault("maxLineLength", 100) + override fun visitKtFile(file: KtFile) { + super.visitKtFile(file) + for (line in file.text.lineSequence()) { + if (line.length > lengthThreshold) { + report(CodeSmell(issue, Entity.atPackageOrFirstDecl(file), issue.description)) + } + } + } +} + private class FaultyRuleSetProvider : RuleSetProvider { override val ruleSetId: String = "style" override fun instance(config: Config) = RuleSet(ruleSetId, listOf(FaultyRule(config))) @@ -156,7 +192,9 @@ private class FaultyRuleNoStackTrace(config: Config) : Rule(config) { override val issue = Issue(this::class.java.simpleName, Severity.Style, "", Debt.FIVE_MINS) override fun visitKtFile(file: KtFile) { throw object : IllegalStateException("Deliberately triggered error without stack trace.") { - init { stackTrace = emptyArray() } + init { + stackTrace = emptyArray() + } } } } diff --git a/detekt-core/src/test/resources/configs/config-value-type-correct.yml b/detekt-core/src/test/resources/configs/config-value-type-correct.yml index b512e9f819d..a31c24752d8 100644 --- a/detekt-core/src/test/resources/configs/config-value-type-correct.yml +++ b/detekt-core/src/test/resources/configs/config-value-type-correct.yml @@ -2,6 +2,9 @@ style: MaxLineLength: active: true maxLineLength: 120 + RequiresTypeResolutionMaxLineLength: + active: true + maxLineLength: 120 FaultyRule: active: true FaultyRuleNoStackTrace: diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0074f450386..16a0870aef7 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -17,6 +17,7 @@ kotlin-gradlePluginApi = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin-a kotlin-scriptUtil = { module = "org.jetbrains.kotlin:kotlin-script-util", version.ref = "kotlin" } kotlin-scriptingCompilerEmbeddable = { module = "org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable", version.ref = "kotlin" } kotlin-stdlibJdk8 = { module = "org.jetbrains.kotlin:kotlin-stdlib-jdk8", version.ref = "kotlin" } +kotlin-reflection = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref = "kotlin" } kotlinx-html = "org.jetbrains.kotlinx:kotlinx-html-jvm:0.8.0" kotlinx-coroutines = "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4" @@ -26,7 +27,7 @@ android-gradle = "com.android.tools.build:gradle:7.2.2" ktlint-core = { module = "com.pinterest.ktlint:ktlint-core", version.ref = "ktlint" } ktlint-rulesetStandard = { module = "com.pinterest.ktlint:ktlint-ruleset-standard", version.ref = "ktlint" } ktlint-rulesetExperimental = { module = "com.pinterest.ktlint:ktlint-ruleset-experimental", version.ref = "ktlint" } -slf4j-nop = { module = "org.slf4j:slf4j-nop", version = "1.7.36" } +slf4j-nop = { module = "org.slf4j:slf4j-nop", version = "1.7.36" } spek-dsl = { module = "org.spekframework.spek2:spek-dsl-jvm", version = "2.0.19" } From bd1108bc522a78da14d6eef5ac0be7a67bf284f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Brais=20Gab=C3=ADn?= Date: Thu, 4 Aug 2022 16:22:28 +0200 Subject: [PATCH 3/5] Update detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/Analyzer.kt Co-authored-by: marschwar --- .../kotlin/io/gitlab/arturbosch/detekt/core/Analyzer.kt | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/Analyzer.kt b/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/Analyzer.kt index b6957bb5370..47b3bf2d3c4 100644 --- a/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/Analyzer.kt +++ b/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/Analyzer.kt @@ -115,12 +115,8 @@ internal class Analyzer( val (correctableRules, otherRules) = activeRuleSetsToRuleSetConfigs .flatMap { (ruleSet, _) -> ruleSet.rules.asSequence() } - .let { sequence -> - if (bindingContext == BindingContext.EMPTY) { - sequence.filterNot { rule -> rule::class.hasAnnotation() } - } else { - sequence - } + .filter { rule -> + bindingContext != BindingContext.EMPTY || !rule::class.hasAnnotation() } .partition { isCorrectable(it) } From 7810ba846eaa9d2ed2510662dd9e0197e5971d22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Brais=20Gab=C3=ADn?= Date: Thu, 4 Aug 2022 16:31:15 +0200 Subject: [PATCH 4/5] Improve documentation --- .../detekt/api/internal/RequiresTypeResolution.kt | 3 +++ website/docs/gettingstarted/type-resolution.md | 14 ++------------ 2 files changed, 5 insertions(+), 12 deletions(-) diff --git a/detekt-api/src/main/kotlin/io/gitlab/arturbosch/detekt/api/internal/RequiresTypeResolution.kt b/detekt-api/src/main/kotlin/io/gitlab/arturbosch/detekt/api/internal/RequiresTypeResolution.kt index ba5037c4dfe..0d9d523891a 100644 --- a/detekt-api/src/main/kotlin/io/gitlab/arturbosch/detekt/api/internal/RequiresTypeResolution.kt +++ b/detekt-api/src/main/kotlin/io/gitlab/arturbosch/detekt/api/internal/RequiresTypeResolution.kt @@ -2,6 +2,9 @@ package io.gitlab.arturbosch.detekt.api.internal /** * Annotated [io.gitlab.arturbosch.detekt.api.Rule] requires type resolution to work. + * + * The detekt core will honor this annotation and it will not run any rule with this annotation if the bindingContext + * is empty. */ @Target(AnnotationTarget.CLASS) @Retention(AnnotationRetention.RUNTIME) diff --git a/website/docs/gettingstarted/type-resolution.md b/website/docs/gettingstarted/type-resolution.md index 295f4a47a16..86d3c5cfbe1 100644 --- a/website/docs/gettingstarted/type-resolution.md +++ b/website/docs/gettingstarted/type-resolution.md @@ -100,19 +100,9 @@ Rules that are using type resolution, access the [bindingContext](https://github By default, the `bindingContext` is initialized as `BindingContext.EMPTY`. This is the **default value** that the rule receives if type resolution is **not enabled**. -Therefore, is generally advised to wrap your rules with a check for an empty binding context ([source](https://github.com/detekt/detekt/blob/cd659ce8737fb177caf140f46f73a1a86b22be56/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UseCheckNotNull.kt#L37-L39)): +Therefore, is generally advised to annotate your `Rule` with `@RequiresTypeResolution` to ensure that your rule doesn't run if you don't have a proper `BindingContext`. -```kotlin - override fun visitCallExpression(expression: KtCallExpression) { - super.visitCallExpression(expression) - - if (bindingContext == BindingContext.EMPTY) return - - // Rest of the rule that will run only with type resolution enabled. - } -``` - -If the `bindingContext` is not `EMPTY`, you are free to use it to resolve types and get access to all the information needed for your rules. As a rule of thumb, we recommend to get inspiration from other rules on how they're using the `bindingContext`. +If your rule is annotated with `@RequiresTypeResolution` you are free to use it to resolve types and get access to all the information needed for your rules. As a rule of thumb, we recommend to get inspiration from other rules on how they're using the `bindingContext`. ## Testing a rule that uses type resolution From 5c1a3b90b45c86b4ba1d24bfe716c720be2fe41b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Brais=20Gab=C3=ADn?= Date: Thu, 4 Aug 2022 17:05:25 +0200 Subject: [PATCH 5/5] Remove old bindingContext checks --- .../detekt/rules/complexity/NamedArguments.kt | 2 -- .../rules/complexity/NestedScopeFunctions.kt | 2 -- .../complexity/ReplaceSafeCallChainWithRun.kt | 3 --- .../complexity/NestedScopeFunctionsSpec.kt | 18 ------------------ .../rules/coroutines/InjectDispatcher.kt | 3 +-- .../coroutines/RedundantSuspendModifier.kt | 1 - .../rules/coroutines/SleepInsteadOfDelay.kt | 2 -- .../SuspendFunWithCoroutineScopeReceiver.kt | 1 - .../coroutines/SuspendFunWithFlowReturnType.kt | 1 - .../rules/bugs/AvoidReferentialEquality.kt | 2 -- .../detekt/rules/bugs/Deprecation.kt | 2 -- .../rules/bugs/DontDowncastCollectionTypes.kt | 4 ---- .../bugs/DoubleMutabilityForCollection.kt | 2 -- .../bugs/ElseCaseInsteadOfExhaustiveWhen.kt | 2 -- .../detekt/rules/bugs/ExitOutsideMain.kt | 3 --- .../detekt/rules/bugs/HasPlatformType.kt | 1 - .../detekt/rules/bugs/IgnoredReturnValue.kt | 2 -- .../rules/bugs/ImplicitUnitReturnType.kt | 4 ---- .../detekt/rules/bugs/MissingWhenCase.kt | 2 -- .../rules/bugs/NullCheckOnMutableProperty.kt | 2 -- .../detekt/rules/bugs/NullableToStringCall.kt | 1 - .../detekt/rules/bugs/RedundantElseInWhen.kt | 2 -- .../rules/bugs/UnnecessaryNotNullOperator.kt | 2 -- .../detekt/rules/bugs/UnnecessarySafeCall.kt | 3 --- .../detekt/rules/bugs/UnreachableCatchBlock.kt | 1 - .../detekt/rules/bugs/UnreachableCode.kt | 5 +---- .../rules/bugs/UnsafeCallOnNullableType.kt | 2 -- .../arturbosch/detekt/rules/bugs/UnsafeCast.kt | 3 --- .../detekt/rules/bugs/UnusedUnaryOperator.kt | 2 -- .../rules/exceptions/ObjectExtendsThrowable.kt | 1 - .../rules/exceptions/ReturnFromFinally.kt | 2 -- .../rules/naming/BooleanPropertyNaming.kt | 5 ----- .../detekt/rules/naming/NoNameShadowing.kt | 6 +----- .../naming/NonBooleanPropertyPrefixedWithIs.kt | 5 ----- .../detekt/rules/performance/ArrayPrimitive.kt | 7 ------- .../rules/performance/CouldBeSequence.kt | 3 --- .../ExplicitCollectionElementAccessMethod.kt | 2 -- .../detekt/rules/style/ForbiddenMethodCall.kt | 3 --- .../detekt/rules/style/ForbiddenVoid.kt | 2 -- .../style/LibraryCodeMustSpecifyReturnType.kt | 3 --- .../rules/style/MaxChainedCallsOnSameLine.kt | 2 -- .../rules/style/MultilineLambdaItParameter.kt | 2 -- .../rules/style/ObjectLiteralToLambda.kt | 1 - .../rules/style/RedundantExplicitType.kt | 1 - .../style/RedundantHigherOrderMapUsage.kt | 1 - .../detekt/rules/style/UnnecessaryApply.kt | 2 -- .../detekt/rules/style/UnnecessaryFilter.kt | 2 -- .../rules/style/UnnecessaryInnerClass.kt | 6 ------ .../detekt/rules/style/UnnecessaryLet.kt | 2 -- .../rules/style/UseAnyOrNoneInsteadOfFind.kt | 2 -- .../detekt/rules/style/UseCheckNotNull.kt | 2 -- .../detekt/rules/style/UseIfEmptyOrIfBlank.kt | 2 -- .../detekt/rules/style/UseIsNullOrEmpty.kt | 2 -- .../detekt/rules/style/UseOrEmpty.kt | 2 -- .../detekt/rules/style/UseRequireNotNull.kt | 2 -- .../detekt/rules/style/UselessCallOnNotNull.kt | 2 -- .../detekt/rules/style/VarCouldBeVal.kt | 1 - .../style/optional/PreferToOverPairSyntax.kt | 2 -- 58 files changed, 3 insertions(+), 152 deletions(-) diff --git a/detekt-rules-complexity/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/NamedArguments.kt b/detekt-rules-complexity/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/NamedArguments.kt index 2fc021d9fe2..69251a0c5c4 100644 --- a/detekt-rules-complexity/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/NamedArguments.kt +++ b/detekt-rules-complexity/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/NamedArguments.kt @@ -12,7 +12,6 @@ import io.gitlab.arturbosch.detekt.api.internal.Configuration import io.gitlab.arturbosch.detekt.api.internal.RequiresTypeResolution import org.jetbrains.kotlin.psi.KtCallExpression import org.jetbrains.kotlin.psi.KtLambdaArgument -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.util.getParameterForArgument import org.jetbrains.kotlin.resolve.calls.util.getResolvedCall @@ -49,7 +48,6 @@ class NamedArguments(config: Config = Config.empty) : Rule(config) { private val ignoreArgumentsMatchingNames: Boolean by config(defaultValue = false) override fun visitCallExpression(expression: KtCallExpression) { - if (bindingContext == BindingContext.EMPTY) return val valueArguments = expression.valueArguments.filterNot { it is KtLambdaArgument } if (valueArguments.size > threshold && expression.canNameArguments()) { val message = "This function call has ${valueArguments.size} arguments. To call a function with more " + diff --git a/detekt-rules-complexity/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/NestedScopeFunctions.kt b/detekt-rules-complexity/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/NestedScopeFunctions.kt index 4d037aad5a3..763fb81859d 100644 --- a/detekt-rules-complexity/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/NestedScopeFunctions.kt +++ b/detekt-rules-complexity/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/NestedScopeFunctions.kt @@ -16,7 +16,6 @@ import io.gitlab.arturbosch.detekt.api.internal.RequiresTypeResolution import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.psi.KtCallExpression import org.jetbrains.kotlin.psi.KtNamedFunction -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.util.getResolvedCall /** @@ -66,7 +65,6 @@ class NestedScopeFunctions(config: Config = Config.empty) : Rule(config) { } override fun visitNamedFunction(function: KtNamedFunction) { - if (bindingContext == BindingContext.EMPTY) return function.accept(FunctionDepthVisitor()) } diff --git a/detekt-rules-complexity/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/ReplaceSafeCallChainWithRun.kt b/detekt-rules-complexity/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/ReplaceSafeCallChainWithRun.kt index 4d0209811e4..067924306fa 100644 --- a/detekt-rules-complexity/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/ReplaceSafeCallChainWithRun.kt +++ b/detekt-rules-complexity/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/ReplaceSafeCallChainWithRun.kt @@ -9,7 +9,6 @@ import io.gitlab.arturbosch.detekt.api.Rule import io.gitlab.arturbosch.detekt.api.Severity import io.gitlab.arturbosch.detekt.api.internal.RequiresTypeResolution import org.jetbrains.kotlin.psi.KtSafeQualifiedExpression -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.util.getResolvedCall import org.jetbrains.kotlin.types.isNullable @@ -52,8 +51,6 @@ class ReplaceSafeCallChainWithRun(config: Config = Config.empty) : Rule(config) override fun visitSafeQualifiedExpression(expression: KtSafeQualifiedExpression) { super.visitSafeQualifiedExpression(expression) - if (bindingContext == BindingContext.EMPTY) return - /* We want the last safe qualified expression in the chain, so if there are more in this chain then there's no need to run checks on this one */ if (expression.parent is KtSafeQualifiedExpression) return diff --git a/detekt-rules-complexity/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/NestedScopeFunctionsSpec.kt b/detekt-rules-complexity/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/NestedScopeFunctionsSpec.kt index 9ba423a7a9a..8ebca921e21 100644 --- a/detekt-rules-complexity/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/NestedScopeFunctionsSpec.kt +++ b/detekt-rules-complexity/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/complexity/NestedScopeFunctionsSpec.kt @@ -4,7 +4,6 @@ import io.gitlab.arturbosch.detekt.api.Finding import io.gitlab.arturbosch.detekt.rules.KotlinCoreEnvironmentTest import io.gitlab.arturbosch.detekt.test.TestConfig import io.gitlab.arturbosch.detekt.test.assertThat -import io.gitlab.arturbosch.detekt.test.compileAndLint import io.gitlab.arturbosch.detekt.test.compileAndLintWithContext import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.junit.jupiter.api.Test @@ -94,27 +93,10 @@ class NestedScopeFunctionsSpec(private val env: KotlinCoreEnvironment) { expectNoFindings() } - @Test - fun `should not report when binding context is empty`() { - givenCode = """ - fun f() { - 1.run { - 1.run { } - } - } - """.trimIndent() - whenLintRunsWithoutContext() - expectNoFindings() - } - private fun whenLintRuns() { actual = subject.compileAndLintWithContext(env, givenCode) } - private fun whenLintRunsWithoutContext() { - actual = subject.compileAndLint(givenCode) - } - private fun expectSourceLocation(location: Pair) { assertThat(actual).hasStartSourceLocation(location.first, location.second) } diff --git a/detekt-rules-coroutines/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/coroutines/InjectDispatcher.kt b/detekt-rules-coroutines/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/coroutines/InjectDispatcher.kt index 48301c29675..271c5ca42f6 100644 --- a/detekt-rules-coroutines/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/coroutines/InjectDispatcher.kt +++ b/detekt-rules-coroutines/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/coroutines/InjectDispatcher.kt @@ -17,7 +17,6 @@ import org.jetbrains.kotlin.psi.KtConstructorDelegationCall import org.jetbrains.kotlin.psi.KtParameter import org.jetbrains.kotlin.psi.KtSimpleNameExpression import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType -import org.jetbrains.kotlin.resolve.BindingContext.EMPTY import org.jetbrains.kotlin.resolve.calls.util.getType import org.jetbrains.kotlin.types.typeUtil.supertypes @@ -57,7 +56,7 @@ class InjectDispatcher(config: Config) : Rule(config) { override fun visitSimpleNameExpression(expression: KtSimpleNameExpression) { super.visitSimpleNameExpression(expression) - if (bindingContext == EMPTY || expression.getReferencedName() !in dispatcherNames) return + if (expression.getReferencedName() !in dispatcherNames) return val type = expression.getType(bindingContext) ?: return val isCoroutineDispatcher = type.fqNameOrNull() == COROUTINE_DISPATCHER_FQCN || type.supertypes().any { it.fqNameOrNull() == COROUTINE_DISPATCHER_FQCN } diff --git a/detekt-rules-coroutines/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/coroutines/RedundantSuspendModifier.kt b/detekt-rules-coroutines/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/coroutines/RedundantSuspendModifier.kt index 0005021245c..95ae114332a 100644 --- a/detekt-rules-coroutines/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/coroutines/RedundantSuspendModifier.kt +++ b/detekt-rules-coroutines/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/coroutines/RedundantSuspendModifier.kt @@ -66,7 +66,6 @@ class RedundantSuspendModifier(config: Config) : Rule(config) { ) override fun visitNamedFunction(function: KtNamedFunction) { - if (bindingContext == BindingContext.EMPTY) return val suspendModifier = function.modifierList?.getModifier(KtTokens.SUSPEND_KEYWORD) ?: return if (!function.hasBody()) return if (function.hasModifier(KtTokens.OVERRIDE_KEYWORD)) return diff --git a/detekt-rules-coroutines/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/coroutines/SleepInsteadOfDelay.kt b/detekt-rules-coroutines/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/coroutines/SleepInsteadOfDelay.kt index de15f72bcf2..9156e5d3ce7 100644 --- a/detekt-rules-coroutines/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/coroutines/SleepInsteadOfDelay.kt +++ b/detekt-rules-coroutines/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/coroutines/SleepInsteadOfDelay.kt @@ -16,7 +16,6 @@ import org.jetbrains.kotlin.psi.KtNamedFunction import org.jetbrains.kotlin.psi.KtQualifiedExpression import org.jetbrains.kotlin.psi.psiUtil.forEachDescendantOfType import org.jetbrains.kotlin.psi.psiUtil.hasSuspendModifier -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.util.getResolvedCall import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameOrNull @@ -50,7 +49,6 @@ class SleepInsteadOfDelay(config: Config = Config.empty) : Rule(config) { ) override fun visitNamedFunction(function: KtNamedFunction) { - if (bindingContext == BindingContext.EMPTY) return if (function.modifierList?.hasSuspendModifier() == true) { function.checkDescendants(SUSPEND_FUN_MESSAGE) } diff --git a/detekt-rules-coroutines/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/coroutines/SuspendFunWithCoroutineScopeReceiver.kt b/detekt-rules-coroutines/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/coroutines/SuspendFunWithCoroutineScopeReceiver.kt index 5b18e583756..0a56c4d415f 100644 --- a/detekt-rules-coroutines/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/coroutines/SuspendFunWithCoroutineScopeReceiver.kt +++ b/detekt-rules-coroutines/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/coroutines/SuspendFunWithCoroutineScopeReceiver.kt @@ -60,7 +60,6 @@ class SuspendFunWithCoroutineScopeReceiver(config: Config) : Rule(config) { ) override fun visitNamedFunction(function: KtNamedFunction) { - if (bindingContext == BindingContext.EMPTY) return checkReceiver(function) } diff --git a/detekt-rules-coroutines/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/coroutines/SuspendFunWithFlowReturnType.kt b/detekt-rules-coroutines/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/coroutines/SuspendFunWithFlowReturnType.kt index 45b5688cda5..0067684f4d5 100644 --- a/detekt-rules-coroutines/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/coroutines/SuspendFunWithFlowReturnType.kt +++ b/detekt-rules-coroutines/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/coroutines/SuspendFunWithFlowReturnType.kt @@ -73,7 +73,6 @@ class SuspendFunWithFlowReturnType(config: Config) : Rule(config) { ) override fun visitNamedFunction(function: KtNamedFunction) { - if (bindingContext == BindingContext.EMPTY) return val suspendModifier = function.modifierList?.getModifier(KtTokens.SUSPEND_KEYWORD) ?: return bindingContext[BindingContext.FUNCTION, function] ?.returnType diff --git a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/AvoidReferentialEquality.kt b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/AvoidReferentialEquality.kt index 1b249949f4a..09ff15a887b 100644 --- a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/AvoidReferentialEquality.kt +++ b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/AvoidReferentialEquality.kt @@ -16,7 +16,6 @@ import io.gitlab.arturbosch.detekt.rules.fqNameOrNull import org.jetbrains.kotlin.lexer.KtTokens.EQEQEQ import org.jetbrains.kotlin.lexer.KtTokens.EXCLEQEQEQ import org.jetbrains.kotlin.psi.KtBinaryExpression -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.util.getType /** @@ -62,7 +61,6 @@ class AvoidReferentialEquality(config: Config) : Rule(config) { } private fun checkBinaryExpression(expression: KtBinaryExpression) { - if (bindingContext == BindingContext.EMPTY) return if (expression.operationToken != EQEQEQ && expression.operationToken != EXCLEQEQEQ) return val checkedType = expression.left?.getType(bindingContext)?.fqNameOrNull() ?: return diff --git a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/Deprecation.kt b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/Deprecation.kt index 615f1cf77c3..0e7c5bedbd2 100644 --- a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/Deprecation.kt +++ b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/Deprecation.kt @@ -11,7 +11,6 @@ import io.gitlab.arturbosch.detekt.api.internal.RequiresTypeResolution import org.jetbrains.kotlin.com.intellij.psi.PsiElement import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.psi.KtNamedDeclaration -import org.jetbrains.kotlin.resolve.BindingContext /** * Deprecated elements are expected to be removed in the future. Alternatives should be found if possible. @@ -30,7 +29,6 @@ class Deprecation(config: Config) : Rule(config) { override val defaultRuleIdAliases = setOf("DEPRECATION") override fun visitElement(element: PsiElement) { - if (bindingContext == BindingContext.EMPTY) return if (hasDeprecationCompilerWarnings(element)) { val entity = if (element is KtNamedDeclaration) Entity.atName(element) else Entity.from(element) report(CodeSmell(issue, entity, "${element.text} is deprecated.")) diff --git a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/DontDowncastCollectionTypes.kt b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/DontDowncastCollectionTypes.kt index 3310b269f4a..45c2ac7c167 100644 --- a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/DontDowncastCollectionTypes.kt +++ b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/DontDowncastCollectionTypes.kt @@ -15,7 +15,6 @@ import org.jetbrains.kotlin.psi.KtExpression import org.jetbrains.kotlin.psi.KtIsExpression import org.jetbrains.kotlin.psi.KtTypeReference import org.jetbrains.kotlin.psi.KtUserType -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.util.getType /** @@ -50,7 +49,6 @@ class DontDowncastCollectionTypes(config: Config) : Rule(config) { override fun visitIsExpression(expression: KtIsExpression) { super.visitIsExpression(expression) - if (bindingContext == BindingContext.EMPTY) return checkForDowncast(expression, expression.leftHandSide, expression.typeReference) } @@ -58,8 +56,6 @@ class DontDowncastCollectionTypes(config: Config) : Rule(config) { override fun visitBinaryWithTypeRHSExpression(expression: KtBinaryExpressionWithTypeRHS) { super.visitBinaryWithTypeRHSExpression(expression) - if (bindingContext == BindingContext.EMPTY) return - checkForDowncast(expression, expression.left, expression.right) } diff --git a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/DoubleMutabilityForCollection.kt b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/DoubleMutabilityForCollection.kt index 57d6f8fb2f3..50501ffba33 100644 --- a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/DoubleMutabilityForCollection.kt +++ b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/DoubleMutabilityForCollection.kt @@ -65,8 +65,6 @@ class DoubleMutabilityForCollection(config: Config = Config.empty) : Rule(config override fun visitProperty(property: KtProperty) { super.visitProperty(property) - if (bindingContext == BindingContext.EMPTY) return - val type = (bindingContext[BindingContext.VARIABLE, property])?.type ?: return val standardType = type.fqNameOrNull() if (property.isVar && standardType in mutableTypes) { diff --git a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/ElseCaseInsteadOfExhaustiveWhen.kt b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/ElseCaseInsteadOfExhaustiveWhen.kt index 59d71000607..c2bccfdfae8 100644 --- a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/ElseCaseInsteadOfExhaustiveWhen.kt +++ b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/ElseCaseInsteadOfExhaustiveWhen.kt @@ -10,7 +10,6 @@ import io.gitlab.arturbosch.detekt.api.Severity import io.gitlab.arturbosch.detekt.api.internal.RequiresTypeResolution import org.jetbrains.kotlin.cfg.WhenChecker import org.jetbrains.kotlin.psi.KtWhenExpression -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.util.getType import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.typeUtil.isBooleanOrNullableBoolean @@ -63,7 +62,6 @@ class ElseCaseInsteadOfExhaustiveWhen(config: Config = Config.empty) : Rule(conf override fun visitWhenExpression(whenExpression: KtWhenExpression) { super.visitWhenExpression(whenExpression) - if (bindingContext == BindingContext.EMPTY) return checkForElseCaseInsteadOfExhaustiveWhenExpression(whenExpression) } diff --git a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/ExitOutsideMain.kt b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/ExitOutsideMain.kt index d40c3c347a5..3370d7c482d 100644 --- a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/ExitOutsideMain.kt +++ b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/ExitOutsideMain.kt @@ -12,7 +12,6 @@ import io.gitlab.arturbosch.detekt.rules.isMainFunction import org.jetbrains.kotlin.psi.KtCallExpression import org.jetbrains.kotlin.psi.KtNamedFunction import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.util.getResolvedCall import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameOrNull @@ -58,8 +57,6 @@ class ExitOutsideMain(config: Config = Config.empty) : Rule(config) { override fun visitCallExpression(expression: KtCallExpression) { super.visitCallExpression(expression) - if (bindingContext == BindingContext.EMPTY) return - if (expression.getStrictParentOfType()?.isMainFunction() == true) return val fqName = expression.getResolvedCall(bindingContext)?.resultingDescriptor?.fqNameOrNull() ?: return diff --git a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/HasPlatformType.kt b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/HasPlatformType.kt index 80f8088c26f..0e6e892bed8 100644 --- a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/HasPlatformType.kt +++ b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/HasPlatformType.kt @@ -51,7 +51,6 @@ class HasPlatformType(config: Config) : Rule(config) { override fun visitKtElement(element: KtElement) { super.visitKtElement(element) - if (bindingContext == BindingContext.EMPTY) return if (element is KtCallableDeclaration && element.hasImplicitPlatformType()) { report( diff --git a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/IgnoredReturnValue.kt b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/IgnoredReturnValue.kt index b5eb9c48df4..fde27821f27 100644 --- a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/IgnoredReturnValue.kt +++ b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/IgnoredReturnValue.kt @@ -15,7 +15,6 @@ import io.gitlab.arturbosch.detekt.api.internal.RequiresTypeResolution import io.gitlab.arturbosch.detekt.api.simplePatternToRegex import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor import org.jetbrains.kotlin.psi.KtCallExpression -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.bindingContextUtil.isUsedAsExpression import org.jetbrains.kotlin.resolve.calls.util.getResolvedCall import org.jetbrains.kotlin.types.typeUtil.isUnit @@ -75,7 +74,6 @@ class IgnoredReturnValue(config: Config = Config.empty) : Rule(config) { @Suppress("ReturnCount") override fun visitCallExpression(expression: KtCallExpression) { super.visitCallExpression(expression) - if (bindingContext == BindingContext.EMPTY) return if (expression.isUsedAsExpression(bindingContext)) return diff --git a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/ImplicitUnitReturnType.kt b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/ImplicitUnitReturnType.kt index e4d4c0a5f56..c77f53c468c 100644 --- a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/ImplicitUnitReturnType.kt +++ b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/ImplicitUnitReturnType.kt @@ -13,7 +13,6 @@ import io.gitlab.arturbosch.detekt.api.internal.RequiresTypeResolution import org.jetbrains.kotlin.builtins.StandardNames import org.jetbrains.kotlin.psi.KtExpression import org.jetbrains.kotlin.psi.KtNamedFunction -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.util.getResolvedCall import org.jetbrains.kotlin.types.typeUtil.isUnit @@ -58,9 +57,6 @@ class ImplicitUnitReturnType(config: Config) : Rule(config) { @Suppress("ReturnCount") override fun visitNamedFunction(function: KtNamedFunction) { super.visitNamedFunction(function) - if (BindingContext.EMPTY == bindingContext) { - return - } if (allowExplicitReturnType && function.hasDeclaredReturnType()) { return diff --git a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/MissingWhenCase.kt b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/MissingWhenCase.kt index e91dcd1a7b0..5a4f1d28467 100644 --- a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/MissingWhenCase.kt +++ b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/MissingWhenCase.kt @@ -14,7 +14,6 @@ import io.gitlab.arturbosch.detekt.api.internal.RequiresTypeResolution import org.jetbrains.kotlin.cfg.WhenChecker import org.jetbrains.kotlin.diagnostics.WhenMissingCase import org.jetbrains.kotlin.psi.KtWhenExpression -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.bindingContextUtil.isUsedAsExpression import org.jetbrains.kotlin.resolve.calls.util.getType @@ -83,7 +82,6 @@ class MissingWhenCase(config: Config = Config.empty) : Rule(config) { override fun visitWhenExpression(expression: KtWhenExpression) { super.visitWhenExpression(expression) - if (bindingContext == BindingContext.EMPTY) return if (allowElseExpression && expression.elseExpression != null) return checkMissingWhenExpression(expression) } diff --git a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/NullCheckOnMutableProperty.kt b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/NullCheckOnMutableProperty.kt index 1a153e64491..f11b3680e37 100644 --- a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/NullCheckOnMutableProperty.kt +++ b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/NullCheckOnMutableProperty.kt @@ -22,7 +22,6 @@ import org.jetbrains.kotlin.psi.KtNameReferenceExpression import org.jetbrains.kotlin.psi.KtPrimaryConstructor import org.jetbrains.kotlin.psi.KtProperty import org.jetbrains.kotlin.psi.KtReferenceExpression -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.util.getResolvedCall import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameOrNull @@ -62,7 +61,6 @@ class NullCheckOnMutableProperty(config: Config) : Rule(config) { ) override fun visitKtFile(file: KtFile) { - if (bindingContext == BindingContext.EMPTY) return super.visitKtFile(file) NullCheckVisitor().visitKtFile(file) } diff --git a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/NullableToStringCall.kt b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/NullableToStringCall.kt index b6d4eb7b86d..833772e13d5 100644 --- a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/NullableToStringCall.kt +++ b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/NullableToStringCall.kt @@ -61,7 +61,6 @@ class NullableToStringCall(config: Config = Config.empty) : Rule(config) { override fun visitSimpleNameExpression(expression: KtSimpleNameExpression) { super.visitSimpleNameExpression(expression) - if (bindingContext == BindingContext.EMPTY) return val simpleOrCallExpression = expression.parent.safeAs() ?: expression val targetExpression = simpleOrCallExpression.targetExpression() ?: return diff --git a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/RedundantElseInWhen.kt b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/RedundantElseInWhen.kt index e4a2b80d806..042a03569bb 100644 --- a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/RedundantElseInWhen.kt +++ b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/RedundantElseInWhen.kt @@ -11,7 +11,6 @@ import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault import io.gitlab.arturbosch.detekt.api.internal.RequiresTypeResolution import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.psi.KtWhenExpression -import org.jetbrains.kotlin.resolve.BindingContext /** * Turn on this rule to flag `when` expressions that contain a redundant `else` case. This occurs when it can be @@ -72,7 +71,6 @@ class RedundantElseInWhen(config: Config = Config.empty) : Rule(config) { override fun visitWhenExpression(whenExpression: KtWhenExpression) { super.visitWhenExpression(whenExpression) - if (bindingContext == BindingContext.EMPTY) return val elseEntry = whenExpression.entries.lastOrNull { it.isElse } ?: return val compilerReports = bindingContext.diagnostics.forElement(elseEntry) if (compilerReports.any { it.factory == Errors.REDUNDANT_ELSE_IN_WHEN }) { diff --git a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnnecessaryNotNullOperator.kt b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnnecessaryNotNullOperator.kt index d6c60d4319b..bc7300c2098 100644 --- a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnnecessaryNotNullOperator.kt +++ b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnnecessaryNotNullOperator.kt @@ -11,7 +11,6 @@ import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault import io.gitlab.arturbosch.detekt.api.internal.RequiresTypeResolution import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.psi.KtUnaryExpression -import org.jetbrains.kotlin.resolve.BindingContext /** * Reports unnecessary not-null operator usage (!!) that can be removed by the user. @@ -39,7 +38,6 @@ class UnnecessaryNotNullOperator(config: Config = Config.empty) : Rule(config) { override fun visitUnaryExpression(expression: KtUnaryExpression) { super.visitUnaryExpression(expression) - if (bindingContext == BindingContext.EMPTY) return val compilerReports = bindingContext.diagnostics.forElement(expression.operationReference) if (compilerReports.any { it.factory == Errors.UNNECESSARY_NOT_NULL_ASSERTION }) { diff --git a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnnecessarySafeCall.kt b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnnecessarySafeCall.kt index 290723135eb..d108d741325 100644 --- a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnnecessarySafeCall.kt +++ b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnnecessarySafeCall.kt @@ -14,7 +14,6 @@ import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.KtSafeQualifiedExpression import org.jetbrains.kotlin.psi.psiUtil.getChildOfType -import org.jetbrains.kotlin.resolve.BindingContext /** * Reports unnecessary safe call operators (`?.`) that can be removed by the user. @@ -44,8 +43,6 @@ class UnnecessarySafeCall(config: Config = Config.empty) : Rule(config) { override fun visitSafeQualifiedExpression(expression: KtSafeQualifiedExpression) { super.visitSafeQualifiedExpression(expression) - if (bindingContext == BindingContext.EMPTY) return - val safeAccessElement = expression.getChildOfType() if (safeAccessElement == null || safeAccessElement.elementType != KtTokens.SAFE_ACCESS) { return diff --git a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnreachableCatchBlock.kt b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnreachableCatchBlock.kt index 6846f42cd13..9a00e0662ac 100644 --- a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnreachableCatchBlock.kt +++ b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnreachableCatchBlock.kt @@ -60,7 +60,6 @@ class UnreachableCatchBlock(config: Config = Config.empty) : Rule(config) { @Suppress("ReturnCount") override fun visitCatchSection(catchClause: KtCatchClause) { super.visitCatchSection(catchClause) - if (bindingContext == BindingContext.EMPTY) return val tryExpression = catchClause.getStrictParentOfType() ?: return val prevCatchClauses = tryExpression.catchClauses.takeWhile { it != catchClause } diff --git a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnreachableCode.kt b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnreachableCode.kt index 5dac3f7bf14..a5e6d5fc966 100644 --- a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnreachableCode.kt +++ b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnreachableCode.kt @@ -11,7 +11,6 @@ import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault import io.gitlab.arturbosch.detekt.api.internal.RequiresTypeResolution import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.psi.KtExpression -import org.jetbrains.kotlin.resolve.BindingContext /** * Reports unreachable code. @@ -46,9 +45,7 @@ class UnreachableCode(config: Config = Config.empty) : Rule(config) { override fun visitExpression(expression: KtExpression) { super.visitExpression(expression) - if (bindingContext != BindingContext.EMPTY && - bindingContext.diagnostics.forElement(expression).any { it.factory == Errors.UNREACHABLE_CODE } - ) { + if (bindingContext.diagnostics.forElement(expression).any { it.factory == Errors.UNREACHABLE_CODE }) { report( CodeSmell( issue, diff --git a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnsafeCallOnNullableType.kt b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnsafeCallOnNullableType.kt index f05ff1ec2e9..1f798a13627 100644 --- a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnsafeCallOnNullableType.kt +++ b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnsafeCallOnNullableType.kt @@ -11,7 +11,6 @@ import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault import io.gitlab.arturbosch.detekt.api.internal.RequiresTypeResolution import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.KtPostfixExpression -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.util.getType import org.jetbrains.kotlin.types.typeUtil.TypeNullability import org.jetbrains.kotlin.types.typeUtil.nullability @@ -46,7 +45,6 @@ class UnsafeCallOnNullableType(config: Config = Config.empty) : Rule(config) { override fun visitPostfixExpression(expression: KtPostfixExpression) { super.visitPostfixExpression(expression) - if (bindingContext == BindingContext.EMPTY) return if (expression.operationToken == KtTokens.EXCLEXCL && expression.baseExpression?.getType(bindingContext)?.nullability() == TypeNullability.NULLABLE ) { diff --git a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnsafeCast.kt b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnsafeCast.kt index b80155cfa46..afe79d4fc33 100644 --- a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnsafeCast.kt +++ b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnsafeCast.kt @@ -11,7 +11,6 @@ import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault import io.gitlab.arturbosch.detekt.api.internal.RequiresTypeResolution import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.psi.KtBinaryExpressionWithTypeRHS -import org.jetbrains.kotlin.resolve.BindingContext /** * Reports casts that will never succeed. @@ -46,8 +45,6 @@ class UnsafeCast(config: Config = Config.empty) : Rule(config) { ) override fun visitBinaryWithTypeRHSExpression(expression: KtBinaryExpressionWithTypeRHS) { - if (bindingContext == BindingContext.EMPTY) return - if (bindingContext.diagnostics.forElement(expression.operationReference) .any { it.factory == Errors.CAST_NEVER_SUCCEEDS } ) { diff --git a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnusedUnaryOperator.kt b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnusedUnaryOperator.kt index da3b6e64487..402410feb41 100644 --- a/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnusedUnaryOperator.kt +++ b/detekt-rules-errorprone/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/bugs/UnusedUnaryOperator.kt @@ -19,7 +19,6 @@ import org.jetbrains.kotlin.psi.KtExpression import org.jetbrains.kotlin.psi.KtPrefixExpression import org.jetbrains.kotlin.psi.psiUtil.leaves import org.jetbrains.kotlin.psi.psiUtil.parents -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.bindingContextUtil.isUsedAsExpression import org.jetbrains.kotlin.resolve.calls.util.getResolvedCall @@ -51,7 +50,6 @@ class UnusedUnaryOperator(config: Config = Config.empty) : Rule(config) { @Suppress("ReturnCount") override fun visitPrefixExpression(expression: KtPrefixExpression) { super.visitPrefixExpression(expression) - if (bindingContext == BindingContext.EMPTY) return if (expression.baseExpression == null) return val operationToken = expression.operationToken diff --git a/detekt-rules-exceptions/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/exceptions/ObjectExtendsThrowable.kt b/detekt-rules-exceptions/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/exceptions/ObjectExtendsThrowable.kt index e07a9f94466..3643d8bdc62 100644 --- a/detekt-rules-exceptions/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/exceptions/ObjectExtendsThrowable.kt +++ b/detekt-rules-exceptions/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/exceptions/ObjectExtendsThrowable.kt @@ -55,7 +55,6 @@ class ObjectExtendsThrowable(config: Config = Config.empty) : Rule(config) { override fun visitObjectDeclaration(declaration: KtObjectDeclaration) { super.visitObjectDeclaration(declaration) - if (bindingContext == BindingContext.EMPTY) return if (!declaration.isObjectLiteral() && declaration.isSubtypeOfThrowable()) { report( CodeSmell( diff --git a/detekt-rules-exceptions/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/exceptions/ReturnFromFinally.kt b/detekt-rules-exceptions/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/exceptions/ReturnFromFinally.kt index 6e92d8cab79..8fc1adae64d 100644 --- a/detekt-rules-exceptions/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/exceptions/ReturnFromFinally.kt +++ b/detekt-rules-exceptions/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/exceptions/ReturnFromFinally.kt @@ -18,7 +18,6 @@ import org.jetbrains.kotlin.psi.KtTryExpression import org.jetbrains.kotlin.psi.psiUtil.blockExpressionsOrSingle import org.jetbrains.kotlin.psi.psiUtil.collectDescendantsOfType import org.jetbrains.kotlin.psi.psiUtil.isInsideOf -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.bindingContextUtil.getTargetFunction import org.jetbrains.kotlin.resolve.bindingContextUtil.isUsedAsExpression import org.jetbrains.kotlin.resolve.calls.util.getType @@ -57,7 +56,6 @@ class ReturnFromFinally(config: Config = Config.empty) : Rule(config) { override fun visitTryExpression(expression: KtTryExpression) { super.visitTryExpression(expression) - if (bindingContext == BindingContext.EMPTY) return val finallyBlock = expression.finallyBlock ?: return diff --git a/detekt-rules-naming/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/naming/BooleanPropertyNaming.kt b/detekt-rules-naming/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/naming/BooleanPropertyNaming.kt index 2bb5c283402..061b187fb35 100644 --- a/detekt-rules-naming/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/naming/BooleanPropertyNaming.kt +++ b/detekt-rules-naming/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/naming/BooleanPropertyNaming.kt @@ -17,7 +17,6 @@ import io.gitlab.arturbosch.detekt.rules.isOverride import org.jetbrains.kotlin.psi.KtCallableDeclaration import org.jetbrains.kotlin.psi.KtParameter import org.jetbrains.kotlin.psi.KtProperty -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.typeBinding.createTypeBindingForReturnType /** @@ -62,10 +61,6 @@ class BooleanPropertyNaming(config: Config = Config.empty) : Rule(config) { } private fun validateDeclaration(declaration: KtCallableDeclaration) { - if (bindingContext == BindingContext.EMPTY) { - return - } - val name = declaration.identifierName() val typeName = getTypeName(declaration) val isBooleanType = diff --git a/detekt-rules-naming/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/naming/NoNameShadowing.kt b/detekt-rules-naming/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/naming/NoNameShadowing.kt index e66e0321345..cff5fdbcb54 100644 --- a/detekt-rules-naming/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/naming/NoNameShadowing.kt +++ b/detekt-rules-naming/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/naming/NoNameShadowing.kt @@ -18,7 +18,6 @@ import org.jetbrains.kotlin.psi.KtNamedDeclaration import org.jetbrains.kotlin.psi.KtParameter import org.jetbrains.kotlin.psi.KtProperty import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType -import org.jetbrains.kotlin.resolve.BindingContext /** * Disallows shadowing variable declarations. @@ -76,16 +75,13 @@ class NoNameShadowing(config: Config = Config.empty) : Rule(config) { private fun checkNameShadowing(declaration: KtNamedDeclaration) { val nameIdentifier = declaration.nameIdentifier ?: return - if (bindingContext != BindingContext.EMPTY && - bindingContext.diagnostics.forElement(declaration).any { it.factory == Errors.NAME_SHADOWING } - ) { + if (bindingContext.diagnostics.forElement(declaration).any { it.factory == Errors.NAME_SHADOWING }) { report(CodeSmell(issue, Entity.from(nameIdentifier), "Name shadowed: ${nameIdentifier.text}")) } } override fun visitLambdaExpression(lambdaExpression: KtLambdaExpression) { super.visitLambdaExpression(lambdaExpression) - if (bindingContext == BindingContext.EMPTY) return val implicitParameter = lambdaExpression.implicitParameter(bindingContext) ?: return if (lambdaExpression.hasImplicitParameterReference(implicitParameter, bindingContext) && lambdaExpression.hasParentImplicitParameterLambda() diff --git a/detekt-rules-naming/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/naming/NonBooleanPropertyPrefixedWithIs.kt b/detekt-rules-naming/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/naming/NonBooleanPropertyPrefixedWithIs.kt index e8c17808be6..386c6223a8d 100644 --- a/detekt-rules-naming/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/naming/NonBooleanPropertyPrefixedWithIs.kt +++ b/detekt-rules-naming/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/naming/NonBooleanPropertyPrefixedWithIs.kt @@ -14,7 +14,6 @@ import org.jetbrains.kotlin.builtins.isFunctionOrKFunctionTypeWithAnySuspendabil import org.jetbrains.kotlin.psi.KtCallableDeclaration import org.jetbrains.kotlin.psi.KtParameter import org.jetbrains.kotlin.psi.KtProperty -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.typeBinding.createTypeBindingForReturnType import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.typeUtil.isBoolean @@ -59,10 +58,6 @@ class NonBooleanPropertyPrefixedWithIs(config: Config = Config.empty) : Rule(con } private fun validateDeclaration(declaration: KtCallableDeclaration) { - if (bindingContext == BindingContext.EMPTY) { - return - } - val name = declaration.identifierName() if (name.startsWith("is") && name.length > 2 && !name[2].isLowerCase()) { diff --git a/detekt-rules-performance/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/performance/ArrayPrimitive.kt b/detekt-rules-performance/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/performance/ArrayPrimitive.kt index 95348b92ee1..890f1447ec5 100644 --- a/detekt-rules-performance/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/performance/ArrayPrimitive.kt +++ b/detekt-rules-performance/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/performance/ArrayPrimitive.kt @@ -15,11 +15,9 @@ import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.KtCallExpression import org.jetbrains.kotlin.psi.KtCallableDeclaration -import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtNamedDeclaration import org.jetbrains.kotlin.psi.KtTypeReference import org.jetbrains.kotlin.psi.psiUtil.collectDescendantsOfType -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.util.getResolvedCall import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameOrNull @@ -52,11 +50,6 @@ class ArrayPrimitive(config: Config = Config.empty) : Rule(config) { Debt.FIVE_MINS ) - override fun visitKtFile(file: KtFile) { - if (bindingContext == BindingContext.EMPTY) return - super.visitKtFile(file) - } - override fun visitCallExpression(expression: KtCallExpression) { super.visitCallExpression(expression) if (expression.calleeExpression?.text !in factoryMethodNames) return diff --git a/detekt-rules-performance/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/performance/CouldBeSequence.kt b/detekt-rules-performance/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/performance/CouldBeSequence.kt index 178cded16eb..d2360b7c83f 100644 --- a/detekt-rules-performance/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/performance/CouldBeSequence.kt +++ b/detekt-rules-performance/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/performance/CouldBeSequence.kt @@ -15,7 +15,6 @@ import org.jetbrains.kotlin.psi.KtCallExpression import org.jetbrains.kotlin.psi.KtExpression import org.jetbrains.kotlin.psi.psiUtil.getQualifiedExpressionForReceiver import org.jetbrains.kotlin.psi.psiUtil.getQualifiedExpressionForSelectorOrThis -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.util.getResolvedCall import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameOrNull @@ -51,8 +50,6 @@ class CouldBeSequence(config: Config = Config.empty) : Rule(config) { override fun visitCallExpression(expression: KtCallExpression) { super.visitCallExpression(expression) - if (bindingContext == BindingContext.EMPTY) return - if (visitedCallExpressions.contains(expression)) return if (!expression.isCalling(operationsFqNames)) return 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 58e7eaeb37a..ba7d03b4f5e 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 @@ -16,7 +16,6 @@ import org.jetbrains.kotlin.psi.KtBlockExpression import org.jetbrains.kotlin.psi.KtCallExpression import org.jetbrains.kotlin.psi.KtDotQualifiedExpression import org.jetbrains.kotlin.psi.psiUtil.getQualifiedExpressionForSelector -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.util.getResolvedCall import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe import org.jetbrains.kotlin.types.error.ErrorType @@ -52,7 +51,6 @@ class ExplicitCollectionElementAccessMethod(config: Config = Config.empty) : Rul override fun visitDotQualifiedExpression(expression: KtDotQualifiedExpression) { super.visitDotQualifiedExpression(expression) - if (bindingContext == BindingContext.EMPTY) return val call = expression.selectorExpression as? KtCallExpression ?: return if (isIndexGetterRecommended(call) || isIndexSetterRecommended(call)) { report(CodeSmell(issue, Entity.from(expression), issue.description)) diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/ForbiddenMethodCall.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/ForbiddenMethodCall.kt index 6486d326e9c..88d43e5cb55 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/ForbiddenMethodCall.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/ForbiddenMethodCall.kt @@ -25,7 +25,6 @@ import org.jetbrains.kotlin.psi.KtPrefixExpression import org.jetbrains.kotlin.psi.psiUtil.isDotSelector import org.jetbrains.kotlin.psi2ir.unwrappedGetMethod import org.jetbrains.kotlin.psi2ir.unwrappedSetMethod -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.util.getCalleeExpressionIfAny import org.jetbrains.kotlin.resolve.calls.util.getResolvedCall @@ -106,8 +105,6 @@ class ForbiddenMethodCall(config: Config = Config.empty) : Rule(config) { } private fun check(expression: KtExpression) { - if (bindingContext == BindingContext.EMPTY) return - val descriptors = expression.getResolvedCall(bindingContext)?.resultingDescriptor?.let { val foundDescriptors = if (it is PropertyDescriptor) { listOfNotNull(it.unwrappedGetMethod, it.unwrappedSetMethod) diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/ForbiddenVoid.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/ForbiddenVoid.kt index 6e67b33309a..196dddc1892 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/ForbiddenVoid.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/ForbiddenVoid.kt @@ -20,7 +20,6 @@ import org.jetbrains.kotlin.psi.KtTypeArgumentList import org.jetbrains.kotlin.psi.KtTypeReference import org.jetbrains.kotlin.psi.psiUtil.anyDescendantOfType import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.bindingContextUtil.getAbbreviatedTypeOrType /** @@ -57,7 +56,6 @@ class ForbiddenVoid(config: Config = Config.empty) : Rule(config) { @Suppress("ReturnCount") override fun visitTypeReference(typeReference: KtTypeReference) { - if (bindingContext == BindingContext.EMPTY) return val kotlinType = typeReference.getAbbreviatedTypeOrType(bindingContext) ?: return if (kotlinType.fqNameOrNull() == VOID_FQ_NAME) { diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/LibraryCodeMustSpecifyReturnType.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/LibraryCodeMustSpecifyReturnType.kt index d63904568d4..711bb43bbcd 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/LibraryCodeMustSpecifyReturnType.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/LibraryCodeMustSpecifyReturnType.kt @@ -54,9 +54,6 @@ class LibraryCodeMustSpecifyReturnType(config: Config = Config.empty) : Rule(con ) override fun visitProperty(property: KtProperty) { - if (bindingContext == BindingContext.EMPTY) { - return - } if (property.explicitReturnTypeRequired()) { report( CodeSmell( diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/MaxChainedCallsOnSameLine.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/MaxChainedCallsOnSameLine.kt index f64f09a2974..10040c68ff9 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/MaxChainedCallsOnSameLine.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/MaxChainedCallsOnSameLine.kt @@ -47,8 +47,6 @@ class MaxChainedCallsOnSameLine(config: Config = Config.empty) : Rule(config) { override fun visitQualifiedExpression(expression: KtQualifiedExpression) { super.visitQualifiedExpression(expression) - if (bindingContext == BindingContext.EMPTY) return - val parent = expression.parent // skip if the parent is also a call on the same line to avoid duplicated warnings diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/MultilineLambdaItParameter.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/MultilineLambdaItParameter.kt index 3c6d898bd6c..40d08f0131a 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/MultilineLambdaItParameter.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/MultilineLambdaItParameter.kt @@ -12,7 +12,6 @@ import io.gitlab.arturbosch.detekt.rules.IT_LITERAL import io.gitlab.arturbosch.detekt.rules.hasImplicitParameterReference import io.gitlab.arturbosch.detekt.rules.implicitParameter import org.jetbrains.kotlin.psi.KtLambdaExpression -import org.jetbrains.kotlin.resolve.BindingContext /** * Lambda expressions are very useful in a lot of cases, and they often include very small chunks of @@ -75,7 +74,6 @@ class MultilineLambdaItParameter(val config: Config) : Rule(config) { override fun visitLambdaExpression(lambdaExpression: KtLambdaExpression) { super.visitLambdaExpression(lambdaExpression) - if (bindingContext == BindingContext.EMPTY) return val size = lambdaExpression.bodyExpression?.statements?.size if (size == null || size <= 1) return diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/ObjectLiteralToLambda.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/ObjectLiteralToLambda.kt index c4bbb262527..bddc5ebe654 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/ObjectLiteralToLambda.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/ObjectLiteralToLambda.kt @@ -96,7 +96,6 @@ class ObjectLiteralToLambda(config: Config = Config.empty) : Rule(config) { override fun visitObjectLiteralExpression(expression: KtObjectLiteralExpression) { super.visitObjectLiteralExpression(expression) - if (bindingContext == BindingContext.EMPTY) return val declaration = expression.objectDeclaration if ( diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/RedundantExplicitType.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/RedundantExplicitType.kt index 8b28cd4f123..5c709b2898b 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/RedundantExplicitType.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/RedundantExplicitType.kt @@ -56,7 +56,6 @@ class RedundantExplicitType(config: Config) : Rule(config) { @Suppress("ReturnCount", "ComplexMethod") override fun visitProperty(property: KtProperty) { - if (bindingContext == BindingContext.EMPTY) return if (!property.isLocal) return val typeReference = property.typeReference ?: return val type = diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/RedundantHigherOrderMapUsage.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/RedundantHigherOrderMapUsage.kt index 75f53400749..cc9568e7338 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/RedundantHigherOrderMapUsage.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/RedundantHigherOrderMapUsage.kt @@ -86,7 +86,6 @@ class RedundantHigherOrderMapUsage(config: Config = Config.empty) : Rule(config) override fun visitCallExpression(expression: KtCallExpression) { super.visitCallExpression(expression) - if (bindingContext == BindingContext.EMPTY) return val calleeExpression = expression.calleeExpression if (calleeExpression?.text != "map") return diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryApply.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryApply.kt index dc9a4647843..4d53753bf37 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryApply.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryApply.kt @@ -56,8 +56,6 @@ class UnnecessaryApply(config: Config) : Rule(config) { override fun visitCallExpression(expression: KtCallExpression) { super.visitCallExpression(expression) - if (bindingContext == BindingContext.EMPTY) return - if (expression.isApplyExpr() && expression.hasOnlyOneMemberAccessStatement() && !expression.receiverIsUsed(bindingContext) diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryFilter.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryFilter.kt index 9fdf56e03e5..d0249a78eee 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryFilter.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryFilter.kt @@ -16,7 +16,6 @@ import org.jetbrains.kotlin.psi.KtLambdaExpression import org.jetbrains.kotlin.psi.psiUtil.getQualifiedExpressionForReceiver import org.jetbrains.kotlin.psi.psiUtil.getQualifiedExpressionForSelectorOrThis import org.jetbrains.kotlin.psi.unpackFunctionLiteral -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.util.getResolvedCall import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameOrNull @@ -57,7 +56,6 @@ class UnnecessaryFilter(config: Config = Config.empty) : Rule(config) { @Suppress("ReturnCount") override fun visitCallExpression(expression: KtCallExpression) { super.visitCallExpression(expression) - if (bindingContext == BindingContext.EMPTY) return if (!expression.isCalling(filterFqNames)) return val lambdaArgumentText = expression.lambda()?.text ?: return diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryInnerClass.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryInnerClass.kt index 3b4ea4c6f0a..813b3a71f26 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryInnerClass.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryInnerClass.kt @@ -13,7 +13,6 @@ import org.jetbrains.kotlin.backend.common.pop import org.jetbrains.kotlin.descriptors.ClassifierDescriptor import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.psi.KtClass -import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtReferenceExpression import org.jetbrains.kotlin.psi.KtThisExpression import org.jetbrains.kotlin.psi.psiUtil.containingClass @@ -54,11 +53,6 @@ class UnnecessaryInnerClass(config: Config = Config.empty) : Rule(config) { Debt.FIVE_MINS ) - override fun visit(root: KtFile) { - if (bindingContext == BindingContext.EMPTY) return - super.visit(root) - } - override fun visitClass(klass: KtClass) { classChain.add(klass) if (klass.isInner()) { diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryLet.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryLet.kt index 51ef26576aa..18085155d16 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryLet.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryLet.kt @@ -59,8 +59,6 @@ class UnnecessaryLet(config: Config) : Rule(config) { override fun visitCallExpression(expression: KtCallExpression) { super.visitCallExpression(expression) - if (bindingContext == BindingContext.EMPTY) return - if (!expression.isLetExpr()) return val lambdaExpr = expression.firstLambdaArg diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UseAnyOrNoneInsteadOfFind.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UseAnyOrNoneInsteadOfFind.kt index 87be6f8cf93..7a24b918f94 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UseAnyOrNoneInsteadOfFind.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UseAnyOrNoneInsteadOfFind.kt @@ -17,7 +17,6 @@ import org.jetbrains.kotlin.psi.KtBinaryExpression import org.jetbrains.kotlin.psi.KtCallExpression import org.jetbrains.kotlin.psi.KtQualifiedExpression import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType -import org.jetbrains.kotlin.resolve.BindingContext /** * Turn on this rule to flag `find` calls for null check that can be replaced with a `any` or `none` call. @@ -45,7 +44,6 @@ class UseAnyOrNoneInsteadOfFind(config: Config = Config.empty) : Rule(config) { @Suppress("ReturnCount") override fun visitCallExpression(expression: KtCallExpression) { super.visitCallExpression(expression) - if (bindingContext == BindingContext.EMPTY) return val functionName = expression.calleeExpression?.text ?: return val qualifiedOrThis = expression.getStrictParentOfType() ?: expression diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UseCheckNotNull.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UseCheckNotNull.kt index 9b64c40222f..dc1b2decc59 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UseCheckNotNull.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UseCheckNotNull.kt @@ -12,7 +12,6 @@ import io.gitlab.arturbosch.detekt.api.internal.RequiresTypeResolution import io.gitlab.arturbosch.detekt.rules.isCallingWithNonNullCheckArgument import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.KtCallExpression -import org.jetbrains.kotlin.resolve.BindingContext /** * Turn on this rule to flag `check` calls for not-null check that can be replaced with a `checkNotNull` call. @@ -37,7 +36,6 @@ class UseCheckNotNull(config: Config = Config.empty) : Rule(config) { override fun visitCallExpression(expression: KtCallExpression) { super.visitCallExpression(expression) - if (bindingContext == BindingContext.EMPTY) return if (expression.isCallingWithNonNullCheckArgument(checkFunctionFqName, bindingContext)) { report(CodeSmell(issue, Entity.from(expression), issue.description)) } diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UseIfEmptyOrIfBlank.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UseIfEmptyOrIfBlank.kt index 8b0c14352b5..7ea3826042f 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UseIfEmptyOrIfBlank.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UseIfEmptyOrIfBlank.kt @@ -20,7 +20,6 @@ import org.jetbrains.kotlin.psi.KtPrefixExpression import org.jetbrains.kotlin.psi.KtThisExpression import org.jetbrains.kotlin.psi.psiUtil.blockExpressionsOrSingle import org.jetbrains.kotlin.psi.psiUtil.getPossiblyQualifiedCallExpression -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.util.getResolvedCall import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameOrNull @@ -59,7 +58,6 @@ class UseIfEmptyOrIfBlank(config: Config = Config.empty) : Rule(config) { override fun visitIfExpression(expression: KtIfExpression) { super.visitIfExpression(expression) - if (bindingContext == BindingContext.EMPTY) return if (expression.isElseIf()) return val thenExpression = expression.then ?: return diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UseIsNullOrEmpty.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UseIsNullOrEmpty.kt index b10efcc64ae..fc2b96a1aa2 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UseIsNullOrEmpty.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UseIsNullOrEmpty.kt @@ -19,7 +19,6 @@ import org.jetbrains.kotlin.psi.KtCallExpression import org.jetbrains.kotlin.psi.KtDotQualifiedExpression import org.jetbrains.kotlin.psi.KtExpression import org.jetbrains.kotlin.psi.KtSimpleNameExpression -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.util.getResolvedCall import org.jetbrains.kotlin.resolve.calls.util.getType import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameOrNull @@ -59,7 +58,6 @@ class UseIsNullOrEmpty(config: Config = Config.empty) : Rule(config) { @Suppress("ReturnCount") override fun visitBinaryExpression(expression: KtBinaryExpression) { super.visitBinaryExpression(expression) - if (bindingContext == BindingContext.EMPTY) return if (expression.operationToken != KtTokens.OROR) return val left = expression.left as? KtBinaryExpression ?: return diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UseOrEmpty.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UseOrEmpty.kt index 8f4e7a69798..c0e43203263 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UseOrEmpty.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UseOrEmpty.kt @@ -18,7 +18,6 @@ import org.jetbrains.kotlin.psi.KtCallExpression import org.jetbrains.kotlin.psi.KtExpression import org.jetbrains.kotlin.psi.KtStringTemplateExpression import org.jetbrains.kotlin.psi2ir.deparenthesize -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.util.getResolvedCall import org.jetbrains.kotlin.resolve.calls.util.getType import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameOrNull @@ -57,7 +56,6 @@ class UseOrEmpty(config: Config = Config.empty) : Rule(config) { @Suppress("ReturnCount") override fun visitBinaryExpression(expression: KtBinaryExpression) { super.visitBinaryExpression(expression) - if (bindingContext == BindingContext.EMPTY) return if (expression.operationToken != KtTokens.ELVIS) return val left = expression.left ?: return diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UseRequireNotNull.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UseRequireNotNull.kt index d2eec9f51c0..12750c1b276 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UseRequireNotNull.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UseRequireNotNull.kt @@ -12,7 +12,6 @@ import io.gitlab.arturbosch.detekt.api.internal.RequiresTypeResolution import io.gitlab.arturbosch.detekt.rules.isCallingWithNonNullCheckArgument import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.KtCallExpression -import org.jetbrains.kotlin.resolve.BindingContext /** * Turn on this rule to flag `require` calls for not-null check that can be replaced with a `requireNotNull` call. @@ -37,7 +36,6 @@ class UseRequireNotNull(config: Config = Config.empty) : Rule(config) { override fun visitCallExpression(expression: KtCallExpression) { super.visitCallExpression(expression) - if (bindingContext == BindingContext.EMPTY) return if (expression.isCallingWithNonNullCheckArgument(requireFunctionFqName, bindingContext)) { report(CodeSmell(issue, Entity.from(expression), issue.description)) } diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UselessCallOnNotNull.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UselessCallOnNotNull.kt index 8f6e0eb6a92..b2600a04692 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UselessCallOnNotNull.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UselessCallOnNotNull.kt @@ -14,7 +14,6 @@ import org.jetbrains.kotlin.psi.KtCallExpression import org.jetbrains.kotlin.psi.KtQualifiedExpression import org.jetbrains.kotlin.psi.KtSafeQualifiedExpression import org.jetbrains.kotlin.psi.ValueArgument -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.util.getResolvedCall import org.jetbrains.kotlin.resolve.calls.util.getType import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameOrNull @@ -61,7 +60,6 @@ class UselessCallOnNotNull(config: Config = Config.empty) : Rule(config) { @Suppress("ReturnCount") override fun visitQualifiedExpression(expression: KtQualifiedExpression) { super.visitQualifiedExpression(expression) - if (bindingContext == BindingContext.EMPTY) return val safeExpression = expression as? KtSafeQualifiedExpression val notNullType = expression.receiverExpression.getType(bindingContext)?.isNullable() == false diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/VarCouldBeVal.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/VarCouldBeVal.kt index 8bc2fc7c2f4..da8c7c62ba8 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/VarCouldBeVal.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/VarCouldBeVal.kt @@ -76,7 +76,6 @@ class VarCouldBeVal(config: Config = Config.empty) : Rule(config) { override fun visitKtFile(file: KtFile) { super.visitKtFile(file) - if (bindingContext == BindingContext.EMPTY) return val assignmentVisitor = AssignmentVisitor(bindingContext, ignoreLateinitVar) file.accept(assignmentVisitor) diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/optional/PreferToOverPairSyntax.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/optional/PreferToOverPairSyntax.kt index 37228a57b85..d7e359b91b2 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/optional/PreferToOverPairSyntax.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/optional/PreferToOverPairSyntax.kt @@ -12,7 +12,6 @@ import io.gitlab.arturbosch.detekt.rules.safeAs import org.jetbrains.kotlin.descriptors.ClassConstructorDescriptor import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.KtCallExpression -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.util.getResolvedCall import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameOrNull @@ -42,7 +41,6 @@ class PreferToOverPairSyntax(config: Config = Config.empty) : Rule(config) { override fun visitCallExpression(expression: KtCallExpression) { super.visitCallExpression(expression) - if (bindingContext == BindingContext.EMPTY) return if (expression.isPairConstructor()) { val arg = expression.valueArguments.joinToString(" to ") { it.text } report(