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");
|
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")
|
@TestMetadata("defaultKotlinImports.kt")
|
||||||
public void testDefaultKotlinImports() throws Exception {
|
public void testDefaultKotlinImports() throws Exception {
|
||||||
runTest("idea/idea-completion/testData/basic/common/primitiveCompletion/defaultKotlinImports.kt");
|
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");
|
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")
|
@TestMetadata("defaultKotlinImports.kt")
|
||||||
public void testDefaultKotlinImports() throws Exception {
|
public void testDefaultKotlinImports() throws Exception {
|
||||||
runTest("idea/idea-completion/testData/basic/common/primitiveCompletion/defaultKotlinImports.kt");
|
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");
|
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")
|
@TestMetadata("defaultKotlinImports.kt")
|
||||||
public void testDefaultKotlinImports() throws Exception {
|
public void testDefaultKotlinImports() throws Exception {
|
||||||
runTest("idea/idea-completion/testData/basic/common/primitiveCompletion/defaultKotlinImports.kt");
|
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 {
|
internal sealed class EnclosingDeclarationContext {
|
||||||
companion object {
|
companion object {
|
||||||
fun detect(originalFile: KtFile, positionInFakeFile: KtElement): EnclosingDeclarationContext {
|
fun detect(originalFile: KtFile, positionInFakeFile: KtElement): EnclosingDeclarationContext {
|
||||||
val fakeFunction = positionInFakeFile.getNonStrictParentOfType<KtNamedFunction>()
|
val fakeFunction = positionInFakeFile.parentsOfType<KtNamedFunction>().firstOrNull { !it.isLocal }
|
||||||
if (fakeFunction != null) {
|
if (fakeFunction != null) {
|
||||||
val originalFunction = originalFile.findDeclarationOfTypeAt<KtNamedFunction>(fakeFunction.textOffset)
|
val originalFunction = originalFile.findDeclarationOfTypeAt<KtNamedFunction>(fakeFunction.textOffset)
|
||||||
?: error("Cannot find original function matching to ${fakeFunction.getElementTextInContext()} in $originalFile")
|
?: error("Cannot find original function matching to ${fakeFunction.getElementTextInContext()} in $originalFile")
|
||||||
|
|||||||
Reference in New Issue
Block a user