From 2ca0056cd07d12e6bda4a65b3b1bb47e83019276 Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Mon, 1 Jul 2019 19:19:11 +0900 Subject: [PATCH] ReplaceGuardClause inspection: check contracts availability --- .../ReplaceGuardClauseWithFunctionCallInspection.kt | 4 ++++ .../replaceGuardClauseWithFunctionCall/version12.kt | 11 +++++++++++ .../inspections/LocalInspectionTestGenerated.java | 5 +++++ 3 files changed, 20 insertions(+) create mode 100644 idea/testData/inspectionsLocal/replaceGuardClauseWithFunctionCall/version12.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/ReplaceGuardClauseWithFunctionCallInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/ReplaceGuardClauseWithFunctionCallInspection.kt index 7e0f55c9951..ce7531d011d 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/ReplaceGuardClauseWithFunctionCallInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/ReplaceGuardClauseWithFunctionCallInspection.kt @@ -8,10 +8,12 @@ package org.jetbrains.kotlin.idea.inspections import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project import org.jetbrains.kotlin.builtins.KotlinBuiltIns +import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.core.ShortenReferences import org.jetbrains.kotlin.idea.core.replaced import org.jetbrains.kotlin.idea.intentions.callExpression +import org.jetbrains.kotlin.idea.project.languageVersionSettings import org.jetbrains.kotlin.idea.util.CommentSaver import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.name.FqName @@ -44,6 +46,8 @@ class ReplaceGuardClauseWithFunctionCallInspection : AbstractApplicabilityBasedI element.getKotlinFunction()?.let { "Replace with '${it.functionName}()' call" } ?: defaultFixText override fun isApplicable(element: KtIfExpression): Boolean { + val languageVersionSettings = element.languageVersionSettings + if (!languageVersionSettings.supportsFeature(LanguageFeature.UseReturnsEffect)) return false if (element.condition == null) return false val call = element.getCallExpression() ?: return false val calleeText = call.calleeExpression?.text ?: return false diff --git a/idea/testData/inspectionsLocal/replaceGuardClauseWithFunctionCall/version12.kt b/idea/testData/inspectionsLocal/replaceGuardClauseWithFunctionCall/version12.kt new file mode 100644 index 00000000000..006996b3997 --- /dev/null +++ b/idea/testData/inspectionsLocal/replaceGuardClauseWithFunctionCall/version12.kt @@ -0,0 +1,11 @@ +// PROBLEM: none +// WITH_RUNTIME +// LANGUAGE_VERSION: 1.2 +fun test(foo: Int?) { + if (foo == null) { + throw IllegalArgumentException("test") + } + bar(foo) +} + +fun bar(i: Int) {} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java index 4c7057389a1..7adec06cf01 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java @@ -8924,6 +8924,11 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest { runTest("idea/testData/inspectionsLocal/replaceGuardClauseWithFunctionCall/notTargetException.kt"); } + @TestMetadata("version12.kt") + public void testVersion12() throws Exception { + runTest("idea/testData/inspectionsLocal/replaceGuardClauseWithFunctionCall/version12.kt"); + } + @TestMetadata("idea/testData/inspectionsLocal/replaceGuardClauseWithFunctionCall/check") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class)