From 97233448d09c652c943e18b32c5f3739f0c75c70 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Mon, 11 Sep 2017 12:10:53 +0300 Subject: [PATCH] Enclosing element: do not handle parameters of for as function ones So #KT-19626 Fixed --- .../frontend/src/org/jetbrains/kotlin/psi/KtPsiUtil.java | 4 +++- .../intentions/specifyTypeExplicitly/forAsExpression.kt | 3 +++ .../specifyTypeExplicitly/forAsExpression.kt.after | 3 +++ .../kotlin/idea/intentions/IntentionTestGenerated.java | 6 ++++++ 4 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 idea/testData/intentions/specifyTypeExplicitly/forAsExpression.kt create mode 100644 idea/testData/intentions/specifyTypeExplicitly/forAsExpression.kt.after diff --git a/compiler/frontend/src/org/jetbrains/kotlin/psi/KtPsiUtil.java b/compiler/frontend/src/org/jetbrains/kotlin/psi/KtPsiUtil.java index e3236b67f4b..3409f30fc41 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/psi/KtPsiUtil.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/psi/KtPsiUtil.java @@ -803,7 +803,9 @@ public class KtPsiUtil { if (((KtParameter) declaration).hasValOrVar() && parent != null && parent.getParent() instanceof KtPrimaryConstructor) { return getEnclosingElementForLocalDeclaration(((KtPrimaryConstructor) parent.getParent()).getContainingClassOrObject(), skipParameters); } - else if (skipParameters && parent != null && parent.getParent() instanceof KtNamedFunction) { + else if (skipParameters && parent != null && + !(parent instanceof KtForExpression) && + parent.getParent() instanceof KtNamedFunction) { declaration = (KtNamedFunction) parent.getParent(); } } diff --git a/idea/testData/intentions/specifyTypeExplicitly/forAsExpression.kt b/idea/testData/intentions/specifyTypeExplicitly/forAsExpression.kt new file mode 100644 index 00000000000..84eb433ef52 --- /dev/null +++ b/idea/testData/intentions/specifyTypeExplicitly/forAsExpression.kt @@ -0,0 +1,3 @@ +// SKIP_ERRORS_BEFORE +// SKIP_ERRORS_AFTER +fun foo() = for (i in 1..10) {} \ No newline at end of file diff --git a/idea/testData/intentions/specifyTypeExplicitly/forAsExpression.kt.after b/idea/testData/intentions/specifyTypeExplicitly/forAsExpression.kt.after new file mode 100644 index 00000000000..a56a22b8982 --- /dev/null +++ b/idea/testData/intentions/specifyTypeExplicitly/forAsExpression.kt.after @@ -0,0 +1,3 @@ +// SKIP_ERRORS_BEFORE +// SKIP_ERRORS_AFTER +fun foo() = for (i: Int in 1..10) {} \ 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 dbf998e52e2..8db25439860 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -15086,6 +15086,12 @@ public class IntentionTestGenerated extends AbstractIntentionTest { doTest(fileName); } + @TestMetadata("forAsExpression.kt") + public void testForAsExpression() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/specifyTypeExplicitly/forAsExpression.kt"); + doTest(fileName); + } + @TestMetadata("functionType.kt") public void testFunctionType() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/specifyTypeExplicitly/functionType.kt");