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)
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,
@@ -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)
@@ -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");
}
@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 {