[FIR-TEST] Unify AbstractFirLoadCompiledKotlin and BuiltInsDeserializationForFirTestCase

This commit is contained in:
Dmitriy Novozhilov
2020-08-13 12:16:15 +03:00
parent 913ea9b56d
commit f32a0fe7ad
7 changed files with 121 additions and 118 deletions
@@ -1,3 +1,10 @@
public/*package*/ open class ArraysUtilJVM : R|kotlin/Any| {
public/*package*/ open static fun <T : R|ft<kotlin/Any, kotlin/Any?>!|> asList(p0: ):
public/*package*/ constructor(): R|kotlin/collections/ArraysUtilJVM|
}
public abstract class BooleanIterator : R|kotlin/collections/Iterator<kotlin/Boolean>| {
public final operator fun next(): R|kotlin/Boolean|
+2 -7
View File
@@ -22,10 +22,10 @@ public final fun intArrayOf(vararg elements: R|kotlin/IntArray|): R|kotlin/IntAr
public final fun longArrayOf(vararg elements: R|kotlin/LongArray|): R|kotlin/LongArray|
public final fun shortArrayOf(vararg elements: R|kotlin/ShortArray|): R|kotlin/ShortArray|
public final operator fun R|kotlin/String?|.plus(other: R|kotlin/Any?|): R|kotlin/String|
public final fun shortArrayOf(vararg elements: R|kotlin/ShortArray|): R|kotlin/ShortArray|
public final fun R|kotlin/Any?|.toString(): R|kotlin/String|
public abstract interface Annotation : R|kotlin/Any| {
@@ -334,11 +334,6 @@ public abstract interface CharSequence : R|kotlin/Any| {
}
public abstract interface Cloneable : R|kotlin/Any| {
protected open fun clone(): R|kotlin/Any|
}
public abstract interface Comparable<in T> : R|kotlin/Any| {
public abstract operator fun compareTo(other: R|T|): R|kotlin/Int|
@@ -0,0 +1,53 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.fir
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.test.KotlinTestUtils
import java.io.File
abstract class AbstractFirLoadBinariesTest : AbstractFirResolveWithSessionTestCase() {
/**
* Since fir symbol providers can't get all names in package (only fir provider can do it),
* we should collect that names from module descriptor from FE 1.0
*/
protected fun checkPackageContent(
session: FirSession,
packageFqName: FqName,
moduleDescriptor: ModuleDescriptor,
testDataPath: String
) {
val declarationNames = DescriptorUtils.getAllDescriptors(moduleDescriptor.getPackage(packageFqName).memberScope)
.mapTo(sortedSetOf()) { it.name }
val provider = session.firSymbolProvider
val builder = StringBuilder()
val firRenderer = FirRenderer(builder)
for (name in declarationNames) {
for (symbol in provider.getTopLevelCallableSymbols(packageFqName, name)) {
symbol.fir.accept(firRenderer)
builder.appendLine()
}
}
for (name in declarationNames) {
val classLikeSymbol = provider.getClassLikeSymbolByFqName(ClassId.topLevel(packageFqName.child(name))) ?: continue
classLikeSymbol.fir.accept(firRenderer)
builder.appendLine()
}
KotlinTestUtils.assertEqualsToFile(
File(testDataPath),
builder.toString()
)
}
}
@@ -9,19 +9,15 @@ import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
import org.jetbrains.kotlin.jvm.compiler.LoadDescriptorUtil.compileKotlinToDirAndGetModule
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.test.ConfigurationKind
import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.test.KotlinTestUtils.newConfiguration
import org.jetbrains.kotlin.test.TestJdkKind
import java.io.File
abstract class AbstractFirLoadCompiledKotlin : AbstractFirResolveWithSessionTestCase() {
abstract class AbstractFirLoadCompiledKotlin : AbstractFirLoadBinariesTest() {
protected lateinit var tmpdir: File
override fun setUp() {
@@ -37,8 +33,6 @@ abstract class AbstractFirLoadCompiledKotlin : AbstractFirResolveWithSessionTest
val moduleDescriptor = compileKtFileToTmpDir(path)
val packageFqName = FqName("test")
val allCompiledNames = DescriptorUtils.getAllDescriptors(moduleDescriptor.getPackage(packageFqName).memberScope)
.mapTo(sortedSetOf()) { it.name }
val configuration = newConfiguration(ConfigurationKind.JDK_ONLY, TestJdkKind.MOCK_JDK, listOf(tmpdir), emptyList<File>())
val environment = KotlinCoreEnvironment.createForTests(testRootDisposable, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES)
@@ -46,7 +40,14 @@ abstract class AbstractFirLoadCompiledKotlin : AbstractFirResolveWithSessionTest
prepareProjectExtensions(environment.project)
val sessionWithDependency = createSession(environment, GlobalSearchScope.EMPTY_SCOPE)
checkPackageContent(sessionWithDependency, packageFqName, allCompiledNames, path)
val testDataDirectoryPath =
"compiler/fir/analysis-tests/testData/loadCompiledKotlin/" +
path
.removePrefix("compiler/testData/loadJava/compiledKotlin/")
.removeSuffix(File(path).name)
File(testDataDirectoryPath).mkdirs()
checkPackageContent(sessionWithDependency, packageFqName, moduleDescriptor, "$testDataDirectoryPath${getTestName(false)}.txt")
}
private fun compileKtFileToTmpDir(path: String): ModuleDescriptor {
@@ -57,42 +58,4 @@ abstract class AbstractFirLoadCompiledKotlin : AbstractFirResolveWithSessionTest
return compileKotlinToDirAndGetModule(listOf(file), tmpdir, environment)
}
private fun checkPackageContent(
session: FirSession,
packageFqName: FqName,
declarationNames: Set<Name>,
testDataPath: String
) {
val provider = session.firSymbolProvider
val builder = StringBuilder()
val firRenderer = FirRenderer(builder)
for (name in declarationNames) {
for (symbol in provider.getTopLevelCallableSymbols(packageFqName, name)) {
symbol.fir.accept(firRenderer)
builder.appendLine()
}
}
for (name in declarationNames) {
val classLikeSymbol = provider.getClassLikeSymbolByFqName(ClassId.topLevel(packageFqName.child(name))) ?: continue
classLikeSymbol.fir.accept(firRenderer)
builder.appendLine()
}
val testDataDirectoryPath =
"compiler/fir/analysis-tests/testData/loadCompiledKotlin/" +
testDataPath
.removePrefix("compiler/testData/loadJava/compiledKotlin/")
.removeSuffix(File(testDataPath).name)
File(testDataDirectoryPath).mkdirs()
KotlinTestUtils.assertEqualsToFile(
File(testDataDirectoryPath + getTestName(false) + ".txt"),
builder.toString()
)
}
}
@@ -6,58 +6,22 @@
package org.jetbrains.kotlin.fir
import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.serialization.builtins.BuiltinsTestUtils
import org.jetbrains.kotlin.test.ConfigurationKind
import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.test.TestJdkKind
import java.io.File
class BuiltInsDeserializationForFirTestCase : AbstractFirResolveWithSessionTestCase() {
class BuiltInsDeserializationForFirTestCase : AbstractFirLoadBinariesTest() {
override fun createEnvironment(): KotlinCoreEnvironment {
return createEnvironmentWithJdk(ConfigurationKind.ALL, TestJdkKind.FULL_JDK)
}
fun testBuiltInPackagesContent() {
for (packageFqName in listOf(
KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME,
KotlinBuiltIns.COLLECTIONS_PACKAGE_FQ_NAME,
KotlinBuiltIns.RANGES_PACKAGE_FQ_NAME
)) {
checkPackageContent(packageFqName)
}
}
private fun checkPackageContent(packageFqName: FqName) {
val moduleDescriptor = BuiltinsTestUtils.compileBuiltinsModule(environment)
val session = createSession(environment, GlobalSearchScope.allScope(project))
val provider = session.firSymbolProvider
val builder = StringBuilder()
val firRenderer = FirRenderer(builder)
for (name in provider.getAllCallableNamesInPackage(packageFqName)) {
for (symbol in provider.getTopLevelCallableSymbols(packageFqName, name)) {
symbol.fir.accept(firRenderer)
builder.appendLine()
}
for (packageFqName in BuiltinsTestUtils.BUILTIN_PACKAGE_NAMES) {
val path = "compiler/fir/analysis-tests/testData/builtIns/" + packageFqName.asString().replace('.', '-') + ".txt"
checkPackageContent(session, packageFqName, moduleDescriptor, path)
}
for (name in provider.getClassNamesInPackage(packageFqName)) {
val classLikeSymbol =
provider.getClassLikeSymbolByFqName(ClassId.topLevel(packageFqName.child(name))) as FirClassSymbol?
?: continue
classLikeSymbol.fir.accept(firRenderer)
builder.appendLine()
}
KotlinTestUtils.assertEqualsToFile(
File("compiler/fir/analysis-tests/testData/builtIns/" + packageFqName.asString().replace('.', '-') + ".txt"),
builder.toString()
)
}
}