FIR IDE: Fix searching for the closest function to re-resolve
If the function is local, there would be errors related to its unresolved body and receiver type
This commit is contained in:
Vendored
+17
@@ -0,0 +1,17 @@
|
||||
// FIR_COMPARISON
|
||||
val topLevelVal = ""
|
||||
|
||||
fun topLevel(topLevelArg: String) {
|
||||
val inTopLevelVal = 10
|
||||
|
||||
fun local(localArg: String) {
|
||||
val inLocalVal = 20
|
||||
<caret>
|
||||
}
|
||||
}
|
||||
|
||||
// EXIST: topLevelVal
|
||||
// EXIST: topLevelArg
|
||||
// EXIST: inTopLevelVal
|
||||
// EXIST: localArg
|
||||
// EXIST: inLocalVal
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
// FIR_COMPARISON
|
||||
val topLevelVal = ""
|
||||
|
||||
val otherVal: () -> Unit = {
|
||||
val foo = <caret>
|
||||
}
|
||||
|
||||
// EXIST: topLevelVal
|
||||
+10
@@ -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");
|
||||
|
||||
+10
@@ -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");
|
||||
|
||||
+10
@@ -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");
|
||||
|
||||
+1
-1
@@ -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<KtNamedFunction>()
|
||||
val fakeFunction = positionInFakeFile.parentsOfType<KtNamedFunction>().firstOrNull { !it.isLocal }
|
||||
if (fakeFunction != null) {
|
||||
val originalFunction = originalFile.findDeclarationOfTypeAt<KtNamedFunction>(fakeFunction.textOffset)
|
||||
?: error("Cannot find original function matching to ${fakeFunction.getElementTextInContext()} in $originalFile")
|
||||
|
||||
Reference in New Issue
Block a user