[Analysis API] resolve [this] in KDoc to extension receiver
^KT-62407 fixed
This commit is contained in:
committed by
Space Team
parent
a5a8f6736b
commit
c32e7c723d
+40
@@ -1593,6 +1593,46 @@ public class Fe10IdeNormalAnalysisSourceModuleReferenceResolveTestGenerated exte
|
||||
}
|
||||
}
|
||||
|
||||
@Nested
|
||||
@TestMetadata("analysis/analysis-api/testData/referenceResolve/kDoc/thisQualifier")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
public class ThisQualifier {
|
||||
@Test
|
||||
public void testAllFilesPresentInThisQualifier() throws Exception {
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/referenceResolve/kDoc/thisQualifier"), Pattern.compile("^([^.]+)\\.kt$"), null, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("thisQualifierOnClass.kt")
|
||||
public void testThisQualifierOnClass() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/thisQualifier/thisQualifierOnClass.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("thisQualifierOnFunction.kt")
|
||||
public void testThisQualifierOnFunction() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/thisQualifier/thisQualifierOnFunction.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("thisQualifierOnFunctionNoExtensionReceiver.kt")
|
||||
public void testThisQualifierOnFunctionNoExtensionReceiver() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/thisQualifier/thisQualifierOnFunctionNoExtensionReceiver.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("thisQualifierOnProperty.kt")
|
||||
public void testThisQualifierOnProperty() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/thisQualifier/thisQualifierOnProperty.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("thisQualifierOnPropertyNoExtensionReceiver.kt")
|
||||
public void testThisQualifierOnPropertyNoExtensionReceiver() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/thisQualifier/thisQualifierOnPropertyNoExtensionReceiver.kt");
|
||||
}
|
||||
}
|
||||
|
||||
@Nested
|
||||
@TestMetadata("analysis/analysis-api/testData/referenceResolve/kDoc/withErrors")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
|
||||
+15
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
||||
import org.jetbrains.kotlin.analysis.api.components.KtScopeContext
|
||||
import org.jetbrains.kotlin.analysis.api.components.KtScopeKind
|
||||
import org.jetbrains.kotlin.analysis.api.scopes.KtScope
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtDeclarationSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtNamedClassOrObjectSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
||||
@@ -19,6 +20,7 @@ import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.ifNotEmpty
|
||||
import kotlin.reflect.KClass
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtClassOrObjectSymbol
|
||||
import org.jetbrains.kotlin.analysis.utils.printer.parentOfType
|
||||
|
||||
internal object KDocReferenceResolver {
|
||||
|
||||
@@ -77,11 +79,24 @@ 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 }
|
||||
getNonImportedSymbolsByFullyQualifiedName(fqName).ifNotEmpty { return this }
|
||||
return emptyList()
|
||||
}
|
||||
|
||||
context(KtAnalysisSession)
|
||||
fun getExtensionReceiverSymbolByThisQualifier(fqName: FqName, contextElement: KtElement): Collection<KtSymbol> {
|
||||
val owner = contextElement.parentOfType<KtDeclaration>() ?: return emptyList()
|
||||
if (fqName.pathSegments().singleOrNull()?.asString() == "this") {
|
||||
if (owner is KtCallableDeclaration && owner.receiverTypeReference != null) {
|
||||
val symbol = owner.getSymbol() as? KtCallableSymbol ?: return emptyList()
|
||||
return listOfNotNull(symbol.receiverParameter)
|
||||
}
|
||||
}
|
||||
return emptyList()
|
||||
}
|
||||
|
||||
context(KtAnalysisSession)
|
||||
private fun getSymbolsFromScopes(fqName: FqName, contextElement: KtElement): Collection<KtSymbol> {
|
||||
getSymbolsFromParentMemberScopes(fqName, contextElement).ifNotEmpty { return this }
|
||||
|
||||
+40
@@ -1593,6 +1593,46 @@ public class FirIdeDependentAnalysisSourceModuleReferenceResolveTestGenerated ex
|
||||
}
|
||||
}
|
||||
|
||||
@Nested
|
||||
@TestMetadata("analysis/analysis-api/testData/referenceResolve/kDoc/thisQualifier")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
public class ThisQualifier {
|
||||
@Test
|
||||
public void testAllFilesPresentInThisQualifier() throws Exception {
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/referenceResolve/kDoc/thisQualifier"), Pattern.compile("^([^.]+)\\.kt$"), null, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("thisQualifierOnClass.kt")
|
||||
public void testThisQualifierOnClass() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/thisQualifier/thisQualifierOnClass.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("thisQualifierOnFunction.kt")
|
||||
public void testThisQualifierOnFunction() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/thisQualifier/thisQualifierOnFunction.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("thisQualifierOnFunctionNoExtensionReceiver.kt")
|
||||
public void testThisQualifierOnFunctionNoExtensionReceiver() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/thisQualifier/thisQualifierOnFunctionNoExtensionReceiver.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("thisQualifierOnProperty.kt")
|
||||
public void testThisQualifierOnProperty() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/thisQualifier/thisQualifierOnProperty.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("thisQualifierOnPropertyNoExtensionReceiver.kt")
|
||||
public void testThisQualifierOnPropertyNoExtensionReceiver() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/thisQualifier/thisQualifierOnPropertyNoExtensionReceiver.kt");
|
||||
}
|
||||
}
|
||||
|
||||
@Nested
|
||||
@TestMetadata("analysis/analysis-api/testData/referenceResolve/kDoc/withErrors")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
|
||||
+40
@@ -1476,6 +1476,46 @@ public class FirIdeNormalAnalysisLibrarySourceModuleReferenceResolveTestGenerate
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Nested
|
||||
@TestMetadata("analysis/analysis-api/testData/referenceResolve/kDoc/thisQualifier")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
public class ThisQualifier {
|
||||
@Test
|
||||
public void testAllFilesPresentInThisQualifier() throws Exception {
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/referenceResolve/kDoc/thisQualifier"), Pattern.compile("^([^.]+)\\.kt$"), null, true, "withErrors");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("thisQualifierOnClass.kt")
|
||||
public void testThisQualifierOnClass() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/thisQualifier/thisQualifierOnClass.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("thisQualifierOnFunction.kt")
|
||||
public void testThisQualifierOnFunction() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/thisQualifier/thisQualifierOnFunction.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("thisQualifierOnFunctionNoExtensionReceiver.kt")
|
||||
public void testThisQualifierOnFunctionNoExtensionReceiver() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/thisQualifier/thisQualifierOnFunctionNoExtensionReceiver.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("thisQualifierOnProperty.kt")
|
||||
public void testThisQualifierOnProperty() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/thisQualifier/thisQualifierOnProperty.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("thisQualifierOnPropertyNoExtensionReceiver.kt")
|
||||
public void testThisQualifierOnPropertyNoExtensionReceiver() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/thisQualifier/thisQualifierOnPropertyNoExtensionReceiver.kt");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Nested
|
||||
|
||||
+40
@@ -1593,6 +1593,46 @@ public class FirIdeNormalAnalysisSourceModuleReferenceResolveTestGenerated exten
|
||||
}
|
||||
}
|
||||
|
||||
@Nested
|
||||
@TestMetadata("analysis/analysis-api/testData/referenceResolve/kDoc/thisQualifier")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
public class ThisQualifier {
|
||||
@Test
|
||||
public void testAllFilesPresentInThisQualifier() throws Exception {
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/referenceResolve/kDoc/thisQualifier"), Pattern.compile("^([^.]+)\\.kt$"), null, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("thisQualifierOnClass.kt")
|
||||
public void testThisQualifierOnClass() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/thisQualifier/thisQualifierOnClass.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("thisQualifierOnFunction.kt")
|
||||
public void testThisQualifierOnFunction() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/thisQualifier/thisQualifierOnFunction.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("thisQualifierOnFunctionNoExtensionReceiver.kt")
|
||||
public void testThisQualifierOnFunctionNoExtensionReceiver() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/thisQualifier/thisQualifierOnFunctionNoExtensionReceiver.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("thisQualifierOnProperty.kt")
|
||||
public void testThisQualifierOnProperty() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/thisQualifier/thisQualifierOnProperty.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("thisQualifierOnPropertyNoExtensionReceiver.kt")
|
||||
public void testThisQualifierOnPropertyNoExtensionReceiver() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/thisQualifier/thisQualifierOnPropertyNoExtensionReceiver.kt");
|
||||
}
|
||||
}
|
||||
|
||||
@Nested
|
||||
@TestMetadata("analysis/analysis-api/testData/referenceResolve/kDoc/withErrors")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
|
||||
+40
@@ -1593,6 +1593,46 @@ public class FirStandaloneNormalAnalysisSourceModuleReferenceResolveTestGenerate
|
||||
}
|
||||
}
|
||||
|
||||
@Nested
|
||||
@TestMetadata("analysis/analysis-api/testData/referenceResolve/kDoc/thisQualifier")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
public class ThisQualifier {
|
||||
@Test
|
||||
public void testAllFilesPresentInThisQualifier() throws Exception {
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/referenceResolve/kDoc/thisQualifier"), Pattern.compile("^([^.]+)\\.kt$"), null, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("thisQualifierOnClass.kt")
|
||||
public void testThisQualifierOnClass() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/thisQualifier/thisQualifierOnClass.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("thisQualifierOnFunction.kt")
|
||||
public void testThisQualifierOnFunction() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/thisQualifier/thisQualifierOnFunction.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("thisQualifierOnFunctionNoExtensionReceiver.kt")
|
||||
public void testThisQualifierOnFunctionNoExtensionReceiver() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/thisQualifier/thisQualifierOnFunctionNoExtensionReceiver.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("thisQualifierOnProperty.kt")
|
||||
public void testThisQualifierOnProperty() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/thisQualifier/thisQualifierOnProperty.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("thisQualifierOnPropertyNoExtensionReceiver.kt")
|
||||
public void testThisQualifierOnPropertyNoExtensionReceiver() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/thisQualifier/thisQualifierOnPropertyNoExtensionReceiver.kt");
|
||||
}
|
||||
}
|
||||
|
||||
@Nested
|
||||
@TestMetadata("analysis/analysis-api/testData/referenceResolve/kDoc/withErrors")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
// UNRESOLVED_REFERENCE
|
||||
|
||||
/**
|
||||
* [th<caret>is]
|
||||
*/
|
||||
class A {
|
||||
|
||||
}
|
||||
|
||||
Vendored
+8
@@ -0,0 +1,8 @@
|
||||
/**
|
||||
* [th<caret>is]
|
||||
*/
|
||||
fun AAA.foo() {
|
||||
|
||||
}
|
||||
|
||||
class AAA
|
||||
Vendored
+2
@@ -0,0 +1,2 @@
|
||||
Resolved to:
|
||||
0: extension receiver with type AAA
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
// UNRESOLVED_REFERENCE
|
||||
|
||||
/**
|
||||
* [th<caret>is]
|
||||
*/
|
||||
fun foo() {
|
||||
|
||||
}
|
||||
Vendored
+7
@@ -0,0 +1,7 @@
|
||||
/**
|
||||
* [th<caret>is]
|
||||
*/
|
||||
val AAA.foo
|
||||
get() = 1
|
||||
|
||||
class AAA
|
||||
Vendored
+2
@@ -0,0 +1,2 @@
|
||||
Resolved to:
|
||||
0: extension receiver with type AAA
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
// UNRESOLVED_REFERENCE
|
||||
|
||||
/**
|
||||
* [th<caret>is]
|
||||
*/
|
||||
val foo
|
||||
get() = 1
|
||||
Reference in New Issue
Block a user