FIR: implement early type alias expansion
This commit is contained in:
committed by
Mikhail Glukhikh
parent
d15fb1963b
commit
25ae12fe07
@@ -8,12 +8,14 @@ package org.jetbrains.kotlin.fir
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||
import org.jetbrains.kotlin.descriptors.FirTotalResolveTransformer
|
||||
import org.jetbrains.kotlin.fir.builder.RawFirBuilder
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||
import org.jetbrains.kotlin.fir.resolve.FirProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.FirQualifierResolver
|
||||
import org.jetbrains.kotlin.fir.resolve.FirTypeResolver
|
||||
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.psi.KtFile
|
||||
import org.jetbrains.kotlin.test.ConfigurationKind
|
||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||
import org.jetbrains.kotlin.test.KotlinTestWithEnvironment
|
||||
@@ -24,20 +26,7 @@ abstract class AbstractFirResolveTestCase : KotlinTestWithEnvironment() {
|
||||
return createEnvironmentWithMockJdk(ConfigurationKind.JDK_NO_RUNTIME)
|
||||
}
|
||||
|
||||
fun doTest(path: String) {
|
||||
val file = File(path)
|
||||
|
||||
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)
|
||||
|
||||
}
|
||||
|
||||
fun doCreateAndProcessFir(ktFiles: List<KtFile>): List<FirFile> {
|
||||
val session = object : FirSessionBase() {
|
||||
init {
|
||||
registerComponent(FirProvider::class, FirProviderImpl(this))
|
||||
@@ -57,6 +46,31 @@ abstract class AbstractFirResolveTestCase : KotlinTestWithEnvironment() {
|
||||
transformer.processFiles(it)
|
||||
}
|
||||
|
||||
return firFiles
|
||||
}
|
||||
|
||||
|
||||
fun doTest(path: String) {
|
||||
val file = File(path)
|
||||
|
||||
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)
|
||||
it.name to text
|
||||
}
|
||||
.sortedBy { (_, text) ->
|
||||
KotlinTestUtils.parseDirectives(text)["analyzePriority"]?.toInt()
|
||||
}
|
||||
.map { (name, text) ->
|
||||
KotlinTestUtils.createFile(name, text, project)
|
||||
}
|
||||
|
||||
val firFiles = doCreateAndProcessFir(ktFiles)
|
||||
|
||||
val firFileDump = StringBuilder().also { firFiles.first().accept(FirRenderer(it), null) }.toString()
|
||||
val expectedPath = path.replace(".kt", ".txt")
|
||||
KotlinTestUtils.assertEqualsToFile(File(expectedPath), firFileDump)
|
||||
|
||||
@@ -110,5 +110,11 @@ public class FirResolveTestCaseGenerated extends AbstractFirResolveTestCase {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/fir/resolve/multifile/simpleImportOuter.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("TypeAliasExpansion.kt")
|
||||
public void testTypeAliasExpansion() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/fir/resolve/multifile/TypeAliasExpansion.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user