From 02a71d2cda66c666402b0579f0a0a8e892e96aa4 Mon Sep 17 00:00:00 2001 From: Ilya Chernikov Date: Mon, 18 Nov 2019 18:06:10 +0100 Subject: [PATCH] Save updated roots before a packagePartProvider is created Since the function createPackagePartProvider uses initialRoots for creating packagePartsProvider, if the updateClasspath function was called before createPackagePartProvider, the provider was created with incomplete list of roots, that leaded to the unresolved top-level functions. Now if no providers are created yet, the initialRoots is updated. This still may lead to the inconsistencies, when/if we'll have several providers. --- .../kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt index 305319d09bb..81343606c17 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinCoreEnvironment.kt @@ -159,7 +159,7 @@ class KotlinCoreEnvironment private constructor( private val packagePartProviders = mutableListOf() private val classpathRootsResolver: ClasspathRootsResolver - private val initialRoots: List + private val initialRoots = ArrayList() val configuration: CompilerConfiguration = initialConfiguration.apply { setupJdkClasspathRoots(configFiles) }.copy() @@ -217,7 +217,7 @@ class KotlinCoreEnvironment private constructor( val (initialRoots, javaModules) = classpathRootsResolver.convertClasspathRoots(configuration.getList(CLIConfigurationKeys.CONTENT_ROOTS)) - this.initialRoots = initialRoots + this.initialRoots.addAll(initialRoots) if (!configuration.getBoolean(JVMConfigurationKeys.SKIP_RUNTIME_VERSION_CHECK) && messageCollector != null) { JvmRuntimeVersionsConsistencyChecker.checkCompilerClasspathConsistency( @@ -347,8 +347,12 @@ class KotlinCoreEnvironment private constructor( // TODO: add new Java modules to CliJavaModuleResolver val newRoots = classpathRootsResolver.convertClasspathRoots(contentRoots).roots - for (packagePartProvider in packagePartProviders) { - packagePartProvider.addRoots(newRoots, configuration.getNotNull(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY)) + if (packagePartProviders.isEmpty()) { + initialRoots.addAll(newRoots) + } else { + for (packagePartProvider in packagePartProviders) { + packagePartProvider.addRoots(newRoots, configuration.getNotNull(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY)) + } } return rootsIndex.addNewIndexForRoots(newRoots)?.let { newIndex ->