diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirModuleResolveStateDepended.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirModuleResolveStateDepended.kt index ebbf519cea3..3fe2c97e0b9 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirModuleResolveStateDepended.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/FirModuleResolveStateDepended.kt @@ -42,11 +42,14 @@ internal class FirModuleResolveStateDepended( originalState.getSessionFor(moduleInfo) override fun getOrBuildFirFor(element: KtElement): FirElement? { - val psi = originalState.elementBuilder.getPsiAsFirElementSource(element) ?: return null + val elementBuilder = originalState.elementBuilder + + val psi = elementBuilder.getPsiAsFirElementSource(element) ?: return null + if (!elementBuilder.doKtElementHasCorrespondingFirElement(element)) return null ktToFirMapping?.getFirOfClosestParent(psi, this)?.let { return it } - return originalState.elementBuilder.getOrBuildFirFor( + return elementBuilder.getOrBuildFirFor( element = element, firFileBuilder = originalState.firFileBuilder, moduleFileCache = originalState.rootModuleSession.cache, diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/element/builder/FirElementBuilder.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/element/builder/FirElementBuilder.kt index a7211c81a79..5880bfd2cd0 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/element/builder/FirElementBuilder.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/element/builder/FirElementBuilder.kt @@ -52,6 +52,11 @@ internal class FirElementBuilder { } } + fun doKtElementHasCorrespondingFirElement(ktElement: KtElement): Boolean = when (ktElement) { + is KtImportList -> false + else -> true + } + fun getOrBuildFirFor( element: KtElement, firFileBuilder: FirFileBuilder, @@ -88,6 +93,11 @@ internal class FirElementBuilder { state: FirModuleResolveState, ): FirElement? { require(element !is KtFile) + + if (!doKtElementHasCorrespondingFirElement(element)) { + return null + } + val firFile = element.containingKtFile val fileStructure = fileStructureCache.getFileStructure(firFile, moduleFileCache) diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/importList.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/importList.kt new file mode 100644 index 00000000000..8af65f0c191 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/importList.kt @@ -0,0 +1,6 @@ +// LOOK_UP_FOR_ELEMENT_OF_TYPE: org.jetbrains.kotlin.psi.KtImportList + + +import a.b.c +import b.c.d + \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/importList.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/importList.txt new file mode 100644 index 00000000000..efa858f1dd9 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/importList.txt @@ -0,0 +1,5 @@ +KT element: KtImportList +FIR element: null + +FIR element rendered: +null \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/GetOrBuildFirTestGenerated.java b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/GetOrBuildFirTestGenerated.java index 83c5feae100..093b34fa2d3 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/GetOrBuildFirTestGenerated.java +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/GetOrBuildFirTestGenerated.java @@ -101,6 +101,12 @@ public class GetOrBuildFirTestGenerated extends AbstractGetOrBuildFirTest { runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/firstImportNamePart.kt"); } + @Test + @TestMetadata("importList.kt") + public void testImportList() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/importList.kt"); + } + @Test @TestMetadata("middleImportNamePart.kt") public void testMiddleImportNamePart() throws Exception {