From 9619c695b794b14274e2cabc63bb42a4d7b9b9b0 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Fri, 20 Jan 2023 16:39:18 +0900 Subject: [PATCH] [LL API] Support nested type aliases in file-based declaration provider --- .../structure/FileBasedKotlinDeclarationProvider.kt | 3 +-- .../fileBasedDeclarationProvider/nestedTypeAlias.kt | 7 +++++++ .../FileBasedKotlinDeclarationProviderTestGenerated.java | 6 ++++++ 3 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 analysis/low-level-api-fir/testdata/fileBasedDeclarationProvider/nestedTypeAlias.kt diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/FileBasedKotlinDeclarationProvider.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/FileBasedKotlinDeclarationProvider.kt index e6bee69f823..c7a99aa3716 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/FileBasedKotlinDeclarationProvider.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/project/structure/FileBasedKotlinDeclarationProvider.kt @@ -65,8 +65,7 @@ internal class FileBasedKotlinDeclarationProvider(private val kotlinFile: KtFile } override fun getAllTypeAliasesByClassId(classId: ClassId): Collection { - val name = classId.relativeClassName.pathSegments().singleOrNull() ?: return emptyList() - return getTopLevelDeclarations(classId.packageFqName, name) + return getClassLikeDeclarationsByClassId(classId).filterIsInstance().toList() } override fun getTopLevelKotlinClassLikeDeclarationNamesInPackage(packageFqName: FqName): Set { diff --git a/analysis/low-level-api-fir/testdata/fileBasedDeclarationProvider/nestedTypeAlias.kt b/analysis/low-level-api-fir/testdata/fileBasedDeclarationProvider/nestedTypeAlias.kt new file mode 100644 index 00000000000..52f8df84002 --- /dev/null +++ b/analysis/low-level-api-fir/testdata/fileBasedDeclarationProvider/nestedTypeAlias.kt @@ -0,0 +1,7 @@ +// TYPE_ALIAS: test/Foo.Bar + +package test + +class Foo { + typealias Bar = Foo +} \ No newline at end of file diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FileBasedKotlinDeclarationProviderTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FileBasedKotlinDeclarationProviderTestGenerated.java index 7f7e44998d1..93e242d4ec8 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FileBasedKotlinDeclarationProviderTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/FileBasedKotlinDeclarationProviderTestGenerated.java @@ -36,6 +36,12 @@ public class FileBasedKotlinDeclarationProviderTestGenerated extends AbstractFil runTest("analysis/low-level-api-fir/testdata/fileBasedDeclarationProvider/local.kt"); } + @Test + @TestMetadata("nestedTypeAlias.kt") + public void testNestedTypeAlias() throws Exception { + runTest("analysis/low-level-api-fir/testdata/fileBasedDeclarationProvider/nestedTypeAlias.kt"); + } + @Test @TestMetadata("sameNames.kt") public void testSameNames() throws Exception {