LL API: fix kt -> fir mapping for KtImportList
This commit is contained in:
committed by
teamcityserver
parent
c266d3e075
commit
831f05a802
+5
-2
@@ -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,
|
||||||
|
|||||||
+10
@@ -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)
|
||||||
|
|
||||||
|
|||||||
Vendored
+6
@@ -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>
|
||||||
Vendored
+5
@@ -0,0 +1,5 @@
|
|||||||
|
KT element: KtImportList
|
||||||
|
FIR element: null
|
||||||
|
|
||||||
|
FIR element rendered:
|
||||||
|
null
|
||||||
+6
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user