[FIR-TEST] Unify AbstractFirLoadCompiledKotlin and BuiltInsDeserializationForFirTestCase
This commit is contained in:
@@ -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|
|
||||
|
||||
|
||||
@@ -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|
|
||||
|
||||
|
||||
+53
@@ -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
-46
@@ -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
-42
@@ -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()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
* 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.serialization.builtins
|
||||
|
||||
import com.intellij.openapi.util.io.FileUtil
|
||||
import com.intellij.util.containers.ContainerUtil
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
import org.jetbrains.kotlin.resolve.lazy.createResolveSessionForFiles
|
||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||
import java.io.File
|
||||
import java.util.regex.Pattern
|
||||
|
||||
object BuiltinsTestUtils {
|
||||
fun compileBuiltinsModule(environment: KotlinCoreEnvironment): ModuleDescriptor {
|
||||
val files = KotlinTestUtils.loadToJetFiles(
|
||||
environment, ContainerUtil.concat<File>(
|
||||
allFilesUnder("core/builtins/native"),
|
||||
allFilesUnder("core/builtins/src")
|
||||
)
|
||||
)
|
||||
return createResolveSessionForFiles(environment.project, files, false).moduleDescriptor
|
||||
}
|
||||
|
||||
@JvmField
|
||||
val BUILTIN_PACKAGE_NAMES = listOf(
|
||||
KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME,
|
||||
KotlinBuiltIns.COLLECTIONS_PACKAGE_FQ_NAME,
|
||||
KotlinBuiltIns.RANGES_PACKAGE_FQ_NAME
|
||||
)
|
||||
|
||||
private fun allFilesUnder(directory: String): List<File?> {
|
||||
return FileUtil.findFilesByMask(Pattern.compile(".*\\.kt"), File(directory))
|
||||
}
|
||||
}
|
||||
@@ -16,8 +16,6 @@
|
||||
|
||||
package org.jetbrains.kotlin.serialization.builtins;
|
||||
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import kotlin.collections.CollectionsKt;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.kotlin.builtins.DefaultBuiltIns;
|
||||
@@ -32,23 +30,18 @@ import org.jetbrains.kotlin.descriptors.deserialization.AdditionalClassPartsProv
|
||||
import org.jetbrains.kotlin.descriptors.deserialization.PlatformDependentDeclarationFilter;
|
||||
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl;
|
||||
import org.jetbrains.kotlin.name.FqName;
|
||||
import org.jetbrains.kotlin.psi.KtFile;
|
||||
import org.jetbrains.kotlin.resolve.lazy.LazyResolveTestUtilsKt;
|
||||
import org.jetbrains.kotlin.resolve.lazy.descriptors.LazyPackageDescriptor;
|
||||
import org.jetbrains.kotlin.serialization.deserialization.builtins.BuiltInsLoaderImpl;
|
||||
import org.jetbrains.kotlin.storage.LockBasedStorageManager;
|
||||
import org.jetbrains.kotlin.test.ConfigurationKind;
|
||||
import org.jetbrains.kotlin.test.KotlinTestUtils;
|
||||
import org.jetbrains.kotlin.test.KotlinTestWithEnvironment;
|
||||
import org.jetbrains.kotlin.test.TestJdkKind;
|
||||
import org.jetbrains.kotlin.test.util.RecursiveDescriptorComparator;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import static org.jetbrains.kotlin.builtins.KotlinBuiltIns.*;
|
||||
import static org.jetbrains.kotlin.builtins.KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAMES;
|
||||
|
||||
public class LoadBuiltinsTest extends KotlinTestWithEnvironment {
|
||||
@Override
|
||||
@@ -56,18 +49,12 @@ public class LoadBuiltinsTest extends KotlinTestWithEnvironment {
|
||||
return createEnvironmentWithJdk(ConfigurationKind.JDK_NO_RUNTIME, TestJdkKind.MOCK_JDK);
|
||||
}
|
||||
|
||||
public void testBuiltIns() throws Exception {
|
||||
public void testBuiltIns() {
|
||||
ModuleDescriptor module = BuiltinsTestUtils.INSTANCE.compileBuiltinsModule(getEnvironment());
|
||||
|
||||
PackageFragmentProvider packageFragmentProvider = createBuiltInsPackageFragmentProvider();
|
||||
|
||||
List<KtFile> files = KotlinTestUtils.loadToJetFiles(getEnvironment(), ContainerUtil.concat(
|
||||
allFilesUnder("core/builtins/native"),
|
||||
allFilesUnder("core/builtins/src")
|
||||
));
|
||||
|
||||
ModuleDescriptor module =
|
||||
LazyResolveTestUtilsKt.createResolveSessionForFiles(getEnvironment().getProject(), files, false).getModuleDescriptor();
|
||||
|
||||
for (FqName packageFqName : CollectionsKt.listOf(BUILT_INS_PACKAGE_FQ_NAME, COLLECTIONS_PACKAGE_FQ_NAME, RANGES_PACKAGE_FQ_NAME)) {
|
||||
for (FqName packageFqName : BuiltinsTestUtils.BUILTIN_PACKAGE_NAMES) {
|
||||
PackageFragmentDescriptor fromLazyResolve =
|
||||
CollectionsKt.single(module.getPackage(packageFqName).getFragments());
|
||||
if (fromLazyResolve instanceof LazyPackageDescriptor) {
|
||||
@@ -101,9 +88,4 @@ public class LoadBuiltinsTest extends KotlinTestWithEnvironment {
|
||||
|
||||
return packageFragmentProvider;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static List<File> allFilesUnder(@NotNull String directory) {
|
||||
return FileUtil.findFilesByMask(Pattern.compile(".*\\.kt"), new File(directory));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user