Fix sources extraction when processing extension is on

The latter is used e.g. for scripts in source roots handling
as implemented in the commit
"Scripting: update scripts in source roots handling"
The former implementation did not covered all the cases.

#KT-54355 fixed
This commit is contained in:
Ilya Chernikov
2022-10-18 16:01:37 +02:00
committed by Space Team
parent 1fcf099104
commit 6627b62c21
3 changed files with 16 additions and 9 deletions
@@ -418,7 +418,11 @@ class KotlinCoreEnvironment private constructor(
return result
}
fun getSourceFiles(): List<KtFile> = sourceFiles
fun getSourceFiles(): List<KtFile> =
ProcessSourcesBeforeCompilingExtension.getInstances(project)
.fold(sourceFiles as Collection<KtFile>) { files, extension ->
extension.processSources(files, configuration)
}.toList()
internal fun report(severity: CompilerMessageSeverity, message: String) = configuration.report(severity, message)
@@ -30,9 +30,7 @@ import org.jetbrains.kotlin.config.*
import org.jetbrains.kotlin.config.CommonConfigurationKeys.LOOKUP_TRACKER
import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory
import org.jetbrains.kotlin.diagnostics.impl.BaseDiagnosticsCollector
import org.jetbrains.kotlin.extensions.ProcessSourcesBeforeCompilingExtension
import org.jetbrains.kotlin.ir.backend.jvm.jvmResolveLibraries
import org.jetbrains.kotlin.load.java.JavaClassesTracker
import org.jetbrains.kotlin.load.kotlin.ModuleVisibilityManager
import org.jetbrains.kotlin.modules.Module
import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStatus
@@ -232,10 +230,7 @@ object KotlinToJVMBytecodeCompiler {
fun analyze(environment: KotlinCoreEnvironment): AnalysisResult? {
val collector = environment.messageCollector
val sourceFiles = ProcessSourcesBeforeCompilingExtension.getInstances(environment.project)
.fold(environment.getSourceFiles() as Collection<KtFile>) { files, extension ->
extension.processSources(files, environment.configuration)
}
val sourceFiles = environment.getSourceFiles()
// Can be null for Scripts/REPL
val performanceManager = environment.configuration.get(CLIConfigurationKeys.PERF_MANAGER)
@@ -191,7 +191,7 @@ class ScriptingWithCliCompilerTest {
@Test
fun testCompileScriptWithRegularKotlin() {
fun compileVariant(vararg flags: String): Pair<List<String>, ExitCode> {
fun compileVariant(vararg flags: String, withScriptInstance: Boolean = true): Pair<List<String>, ExitCode> {
return withTempDir { tmpdir ->
val (_, err, exitCode) = captureOutErrRet {
CLITool.doMainNoExit(
@@ -200,7 +200,10 @@ class ScriptingWithCliCompilerTest {
"-d", tmpdir.path,
"-cp", getMainKtsClassPath().joinToString(File.pathSeparator),
*flags,
"$TEST_DATA_DIR/compiler/mixedCompilation/simpleScriptInstance.kt",
if (withScriptInstance)
"$TEST_DATA_DIR/compiler/mixedCompilation/simpleScriptInstance.kt"
else
"$TEST_DATA_DIR/compiler/mixedCompilation/nonScript.kt",
"$TEST_DATA_DIR/compiler/mixedCompilation/simpleScript.main.kts"
)
)
@@ -232,6 +235,11 @@ class ScriptingWithCliCompilerTest {
Assert.assertEquals(ExitCode.COMPILATION_ERROR, exitCode)
}
compileVariant("-language-version", "1.9", withScriptInstance = false).let { (errLines, exitCode) ->
Assert.assertTrue(errLines.none { it.startsWith(scriptInSourceRootWarning) })
Assert.assertEquals(ExitCode.OK, exitCode)
}
compileVariant("-language-version", "1.9", "-Xallow-any-scripts-in-source-roots").let { (errLines, exitCode) ->
Assert.assertTrue(errLines.none {
it.endsWith(unresolvedScriptError) || it.startsWith(scriptInSourceRootWarning)