[FIR IDE] Fix invalid reference resolve into companion with custom name

This commit is contained in:
Igor Yakovlev
2021-08-10 17:55:13 +02:00
parent 2ff4f10ff0
commit 0781156b42
4 changed files with 22 additions and 3 deletions
@@ -412,10 +412,10 @@ internal object FirReferenceResolveHelper {
var qualifiedAccess: KtDotQualifiedExpression = firSourcePsi
val referencedClassId =
if ((referencedClass as? FirRegularClass)?.isCompanion == true &&
(qualifiedAccess.selectorExpression as? KtNameReferenceExpression)?.getReferencedName() != "Companion"
(qualifiedAccess.selectorExpression as? KtNameReferenceExpression)?.getReferencedName() != referencedClass.classId.shortClassName.asString()
) {
// Remove the last "Companion" part if the qualified access does not contain it. This is needed because the "Companion"
// part is optional.
// Remove the last companion name part if the qualified access does not contain it.
// This is needed because the companion name part is optional.
referencedClass.classId.outerClassId ?: return referencedSymbolsByFir
} else {
referencedClass.classId
@@ -0,0 +1,11 @@
package foo.bar.baz
class X {
companion object COMP {
fun lol() {}
}
}
class E {
val x = foo.bar.baz.X.CO<caret>MP
}
@@ -0,0 +1,2 @@
Resolved to:
0: (in foo.bar.baz.X) companion object COMP
@@ -971,6 +971,12 @@ public class ReferenceResolveTestGenerated extends AbstractReferenceResolveTest
runTest("idea/idea-frontend-fir/testData/referenceResolve/nestedTypes/ResolveMiddleOfPackageInType.kt");
}
@Test
@TestMetadata("ResolveNamedCompanionInCompanionType.kt")
public void testResolveNamedCompanionInCompanionType() throws Exception {
runTest("idea/idea-frontend-fir/testData/referenceResolve/nestedTypes/ResolveNamedCompanionInCompanionType.kt");
}
@Test
@TestMetadata("ResolveStartOfPackageInType.kt")
public void testResolveStartOfPackageInType() throws Exception {