KTIJ-25960 [Analysis API] Resolve static declarations in KDoc

^KTIJ-25960 Fixed
This commit is contained in:
Roman Golyshev
2023-06-23 14:33:03 +02:00
committed by Space Team
parent 4d91229d79
commit b4c9a2616e
16 changed files with 348 additions and 3 deletions
@@ -1271,6 +1271,52 @@ public class Fe10IdeNormalAnalysisSourceModuleReferenceResolveTestGenerated exte
}
}
@Nested
@TestMetadata("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations")
@TestDataPath("$PROJECT_ROOT")
public class JavaDeclarations {
@Test
public void testAllFilesPresentInJavaDeclarations() throws Exception {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations"), Pattern.compile("^([^.]+)\\.kt$"), null, true);
}
@Test
@TestMetadata("StaticFieldQualified.kt")
public void testStaticFieldQualified() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/StaticFieldQualified.kt");
}
@Test
@TestMetadata("StaticFunctionFromBaseClass.kt")
public void testStaticFunctionFromBaseClass() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/StaticFunctionFromBaseClass.kt");
}
@Test
@TestMetadata("StaticFunctionFullyQualified.kt")
public void testStaticFunctionFullyQualified() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/StaticFunctionFullyQualified.kt");
}
@Test
@TestMetadata("StaticFunctionQualified.kt")
public void testStaticFunctionQualified() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/StaticFunctionQualified.kt");
}
@Test
@TestMetadata("StaticFunctionQualifiedWithJavaSubclass.kt")
public void testStaticFunctionQualifiedWithJavaSubclass() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/StaticFunctionQualifiedWithJavaSubclass.kt");
}
@Test
@TestMetadata("StaticFunctionQualifiedWithKotlinSubclass.kt")
public void testStaticFunctionQualifiedWithKotlinSubclass() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/StaticFunctionQualifiedWithKotlinSubclass.kt");
}
}
@Nested
@TestMetadata("analysis/analysis-api/testData/referenceResolve/kDoc/localContext")
@TestDataPath("$PROJECT_ROOT")
@@ -168,7 +168,13 @@ internal object KDocReferenceResolver {
.fold(scope) { currentScope, fqNamePart ->
currentScope
.getClassifierSymbols(fqNamePart)
.mapNotNull { (it as? KtSymbolWithMembers)?.getDeclaredMemberScope() }
.filterIsInstance<KtSymbolWithMembers>()
.flatMap {
listOf(
it.getDeclaredMemberScope(),
it.getStaticMemberScope(),
)
}
.toList()
.asCompositeScope()
}
@@ -185,7 +191,7 @@ internal object KDocReferenceResolver {
}
context(KtAnalysisSession)
private fun getNonImportedSymbolsByFullyQualifiedName(fqName: FqName): List<KtSymbol> = buildList {
private fun getNonImportedSymbolsByFullyQualifiedName(fqName: FqName): Collection<KtSymbol> = buildSet {
generateNameInterpretations(fqName).forEach { interpretation ->
collectSymbolsByFqNameInterpretation(interpretation)
}
@@ -229,7 +235,13 @@ internal object KDocReferenceResolver {
else -> {
getClassOrObjectSymbolByClassId(classId)
?.getDeclaredMemberScope()
?.let {
listOf(
it.getDeclaredMemberScope(),
it.getStaticMemberScope(),
)
}
?.asCompositeScope()
?.getCallableSymbols(callableId.callableName)
?.let(::addAll)
}
@@ -1271,6 +1271,52 @@ public class FirIdeDependentAnalysisSourceModuleReferenceResolveTestGenerated ex
}
}
@Nested
@TestMetadata("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations")
@TestDataPath("$PROJECT_ROOT")
public class JavaDeclarations {
@Test
public void testAllFilesPresentInJavaDeclarations() throws Exception {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations"), Pattern.compile("^([^.]+)\\.kt$"), null, true);
}
@Test
@TestMetadata("StaticFieldQualified.kt")
public void testStaticFieldQualified() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/StaticFieldQualified.kt");
}
@Test
@TestMetadata("StaticFunctionFromBaseClass.kt")
public void testStaticFunctionFromBaseClass() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/StaticFunctionFromBaseClass.kt");
}
@Test
@TestMetadata("StaticFunctionFullyQualified.kt")
public void testStaticFunctionFullyQualified() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/StaticFunctionFullyQualified.kt");
}
@Test
@TestMetadata("StaticFunctionQualified.kt")
public void testStaticFunctionQualified() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/StaticFunctionQualified.kt");
}
@Test
@TestMetadata("StaticFunctionQualifiedWithJavaSubclass.kt")
public void testStaticFunctionQualifiedWithJavaSubclass() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/StaticFunctionQualifiedWithJavaSubclass.kt");
}
@Test
@TestMetadata("StaticFunctionQualifiedWithKotlinSubclass.kt")
public void testStaticFunctionQualifiedWithKotlinSubclass() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/StaticFunctionQualifiedWithKotlinSubclass.kt");
}
}
@Nested
@TestMetadata("analysis/analysis-api/testData/referenceResolve/kDoc/localContext")
@TestDataPath("$PROJECT_ROOT")
@@ -1155,6 +1155,52 @@ public class FirIdeNormalAnalysisLibrarySourceModuleReferenceResolveTestGenerate
}
}
@Nested
@TestMetadata("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations")
@TestDataPath("$PROJECT_ROOT")
public class JavaDeclarations {
@Test
public void testAllFilesPresentInJavaDeclarations() throws Exception {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations"), Pattern.compile("^([^.]+)\\.kt$"), null, true, "withErrors");
}
@Test
@TestMetadata("StaticFieldQualified.kt")
public void testStaticFieldQualified() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/StaticFieldQualified.kt");
}
@Test
@TestMetadata("StaticFunctionFromBaseClass.kt")
public void testStaticFunctionFromBaseClass() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/StaticFunctionFromBaseClass.kt");
}
@Test
@TestMetadata("StaticFunctionFullyQualified.kt")
public void testStaticFunctionFullyQualified() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/StaticFunctionFullyQualified.kt");
}
@Test
@TestMetadata("StaticFunctionQualified.kt")
public void testStaticFunctionQualified() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/StaticFunctionQualified.kt");
}
@Test
@TestMetadata("StaticFunctionQualifiedWithJavaSubclass.kt")
public void testStaticFunctionQualifiedWithJavaSubclass() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/StaticFunctionQualifiedWithJavaSubclass.kt");
}
@Test
@TestMetadata("StaticFunctionQualifiedWithKotlinSubclass.kt")
public void testStaticFunctionQualifiedWithKotlinSubclass() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/StaticFunctionQualifiedWithKotlinSubclass.kt");
}
}
@Nested
@TestMetadata("analysis/analysis-api/testData/referenceResolve/kDoc/localContext")
@TestDataPath("$PROJECT_ROOT")
@@ -1271,6 +1271,52 @@ public class FirIdeNormalAnalysisSourceModuleReferenceResolveTestGenerated exten
}
}
@Nested
@TestMetadata("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations")
@TestDataPath("$PROJECT_ROOT")
public class JavaDeclarations {
@Test
public void testAllFilesPresentInJavaDeclarations() throws Exception {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations"), Pattern.compile("^([^.]+)\\.kt$"), null, true);
}
@Test
@TestMetadata("StaticFieldQualified.kt")
public void testStaticFieldQualified() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/StaticFieldQualified.kt");
}
@Test
@TestMetadata("StaticFunctionFromBaseClass.kt")
public void testStaticFunctionFromBaseClass() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/StaticFunctionFromBaseClass.kt");
}
@Test
@TestMetadata("StaticFunctionFullyQualified.kt")
public void testStaticFunctionFullyQualified() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/StaticFunctionFullyQualified.kt");
}
@Test
@TestMetadata("StaticFunctionQualified.kt")
public void testStaticFunctionQualified() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/StaticFunctionQualified.kt");
}
@Test
@TestMetadata("StaticFunctionQualifiedWithJavaSubclass.kt")
public void testStaticFunctionQualifiedWithJavaSubclass() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/StaticFunctionQualifiedWithJavaSubclass.kt");
}
@Test
@TestMetadata("StaticFunctionQualifiedWithKotlinSubclass.kt")
public void testStaticFunctionQualifiedWithKotlinSubclass() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/StaticFunctionQualifiedWithKotlinSubclass.kt");
}
}
@Nested
@TestMetadata("analysis/analysis-api/testData/referenceResolve/kDoc/localContext")
@TestDataPath("$PROJECT_ROOT")
@@ -1271,6 +1271,52 @@ public class FirStandaloneNormalAnalysisSourceModuleReferenceResolveTestGenerate
}
}
@Nested
@TestMetadata("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations")
@TestDataPath("$PROJECT_ROOT")
public class JavaDeclarations {
@Test
public void testAllFilesPresentInJavaDeclarations() throws Exception {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations"), Pattern.compile("^([^.]+)\\.kt$"), null, true);
}
@Test
@TestMetadata("StaticFieldQualified.kt")
public void testStaticFieldQualified() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/StaticFieldQualified.kt");
}
@Test
@TestMetadata("StaticFunctionFromBaseClass.kt")
public void testStaticFunctionFromBaseClass() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/StaticFunctionFromBaseClass.kt");
}
@Test
@TestMetadata("StaticFunctionFullyQualified.kt")
public void testStaticFunctionFullyQualified() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/StaticFunctionFullyQualified.kt");
}
@Test
@TestMetadata("StaticFunctionQualified.kt")
public void testStaticFunctionQualified() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/StaticFunctionQualified.kt");
}
@Test
@TestMetadata("StaticFunctionQualifiedWithJavaSubclass.kt")
public void testStaticFunctionQualifiedWithJavaSubclass() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/StaticFunctionQualifiedWithJavaSubclass.kt");
}
@Test
@TestMetadata("StaticFunctionQualifiedWithKotlinSubclass.kt")
public void testStaticFunctionQualifiedWithKotlinSubclass() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/kDoc/javaDeclarations/StaticFunctionQualifiedWithKotlinSubclass.kt");
}
}
@Nested
@TestMetadata("analysis/analysis-api/testData/referenceResolve/kDoc/localContext")
@TestDataPath("$PROJECT_ROOT")
@@ -0,0 +1,14 @@
// FILE: main.kt
import dependency.JavaClass
/**
* [JavaClass.st<caret>aticField]
*/
fun test() {}
// FILE: dependency/JavaClass.java
package dependency;
public class JavaClass {
public static final int staticField = 0;
}
@@ -0,0 +1,2 @@
Resolved to:
0: (in dependency.JavaClass) val staticField: kotlin.Int
@@ -0,0 +1,18 @@
// UNRESOLVED_REFERENCE
// FILE: main.kt
import dependency.JavaBase
class KotlinChild : JavaBase() {
/**
* [st<caret>aticFun]
*/
fun test() {}
}
// FILE: dependency/JavaBase.java
package dependency;
public class JavaBase {
public static void staticFun() {}
}
@@ -0,0 +1,12 @@
// FILE: main.kt
/**
* [dependency.JavaClass.st<caret>aticFun]
*/
fun test() {}
// FILE: dependency/JavaClass.java
package dependency;
public class JavaClass {
public static void staticFun() {}
}
@@ -0,0 +1,2 @@
Resolved to:
0: (in dependency.JavaClass) open fun staticFun()
@@ -0,0 +1,14 @@
// FILE: main.kt
import dependency.JavaClass
/**
* [JavaClass.st<caret>aticFun]
*/
fun test() {}
// FILE: dependency/JavaClass.java
package dependency;
public class JavaClass {
public static void staticFun() {}
}
@@ -0,0 +1,2 @@
Resolved to:
0: (in dependency.JavaClass) open fun staticFun()
@@ -0,0 +1,20 @@
// FILE: main.kt
import dependency.JavaChild
/**
* [JavaChild.st<caret>aticFun]
*/
fun test() {}
// FILE: dependency/JavaBase.java
package dependency;
public class JavaBase {
public static void staticFun() {}
}
// FILE: dependency/JavaChild.java
package dependency;
public class JavaChild extends JavaBase {
}
@@ -0,0 +1,2 @@
Resolved to:
0: (in dependency.JavaBase) open fun staticFun()
@@ -0,0 +1,17 @@
// UNRESOLVED_REFERENCE
// FILE: main.kt
import dependency.JavaBase
class KotlinChild : JavaBase()
/**
* [KotlinChild.st<caret>aticFun]
*/
fun test() {}
// FILE: dependency/JavaBase.java
package dependency;
public class JavaBase {
public static void staticFun() {}
}