KT-65152 [AA] Add extra test for package resolution

Make sure that, when ambiguous, both the package
and the callable/class/property are resolved from
KDoc reference.

Do a slight refactoring of `KDocReferenceResolver`

This behavior is also true for K1
This commit is contained in:
Roman Golyshev
2024-01-22 15:59:40 +01:00
committed by Space Team
parent f402daba98
commit c0d54f9bbf
8 changed files with 63 additions and 1 deletions
@@ -1623,6 +1623,12 @@ public class Fe10IdeNormalAnalysisSourceModuleReferenceResolveTestGenerated exte
public void testLongPackage() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/packages/longPackage.kt");
}
@Test
@TestMetadata("packageVsTopLevelDeclarations.kt")
public void testPackageVsTopLevelDeclarations() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/packages/packageVsTopLevelDeclarations.kt");
}
}
@Nested
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.utils.addToStdlib.ifNotEmpty
import kotlin.reflect.KClass
import org.jetbrains.kotlin.analysis.utils.printer.parentOfType
import org.jetbrains.kotlin.utils.addIfNotNull
internal object KDocReferenceResolver {
@@ -84,7 +85,7 @@ internal object KDocReferenceResolver {
context(KtAnalysisSession)
private fun resolveKdocFqName(fqName: FqName, contextElement: KtElement): Collection<KtSymbol> {
getExtensionReceiverSymbolByThisQualifier(fqName, contextElement).ifNotEmpty { return this }
(getSymbolsFromScopes(fqName, contextElement) + listOfNotNull(getPackageSymbolIfPackageExists(fqName))).ifNotEmpty { return this }
getSymbolsFromExistingScopes(fqName, contextElement).ifNotEmpty { return this }
getNonImportedSymbolsByFullyQualifiedName(fqName).ifNotEmpty { return this }
AdditionalKDocResolutionProvider.resolveKdocFqName(fqName, contextElement).ifNotEmpty { return this }
return emptyList()
@@ -102,6 +103,13 @@ internal object KDocReferenceResolver {
return emptyList()
}
context(KtAnalysisSession)
private fun getSymbolsFromExistingScopes(fqName: FqName, contextElement: KtElement): Collection<KtSymbol> =
buildList {
addAll(getSymbolsFromScopes(fqName, contextElement))
addIfNotNull(getPackageSymbolIfPackageExists(fqName))
}
context(KtAnalysisSession)
private fun getSymbolsFromScopes(fqName: FqName, contextElement: KtElement): Collection<KtSymbol> {
getSymbolsFromParentMemberScopes(fqName, contextElement).ifNotEmpty { return this }
@@ -1623,6 +1623,12 @@ public class FirIdeDependentAnalysisSourceModuleReferenceResolveTestGenerated ex
public void testLongPackage() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/packages/longPackage.kt");
}
@Test
@TestMetadata("packageVsTopLevelDeclarations.kt")
public void testPackageVsTopLevelDeclarations() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/packages/packageVsTopLevelDeclarations.kt");
}
}
@Nested
@@ -1507,6 +1507,12 @@ public class FirIdeNormalAnalysisLibrarySourceModuleReferenceResolveTestGenerate
public void testLongPackage() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/packages/longPackage.kt");
}
@Test
@TestMetadata("packageVsTopLevelDeclarations.kt")
public void testPackageVsTopLevelDeclarations() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/packages/packageVsTopLevelDeclarations.kt");
}
}
@Nested
@@ -1623,6 +1623,12 @@ public class FirIdeNormalAnalysisSourceModuleReferenceResolveTestGenerated exten
public void testLongPackage() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/packages/longPackage.kt");
}
@Test
@TestMetadata("packageVsTopLevelDeclarations.kt")
public void testPackageVsTopLevelDeclarations() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/packages/packageVsTopLevelDeclarations.kt");
}
}
@Nested
@@ -1623,6 +1623,12 @@ public class FirStandaloneNormalAnalysisSourceModuleReferenceResolveTestGenerate
public void testLongPackage() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/packages/longPackage.kt");
}
@Test
@TestMetadata("packageVsTopLevelDeclarations.kt")
public void testPackageVsTopLevelDeclarations() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/packages/packageVsTopLevelDeclarations.kt");
}
}
@Nested
@@ -0,0 +1,13 @@
package foo
interface foo
fun foo() {}
/**
* [<caret_1>foo]
*
* [<caret_2>foo.foo]
* [foo.<caret_3>foo]
*/
fun usage() {}
@@ -0,0 +1,11 @@
Caret 1 resolved to:
0: (in foo) fun foo()
1: (in foo) interface foo
2: package foo
Caret 2 resolved to:
0: package foo
Caret 3 resolved to:
0: (in foo) fun foo()
1: (in foo) interface foo