From 503f061c8c00c1b1a56148694ffbf54181b0e070 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Thu, 8 Nov 2018 14:56:27 +0300 Subject: [PATCH] Forbid suggesting "iterate over" on expression with Nothing type #KT-14555 Fixed --- .../kotlin/idea/intentions/IterateExpressionIntention.kt | 2 ++ idea/testData/intentions/iterateExpression/nothing.kt | 6 ++++++ .../kotlin/idea/intentions/IntentionTestGenerated.java | 5 +++++ 3 files changed, 13 insertions(+) create mode 100644 idea/testData/intentions/iterateExpression/nothing.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/IterateExpressionIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/IterateExpressionIntention.kt index 998f537783c..f30bddbcbce 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/IterateExpressionIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/IterateExpressionIntention.kt @@ -21,6 +21,7 @@ import com.intellij.codeInsight.intention.HighPriorityAction import com.intellij.codeInsight.template.TemplateBuilderImpl import com.intellij.codeInsight.template.impl.ConstantNode import com.intellij.openapi.editor.Editor +import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.core.* @@ -51,6 +52,7 @@ class IterateExpressionIntention : SelfTargetingIntention(KtExpres val resolutionFacade = expression.getResolutionFacade() val bindingContext = resolutionFacade.analyze(expression, BodyResolveMode.PARTIAL) val type = bindingContext.getType(expression) ?: return null + if (KotlinBuiltIns.isNothing(type)) return null val scope = expression.getResolutionScope(bindingContext, resolutionFacade) val detector = resolutionFacade.ideService().createDetector(scope) val elementType = detector.elementType(type)?.type ?: return null diff --git a/idea/testData/intentions/iterateExpression/nothing.kt b/idea/testData/intentions/iterateExpression/nothing.kt new file mode 100644 index 00000000000..88e81de3312 --- /dev/null +++ b/idea/testData/intentions/iterateExpression/nothing.kt @@ -0,0 +1,6 @@ +// JS +// IS_APPLICABLE: false + +fun foo(): String { + return "hello" +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java index c394ea451f6..e38c68de8e4 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -9673,6 +9673,11 @@ public class IntentionTestGenerated extends AbstractIntentionTest { runTest("idea/testData/intentions/iterateExpression/nonOperatotExtensionIterator.kt"); } + @TestMetadata("nothing.kt") + public void testNothing() throws Exception { + runTest("idea/testData/intentions/iterateExpression/nothing.kt"); + } + @TestMetadata("simple.kt") public void testSimple() throws Exception { runTest("idea/testData/intentions/iterateExpression/simple.kt");