FIR: introduce FIR importing scopes #KT-24096 Fixed
This commit is contained in:
committed by
Mikhail Glukhikh
parent
e6cd07b46e
commit
8933c9035b
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.builder.RawFirBuilder
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||
import org.jetbrains.kotlin.fir.resolve.*
|
||||
import org.jetbrains.kotlin.fir.resolve.impl.FirProviderImpl
|
||||
import org.jetbrains.kotlin.fir.resolve.impl.FirQualifierResolverImpl
|
||||
import org.jetbrains.kotlin.fir.resolve.impl.FirTypeResolverImpl
|
||||
import org.jetbrains.kotlin.test.ConfigurationKind
|
||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||
@@ -24,11 +25,18 @@ abstract class AbstractFirResolveTestCase : KotlinTestWithEnvironment() {
|
||||
|
||||
fun doTest(path: String) {
|
||||
val file = File(path)
|
||||
val text = KotlinTestUtils.doLoadFile(file)
|
||||
|
||||
val ktFile = KotlinTestUtils.createFile(file.name, text, project)
|
||||
val allFiles = listOf(file) + file.parentFile.listFiles { sibling ->
|
||||
sibling.name.removePrefix(file.nameWithoutExtension).removeSuffix(file.extension).matches("\\.[0-9]+\\.".toRegex())
|
||||
}
|
||||
|
||||
|
||||
val ktFiles = allFiles.map {
|
||||
val text = KotlinTestUtils.doLoadFile(it)
|
||||
KotlinTestUtils.createFile(it.name, text, project)
|
||||
|
||||
}
|
||||
|
||||
val session = object : FirSessionBase() {
|
||||
init {
|
||||
registerComponent(FirProvider::class, FirProviderImpl(this))
|
||||
@@ -38,14 +46,17 @@ abstract class AbstractFirResolveTestCase : KotlinTestWithEnvironment() {
|
||||
}
|
||||
|
||||
val builder = RawFirBuilder(session)
|
||||
val firFile = builder.buildFirFile(ktFile)
|
||||
|
||||
(session.service<FirProvider>() as FirProviderImpl).recordFile(firFile)
|
||||
|
||||
val transformer = FirClassifierResolveTransformer()
|
||||
firFile.transform<FirFile, Nothing?>(transformer, null)
|
||||
val firFiles = ktFiles.map {
|
||||
val firFile = builder.buildFirFile(it)
|
||||
(session.service<FirProvider>() as FirProviderImpl).recordFile(firFile)
|
||||
firFile
|
||||
}.onEach {
|
||||
it.transform<FirFile, Nothing?>(transformer, null)
|
||||
}
|
||||
|
||||
val firFileDump = StringBuilder().also { firFile.accept(FirRenderer(it), null) }.toString()
|
||||
val firFileDump = StringBuilder().also { firFiles.first().accept(FirRenderer(it), null) }.toString()
|
||||
val expectedPath = path.replace(".kt", ".txt")
|
||||
KotlinTestUtils.assertEqualsToFile(File(expectedPath), firFileDump)
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ import java.util.regex.Pattern;
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
public class FirResolveTestCaseGenerated extends AbstractFirResolveTestCase {
|
||||
public void testAllFilesPresentInResolve() throws Exception {
|
||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/fir/resolve"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.ANY, true);
|
||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/fir/resolve"), Pattern.compile("^([^.]+)\\.kt$"), TargetBackend.ANY, true);
|
||||
}
|
||||
|
||||
@TestMetadata("F.kt")
|
||||
@@ -30,4 +30,43 @@ public class FirResolveTestCaseGenerated extends AbstractFirResolveTestCase {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/fir/resolve/F.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("NestedSuperType.kt")
|
||||
public void testNestedSuperType() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/fir/resolve/NestedSuperType.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("TwoDeclarationsInSameFile.kt")
|
||||
public void testTwoDeclarationsInSameFile() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/fir/resolve/TwoDeclarationsInSameFile.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("compiler/testData/fir/resolve/multifile")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
public static class Multifile extends AbstractFirResolveTestCase {
|
||||
public void testAllFilesPresentInMultifile() throws Exception {
|
||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/fir/resolve/multifile"), Pattern.compile("^([^.]+)\\.kt$"), TargetBackend.ANY, true);
|
||||
}
|
||||
|
||||
@TestMetadata("simpleImport.kt")
|
||||
public void testSimpleImport() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/fir/resolve/multifile/simpleImport.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("simpleImportNested.kt")
|
||||
public void testSimpleImportNested() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/fir/resolve/multifile/simpleImportNested.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("simpleImportOuter.kt")
|
||||
public void testSimpleImportOuter() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/fir/resolve/multifile/simpleImportOuter.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.fir.AbstractFirResolveTestCase
|
||||
import org.jetbrains.kotlin.fir.builder.AbstractRawFirBuilderTestCase
|
||||
import org.jetbrains.kotlin.generators.tests.generator.testGroup
|
||||
import org.jetbrains.kotlin.generators.util.KT_OR_KTS_WITHOUT_DOTS_IN_NAME
|
||||
import org.jetbrains.kotlin.generators.util.KT_WITHOUT_DOTS_IN_NAME
|
||||
import org.jetbrains.kotlin.integration.AbstractAntTaskTest
|
||||
import org.jetbrains.kotlin.ir.AbstractIrCfgTestCase
|
||||
import org.jetbrains.kotlin.ir.AbstractIrJsTextTestCase
|
||||
@@ -204,7 +205,7 @@ fun main(args: Array<String>) {
|
||||
}
|
||||
|
||||
testClass<AbstractFirResolveTestCase> {
|
||||
model("fir/resolve")
|
||||
model("fir/resolve", pattern = KT_WITHOUT_DOTS_IN_NAME)
|
||||
}
|
||||
|
||||
testClass<AbstractBytecodeListingTest> {
|
||||
|
||||
Reference in New Issue
Block a user