diff --git a/idea/idea-completion/testData/basic/common/primitiveCompletion/completionInLocalFunction.kt b/idea/idea-completion/testData/basic/common/primitiveCompletion/completionInLocalFunction.kt new file mode 100644 index 00000000000..44b26f2db56 --- /dev/null +++ b/idea/idea-completion/testData/basic/common/primitiveCompletion/completionInLocalFunction.kt @@ -0,0 +1,17 @@ +// FIR_COMPARISON +val topLevelVal = "" + +fun topLevel(topLevelArg: String) { + val inTopLevelVal = 10 + + fun local(localArg: String) { + val inLocalVal = 20 + + } +} + +// EXIST: topLevelVal +// EXIST: topLevelArg +// EXIST: inTopLevelVal +// EXIST: localArg +// EXIST: inLocalVal \ No newline at end of file diff --git a/idea/idea-completion/testData/basic/common/primitiveCompletion/completionInPropertyLambdaInitializer.kt b/idea/idea-completion/testData/basic/common/primitiveCompletion/completionInPropertyLambdaInitializer.kt new file mode 100644 index 00000000000..be3d9e7bb80 --- /dev/null +++ b/idea/idea-completion/testData/basic/common/primitiveCompletion/completionInPropertyLambdaInitializer.kt @@ -0,0 +1,8 @@ +// FIR_COMPARISON +val topLevelVal = "" + +val otherVal: () -> Unit = { + val foo = +} + +// EXIST: topLevelVal diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java index c207cdfd050..6683b7df16e 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java @@ -2273,6 +2273,16 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes runTest("idea/idea-completion/testData/basic/common/primitiveCompletion/classFieldsAndFunctionsFromInnerClassExplicitReceiver.kt"); } + @TestMetadata("completionInLocalFunction.kt") + public void testCompletionInLocalFunction() throws Exception { + runTest("idea/idea-completion/testData/basic/common/primitiveCompletion/completionInLocalFunction.kt"); + } + + @TestMetadata("completionInPropertyLambdaInitializer.kt") + public void testCompletionInPropertyLambdaInitializer() throws Exception { + runTest("idea/idea-completion/testData/basic/common/primitiveCompletion/completionInPropertyLambdaInitializer.kt"); + } + @TestMetadata("defaultKotlinImports.kt") public void testDefaultKotlinImports() throws Exception { runTest("idea/idea-completion/testData/basic/common/primitiveCompletion/defaultKotlinImports.kt"); diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java index 02139c86e48..5461a889399 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java @@ -2273,6 +2273,16 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT runTest("idea/idea-completion/testData/basic/common/primitiveCompletion/classFieldsAndFunctionsFromInnerClassExplicitReceiver.kt"); } + @TestMetadata("completionInLocalFunction.kt") + public void testCompletionInLocalFunction() throws Exception { + runTest("idea/idea-completion/testData/basic/common/primitiveCompletion/completionInLocalFunction.kt"); + } + + @TestMetadata("completionInPropertyLambdaInitializer.kt") + public void testCompletionInPropertyLambdaInitializer() throws Exception { + runTest("idea/idea-completion/testData/basic/common/primitiveCompletion/completionInPropertyLambdaInitializer.kt"); + } + @TestMetadata("defaultKotlinImports.kt") public void testDefaultKotlinImports() throws Exception { runTest("idea/idea-completion/testData/basic/common/primitiveCompletion/defaultKotlinImports.kt"); diff --git a/idea/idea-fir/tests/org/jetbrains/kotlin/idea/completion/HighLevelJvmBasicCompletionTestGenerated.java b/idea/idea-fir/tests/org/jetbrains/kotlin/idea/completion/HighLevelJvmBasicCompletionTestGenerated.java index b19cfc5d471..80fd8056e63 100644 --- a/idea/idea-fir/tests/org/jetbrains/kotlin/idea/completion/HighLevelJvmBasicCompletionTestGenerated.java +++ b/idea/idea-fir/tests/org/jetbrains/kotlin/idea/completion/HighLevelJvmBasicCompletionTestGenerated.java @@ -2273,6 +2273,16 @@ public class HighLevelJvmBasicCompletionTestGenerated extends AbstractHighLevelJ runTest("idea/idea-completion/testData/basic/common/primitiveCompletion/classFieldsAndFunctionsFromInnerClassExplicitReceiver.kt"); } + @TestMetadata("completionInLocalFunction.kt") + public void testCompletionInLocalFunction() throws Exception { + runTest("idea/idea-completion/testData/basic/common/primitiveCompletion/completionInLocalFunction.kt"); + } + + @TestMetadata("completionInPropertyLambdaInitializer.kt") + public void testCompletionInPropertyLambdaInitializer() throws Exception { + runTest("idea/idea-completion/testData/basic/common/primitiveCompletion/completionInPropertyLambdaInitializer.kt"); + } + @TestMetadata("defaultKotlinImports.kt") public void testDefaultKotlinImports() throws Exception { runTest("idea/idea-completion/testData/basic/common/primitiveCompletion/defaultKotlinImports.kt"); diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/utils/EnclosingDeclarationContext.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/utils/EnclosingDeclarationContext.kt index 1a2e99e53ce..91c26357110 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/utils/EnclosingDeclarationContext.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/utils/EnclosingDeclarationContext.kt @@ -17,7 +17,7 @@ import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType internal sealed class EnclosingDeclarationContext { companion object { fun detect(originalFile: KtFile, positionInFakeFile: KtElement): EnclosingDeclarationContext { - val fakeFunction = positionInFakeFile.getNonStrictParentOfType() + val fakeFunction = positionInFakeFile.parentsOfType().firstOrNull { !it.isLocal } if (fakeFunction != null) { val originalFunction = originalFile.findDeclarationOfTypeAt(fakeFunction.textOffset) ?: error("Cannot find original function matching to ${fakeFunction.getElementTextInContext()} in $originalFile")