Introduce fallback option to add built-ins in position manager test
In AbstractPositionManagerTest, built-ins could no longer be resolved because JvmIDEVirtualFileFinder is used in IDE tests (even when the compilation is called through JvmResolveUtil/GenerationUtils as in compiler tests), which is not yet able to locate .kotlin_builtins files
This commit is contained in:
@@ -58,6 +58,8 @@ public class JVMConfigurationKeys {
|
|||||||
|
|
||||||
public static final CompilerConfigurationKey<Boolean> USE_SINGLE_MODULE =
|
public static final CompilerConfigurationKey<Boolean> USE_SINGLE_MODULE =
|
||||||
CompilerConfigurationKey.create("combine modules for source files and binary dependencies into a single module");
|
CompilerConfigurationKey.create("combine modules for source files and binary dependencies into a single module");
|
||||||
|
public static final CompilerConfigurationKey<Boolean> ADD_BUILT_INS_TO_DEPENDENCIES =
|
||||||
|
CompilerConfigurationKey.create("add built-ins to dependencies");
|
||||||
|
|
||||||
public static final CompilerConfigurationKey<JvmTarget> JVM_TARGET =
|
public static final CompilerConfigurationKey<JvmTarget> JVM_TARGET =
|
||||||
CompilerConfigurationKey.create("JVM bytecode target version");
|
CompilerConfigurationKey.create("JVM bytecode target version");
|
||||||
|
|||||||
+10
-2
@@ -60,6 +60,7 @@ import org.jetbrains.kotlin.resolve.lazy.KotlinCodeAnalyzer
|
|||||||
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory
|
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory
|
||||||
import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory
|
import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory
|
||||||
import org.jetbrains.kotlin.storage.StorageManager
|
import org.jetbrains.kotlin.storage.StorageManager
|
||||||
|
import org.jetbrains.kotlin.utils.addToStdlib.check
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
object TopDownAnalyzerFacadeForJVM {
|
object TopDownAnalyzerFacadeForJVM {
|
||||||
@@ -131,7 +132,12 @@ object TopDownAnalyzerFacadeForJVM {
|
|||||||
|
|
||||||
moduleClassResolver.compiledCodeResolver = dependenciesContainer.get<JavaDescriptorResolver>()
|
moduleClassResolver.compiledCodeResolver = dependenciesContainer.get<JavaDescriptorResolver>()
|
||||||
|
|
||||||
dependenciesContext.setDependencies(dependenciesContext.module)
|
dependenciesContext.setDependencies(listOfNotNull(
|
||||||
|
dependenciesContext.module,
|
||||||
|
dependenciesContext.module.builtIns.builtInsModule.check {
|
||||||
|
configuration.getBoolean(JVMConfigurationKeys.ADD_BUILT_INS_TO_DEPENDENCIES)
|
||||||
|
}
|
||||||
|
))
|
||||||
dependenciesContext.initializeModuleContents(CompositePackageFragmentProvider(listOf(
|
dependenciesContext.initializeModuleContents(CompositePackageFragmentProvider(listOf(
|
||||||
moduleClassResolver.compiledCodeResolver.packageFragmentProvider,
|
moduleClassResolver.compiledCodeResolver.packageFragmentProvider,
|
||||||
dependenciesContainer.get<JvmBuiltInsPackageFragmentProvider>()
|
dependenciesContainer.get<JvmBuiltInsPackageFragmentProvider>()
|
||||||
@@ -175,7 +181,9 @@ object TopDownAnalyzerFacadeForJVM {
|
|||||||
|
|
||||||
// TODO: remove dependencyModule from friends
|
// TODO: remove dependencyModule from friends
|
||||||
module.setDependencies(ModuleDependenciesImpl(
|
module.setDependencies(ModuleDependenciesImpl(
|
||||||
listOfNotNull(module, dependencyModule),
|
listOfNotNull(module, dependencyModule, module.builtIns.builtInsModule.check {
|
||||||
|
configuration.getBoolean(JVMConfigurationKeys.ADD_BUILT_INS_TO_DEPENDENCIES)
|
||||||
|
}),
|
||||||
if (dependencyModule != null) setOf(dependencyModule) else emptySet()
|
if (dependencyModule != null) setOf(dependencyModule) else emptySet()
|
||||||
))
|
))
|
||||||
module.initialize(CompositePackageFragmentProvider(
|
module.initialize(CompositePackageFragmentProvider(
|
||||||
|
|||||||
@@ -16,15 +16,16 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.codegen
|
package org.jetbrains.kotlin.codegen
|
||||||
|
|
||||||
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import org.jetbrains.kotlin.cli.common.output.outputUtils.writeAllTo
|
import org.jetbrains.kotlin.cli.common.output.outputUtils.writeAllTo
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.JvmPackagePartProvider
|
import org.jetbrains.kotlin.cli.jvm.compiler.JvmPackagePartProvider
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||||
import org.jetbrains.kotlin.codegen.state.GenerationState
|
import org.jetbrains.kotlin.codegen.state.GenerationState
|
||||||
|
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||||
import org.jetbrains.kotlin.descriptors.PackagePartProvider
|
import org.jetbrains.kotlin.descriptors.PackagePartProvider
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.resolve.AnalyzingUtils
|
import org.jetbrains.kotlin.resolve.AnalyzingUtils
|
||||||
import org.jetbrains.kotlin.resolve.lazy.JvmResolveUtil
|
import org.jetbrains.kotlin.resolve.lazy.JvmResolveUtil
|
||||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
object GenerationUtils {
|
object GenerationUtils {
|
||||||
@@ -39,12 +40,16 @@ object GenerationUtils {
|
|||||||
compileFiles(listOf(ktFile), environment).factory
|
compileFiles(listOf(ktFile), environment).factory
|
||||||
|
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun compileFiles(files: List<KtFile>, environment: KotlinCoreEnvironment?): GenerationState {
|
fun compileFiles(files: List<KtFile>, environment: KotlinCoreEnvironment): GenerationState =
|
||||||
val configuration = environment?.configuration ?: KotlinTestUtils.newConfiguration()
|
compileFiles(files, environment.configuration) { scope -> JvmPackagePartProvider(environment, scope) }
|
||||||
|
|
||||||
val analysisResult = JvmResolveUtil.analyzeAndCheckForErrors(files.first().project, files, configuration) { scope ->
|
@JvmStatic
|
||||||
if (environment == null) PackagePartProvider.Empty else JvmPackagePartProvider(environment, scope)
|
fun compileFiles(
|
||||||
}
|
files: List<KtFile>,
|
||||||
|
configuration: CompilerConfiguration,
|
||||||
|
packagePartProvider: (GlobalSearchScope) -> PackagePartProvider
|
||||||
|
): GenerationState {
|
||||||
|
val analysisResult = JvmResolveUtil.analyzeAndCheckForErrors(files.first().project, files, configuration, packagePartProvider)
|
||||||
analysisResult.throwIfError()
|
analysisResult.throwIfError()
|
||||||
|
|
||||||
val state = GenerationState(
|
val state = GenerationState(
|
||||||
|
|||||||
@@ -42,12 +42,18 @@ import org.jetbrains.kotlin.backend.common.output.OutputFile;
|
|||||||
import org.jetbrains.kotlin.backend.common.output.OutputFileCollection;
|
import org.jetbrains.kotlin.backend.common.output.OutputFileCollection;
|
||||||
import org.jetbrains.kotlin.codegen.GenerationUtils;
|
import org.jetbrains.kotlin.codegen.GenerationUtils;
|
||||||
import org.jetbrains.kotlin.codegen.state.GenerationState;
|
import org.jetbrains.kotlin.codegen.state.GenerationState;
|
||||||
|
import org.jetbrains.kotlin.config.CompilerConfiguration;
|
||||||
|
import org.jetbrains.kotlin.config.JVMConfigurationKeys;
|
||||||
|
import org.jetbrains.kotlin.descriptors.PackagePartProvider;
|
||||||
import org.jetbrains.kotlin.idea.debugger.evaluate.KotlinDebuggerCaches;
|
import org.jetbrains.kotlin.idea.debugger.evaluate.KotlinDebuggerCaches;
|
||||||
import org.jetbrains.kotlin.idea.project.PluginJetFilesProvider;
|
import org.jetbrains.kotlin.idea.project.PluginJetFilesProvider;
|
||||||
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase;
|
import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase;
|
||||||
import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor;
|
import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor;
|
||||||
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase;
|
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase;
|
||||||
import org.jetbrains.kotlin.psi.KtFile;
|
import org.jetbrains.kotlin.psi.KtFile;
|
||||||
|
import org.jetbrains.kotlin.test.ConfigurationKind;
|
||||||
|
import org.jetbrains.kotlin.test.KotlinTestUtils;
|
||||||
|
import org.jetbrains.kotlin.test.TestJdkKind;
|
||||||
import org.jetbrains.kotlin.utils.CollectionsKt;
|
import org.jetbrains.kotlin.utils.CollectionsKt;
|
||||||
import org.jetbrains.kotlin.utils.ExceptionUtilsKt;
|
import org.jetbrains.kotlin.utils.ExceptionUtilsKt;
|
||||||
|
|
||||||
@@ -136,7 +142,20 @@ public abstract class AbstractPositionManagerTest extends KotlinLightCodeInsight
|
|||||||
breakpoints.addAll(extractBreakpointsInfo(file, file.getText()));
|
breakpoints.addAll(extractBreakpointsInfo(file, file.getText()));
|
||||||
}
|
}
|
||||||
|
|
||||||
GenerationState state = GenerationUtils.compileFiles(files, null);
|
CompilerConfiguration configuration = KotlinTestUtils.newConfiguration(ConfigurationKind.JDK_ONLY, TestJdkKind.MOCK_JDK);
|
||||||
|
// TODO: delete this once JvmIDEVirtualFileFinder supports loading .kotlin_builtins files
|
||||||
|
configuration.put(JVMConfigurationKeys.ADD_BUILT_INS_TO_DEPENDENCIES, true);
|
||||||
|
|
||||||
|
GenerationState state = GenerationUtils.compileFiles(
|
||||||
|
files,
|
||||||
|
configuration,
|
||||||
|
new Function1<GlobalSearchScope, PackagePartProvider>() {
|
||||||
|
@Override
|
||||||
|
public PackagePartProvider invoke(GlobalSearchScope scope) {
|
||||||
|
return PackagePartProvider.Empty.INSTANCE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
Map<String, ReferenceType> referencesByName = getReferenceMap(state.getFactory());
|
Map<String, ReferenceType> referencesByName = getReferenceMap(state.getFactory());
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user