LL API: fix kt -> fir mapping for KtImportList

This commit is contained in:
Ilya Kirillov
2021-07-12 16:47:40 +02:00
committed by teamcityserver
parent c266d3e075
commit 831f05a802
5 changed files with 32 additions and 2 deletions
@@ -42,11 +42,14 @@ internal class FirModuleResolveStateDepended(
originalState.getSessionFor(moduleInfo) originalState.getSessionFor(moduleInfo)
override fun getOrBuildFirFor(element: KtElement): FirElement? { 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 } ktToFirMapping?.getFirOfClosestParent(psi, this)?.let { return it }
return originalState.elementBuilder.getOrBuildFirFor( return elementBuilder.getOrBuildFirFor(
element = element, element = element,
firFileBuilder = originalState.firFileBuilder, firFileBuilder = originalState.firFileBuilder,
moduleFileCache = originalState.rootModuleSession.cache, moduleFileCache = originalState.rootModuleSession.cache,
@@ -52,6 +52,11 @@ internal class FirElementBuilder {
} }
} }
fun doKtElementHasCorrespondingFirElement(ktElement: KtElement): Boolean = when (ktElement) {
is KtImportList -> false
else -> true
}
fun getOrBuildFirFor( fun getOrBuildFirFor(
element: KtElement, element: KtElement,
firFileBuilder: FirFileBuilder, firFileBuilder: FirFileBuilder,
@@ -88,6 +93,11 @@ internal class FirElementBuilder {
state: FirModuleResolveState, state: FirModuleResolveState,
): FirElement? { ): FirElement? {
require(element !is KtFile) require(element !is KtFile)
if (!doKtElementHasCorrespondingFirElement(element)) {
return null
}
val firFile = element.containingKtFile val firFile = element.containingKtFile
val fileStructure = fileStructureCache.getFileStructure(firFile, moduleFileCache) val fileStructure = fileStructureCache.getFileStructure(firFile, moduleFileCache)
@@ -0,0 +1,6 @@
// LOOK_UP_FOR_ELEMENT_OF_TYPE: org.jetbrains.kotlin.psi.KtImportList
<expr>
import a.b.c
import b.c.d
</expr>
@@ -0,0 +1,5 @@
KT element: KtImportList
FIR element: null
FIR element rendered:
null
@@ -101,6 +101,12 @@ public class GetOrBuildFirTestGenerated extends AbstractGetOrBuildFirTest {
runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/firstImportNamePart.kt"); 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 @Test
@TestMetadata("middleImportNamePart.kt") @TestMetadata("middleImportNamePart.kt")
public void testMiddleImportNamePart() throws Exception { public void testMiddleImportNamePart() throws Exception {